简介:
PWM(Pulse Width Modulation)是一种用来调节信号脉宽的技术,在电机控制中常常用来实现电机的调速功能。本文将介绍如何使用STM32微控制器实现PWM电机调速的方法。
1. STM32简介
STM32系列是由ST公司推出的一款基于ARM Cortex-M内核的32位单片机系列。它具有强大的性能和丰富的外设资源,非常适合用于电机控制领域。
2. PWM调速原理
PWM调速技术通过改变信号的脉宽来控制电机的速度。脉宽越宽,电机转速越快;脉宽越窄,电机转速越慢。通过不断调整PWM的脉宽,即可实现电机的调速功能。
3. STM32的PWM模块介绍
STM32微控制器内置了多个PWM模块,如TIM(定时器)模块和TIM输出比较模块等。这些模块可以生成高精度的PWM信号,并且具有丰富的配置选项,可满足不同应用场景的需求。
实验要求
小车通过PWM对不同的轮子进行不同的调速
实验步骤
1.硬件接线
B-1A – PA0
B-1B – PB1
A-1A – PA1
A-1B – PB10
2. 所用芯片
stm32f103c8t6
电机驱动: l9110s
3. CubeMX配置
通过查阅文档,我们了解到stm32f103c8t6
中的PA0和PA1引脚所用到的PWM通道,PA0和PA1分别用到了TIM2定时器的通道1和2
根据公式
其中PSC为分频系数,ARR(AutoReload Register -16 bits value)为 自动重载值.
- ARR寄存器:**自动重装载寄存器,包含一个32位的值,用于设置定时器从0开始计数到ARR值后再清零的循环周期。**这个周期时间就是定时器的溢出时间。
- PSC寄存器:预分频寄存器,包含一个16位的值,可以对定时器的时钟进行预分频,即将外部时钟频率分频后用于定时器计数。
我们可以计划将Tout配置为20ms,由于Tclk配置成72Mhz,于是我们可以将PSC设置为7199,ARR则为199.其中,自动重加载我们给他打开.
其中 CH Polarity表示有效极性,我们将他保持为高电平
如图:
代码实现
1. 所用函数介绍
//1.
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
//这个函数是使能PWM
// 第一个参数是定时器的句柄
// 第二个参数表示第几个通道
//2.
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,100);
// 这个函数可修改比较值,修改占空比
// 第一个参数是定时器的句柄
// 第二个参数表示第几个通道
// 第三个参数为设置的值
通过这些函数就可以简单的控制,占空比了.也就能随意的控制左右轮的转速了,实现平滑拐弯
2. 使用串口控制检验是否能够成功实现
配置串口
打开串口中断
代码实现
// 找到并重写接收中断处理函数 HAL_UARTEx_RxEventCallback
// 接收完成回调函数,收到一个数据后,在这里处理
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)