文章目录驱动DC电机实验我也遇到了电机不转其他诡异现象电机发出蜂鸣器的声音刹车和停止许愿摘要本文记录了驱动 DC 电机实验中踩过的坑与排查过程从电机不转的 GPIO 复用模式误配AF_PP 应为 Out_PP到 STLink 无法下载、电机拿起即停等诡异现象再到 PWM 频率落在人耳可听范围导致的蜂鸣啸叫最后对比了刹车、停止与 PWM0 三者的区别。适合正在做电机驱动实验、被各种玄学现象困扰的同学参考。驱动DC电机实验在做这个实验的时候对于代码上其实已经没有太多的新知识了。但是即使如此还是有很多坑我也遇到了电机不转不转的第一反应当然是立刻断电。这里的设备涉及了比较大的电压万一连线错误容易烧坏。当然我已经对连线反复检查了。首先。。。当然是打开弹幕。。。看看天才的各位有没有建议有的人说是改ARR有的人说是改引脚。当然也有人提到了我们面包板左右电源不通的问题这个在之前实验我已经遇到过了给电机驱动器连电源的时候特别注意把PWMA引脚接在了STM32板子的一侧。还是检查一下各个引脚吧。。可是手边没有万用表或者示波器呜呜。。。debug起来比较难受。用LED灯看看STM32的几个引脚配置以及给驱动芯片的供电是不是正常。检查供电引脚的时候千万不要把LED灯直接接在供电引脚和GND啊脑子一热。。。LED也热了连个电阻!供电都正常PA2PWM的输出也能让LED量可是GPIOA4和GPIOA5居然没有反应。。。什么情况。。。似乎问题就在这里了。这两个GPIO的配置有问题么看了老半天。。。GPIO_InitTypeDef GPIO_InitStruct{0};GPIO_InitStruct.GPIO_ModeGPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_InitStruct.GPIO_PinGPIO_Pin_4|GPIO_Pin_5;GPIO_Init(GPIOA,GPIO_InitStruct);看出来了么朋友们。。。这个Mode是AF_PP 想起来了我的这个GPIO配置是从PWM的配置里复制过来的那里的GPIO是配置成TIM2的CH3复用其实是为之前的CH2的复用PA1配置的这个实验中用了TIM2的CH3而TIM2的CH3正好也是复用无脑复制粘贴惹祸啊这里GPIOA4和GPIOA5都是普通GPIO不需要复用所以要配成GPIO_Mode_Out_PP。其他诡异现象STLink下载不了了。。。改了GPIO4和5的Mode之后电机果然是转了。但是当我想要下载程序的时候Keil似乎找不到debugger。然后我把电机断电重新拔插STLink才被Keil识别。电机放在桌上可以比较正常的转但是我把它拿起来它就会停止完成完整的代码之后刚开始按按键OLED上可以正常更新数值电机也会相应变速但是经常到达了80或者100之后再按按键OLED就不更新了打开debug模式在DCMotor_SetSpeed(Speed)处打断点。刚开始可以看到每次按下按键之后会在这个地方停止但是速度一上来之后Keil界面上的很多debug按钮都变成了灰色我们无法使用。问了AI这里的情况大概率是STLink给电机5V供电导致的。电机转动时给STM32的供的3.3V电压也会不稳定STLink也无法正常工作而且在这个论坛上有明确地说https://www.waveshare.net/wiki/%E6%A8%A1%E6%9D%BF:ST-LINK-V2-mini-FAQ?u_atoken6ad43e89-ccf8-dcb0-dbb2-ea97d8eca539u_asigdf6d04ab17922945371463700e”目标板使用大功率时如电机等禁止使用ST-Link V2 (mini)为目标板供电“。看起来不是正常操作。真的要用的话还是找个5V电源给电机独立供电。用面包板电源模块或者其他可以插在面包板上的带有USB接口的板子都可以试试但是我没有。。需要注意的是两组电源的的GND必须共地至于电机转动的时候电路里电压的变换到底如何需要专门的设备来排除了。电机发出蜂鸣器的声音这里记录一下课程中的另一个现象和老师给的解决方法。当我们把PSC设置成720的时候ARR为100的时候电机会有蜂鸣器的响声确实是有的。。这是因为此时频率是1000Hz。有如下物理过程直流电机的驱动是基于通电线圈受到安培力。当线圈通电时线圈会受到安培力通电停止时就不受力。这种力的时有时无会让定子和线圈都产生微小的变形和震动从而产生啸叫。一次受力一次不受力构成一个周期而这个频率就是PWM的频率。代码中我们一开始设置PSC720-1ARR100-1这个时候频率是 72M/720/100 1KHz也就是电机内部的机械结构以1kHz震动而人耳能够听到的声音一般在20Hz~20KHz一般年纪大了就听不到20kHz了。。1kHz处于人耳能够听到的范围。电机等发出响声不仅仅取决于驱动的频率还有机械结构设计等。但显然我们目前改不了机械结构那么就改变频率把它设置到人耳听不到的范围。比如把PSC设置成 36-1这样频率就达到了20kHz差不多是人耳听不到的频率。解决方法不是去除震动震动一直都在只是在人耳听不到的范围了。一般用到电机的产品里都会把频率设置到人耳听不见的范围。但是也可以想到提高频率会导致电机功耗增加、发热等。这里当然也应该有其他工程手段来进行权衡和改进。具体什么问题和怎么解决就需要其他大神来赐教了。刹车和停止其实电机控制还有刹车和停止状态但是课程中并没有提到。查了一下刹车和停止包括和PWM0的区别在于刹车从下图可以看到这是把两个输出口给短路了。如果之前电机转子是旋转的那再被短路的那一刻由于惯性它还在旋转继续切割磁感线根据法拉第电磁感应定理这个时候线圈会产生反电动势虽然这个时候外部电压已经没有了但是这里产生的电动势和之前外加的电压相反。此时电路被短接会产生一个比较大的电流根据楞次定律感应电流产生磁场这个时候又形成安培力阻碍线圈的转动。所以刹车的时候理论上是会让电机很快地停下。并且如果刹车状态下拧电机轴会感受到阻力停止两个输出端口都断开电路里没有电流也没有闭合回路。靠转自靠惯性和摩擦力停下。此时去拧电机轴是不会有阻力地。PWM0最开始理解以为是STOP。但是这其实是刹车。如下表所示当PWML的时候其实是short brake。另外这也可以看出其实在一个PWM的周期T里假设占空比是60%那么60% * T是在CW或者CCW转动40% * T的时间是在刹车。但我试了在两个模式下拧轴实际上并没有感受到Stop和Brake有阻力的区别而且装上了风扇叶期望看到Brake的时候风扇叶片很快停下而Stop的时候会缓慢停下。我也没有看到这个现象。AI说是因为这个电机太小了看不出两者的区别如果用大功率电机会感受明显。。那看来又是“下次一定”了。。。许愿买个面包板电源模块模块很便宜。。。运费是它的两三倍。。还是融资到双十一买个万用表和示波器吧。。。呜呜呜