历史上的今天
返回首页

历史上的今天

今天是:2025年12月14日(星期日)

2022年12月14日 | STM32实例-步进电机的速度控制

2022-12-14 来源:zhihu

项目需求

在制作一个使用全向轮的机器人底盘,对于全向轮,电机的精度是影响效果的重要因素。所以使用了步进电机,使用步进电机的优点是可以不使用编码器,开环控制即可达到高精度的效果。


调整占空比或者调整周期

众所周知,PWM有两个重要参数,周期与占空比。
步进电机的运动方式是,每收到一个脉冲,就旋转指定的角度。因此影响电机速度的唯一参数就是PWM的频率。以下附图两张来说明调整占空比与调整周期的区别。


周期固定,调整占空比

上图中有4个PWM,它们的周期是一样的,不同之处是拥有从80%至20%的占空比。可以看出,无论占空比为多少,在1s内,它们产生的高电平的数量是一样的,即无论占空比为多少,PWM的频率都一致。因此也就无法调整步进电机的速度。因为步进电机的速度仅与PWM的频率有关

占空比固定,调整周期

上图中有4个PWM,它们的占空比都固定为50%,却拥有不同的周期。可以看出,即使占空比固定,只要动态调整周期,PWM就能在相同时间内产生数量不同的脉冲。因此,固定占空比,动态调整PWM周期,即可达到控制步进电机速度的效果。

基于STM32的实现

在STM32F1中,定时器具有PWM模式,可以用来产生PWM。相关文章:STM32中PWM的配置与应用详解。但是,STM32的PWM模式,只要确定了时基单元(即确定了PWM周期),改变输出比较寄存器,仅可改变PWM的占空比。
若需要改变PWM周期,需不停地改变定时器的时基单元。但时基单元与硬件相关,不适合频繁变更。因此,步进电机的调速,不适合使用STM32下定时器的PWM模式来控制。
在多方查找资料后,确定了一种利用输出比较精确控制PWM周期的方式。

利用输出比较产生频率可变的PWM

利用输出比较产生频率可变的PWM,原理简单介绍如下:
首先配置定时器时基单元,确定脉冲最小长度单位CK。
然后开启定时器的输出比较,设置模式为翻转模式,并开启输出比较中断。
将定时器内计数器CNT当前值,加上脉冲长度X(单位为CK),写入输出比较寄存器。
在X个CK后,将会触发输出比较中断。同时电平翻转。
在中断中再次将当前计数器CNT的值,加上脉冲长度X,写入输出比较寄存器。
在X个CK后,将会触发输出比较中断。同时电平翻转。
在中断中再次将当前计数器CNT的值,加上脉冲长度X,写入输出比较寄存器。
如此往复……
以此即可得到一个占空比为50%,周期为2X个CK的PWM。

确定最小单位CK,配置时基单元

首先确定一个最小的间隔CK,规定PWM的高电平长度和低电平长度的单位都是CK。
即高电平的长度一定是CK的整数倍。低电平亦然。
然后配置定时器的时基单元,通过CK的长度确定预分频系数。
已知STM32F103的主频为72MHZ,则时基单元中预分频系数为

例如,rtz所确定的CK长度为10us(0.00001s),即可得出方程。

预分频系数确定为720后,由高速晶振产生的72MHZ的时钟信号被720分频,得到100000HZ的时钟信号。即时钟信号每秒变动100000次。每次10us。同时可将重装载值设定为0XFFFF(16位定时器的最大值)。因为本次使用的输出比较模式不使用更新中断,该值可随意设置。

开启输出比较通道,设置输出比较模式为翻转模式,并配置NVIC,开启输出比较中断,配置输出比较通道:

开启输出比较中断,配置NVIC优先级:

编写中断服务函数

在输出比较中断中,唯一要做的事情就是把当前CNT的值取出,加上脉冲长度X,写入输出比较寄存器。
当计数器达到0XFFFF(之前设定的重装载值)后,再加一会自动变为0.
例如,当前CNT值为0XFFFF,脉冲长度为5,很明显,输出比较寄存器应设置为0X0004才可触发下一次中断,而不是0X10004,这样会造成溢出。
因此将CNT的值与脉冲长度相加后,需要取0XFFFF的余数后,再写入输出比较寄存器。

动态调整中断服务函数中的变量t_m,即可达到修改PWM频率的效果。


推荐阅读

史海拾趣

DS-IMP公司的发展小趣事

DS-IMP公司的前身是一家美国公司,在转移到中国大陆后,面临了技术转移和本土化的挑战。公司迅速组建了一支由资深工程师和技术专家组成的团队,他们与美国的原团队紧密合作,成功地将核心技术从美国转移到宁波的工厂。在本土化过程中,公司不仅保留了原技术的精髓,还根据中国大陆的市场需求和资源特点,对部分技术和产品进行了优化和升级。这一过程不仅提升了公司的技术实力,也为公司在中国市场的快速发展奠定了坚实基础。

Advanced Ceramic X Corporation公司的发展小趣事

DS-IMP公司一直将研发创新作为企业发展的核心动力。在研发过程中,公司不断投入大量资金,引进先进设备和技术,并与国内外知名高校和研究机构建立合作关系。通过不懈努力,公司在多个领域取得了重大突破,成功研发出了一系列具有自主知识产权的高性能模拟混合电路产品。这些产品不仅满足了国内外客户的需求,还为公司赢得了良好的市场声誉。

Hamamatsu公司的发展小趣事

DS-IMP公司的前身是一家美国公司,在转移到中国大陆后,面临了技术转移和本土化的挑战。公司迅速组建了一支由资深工程师和技术专家组成的团队,他们与美国的原团队紧密合作,成功地将核心技术从美国转移到宁波的工厂。在本土化过程中,公司不仅保留了原技术的精髓,还根据中国大陆的市场需求和资源特点,对部分技术和产品进行了优化和升级。这一过程不仅提升了公司的技术实力,也为公司在中国市场的快速发展奠定了坚实基础。

CYANLITE公司的发展小趣事

CYANLITE公司非常重视产品品质的管理和控制。他们建立了严格的质量检测体系,确保每一件产品都符合高标准的质量要求。此外,公司还注重客户反馈的收集和分析,不断改进产品和服务以满足客户的需求。这种对品质的执着追求使得CYANLITE公司赢得了客户的信任和忠诚。许多客户都表示愿意长期与CYANLITE公司合作,并推荐他们的产品给其他人。

Altera (Intel)公司的发展小趣事

CYANLITE公司一直秉持着绿色环保的理念,致力于推广节能减排的照明产品。他们不仅在产品设计上注重节能和环保,还积极参与各种环保公益活动,向公众普及LED照明的优势。这种积极的环保态度使得CYANLITE公司在市场上树立了良好的形象,也吸引了越来越多的消费者选择他们的产品。同时,公司还积极与政府部门合作,推动LED照明在公共领域的普及和应用。

博流(Bouffalo Lab)公司的发展小趣事

自成立以来,博流公司一直致力于物联网、车联网和智能穿戴领域集成电路芯片的研发。经过不断的技术创新和突破,公司成功推出了多款具有竞争力的芯片产品,广泛应用于智能家居、智慧城市、智能制造等领域。同时,博流还注重与物联网生态合作伙伴的紧密合作,共同提供端到端、边缘计算到云的整体解决方案,为客户创造价值。

问答坊 | AI 解惑

异常处理的问题,当开机加载内核的时候按开机键出现如下提示,这是怎么回事啊

“RaiseException: Thread=8fdffcf4 Proc=8d4d6160 \'device.exe\' AKY=00000005 PC=8c29dae4(NK.EXE+0x0009dae4) RA=8c29b17c(NK.EXE+0x0009b17c) BVA=00000000 FSR=00000000”, 出现这个打印提示后就不能控制这部分驱动了,出现性能上的故障, ...…

查看全部问答>

已知USB的VID和PID,如何得到它的盘符

可能是属于老问题,搜到一些资料,但是还是不是很了解,有同学可以详细介绍一下吗? 如果有代码最好,谢谢。 …

查看全部问答>

需要一个北京地区的兼职linux编程人员

需要一个北京地区的兼职linux编程人员,要求可以独立完成下列开发, 不符合条件请勿打扰,以免浪费你我时间 要求熟悉MINIGUI,具体编程内容: 从COM口读入数据,在14英寸以上显示器上显示如下图形界面: 屏幕正中间一个圆形,圆形里面显示从串 ...…

查看全部问答>

LED照明发展中五个亟待解决的问题

  LED照明发展中五个亟待解决的问题 ——色温范围、照明标准、亮度范围、照明总均匀度和眩光控制   最合适的LED照明灯具色温范围,应该是接近太阳自然白光的色温范围才是最科学的选择;较低照射强度的自然白光,就可以达到其他非自然 ...…

查看全部问答>

请问LM3S 挂5V I2C器件可以正常运行么?

请问LM3S 挂5V I2C器件可以正常运行么?SDA,SCL上拉也为5V,比如FM24C02之类。…

查看全部问答>

请问RLink和STICK有命令行接口吗?

我们要在产品线上大量烧写MCU(使用RLink和STICK),软件工具是STVP。 因为量大,STVP显示的烧写结果不能很醒目的提示操作员,人在惯性下很容易把烧写不成功的产品放行,而且每次更换器件型号后需要重新配置,另外我们也希望把烧写MCU的结果 ...…

查看全部问答>

C2000除了电机控制和电源外,还有什么有前锦有量的应用啊?

C2000除了电机控制和电源外,还有什么有前锦有量的应用啊?…

查看全部问答>

cc2430重连的问题

我用的是CC2430模块,用了一个网关,一个路由,4个终端节点组网成功过后,重启网关或路由设备,怎样改写程序,才能让终端设备自动重新连接到网关呢?我是过NV_RESTORE这个编译选项,不过貌似没有什么用。用没有人已经解决这个问题,给一个指点。…

查看全部问答>

··请教PCB板子外形和定位孔设置的问题,谢谢··

    我用得是AD6.9,在做板子的时候,需要做这么一个槽,   用快捷方式T-V-T,设置之后,用3D看没问题,     可是做GEBER文件的时候,这里没显示要钻孔,只显示是禁止布线层, 还用这种方式做了几个定位孔 ...…

查看全部问答>