描述

这一篇文章是新一段开发经验的开篇,主要是利用CubeMX对stm32进行配置,产生PWM信号控制直流有刷减速电机的过程

本篇文章最后能达到的效果就是,可以利用stm32上的按钮,对直流电机进行使能、失能、加速减速、转换运动方向的操作。

研发平台:淘宝上购买的野火店铺的一款单片机,名字叫骄阳开发板,核心芯片是
stm32F407IGT6
电机及驱动板:电机使用的是一款直流有刷减速电机。电机驱动板也是野火家的,型号是L298N电机驱动板

学习步骤

  1. 了解什么是PWM波,它的各种性能和什么参数相关
  2. 直流电机与单片机如何连接
  3. 通过CubeMX如何设置单片机,最终达到控制电机的目的

PWM波

还是一样,这一篇文章最重要的目的不是介绍PWM知识,而是介绍与开发相关的知识。

pwm占空比简单来说就是,在一个脉冲周期内,控制高电平占总周期的这样一个过程。假设我们有一个周期是从0到1斜坡信号,我们设置一个阈值,在一个周期内比这个阈值低的时候就输出低电平,当信号值提高到高于这个阈值后,就输出高电平;控制周期时间和设置不同的阈值,就可以产生不同的PWM波(非专业解释)。

然后就是公式了,PWM频率 = 定时器频率 / ((分频系数+1)x(自动重装载值+1)
我们通过设置定时器频率、分频系数和自动重装载值就能决定一个PWM的频率。其中定时器频率和分频系数之前几篇文章都提过了,自动重装载值在PWM这里,实际上就是上一段所说的阈值。我们之后在CubeMX中会设置向上计数模式,假设自动重装载值是5599,那么系统会从0计数到5599,5600之前全部是低电平,5600之后输出高电平。

那么如果选择这些参数呢。这里简单进行说明:

  1. PWM频率:假设定时器的频率是168M,你设置PWM的频率为84M,那么显然在一个PWM的周期中你的单片机只有两个周期,在这两个周期内进行高低电平的变化,只有三种情况:0、50%和100%。显然PWM的频率设置成定时器频率的几千分之一,能产生具有更多变化可能的PWM。

  2. 预分频系数和重装载值就可以实现PWM频率,成为定时器频率的几千份之一。例如:我们设置预分频系数为1,重装载值为5599

  3. 电机转速:在代码中,在重装载值一定的情况下(例如5599),我们输出小于它的值(例如2000),就可以实现电机的运转。在小于重装载值的情况下加大输出值可以提升电机转速,减小可以降低电机转速。

  4. PWM频率会电机运行的抖动和噪声强弱,需要综合硬件设计选择合适的PWM频率。高PWM频率可以使电机运行的噪声得以减小。

连接方式

为了控制直流有刷电机,我们需要为电机加上一个合适的电机驱动板。电机驱动板为了控制电机对电路进行了一些特殊的设计,可以很好的保护我们的单片机和电机,这里我们选择了野火提供的L298N电机驱动板。 

连接方式:
单片机上的PWM输出管脚——电机驱动板上的PWM输入管脚
电机驱动板的电机输出管脚——直流电机的正负管脚
电机驱动板的正负——24V电源的正负

在接下来的研发步骤中,会结合使用的电机、驱动板及单片机,进行进一步说明

研发步骤

  1. 打开CubeMX,像之前一样,找到你使用的芯片并新建工程
  2. 参考之前的按钮控制led灯的文章stm32利用按钮控制LED灯(Develop文章1.2),将5个按钮对应的管脚进行设置。并参照之前的文章stm32利用串口中断完成数据收发(Develop文章2.1),将usart1串口的对应管脚进行设置,用于串口信息输出
  3. 上面菜单第二项,“Clock Configuration”对系统时钟进行配置,参照下图。
  4. 接下来,需要设置PWM的相关配置了。选择左侧菜单栏的“Timers”——Timer1,按照截图的设置,将“Clock Source”一项选择为“Internal Clock”(内部时钟),将“Channel1”选择为“PWM Generation CH1”,将“Channel2”选择为“PWM Generation CH2”。这两个通道分别负责电机的正转和反转。将“Prescaler”设置为1,将“Counter Period”设置为5599。完成配置。


注意,不要打开TIM1的中断功能。我们利用TIM1进行PWM波的管脚输出,期间并不会使用到定时器中断功能。

在GPIO一栏,我们可以看到这两个CH1和CH2的管脚,分别分配给了PE9和PE11。点击PE9和PE11,会出现这两个管脚的进一步配置选项。将“Maximum Output Speed”选项(定时器引脚输出速度)选择为“High”(高速)。

  1. 根据PWM频率的公式,我们不难算出我们所设置的频率。由于查阅手册,我们确定TIM1挂载在APB2总线上。APB2总线根据我们的设置是84MHz。那么我们的PWM频率为84/(2*5600),也就是7500Hz。(下一篇文章,我们来更改一下预分频系数和重装载值,看看会发生什么)

  2. 进行一些常规的工程配置后,点击生成整个工程代码。

  3. 为了实现按钮控制电机,我们仍然需要添加一系列代码实现,请见下一篇。

总结

本文讲述了如何利用CubeMX,对单片机进行了设置,使得单片机上的管脚可以正常输出PWM波。接下来一篇文章,我会继续本篇文章的内容,在工程中添加代码,从而实现按钮控制直流有刷电机的功能。

写的不容易,欢迎各位朋友点赞并加关注,谢谢!