当前位置: 代码迷 >> 单片机 >> DSP的PWM输出控制步进电机疑惑,该如何处理
  详细解决方案

DSP的PWM输出控制步进电机疑惑,该如何处理

热度:85   发布时间:2016-04-28 15:04:17.0
DSP的PWM输出控制步进电机疑惑
我选用的步进电机是42系列两相混合式,参数如下图
选用的程序是固高开发板的PWM模块的程序,当我按照程序(PWM频率为5KHz)驱动步进电机是,只有嗡嗡的声音,电机不转,于是我将频率调为上图的1.6KHz,电机可以运转。通过调节,我发现,只有频率在1.3KHz-1.8KHz时,电机才可以运转。
1、不是说可以通过调节频率来调节步进电机的转速吗,可是现在只有这么窄的范围,可以实现转速调节吗?
而且我发现在这些频率内,电机转速都差不多,是不是我理解错了?
2、当我调节PWM占空比的时候,发现也没有什么实际作用,电机转速也不会改变,那么占空比对于步进电机有什么意义呢?
3、我该如何利用PWM模块来调节步进电机不同的转速?
开发板中的PWM模块的程序如下:
#define CPU_CLK   100e6
#endif
#define PWM_CLK   1.6e3                 // If diff freq. desired, change freq here.
#define SP        CPU_CLK/(2*PWM_CLK)
#define TBCTLVAL  0x200E              // Up-down cnt, timebase = SYSCLKOUT


void EPwmSetup()
{
    InitEPwm1Gpio();
EPwm1Regs.TBSTS.all=0;
EPwm1Regs.TBPHS.half.TBPHS=0;
EPwm1Regs.TBCTR=0;

EPwm1Regs.CMPCTL.all=0x50;        // Immediate mode for CMPA and CMPB
EPwm1Regs.CMPA.half.CMPA =SP/2;
EPwm1Regs.CMPB=0;

EPwm1Regs.AQCTLA.all=0x60;        // EPWMxA = 1 when CTR=CMPA and counter inc
                                  // EPWMxA = 0 when CTR=CMPA and counter dec
EPwm1Regs.AQCTLB.all=0;
EPwm1Regs.AQSFRC.all=0;
EPwm1Regs.AQCSFRC.all=0;

EPwm1Regs.DBCTL.all=0xf;//b;          // EPWMxB is inverted
EPwm1Regs.DBRED=1000;
EPwm1Regs.DBFED=1000;

EPwm1Regs.TZSEL.all=0;
EPwm1Regs.TZCTL.all=0;
EPwm1Regs.TZEINT.all=0;
EPwm1Regs.TZFLG.all=0;
EPwm1Regs.TZCLR.all=0;
EPwm1Regs.TZFRC.all=0;

EPwm1Regs.ETSEL.all=9;            // Interrupt when TBCTR = 0x0000
EPwm1Regs.ETPS.all=1;           // Interrupt on first event
EPwm1Regs.ETFLG.all=0;
EPwm1Regs.ETCLR.all=0;
EPwm1Regs.ETFRC.all=0;

EPwm1Regs.PCCTL.all=0;

EPwm1Regs.TBCTL.all=0x0010+TBCTLVAL; // Enable Timer
EPwm1Regs.TBPRD=SP;

}
------解决方案--------------------
1、不是说可以通过调节频率来调节步进电机的转速吗,可是现在只有这么窄的范围,可以实现转速调节吗?
而且我发现在这些频率内,电机转速都差不多,是不是我理解错了?
我印象中,伺服电机才是PWM调速的,步进电机用的是步进脉冲的频率调速.也有可能是不同的驱动器采用的方式不一样...

2、当我调节PWM占空比的时候,发现也没有什么实际作用,电机转速也不会改变,那么占空比对于步进电机有什么意义呢?
不知道是不是驱动器的特殊要求.

3、我该如何利用PWM模块来调节步进电机不同的转速?
同上
要不LZ好好查查~

------解决方案--------------------
1、不是说可以通过调节频率来调节步进电机的转速吗,可是现在只有这么窄的范围,可以实现转速调节吗?
而且我发现在这些频率内,电机转速都差不多,是不是我理解错了?
转速和PWM的频率没关系,和绕线的通电方向的切换速度有关

2、当我调节PWM占空比的时候,发现也没有什么实际作用,电机转速也不会改变,那么占空比对于步进电机有什么意义呢?
PWM占空比会影响步进电机的力矩但不会影响速度,占空比太小了其力矩无法推动自身的惯性就会出现转不动的现象

3、我该如何利用PWM模块来调节步进电机不同的转速?
没用过你那个PWM模块,
以4节拍为例
A+:A线组正向通电
B+:B线组正向通电
A+ -> B+ -> A- -> B- ->A+ ->.....
该循环越快电机转速越快,但注意是有上限的

------解决方案--------------------
楼主要确认你用的是单纯的PWM模块还是步进电机的驱动模块 
------解决方案--------------------
看来下20403的PDF,的确是靠频率控制速度的,
引用
脉冲信号输入
共阳极时该脉冲信号下降沿被驱动器解释为一个有效脉冲,并驱动电机运行一步。为了确保脉冲信号的可靠响应,共阳极时脉冲低电平的持续时间不应少于10μs。本驱动器的信号响应频率为70KHz,过高的输入频率将可能得不到正确响应

你是不是接错线了?
引用
错相保护
?  两相电机与驱动器连接时,用户极易接错相,从而严重损坏驱动器。本驱动器设计了错相保护电路。用户即使接错相,驱动器也不会损坏,不过电机运行会不正常,主要表现在出力极小。遇此情况,应检查电机接线是否正确

------解决方案--------------------
先把电机断掉,拿示波器看看驱动器输出的频率是多少
看你贴的半步下最大空载起动频率是1.6Khz

再看看驱动器编码开关是怎么配置的
确定是半步?
------解决方案--------------------
引用:
Quote: 引用:

先把电机断掉,拿示波器看看驱动器输出的频率是多少
看你贴的半步下最大空载起动频率是1.6Khz

再看看驱动器编码开关是怎么配置的
确定是半步?

电机我已经调好了,现在可以正常运转,而且起动PWM频率也可以高至5KHz,我按照你说的拿示波器测了一下,步进驱动器输出的频率为187Hz,我不太清楚是怎么从PWM频率计算过来的...那个空载起动频率1.6KHz,指的是进入步进驱动器的频率吧?
你说的很对,我没有设置成半步,以为都一样呢...现在已经改过来了。半步的起动频率是1.6KHz,那整步起动频率是多少啊?

1. 你要找点步进电机基础知识的书看看,我没深入玩过,上一次玩都是5年前的事情了,用的是一个细分驱动芯片,确认受控就直接扔在一边不管。现在乱说就是误人子弟。可以去看看这个
http://www.ti.com.cn/solution/cn/motor_control_stepper_motor?247SEM
2. 1.6khz是电机本身的响应最大频率,而不是驱动器的。你还要看看驱动器本身的响应,这个要查datasheet了,就是SH-20403本身的。我看到最大响应是70Khz,这个信号进去之后驱动器会加以转换,在特定的细分下才能推动电机。
3. 你那个187hz信号是什么样的?你用哪里当参考点的?是每一相对地的?还是相和相之间的?
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

先把电机断掉,拿示波器看看驱动器输出的频率是多少
看你贴的半步下最大空载起动频率是1.6Khz

再看看驱动器编码开关是怎么配置的
确定是半步?

电机我已经调好了,现在可以正常运转,而且起动PWM频率也可以高至5KHz,我按照你说的拿示波器测了一下,步进驱动器输出的频率为187Hz,我不太清楚是怎么从PWM频率计算过来的...那个空载起动频率1.6KHz,指的是进入步进驱动器的频率吧?
你说的很对,我没有设置成半步,以为都一样呢...现在已经改过来了。半步的起动频率是1.6KHz,那整步起动频率是多少啊?
  相关解决方案