1)分配引脚的使用
以步进电机的MA~ MD引脚分别与P32~ P35相连接
sbit MA = P3^2;
sbit MB = P3^3;
sbit MC = P3^4;
sbit MD = P3^5;
2)定义输出高低电平的宏定义
#define MAL MA = 0;
#define MAH MA = 1;
#define MBL MB = 0;
#define MBH MB = 1;
#define MCL MC = 0;
#define MCH MC = 1;
#define MDL MD = 0;
#define MDH MD = 1;
3)配置延时函数
配置延时函数的工作在步进电机的驱动中十分重要,它控制着步进电机运转的快慢。
但问题也正出在这里,对于步进电机来说其速度是与驱动脉冲有关,但也并非脉冲越快,电机的转速越快。因为电机电机属于机械器件,要建立相应的磁场及达到相应的扭矩才能使电机转动。过快的脉冲只会使电机在原地震颤和抖动,并无法旋转。
使电机转动的延时函数为:
void delay_ms(void)
{
unsigned char b,c;
for(c=0;c<180;c++)
{
for(b=0;b<8;b++);
}
}
4)控制电机旋转方向
对于4相5线式步进电机来讲,可通过8个节拍的脉冲序列来控制其正反转。
正转的驱动函数为:
void zx()
{
unsigned char X,Y;
for(X=0;X<64;X++)
{
for(Y=0;Y<8;Y++)
{
MDL;
MAH; //A
delay_ms();
MBH; //AB
delay_ms();
MAL; //B
delay_ms();
MCH; //BC
delay_ms();
MBL; //C
delay_ms();
MDH; //CD
delay_ms();
MCL; //D
delay_ms();
MAH; //DA
delay_ms();
}
}
}
反转的单片机驱动函数为:
void fx()
{
unsigned char X,Y;
for(X=0;X<64;X++) // 控制节拍数
{
for(Y=0;Y<8;Y++) // 控制节拍
{
MDH;
MAH; //A
delay_ms();
MAL; //AB
delay_ms();
MCH; //B
delay_ms();
MDL; //BC
delay_ms();
MBH; //C
delay_ms();
MCL; //CD
delay_ms();
MAH; //D
delay_ms();
MBL; //DA
delay_ms();
}
}
}
5)主程序控制电机运行
void main()
{
unsigned char rdata=9,f,c;
delay_ms();
//停止电机转动
MAL;
MBL;
MCL;
MDL;
delay_ms();
f=1;//控制转向
while(1)
{
for(c=0;c<rdata;c++) //控制转动的位置
{
if(f==0)
fx();
else
{
zx();
}
}
}
}
复制代码
|