标题:
为什么电机实际转数与程序设定的不一样?请高手指教!
[打印本页]
作者:
tmxk0574
时间:
2017-1-25 13:33
标题:
为什么电机实际转数与程序设定的不一样?请高手指教!
所用单片机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
}
}
作者:
阿杜
时间:
2017-1-26 20:00
感觉延时是不是有点长,0.9°延时0.5秒,一圈就要延时200s。
作者:
tmxk0574
时间:
2017-1-27 11:44
是啊,应该转得很慢,但是实际上转得很快,第二是只会正转不会反转,第三是设定的是一圈,而实际上转了二圈多,刚刚开始学单片机,知识浅薄理解不了,非常疑惑
作者:
tmxk0574
时间:
2017-1-27 11:53
是不是程序有错?我自己看不出来。希望得到帮助
作者:
tmxk0574
时间:
2017-1-27 12:27
设定的每圈所需时间为8*50=400个脉冲计200秒,但实际测量是9秒左右,相差了20多倍。第二,只有正转没有反转。第三,设定的是一圈,实际转了二圈另97度。第四,把0.9°延时0.5秒改为0.05秒,运行状态还是没变化。由于学习不久,知识浅薄,错在哪里不知道。万望高手援助!
作者:
tmxk0574
时间:
2017-1-27 12:50
阿杜 发表于 2017-1-26 20:00
感觉延时是不是有点长,0.9°延时0.5秒,一圈就要延时200s。
实测一圈只用了9秒左右,与设定的8*50/0.5=200秒相差太大了
作者:
yzwzfyz
时间:
2017-2-4 17:30
可能是对硬部分的理解不足。建议查看一下硬件驱动部分的手册,特别是驱动的极性、起动时间、驱动电流。
作者:
tmxk0574
时间:
2017-2-10 21:37
谢谢7楼的指导!
作者:
tmxk0574
时间:
2017-2-14 10:32
谢谢大家的帮助,这个问题已经解决了`
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1