步进电机转动步数和脉冲信号频率的关系(附程序)
最近在做步进电机的实验,调试的已经差不多了,但碰到了一个问题,即步进电机转动的步数会随着脉冲信号的频率而成比例变化,程序的原意是通过T/C0的CTC模式产生的脉冲信号,Step值设置电机转动的步数,但是运行时发现当Step不变,调整CTC输出的脉冲频率,转的步数也会发生变化,比如脉冲频率为10kHz,Step=100000(10圈),电机转动了7.5圈(应该是误差造成的吧?),而当频率改为20kHz,Step值不变时,电机转动了15圈,当频率为5Hz时为3.75圈,所以这里就有个问题,Step是在中断中执行减1的操作,应该和频率无关的吧,但结果确是和频率成正比,难道Step定义的是时间而不是步数?百思不得其解,望大家指教,谢谢~~程序主要部分如下://管脚定义,fosc=1MHZ,内部RC振荡
#define ENA 0 //PB0
#define DIR 1 //PB1
#define PUL 3 //OC0 PB3
//宏定义
#define ENA_OFF() PORTB|= (1<<ENA)//电机朝扩充方向转
#define ENA_ON() PORTB&=~(1<<ENA) //电机朝压缩方向转
#define DIR_EXP() PORTB&=~(1<<DIR)//电机反转
#define DIR_COM() PORTB|= (1<<DIR) //电机正转
//全局变量
volatile unsigned long Step; //步进电机待走的步数
volatile signed long Pos_Count; //记录步进电机的绝对位置
SIGNAL(SIG_OUTPUT_COMPARE0)//T0输出比较A匹配中断
{
if(Step == 0)
{
ENA_OFF();//步数已减至0,即电机已转至目标位置
}
else
Step--;//步数减一
}
void timer0_init(void) //CTC模式输出10KHz方波
{
OCR0= 0x31;//设定TOP值
//TOP=1000000/(2*1*10000)-1=49(0.1mS)
TCCR0 = (1<<WGM01)|(0<<WGM00)|(0<<COM01)|(1<<COM00)|(1<<CS00);
//无分频,CTC模式,OC0取反输出方波
TIMSK|=(1<<OCIE0);//T/C0输出比较匹配使能
}
int main(void)
{
//上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻
PORTA = 0xFF; //不用的管脚使能内部上拉电阻。
PORTC = 0xFF;
PORTD = 0xFF;
PORTB |=~((1<<ENA)|(1<<DIR)|(1<<PUL)); //初始低电平,三根线,使能,方向和脉冲,接驱动器
DDRB|= ((1<<ENA)|(1<<DIR)|(1<<PUL)); //输出
DIR_COM();//电机正转
Step = 100000;//10000步/圈,转10圈,步进电机设置的是10000步/圈
ENA_ON();//使能电机
timer0_init();
sei(); //使能全局中断
while(Flag == 0)
{
;//等待中断
}
}
-----此内容被linky于2006-06-29,11:01:02编辑过 你使用的是几相步进电机?用的是几拍的环行分配?步进电机是每走完一个环行分配走2微步。脉冲频率一般是不会影响圈数的,除非你的频率太高超出了电机的频响,出现了失步,那就有可能了。但不会出现一定的规律,一般是随机的。
100000步才10圈,我不太明白。一般的电机都是200微步的。 我用的是4相电机,驱动器是买的,直接接线就可以了。电机也是200步的,但是用了50细分,所以就成10000微步/圈了,我用的Step是在中断里减一,应该和频率无关啊,可实际情况又是如上说的,想了很久也想不明白,所以麻烦大家一起看看:) mark mark Step == 0时要关定时器的吧, linky 大虾:
关注ing,最后结果怎么样?把定时器关掉以后? 使用TMC428
http://cache.amobbs.com/bbs_upload782111/files_22/ourdev_506525.gif
(原文件名:2.gif)
型号 性能
控制芯片
TMC211 1个步进控制+驱动芯片 LIN通讯
TMC222 1个步进控制+驱动芯片 IIC通讯
TMC223 1个步进控制+驱动芯片 IIC通讯 StallGuard功能
TMC428 3个电机控制芯片;SPI或step/dir控制信号
TMC454 位置闭环芯片,PID功能,ABN编码器输入,微步406,classic/SPI/SD
TMC457 位置闭环芯片,PID功能,ABN编码器输入,微步2048;classic/SPI/SD
TMC401 信号转化芯片 SPI---STEP/DIR;42细分
编码器信号处理芯片
TMC423 3路ABN编码器处理芯片
步进驱动芯片
TMC236 2相步进驱动芯片;1.5A;64细分;齐全的保护和诊断功能
TMC239 2相步进驱动芯片;MOSFETS外置;64细分;齐全的保护和诊断功能
TMC246 2相步进驱动芯片;1.5A;64细分;齐全的保护和诊断功能; 具有专利技术StallGuard技术
TMC249 2相步进驱动芯片;MOSFETS外置;64细分;齐全的保护和诊断功能;具有专利技术StallGuard技术
3相步进驱动芯片
TMC332 适用2相或3相步进电机;自动高速;运动平稳;细分数2相256细分,3相171细分;S/D接口;ABN编码器输入
无传感器直流无刷驱动芯片
TMC603 3相BLDC;20A;12-50V;无需Hall换向
详细资料及参考电路 详细资料及参考电路
TMC211 http://www.trinamic.com/tmc/render.php?sess_pid=209
TMC222 http://www.trinamic.com/tmc/render.php?sess_pid=222
TMC223 http://www.trinamic.com/tmc/render.php?sess_pid=223
TMC428 http://www.trinamic.com/tmc/render.php?sess_pid=428
TMC454 http://www.trinamic.com/tmc/render.php?sess_pid=454
TMC457 http://www.trinamic.com/tmc/render.php?sess_pid=457
TMC401 http://www.trinamic.com/tmc/render.php?sess_pid=401
TMC423 http://www.trinamic.com/tmc/render.php?sess_pid=423
TMC236 http://www.trinamic.com/tmc/render.php?sess_pid=236
TMC239 http://www.trinamic.com/tmc/render.php?sess_pid=239
TMC246 http://www.trinamic.com/tmc/render.php?sess_pid=246
TMC249 http://www.trinamic.com/tmc/render.php?sess_pid=249
TMC332 http://www.trinamic.com/tmc/render.php?sess_pid=332
TMC603 http://www.trinamic.com/tmc/render.php?sess_pid=603 mark 这个很有用。。。。MARK mark{:smile:} 学习学习! 步数和频率没有关系吧,频率影响的是转速。
页:
[1]