news 2026/10/25 1:54:32

重温STM32基础:定时器(8)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
重温STM32基础:定时器(8)

文章目录

  • 驱动DC电机实验
    • 我也遇到了电机不转
    • 其他诡异现象
    • 电机发出蜂鸣器的声音
    • 刹车和停止
  • 许愿

摘要:本文记录了驱动 DC 电机实验中踩过的坑与排查过程:从电机不转的 GPIO 复用模式误配(AF_PP 应为 Out_PP),到 STLink 无法下载、电机拿起即停等诡异现象,再到 PWM 频率落在人耳可听范围导致的蜂鸣啸叫,最后对比了刹车、停止与 PWM=0 三者的区别。适合正在做电机驱动实验、被各种"玄学"现象困扰的同学参考。

驱动DC电机实验

在做这个实验的时候,对于代码上,其实已经没有太多的新知识了。
但是!
即使如此还是有很多坑!

我也遇到了电机不转

不转的第一反应当然是立刻断电。这里的设备涉及了比较大的电压,万一连线错误容易烧坏。当然我已经对连线反复检查了。
首先。。。当然是打开弹幕。。。看看天才的各位有没有建议:有的人说是改ARR,有的人说是改引脚。当然也有人提到了我们面包板左右电源不通的问题(这个在之前实验我已经遇到过了,给电机驱动器连电源的时候特别注意,把PWMA引脚接在了STM32板子的一侧)。
还是检查一下各个引脚吧。。可是手边没有万用表或者示波器(呜呜。。。),debug起来比较难受。
用LED灯看看STM32的几个引脚配置以及给驱动芯片的供电是不是正常。
检查供电引脚的时候千万不要把LED灯直接接在供电引脚和GND啊!(脑子一热。。。LED也热了)连个电阻!
供电都正常;PA2(PWM的输出)也能让LED量)
可是GPIOA4和GPIOA5居然没有反应。。。什么情况。。。
似乎问题就在这里了。
这两个GPIO的配置有问题么?看了老半天。。。

GPIO_InitTypeDef GPIO_InitStruct={0};GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Pin=GPIO_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。

其他诡异现象

  1. STLink下载不了了。。。
    改了GPIO4和5的Mode之后,电机果然是转了。但是当我想要下载程序的时候,Keil似乎找不到debugger。然后我把电机断电,重新拔插STLink才被Keil识别。
  2. 电机放在桌上可以比较正常的转,但是我把它拿起来,它就会停止
  3. 完成完整的代码之后,刚开始按按键,OLED上可以正常更新数值,电机也会相应变速,但是经常到达了80或者100之后,再按按键,OLED就不更新了
  4. 打开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_atoken=6ad43e89-ccf8-dcb0-dbb2-ea97d8eca539&u_asig=df6d04ab17922945371463700e)”目标板使用大功率时(如电机等),禁止使用ST-Link V2 (mini)为目标板供电“。看起来不是正常操作。
真的要用的话,还是找个5V电源给电机独立供电。(用面包板电源模块,或者其他可以插在面包板上的带有USB接口的板子都可以试试,但是我没有。。需要注意的是两组电源的的GND必须共地)
至于电机转动的时候,电路里电压的变换到底如何,需要专门的设备来排除了。

电机发出蜂鸣器的声音

这里记录一下课程中的另一个现象和老师给的解决方法。
当我们把PSC设置成720的时候,ARR为100的时候,电机会有蜂鸣器的响声(确实是有的。。)这是因为此时频率是1000Hz。有如下物理过程

直流电机的驱动是基于通电线圈受到安培力。当线圈通电时,线圈会受到安培力;通电停止时就不受力。这种力的时有时无会让定子和线圈都产生微小的变形和震动,从而产生啸叫。
一次受力+一次不受力构成一个周期,而这个频率就是PWM的频率。代码中,我们一开始设置PSC=(720-1),ARR=(100-1),这个时候频率是 72M/720/100 = 1KHz,也就是电机内部的机械结构以1kHz震动,而人耳能够听到的声音一般在20Hz~20KHz(一般年纪大了就听不到20kHz了。。),1kHz处于人耳能够听到的范围。

电机等发出响声不仅仅取决于驱动的频率,还有机械结构设计等。但显然我们目前改不了机械结构,那么就改变频率:把它设置到人耳听不到的范围。比如把PSC设置成 (36-1),这样频率就达到了20kHz,差不多是人耳听不到的频率。
(解决方法不是去除震动,震动一直都在,只是在人耳听不到的范围了。)
一般用到电机的产品里都会把频率设置到人耳听不见的范围。但是也可以想到,提高频率会导致电机功耗增加、发热等。这里当然也应该有其他工程手段来进行权衡和改进。具体什么问题和怎么解决就需要其他大神来赐教了。

刹车和停止

其实电机控制还有刹车和停止状态,但是课程中并没有提到。查了一下,刹车和停止,包括和PWM=0的区别在于

  • 刹车:从下图可以看到,这是把两个输出口给短路了。如果之前电机转子是旋转的,那再被短路的那一刻,由于惯性它还在旋转,继续切割磁感线,根据法拉第电磁感应定理,这个时候线圈会产生反电动势(虽然这个时候外部电压已经没有了,但是这里产生的电动势和之前外加的电压相反)。此时电路被短接,会产生一个比较大的电流,根据楞次定律,感应电流产生磁场,这个时候又形成安培力,阻碍线圈的转动。

    所以,刹车的时候理论上是会让电机很快地停下。并且如果刹车状态下拧电机轴,会感受到阻力;
  • 停止:两个输出端口都断开,电路里没有电流,也没有闭合回路。靠转自靠惯性和摩擦力停下。此时去拧电机轴,是不会有阻力地。
  • PWM=0:最开始理解以为是STOP。但是这其实是刹车。如下表所示,当PWM=L的时候,其实是short brake。另外,这也可以看出,其实在一个PWM的周期T里,假设占空比是60%,那么60% * T是在CW或者CCW转动,40% * T的时间是在刹车。

    但我试了在两个模式下拧轴,实际上并没有感受到Stop和Brake有阻力的区别;而且装上了风扇叶,期望看到Brake的时候风扇叶片很快停下而Stop的时候会缓慢停下。我也没有看到这个现象。AI说是因为这个电机太小了,看不出两者的区别;如果用大功率电机会感受明显。。那看来又是“下次一定”了。。。

许愿

买个面包板电源模块(模块很便宜。。。运费是它的两三倍。。)
还是融资到双十一买个万用表和示波器吧。。。呜呜呜

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/25 1:54:20

Ragas:RAG评测

Ragas (Retrieval-Augmented Generation Assessment) 提供了一套评估指标,可用于衡量您的 LLM 应用程序的性能。这些指标旨在帮助您客观地衡量应用程序的性能。指标适用于不同的应用程序和任务,例如 RAG 和智能体工作流。 Ragas框架构建了一个由三个核心…

作者头像 李华
网站建设 2026/10/25 1:54:17

对于 To B,到底什么是品牌

对于 To B,到底什么是品牌 我在帆软的时候,有一年世界杯期间,内部的同事吧里出现了一条吐槽市场部的帖子,大意是:“市场部真蠢,都不知道去赞助世界杯。” 这条帖子我记了很多年,发帖的同学心里有…

作者头像 李华
网站建设 2026/10/25 1:51:01

Folia 装进手机主屏:PWA 部署与全屏歌词动画播放器配置教程

Folia 装进手机主屏:PWA 部署与全屏歌词动画播放器配置教程 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major 装完以后,手…

作者头像 李华