两相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)
{};
}
我的单片机产生12us脉宽,频率最大25khz,不同频率下的电机噪声明显不一样。
页:
[1]