所用单片机STC89C52RC,驱动为L298N,电机为42步进电机
实际运行后发现问题;
1、只有正转,(转2圈多后停一下又正转2圈多,如此反复而没有反转);
2、转动函数中的J值不论是何值,电机总是转2圈另96度。程序中要求1圈。
因为自己是新手,对此弄不明白,望高手指教 。程序如下:
#include <reg52.h> //单片机:STC89C52RC
#define uchar unsigned char //采用42电机
#define uint unsigned int
uchar code up_data[8]={0xFE,0xFC,0xFD,0xF9,0xFB,0xF3,0xF7,0xF6};//正转代码
uchar code down_data[8]={0xF6,0xF7,0xF3,0xFB,0xF9,0xFD,0xFC,0xFE};//反转代码
/********以下是延时函数********/
void Delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
/********以下是步进电机1相励磁法正转函数********/
void motor_up(uint n)
{
uchar i;
uint j;
for (j=0; j<50*n; j++) //转n圈
{
for (i=0; i<8; i++) //用42电机,步距角1.8°。八拍为0.9°。
//8次共转0.9×8=7.2°,
//J=50可转7.2°*50=360°(1圈)
{
P1 = up_data[i]; //取正转数据
Delay_ms(500); //转一个角度停留的时间
}
}
}
/********步进电机1相励磁法反转函数********/
void motor_down(uint n)
{
uchar i;
uint j;
for (j=0; j<50*n; j++)
{
for (i=0; i<8; i++)
{
P1 = down_data[i]; //取反转数据
Delay_ms(500); //转一个角度停留的时间
}
}
}
/********以下是主函数********/
main()
{
while(1)
{
motor_up(1); //电机正转1圈
P1=0xff; //电机停转
Delay_ms(2000); //换向延时为2s
motor_down(1); //电机反转1圈
P1=0xff; //电机停转
Delay_ms(2000); //换向延时为2s
}
}
|