能用PMW控制步进电机驱动器吗?
用PMW控制TB6560驱动步进电机这个有办法吗? PMW的周期是多少? 可以啊,周期490Hz左右,TB6560最高可以接受15KHz的步脉冲信号。但是:
1.PWM频率固定为490,意味着步进电机转速恒定。当然PWM频率是可以改的,但那样用起来比较麻烦,详见:http://www.diy-robots.com/?p=852
2.其实,控制TB6560的Arduino库早就存在了,这个就是:http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
支持加速减速恒速,步数和速度可以实时改变。 如果改变arduino中的pwm输出可以参考弘毅老师的“pwm的秘密(上下)” 用T1定时器 频率与占空比均可调 只有OCR1B输出(对应PIN10 arudino) 下面程序供参考 uno下可以用 2560需要重新对应引脚
void setup()
{
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
TCCR1A =_BV(COM1A0) | _BV(COM1B1) | _BV(WGM11) | _BV(WGM10);
TCCR1B =_BV(WGM12) |_BV(WGM13) | _BV(CS10);
OCR1A=319;
OCR1B=248;
}
void loop()
{
delay(444);
} laji3865689 发表于 2014-2-8 22:27 static/image/common/back.gif
可以啊,周期490Hz左右,TB6560最高可以接受15KHz的步脉冲信号。
但是:
1.PWM频率固定为490,意味着步进 ...
如果这库的话,我还要读取其它传感器(HX711、温度等)还要LCD显示,好像都需要费比较长的时间使电机转动不正常,我不知道如何克服~~:'(。望指教!!!! 相位修正PWM下,修改时钟的计数上限
类似的,相位修正模式下,也可以修改输出PWM的频率。代码几乎完全和上个例子一样,区别是WGM的值设置为101:
view plaincopy to clipboardprint?
pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS22);
OCR2A = 180;
OCR2B = 50;
在Arduino Duemilanove开发板,上面这几行代码的结果为:
输出 A 频率: 16 MHz / 64 / 180 / 2 / 2 = 347.2Hz
输出 A 占空比: 50%
输出 B 频率: 16 MHz / 64 / 180 / 2 = 694.4Hz
输出 B 占空比: 50 / 180 = 27.8%
跟之前的对比类似,相位修正模式下,一个大周期从0数到180,然后倒数到0,总共是360个时钟周期;而在快速PWM模式下,一个周期是从0数到180,实际上是181个时钟周期。这可能就是鬼子们说的“更加对称”的好处,好吧,可能老外们其实并不傻。
数不清楚这两者区别的同学,可以用OCRA=3为例:
快速PWM:0123-0123-0123….. 每个周期时钟数是4=3+1
相位修正:012321-012321-012321….每个周期时钟数是6=3*2
相应的占空比计算也有微小的区别,快速PWM模式下,高位的输出会多一个时钟周期。上面的这个例子,以比较器=1为例:
快速PWM:当计数器=1时反相,这时候已经经历了2个时钟周期,所以占空比是2/4
相位修正:计数器0到1时输出0,计数器1到0时输出1,占空比是1/3
如是这样的话,只要修改(OCR2A = 180;)这个值就可以修改PWM的周期频率了,不就是电机速度可以调了么还不单片机其它工作呵呵!~ 支持一个支持一个支持一个
页:
[1]