请问用PWM驱动步进电机,如何实现加减速?
以前我驱动步进电机,用定时器来产生脉冲,每一步都进定时器中断,然后在中断中通过修改定时器重载值来实现加减速。现在想试着用STM32的硬件PWM来驱动,但没想明白如何实现加减速,是不是也是需要每一步都进定时器中断呢?那这样好像用硬件PWM也没太大意义了啊? 一般都用比较输出模式吧。 定时器串接 本帖最后由 codefish 于 2020-8-8 09:25 编辑占空比固定,加速时脉冲周期由大到小,减速时脉冲周期由小到大; 在非匀速段,每一个中断中改变脉冲周期 定时更改PWM周期 准备好变速曲线放内存里面,通过DMA自动搬运.
硬件脉冲控制在速度控制上从来都不麻烦,麻烦的是怎么精确计数~ 一般用时间分割的方法,把行程根据速度分割成不同大小的段,每一段对应的时间周期是固定的,那么硬件PWM固定一个中断周期(或DMA)修改脉冲频率就OK了 chenchaoting 发表于 2020-8-8 08:55
定时器串接
不太明白,可否再说细一点? codefish 发表于 2020-8-8 09:23
占空比固定,加速时脉冲周期由大到小,减速时脉冲周期由小到大; 在非匀速段,每一个中断中改变脉冲周期 ...
您说的中断是定时器中断吗?如果是,那我直接用定时器中断产生脉冲了,不需要硬件PWM了啊 Error.Dan 发表于 2020-8-8 10:17
准备好变速曲线放内存里面,通过DMA自动搬运.
硬件脉冲控制在速度控制上从来都不麻烦,麻烦的是怎么精确计数~ ...
请问如何在加减速阶段准确的通过DMA送到每一步? 落叶知秋 发表于 2020-8-8 10:18
一般用时间分割的方法,把行程根据速度分割成不同大小的段,每一段对应的时间周期是固定的,那么硬件PWM固 ...
用时间分割,那就是要进定时器中断了对吧?加减速越平顺,就越要频繁的进定时器中断,那还不如直接用定时器中断来产生脉冲啊。 qaya 发表于 2020-8-8 20:56
您说的中断是定时器中断吗?如果是,那我直接用定时器中断产生脉冲了,不需要硬件PWM了啊 ...
pwm是硬件方式,频率可以做高,不占用系统资源 qaya 发表于 2020-8-8 21:00
用时间分割,那就是要进定时器中断了对吧?加减速越平顺,就越要频繁的进定时器中断,那还不如直接用定时 ...
定时中断不一定要进,但pwm的捕获中断或是dma的完成中断就必须要进;如果是靠单个定时器来开环控制多个硬件pwm的这种冒险做法,则要进定时器中断。
上面说的跟你说的每个脉冲算一个动态的时间中断的软件脉冲方式不是一样的概念 qaya 发表于 2020-8-8 20:59
请问如何在加减速阶段准确的通过DMA送到每一步?
如何送???
就
DMA送啊
如果要每步更新那就是通过定时器溢出来触发DMA如果是若干步触发那就是用比较器触发DMA,这样要多写一个比较器初始值而且赋值是有技巧的,但是每步都更新肯定要占用大量的内存空间,如果是提前算好的变速曲线也可以放在flash里面直接用DMA读也行.
硬件发脉冲这个事情本质上就是非常简单的数据搬运,给不同的数值实现不同的效果,所以DMA完全可以胜任,把CPU解放出来~
DMA配合定时器的玩法非常多,比如就用一个DMA数据源分时控制加减速,或者多个DMA配合做加减速+脉冲计数,有相当多的高级玩法,建议自己去多琢磨琢磨~ 落叶知秋 发表于 2020-8-8 23:44
定时中断不一定要进,但pwm的捕获中断或是dma的完成中断就必须要进;如果是靠单个定时器来开环控制多个硬 ...
明白了,感谢您的指导 Error.Dan 发表于 2020-8-9 09:50
如何送???
就
DMA送啊
感谢,您的意思应该跟楼上的差不多,我自己再仔细研究,然后实际测试一下。
页:
[1]