stm32学习-PWM驱动直流电机

接线

PB1 独立按键
PB8 OLED的SCL
PB9 OLED的SDA
PA2 PWMA
PA4 AIN1
PA5 AIN2
STLink的5V接口 VM
AO1 直流电机
AO2 直流电机

配置流程

PWM模块

上一篇有讲到PWM的配置,此处不多赘述,细节部分可以参考上一篇。                    
原文链接:https://blog.csdn.net/m0_74246768/article/details/139050032

上一篇代码使用的是TIM2的通道一,这一篇我们使用的引脚是PA2连接PWM ,根据引脚图,可以看到我们使用的是通道3。

PWM.c


                
### 使用 STM32F407 实现 PWM 控制直流电机 #### 一、硬件连接 为了使用 STM32F407 的 PWM 功能来控制直流电机,通常会采用 H 桥驱动电路。例如 TB6612 双 H 桥电机驱动芯片可以被用于此目的[^3]。 - **电源供电**:确保为 STM32 和 TB6612 提供合适的电压。 - **信号线连接**: -STM32 的 TIMx_CHy (PWM 输出通道) 连接到 TB6612 对应的 IN 引脚。 - AIN1, BIN1 接收来自 MCU 的逻辑电平输入以决定旋转方向。 - PWMA/PWMB 输入端接收 PWM 波形调节速度。 #### 二、软件配置 STM32CubeMX 是一种方便快捷的方式来进行初始化设置: - 打开 STM32CubeMX 并创建新工程,选择目标板子型号如 STM32F407VET6。 - 启用定时器外设(比如 TIM2 或者 TIM4),并将其模式设定为 PWM 输出。 - 设置好所需的参数之后生成 HAL 库代码框架以便后续开发工作。 #### 三、编程实现 下面给出一段简单的 C 语言程序片段展示如何利用 HAL 库函数操作上述提到过的资源完成基本的功能需求——即通过改变占空比调整马达运转速率以及切换其转动的方向。 ```c #include "main.h" // 定义全局变量 TIM_HandleTypeDef htim2; // 假定我们选择了 TIM2 来作为我们的 PWM 发生源之一 void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM2_Init(void); int main(void){ /* Reset of all peripherals, Initializes the Flash interface and Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); // 初始化 GPIOs MX_TIM2_Init(); // 初始化 TIM2 while (1){ __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,80); // 设定比较值从而更改占空比达到变速效果 HAL_Delay(1000); // 等待一秒再继续执行下一条指令 __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,160); HAL_Delay(1000); } } /** * @brief System Clock Configuration * The system Clock is configured as follow : * System Clock source = PLL (HSE) * SYSCLK(Hz) = 168000000 * HCLK(Hz) = 168000000 * AHB Prescaler = 1 * APB1 Prescaler = 4 * APB2 Prescaler = 2 * HSE Frequency(Hz) = 8000000 * PLL_M = 8 * PLL_N = 336 * PLL_P = 2 * VOS = Scale 1 * Main regulator output voltage = Scale 1 mode * Flash Latency(WS) = 5 *@param None *@retval None */ void SystemClock_Config(void){...} /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void){ /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ __disable_irq(); while (1){} /* USER CODE END Error_Handler_Debug */ } ``` 这段代码展示了如何修改 `__HAL_TIM_SET_COMPARE` 函数中的第二个参数来动态地改变 PWM 脉宽进而影响最终输出至电机上的平均功率大小,以此方式实现了对电机转速的有效调控[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值