langjitianya162 发表于 2012-7-26 01:56:41

两相4线混合式步进电机驱动

急急请教个问题:对于两相混合式4线步进电机的驱动,我的驱动器要求频率不能超过50k,每个脉冲低电平时间要大于8us,我程序里于这两个要求都达到了,那为什么在一定频率下,不同的占空比对步进电机有影响,有时这个占空比,电机顺畅运转,有时另一个占空比它就转不动甚至抖动很大,不是说步进电机不受占空比影响吗?下面的是我用两个定时器产生pwm控制步进电机的程序,该程序实现步进电机加速,但在不同的占空比下有堵转、失步、甚至转动不了,有时占空比合适,运转顺畅,请大家指教下,看看有什么不妥
#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char
uchar i=0,j=0,a=3300,b=3300,c=1000;//a,b为每个频率下的步数参数,c为定时器初值,也是脉冲周期的参数

sbit fangxiang=P3^4;//方向
sbit maichong=P3^5;//脉冲
sbit tuoji=P3^6;   //脱机
               

void timer_init()//定时器初始化
{
        TMOD = 0x11;                                       
        TH0 = (65536-2500)/256;               
        TL0 = (65536-2500)%256;
        TH1 = (65536-100)/256;                       
        TL1 = (65536-100)%256;
        ET0 = 1;                                               
        ET1 = 1;
        EA = 1;                                                       
        TR0 = 1;                                               
}

void timer0() interrupt 1 //定时器0确定周期,也就是确定电机频率
{
       
        TR0 = 0;   //关定时器0
        a--;           //步数递减
        if(a==0)   //判断每个频率段的步数是否走完,0走完
        {
           if((i<104))//给步进电机103个频率段,频率递增,实现电机加速
           {
              i++;    //数组参数递增,如果i=103,则保持匀速
            c-=1;
               
           }
               
           a=5300;//a减为0后,复位5300
        }                       
            maichong=1;//脉冲高电平                                               
        TH0 = (65536-c)/256;               
        TL0 = (65536-c)%256;
        TR1 = 1;        //开启定时器1                                       
        TR0 = 1;        //开启定时器0                                       
}
void timer1() interrupt 3        //定时器1确定占空比
{
        TR1 = 0;//关定时器1,直到定时器0进入中断,两个定时器重新开启
   
        maichong=0;                                       
        TH1 = (65536-100)/256;//高电平时间固定为100us,无论在哪一个周期都有大于8us的低电平               
        TL1 = (65536-100)%256;
}
void main()
{
          fangxiang=1; //正向
       maichong=0;
       tuoji=1;   //受控
       timer_init();
       fangxiang=1;
       while(1)
       {};
}

zhiyiyunmeng@ 发表于 2012-8-7 08:50:50

我的单片机产生12us脉宽,频率最大25khz,不同频率下的电机噪声明显不一样。
页: [1]
查看完整版本: 两相4线混合式步进电机驱动