一些主从定时器相关,PWM波精确控制步进电机的笔记

时间:2024-02-23 11:52:54

1、步进电机

  以滚珠丝杆为例,作假设如下:

    ① 步进电机与滚珠丝杆的减速比是2:1;

    ② 丝杆转一圈所移动的距离是2mm;

  通过上面的1和2,我们可以得出我们需要的东西:步进电机转1圈所对应的移动距离是1mm。

  步进电机通过PWM波输入来控制其输出速度,步进的意思是每一个PWM脉冲会使电机前进/后退1步。步进细分数就是关联脉冲与电机速度的重要参数。这里假设细分数是1000步,意思就是,每1000个脉冲会使步进电机转动一圈,倒过来讲就是每1个PWM脉冲,会使步进电机运动0.001步,也就是转动0.001圈。这就是我们需要的第二个东西,把这两个放一起,可以看到如下:

    ③ 步进电机转1圈所对应的移动距离是1mm;

    ④ 每1个PWM脉冲,会使步进电机运动0.001步,也就是转动0.001圈;

  通过上面3和4,我们可以得出:每1个PWM脉冲,会使运动机构运动0.001mm。

2、定时器中断与PWM输出

  我们都知道,PWM的输出是CNT和CCRx寄存器比较的结果,所以只要配置好PSC、ARR和CCRx,就可以确定输出PWM的频率,公式是:

    PWM频率 = APBx的频率/(PSC+1)*(ARR+1)

    占空比 = CCRx/ARR * 100%

  为了输出占空比为50%的方波,我们令CCRx=ARR/2。这样就可以确定输出频率了,频率其实就是每秒的脉冲数,比方说100HZ,其代表的就是100脉冲/秒。而我们在前面2里头已经知道了,在这套假设的系统中,1个脉冲对应运动机构实际运行0.001mm,那么1000HZ就代表,在这个频率下,运动机构的运动速度是1mm/s。到这里我们就可以知道如何控制速度了,我们按1个脉冲为最小单位,即0.001mm/s的速度,在不考虑失步的情况下,我们的实际速度就能从0.001mm/s到任意大的区间里*选择了,其控制精度为0.001mm/s。

  这时候如果我们打开比较中断,每1次中断累加1,那么这个累加数就是我们的实际移动距离,精度为0.001mm。到此为止,我们就可以地控制运动机构的移动距离,并且记录理论移动距离了。注意这里是理论移动距离,由于存在各方面原因,实际的移动不一定就是我们认为的距离。

3、主从定时器与精确的步进电机控制

  以上面的情况,我们举个极端的例子,我们将控制运动机构以100mm/s的速度运动,这时候我们的PWM频率会达到100KHz,如果每次定时器比较都进一次中断,那么我们将每隔0.01ms进入一次中断。系统不可能仅有这一个中断,而如果我们将此中断优先级设的较高,则极大概率会一直占用中断而导致别的中断无法正常执行,如果设的较低则会导致距离累计不准确,并且我们的系统不可能只执行中断而不去做别的事情,这明显是不合理的。这也是为什么我们需要使用主从定时器的原因。

  ⑴ 主从定时器的概念:

  一句话总结,从定时器使用主定时器的触发输出信号作为自己的触发输入信号工作,这就是主从定时器的大概意思,从定时器模式分为以下几种:

  1、复位模式 [Reset mode]

  2、触发模式 [Trigger mode]

  3、门控模式 [Gate mode]

  4、外部时钟模式1 [External clock mode 1]

  5、编码器模式 [encode mode](这个不记)

 

  复位模式[Reset Mode]

  

  当有效触发输入信号出现时,计数器将会被复位,同时还会产生更新事件和触发事件。如果计数器向上计数或*对齐模式的话,复位后计数器从0开始计数,如果向下计数模式,复位后计数器从ARR值开始计数。不妨以计数器向上计数为例,将它配置在复位从模式。比方说当计数器计数到某个数据的时候,来了个触发信号,计数器不再继续往上计数,而是重新归0后开始计数。当然,计数器的实际复位操作与触发沿之间往往会有个小的延时,这是由于触发信号作为有效触发脉冲的话,还需要经过定时器内的同步电路确认。

  

  触发模式 [Trigged Mode]

  当有效触发输入信号出现时,会将本来处于未使能状态的计数器使能激活,让计数器开始计数,同时还会产生触发事件。触发从模式下,触发信号具有相当于软件使能计数器的作用。

  

  

  门控模式 [Gate Mode]

  定时器根据触发输入信号的电平来启动或停止计数器的计数。在计数器启动或停止时都会产生触发事件并置位相关标志位。下图表示来自TI1的输入信号,低电平时计数器启动计数,高电平时停止计数。

  

  

  外部时钟模式1从模式 [External Clock Mod1]

  当计数器的时钟来自触发信号时,计数器就处于外部时钟模式1从模式。当然,这个触发信号就不仅仅限于来自定时器通道TI1/TI2的输入信号,还可以是上面提到过三类触发输入信号的任一种,比方来自其它定时器的触发输出信号,或者来自ETR脚的触发输入信号。或者,反过来讲,如果定时器的时钟来自外来触发信号时,它一定就工作在外部时钟模式1从模式,显然,它的工作离不开这个触发信号,不然连计数时钟都没有。这个从模式“从”得很彻底。

  ⑵ 精确的步进电机控制:

  我们将控制步进电机的输出PWM波的定时器工作在主模式,再另外选一个定时器工作在从模式。利用从定时器被主定时器触发的特性,我们可以让从定时器自动地记录已经输出的PWM脉冲个数。而上面我们已经知道了1个脉冲对应的实际移动距离是0.001mm。假定我们的控制精度要求为0.1mm,则我们只要让从定时器在累积到100个计数的时候触发一次中断即可,这样子我们同样能实现精度为0.1mm的控制,但是相比较单个定时器0.01ms进一次中断来说,使用主从定时器的工作模式,由于我们的主定时器中断并未打开,所以不存在频繁中断的情况,我们将会每1ms进一次中断,而1ms对于系统而言,是一个很长的间隔了。这时候将从定时器的中断优先级设置较高并不会对整个系统产生过多的影响。

4、程序实现

  先预留吧,写笔记的电脑上没有源码,看懂前面的应该能搞出来的。