linky 发表于 2006-6-29 10:44:39

步进电机转动步数和脉冲信号频率的关系(附程序)

最近在做步进电机的实验,调试的已经差不多了,但碰到了一个问题,即步进电机转动的步数会随着脉冲信号的频率而成比例变化,程序的原意是通过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编辑过

atmega64 发表于 2006-6-29 15:47:19

你使用的是几相步进电机?用的是几拍的环行分配?步进电机是每走完一个环行分配走2微步。脉冲频率一般是不会影响圈数的,除非你的频率太高超出了电机的频响,出现了失步,那就有可能了。但不会出现一定的规律,一般是随机的。

100000步才10圈,我不太明白。一般的电机都是200微步的。

linky 发表于 2006-6-30 09:31:10

我用的是4相电机,驱动器是买的,直接接线就可以了。电机也是200步的,但是用了50细分,所以就成10000微步/圈了,我用的Step是在中断里减一,应该和频率无关啊,可实际情况又是如上说的,想了很久也想不明白,所以麻烦大家一起看看:)

mruio 发表于 2009-9-10 14:37:13

mark

16ysa 发表于 2009-9-11 09:54:04

mark

nb1976 发表于 2009-9-11 17:39:35

Step == 0时要关定时器的吧,

lsnba 发表于 2009-11-16 10:31:28

linky 大虾:

   关注ing,最后结果怎么样?把定时器关掉以后?

TRINAMIC 发表于 2009-11-23 21:50:17

使用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

jingwaner 发表于 2011-8-14 00:04:06

mark

fish198868 发表于 2013-5-11 14:16:43

这个很有用。。。。MARK

lcmdw 发表于 2013-6-17 17:45:20

mark{:smile:}

yeksw206 发表于 2013-9-8 05:07:59

学习学习!

iversonY 发表于 2013-9-17 22:27:08

步数和频率没有关系吧,频率影响的是转速。
页: [1]
查看完整版本: 步进电机转动步数和脉冲信号频率的关系(附程序)