标题:
此程序下载到单片机后为什么电机会乱转?
[打印本页]
作者:
Maryzy
时间:
2020-4-5 16:06
标题:
此程序下载到单片机后为什么电机会乱转?
预想功能:按下按键,电机反转5S后,延时一会,再以相同速度正转5S,停止
现在的现象:下载程序后电机乱转的,求求大佬了
单片机源程序如下:
#include"reg51.h"
#define uint16 unsigned int
#define uint8 unsigned char
#define GPIO_MOTOR P1
sbit k1=P3^1;
unsigned char code FFS[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//·′×a
unsigned char code FFN[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//Õy×a
typedef unsigned int u16;
unsigned char Direction,Speed;
void Delay(unsigned int t);
void Motor();
void Motor()
{
unsigned char i;
for(i=0;i<8;i++)
{
if(Direction==1)
GPIO_MOTOR=FFS[i]&0x1f;
if(Direction==0)
GPIO_MOTOR=FFN[i]&0x1f;
Delay(Speed);
}
}
void Delay(unsigned int t)//t=5000Ñó3ù4s
{
unsigned int k;
while(t--)
{
for(k=0;k<80;k++)
{}
}
}
void main(void)
{
TMOD=0x10;
TH1=0x3C;
TL1=0xB0;
EA=1;
ET1=1;
TR1=0;
while(1)
{
if(k1==1)
{
Delay(1);
if(k1==1)
{
TR1=1;
Direction=1;
Speed=10;
}
}
else
{
Delay(5000);
TR1=0;
}
}
}
void timer() interrupt 3
{
static u16 i;
TH1=0x3C;
TL1=0xB0;
i++;
if(i==100)
{
Delay(5000);
Delay(5000);
Delay(5000);
Direction=0;
Speed=10;
i=0;
}
Motor();
}
复制代码
作者:
wysh_2004
时间:
2020-4-5 21:15
从程序看,你的电机是一个步进电机,FFS[]、FFN[]数组分别是正反转数组;我暂时还不知道电机为什么会乱转,但从程序本身来看还是有点问题的。首先,我看不出程序是怎么实现“电机反转5S后,延时一会,再以相同速度正转5S,停止”的;其次,在中断服务函数中不应有Delay(5000)这样的长延时函数。
从我的角度来处理,我会先把程序最小化,只在主函数中保留 Motor()函数,其他的按键、定时中断均先屏蔽掉, Motor()函数也只留FFS数组,单独试电机是否能正转,再换成FFN数组,试电机能否反转,再加入按键功能,延时正反转功能。最终实现既定功能。
作者:
faguiq
时间:
2020-4-7 00:06
这代码写得也太乱了吧,你自己改延时函数应该 就行了,
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1