原创 降低步进电机微步控制中断频率

2020-8-29 08:30 2069 16 5 分类: MCU/ 嵌入式

使用timer 产生脉冲波形,控制步进电机转动。当使用微步方式时,脉冲频率等于整步频率乘以细分数。有时,我们需要每步进行处理,也就是在发出脉冲时,产生中断。对于常用的双极步进电机,最快的速度大概是2000PPS,也就是一秒钟10圈。如果使用256细分,则输出脉冲频率为512K,这么高频率的中断,显然有问题。

有个方法,可以降低中断数量。

可以使用两个TIMER,其中一个用于产生电机控制脉冲。常规的办法是使用50%点空比的PWM脉冲。

另外不个设置为PWM无输出,预分频值为产生电机控制脉冲的细分倍。启动后产生中断。

 

  1. void MOT_StartPPS(uint16_t para){</p>
  2. uint16_t temp;
  3. TIM15->PSC = 99;
  4. temp = 0xFFFF ;
  5. TIM15->ARR = temp - 1;
  6. TIM15->CCR2 = temp / 2;
  7. TIM16->PSC = 256*100-1;
  8. temp = 0xFFFF;
  9. TIM16->ARR = temp - 1;
  10. TIM16->CCR1 = temp / 2;
  11. 。。。。。。
  12. HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_2);
  13. HAL_TIM_PWM_Start_IT(&htim16,TIM_CHANNEL_1);
  14. }

对于较高的速度,需要斜坡启动,所以将PWM脉冲重复频率设置为最慢,启动PWM输出,同时启动另一个TIMER的中断输出(这里我们只要中断,不要输出)。

随后在程序中,定时运行步述代码,逐步将频率提高,直到达到设定值。

  1. if(ppsstart == 1){
  2. if((mscnt % SLOPINT)==0){
  3. ppsratenow += SLOPINCPPS;
  4. if(ppsratenow < ppsrate){
  5. temprate = ppsratenow;
  6. }
  7. else{
  8. temprate = ppsrate;
  9. ppsstart = 0;
  10. ppsratenow = 0;
  11. }
  12. TIM15->PSC = 50/temprate;
  13. temp = (48000000 / 256) / temprate / (50/temprate + 1) ;
  14. TIM15->ARR = temp - 1; //48000000 / 51200 * para / (para / 100 +1); //para 秒 / 圈 频率 = SYSCLK / ( 256 * para)
  15. TIM15->CCR2 = temp / 2;
  16. TIM16->PSC = 256*(50/temprate + 1)-1;
  17. temp = (48000000 / 256) / temprate / (50/temprate + 1) ;
  18. TIM16->ARR = temp - 1;
  19. TIM16->CCR1 = temp / 2;

两个TIMER计数时钟是相同的,所以产生的脉冲是同相位的。但因为其中一个预先分频要慢细分数,所以产生中断的速度等于步进电机整步速度。这样中断的速度就降低了细分倍。如果对步数精度要求不高,可以将预分频倍数进一步提高,这样可以让电机转数步,才产生一个中断。

作者: southcreek, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-408807.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论1条评论)

登录后参与讨论

curton 2020-9-1 19:53

支持  非常好
相关推荐阅读
southcreek 2021-11-22 13:33
Multisim仿真反相器构成RC方波振荡器
在数字电路的教科书里,有使用门电路制作多谐振荡器的方法。基本的思路是将一个非门的输入与输出端使用电阻相连。因非门的传输特性,会被偏置到中点达到稳态。此时非门可视为一个具有很大增益的反向放大器。使用另...
southcreek 2021-08-25 17:04
使用三极管构成电流指示
用两个三极管,搭成一个电流指示器按图中的参数,当R3上没有电流时,两个三极管 的基极电压相同,Q2 集电极电流应该等Q1集电极电流,图中所示,约为0.5mA,LED不亮。当R3有电流通过时,产生压降,...
southcreek 2021-08-12 16:36
差分信号精确采集
差分信号通常用仪表放大器放大后,进行A/D采集。通常需要给仪表放大器增加一个偏置信号,当输入为负时,能得到一个正输出。按照上图配置, 仪表放大器的输出Vo = Vbias + Vi * A ...
southcreek 2021-07-26 17:00
XILINX ISE 14.7
ise 14.7 是终级版本,以后不再做更新。现在使用的是vivado,可以支持7系列的器件。如果使用先前版本的器件,比如SPARTAN5 VIRTES5,则仍然需要使用ISE不过在WIN1...
southcreek 2021-06-29 16:03
灵活使用单片机GPIO各种输入输出模式
单片机的GPIO一般会有:输入 输出 模式,输入模式有输入上拉,下拉或高阻 输出模式有推挽,开漏。 51单片机还有准双向模式。  输入模式 上拉,下拉都比较好理解。比如按...
southcreek 2021-05-28 16:08
推挽输出和B类放大输出的区别
输出的部分需要驱动负载,经常会使用两个互补的晶体管作为输出级。输出级晶体管的位置有讲究。如图,上面NPN,下面PNP,构成B类放大器,相当于每个半波使用共集放大器。上PNP下NPN则构成推挽输出,相当...
广告
我要评论
1
16
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /2 下一条