
![]() 在制作一个使用全向轮的机器人底盘,对于全向轮,电机的精度是影响效果的重要因素。所以使用了步进电机,使用步进电机的优点是可以不使用编码器,开环控制即可达到高精度的效果。 众所周知,PWM有两个重要参数,周期与占空比。 步进电机的运动方式是,每收到一个脉冲,就旋转指定的角度。因此影响电机速度的唯一参数就是PWM的频率。以下附图两张来说明调整占空比与调整周期的区别。 ( v* p1 z5 A5 b0 _8 E. [2 \ 周期固定,调整占空比![]() 上图中有4个PWM,它们的周期是一样的,不同之处是拥有从80%至20%的占空比。可以看出,无论占空比为多少,在1s内,它们产生的高电平的数量是一样的,即无论占空比为多少,PWM的频率都一致。因此也就无法调整步进电机的速度。因为步进电机的速度仅与PWM的频率有关。 ' O7 e7 \+ ^; p/ K 占空比固定,调整周期![]() 上图中有4个PWM,它们的占空比都固定为50%,却拥有不同的周期。可以看出,即使占空比固定,只要动态调整周期,PWM就能在相同时间内产生数量不同的脉冲。因此,固定占空比,动态调整PWM周期,即可达到控制步进电机速度的效果。 7 Z, M, \# o$ L: J 基于STM32的实现 在STM32F1中,定时器具有PWM模式,可以用来产生PWM。但是,STM32的PWM模式,只要确定了时基单元(即确定了PWM周期),改变输出比较寄存器,仅可改变PWM的占空比。0 y9 o% o5 N z 若需要改变PWM周期,需不停地改变定时器的时基单元。但时基单元与硬件相关,不适合频繁变更。因此,步进电机的调速,不适合使用STM32下定时器的PWM模式来控制。 在多方查找资料后,确定了一种利用输出比较精确控制PWM周期的方式。 , F) }# |) p/ } H: z6 A9 m; d 利用输出比较产生频率可变的PWM 利用输出比较产生频率可变的PWM,原理简单介绍如下: 首先配置定时器时基单元,确定脉冲最小长度单位CK。" i1 O j7 @' v7 y' f 然后开启定时器的输出比较,设置模式为翻转模式,并开启输出比较中断。. \+ ^; b/ ~: L2 N3 m8 I% l 将定时器内计数器CNT当前值,加上脉冲长度X(单位为CK),写入输出比较寄存器。8 M, d+ o$ _+ _' z, B- E- s 在X个CK后,将会触发输出比较中断。同时电平翻转。 在中断中再次将当前计数器CNT的值,加上脉冲长度X,写入输出比较寄存器。, d$ Y7 J. q8 w1 H+ p5 ]+ Z 在X个CK后,将会触发输出比较中断。同时电平翻转。/ s0 u* ?& i. G Q 在中断中再次将当前计数器CNT的值,加上脉冲长度X,写入输出比较寄存器。 如此往复……1 ~1 T+ K1 D3 h2 P* C/ }! v 以此即可得到一个占空比为50%,周期为2X个CK的PWM。 首先确定一个最小的间隔CK,规定PWM的高电平长度和低电平长度的单位都是CK。 即高电平的长度一定是CK的整数倍。低电平亦然。 然后配置定时器的时基单元,通过CK的长度确定预分频系数。' O0 r8 R3 g+ E 已知STM32F103的主频为72MHZ,则时基单元中预分频系数为
例如,rtz所确定的CK长度为10us(0.00001s),即可得出方程。4 Q& K( P) ^/ W4 v9 q ![]() 预分频系数确定为720后,由高速晶振产生的72MHZ的时钟信号被720分频,得到100000HZ的时钟信号。即时钟信号每秒变动100000次。每次10us。同时可将重装载值设定为0XFFFF(16位定时器的最大值)。因为本次使用的输出比较模式不使用更新中断,该值可随意设置。
% `+ h6 Y# ?# X# h. U 开启输出比较通道,设置输出比较模式为翻转模式,并配置NVIC,开启输出比较中断,配置输出比较通道:6 {# K+ |. D' g" ^. ?
开启输出比较中断,配置NVIC优先级: I/ d" H A7 F/ H" m9 t
编写中断服务函数5 N l+ q& O3 U$ x5 s 在输出比较中断中,唯一要做的事情就是把当前CNT的值取出,加上脉冲长度X,写入输出比较寄存器。& U' ]2 T# R3 t- l 当计数器达到0XFFFF(之前设定的重装载值)后,再加一会自动变为0. 例如,当前CNT值为0XFFFF,脉冲长度为5,很明显,输出比较寄存器应设置为0X0004才可触发下一次中断,而不是0X10004,这样会造成溢出。6 B4 B/ K/ v3 e0 H( \ 因此将CNT的值与脉冲长度相加后,需要取0XFFFF的余数后,再写入输出比较寄存器。
5 g" z# L% h+ A3 Y, z9 E 动态调整中断服务函数中的变量t_m,即可达到修改PWM频率的效果。 $ Z% c+ K9 Q) K5 j3 z* P% w# ^$ R$ ] |
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命
从STM32 MPU产品看嵌入式系统中微处理器的新变化
【Hot!】STM32全系列开发板都支持Arduino开发,你知道吗?