11 定时器输出实验
PWM电机控制实验 PWM舵机控制实验
up的视频讲解: https://space.bilibili.com/1455872040
up视频里的实验代码: 👣OLED实验代码
1 ⚙️PWM控制电机实验
1.1 实验连接

1.2 实验原理

AIN1和AIN2通过 Logic逻辑控制模块 对H桥进行控制 然后通过AO1和AO2输出

我们具体来 看到这个H桥 它主要通过这个 GateDrive栅极驱动模块 来控制 这四个NMOS管

我们来分析一下 它的控制逻辑
-
当AIN1等于1 AIN2等于0的时候 此时电机红线接到了电源 黑线接地 电机正转
-
当AIN1等于0 AIN2等于1的时候 此时电机的红线接地 黑线接电源 对应电机反转
-
当AIN1和AIN2都 输出0的时候 此时上下两个桥都断开 电机 停止工作
-
当AIN1和AIN2都 为1的时候 电机两端接地 进行 刹车

我们以电机正转为例子 来分析一下 通过PWM控制的情况
- 如果让AIN2始终为0 当AIN1为高电平1的时候 此时电机正转
- 当AIN1为0时电机停止 当AIN1再为1的时候电机接着正转
如果将这个频率增加到 1KHZ也就是 每秒钟变化1千次 那么情况就发生了变化 电机里的绕线可以看成电感 电感两端的流不能突变
-
PWM的占空比 也就是高电平在一个周期内的占比 它最终可以等效为一个平均电压
-
PWM占空比越大 平均电压也就越大 电机的转速也就越快
我们可以通过设置CCR和ARR的值 就可以控制高电平在每个周期的脉宽 从而控制PWM的占空比
- 在模式1中 当CNT的值小于CCR的值 就输出有效电平 当CNT大于等于CCR的时候就输出无效电平
- 模式2则反过来 当CNT小于CCR的时候输出无效电平 当CNT大于等于CCR的时候输出有效电平
- 这里的有效电平和无效电平由
通道的极性(CH Polarity)决定
- 配置为High的时候 有效电平也就是高电平
- 当配置为Low的时候 有效电平 *就为低电平
1.3 CubeMX配置



1.4 实验代码
全局
main()
while(1)里面
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,counter*10);
2 🤖定时器输出PWM控制舵机实验
2.1 实验连接

2.2 实验原理

舵机的机械结构就是电机加上一个减速箱 它也有驱动芯片 我们可以从壳子底下看到
-
它内部也是H桥驱动 再加角度电位器构成一个控制闭环 从而精确控制角度
-
和电机不同的的是 舵机的PWM不是用于驱动电机 而是一种 PWM数字指令信号
-
指令的协议是标准的 50HzPWM信号 通过 脉宽去控制角度
脉宽也就是一个周期内高电平的时间 频率50Hz 周期也就是20ms 在20ms中如果
- 高电平脉宽1ms就对应0度
- 1.5ms就对应90度
- 2ms就对应180度

我们来计算一下 这是定时器更新频率以及周期的计算公式
-
输入定时器的时钟是72Mhz那么假设我们对他进行720分频 那么分频后的计数脉冲的频率就为100K
-
我们要得到频率为50hz的PWM信号 那么就需要将100K除以2000
-
50hz对应的周期是频率的倒数 也就是20ms
OK 现在ARR的值已经定下来了 我们接下来计算脉宽所对应的CCR的比较值
-
1ms的脉宽也就是整个周期乘0.05 它也就对应着 整个计数周期的计数值乘0.05
-
最后得到100就是此时对应的CCR的值=100 -> 0度
-
同理 脉宽为1.5ms对应的CCR=150 -> 90度
-
以及 脉宽为2ms对应的CCR=200 -> 180度

最后我们还要注意一小点 ARR和CCR也有它的影子寄存器
- 我们在控制脉宽的时候需要确保ARR和CCR的时序对应
- 需要通过先将ARR的值以及CCR的值预装载到ARR和CCR里面
- 然后硬件就会在再定时器更新后将它们同时加载到影子寄存器
这样就不会出现时序的错误
2.3 CubeMX配置

2.4 实验代码
全局
main()
while(1)里面
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,counter*10+100);
补充阅读
以上代码与视频保持一致,counter来自课程编码器实验。PWM计数关系与测量方法见定时器原理;补充示例的计数时钟不能与视频配置混用。