5线4项步进电机做的云台,仿真可以运行,实物连接不转。求大神指点原因!!愁啊....
以下是 单片机代码:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit P10=P1^0;
- sbit P11=P1^1;
- sbit P12=P1^2;
- sbit P13=P1^3;
- uchar i,a,flag,u;
- code tabup[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//竖直电机正转 1~2 相励磁
- code tabdown[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//竖直电机反转 1~2 相励磁
- code tableft[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//水平电机正转 1~2 相励磁
- code tabright[]={0x60,0x20,0x30,0x10,0x90,0x80,0xc0,0x40};//水平电机反转 1~2 相励磁
- void control(uchar);
- void moveauto();
- void moveup();
- void movedown();
- void moveleft();
- void moveright();
- void delay(uchar);
- void init()//初始化
- {
- TMOD=0x20;//设置定时器 1 为工作方式 2
- TH1=0xFA;
- TL1=0xFA;
- TR1=1;//开定时器
- PCON=0x80;
- SCON=0x50;//9600, n, 8,1
- EA=1;//开总中断
- ES=1;//开串口中断
- }
- void serial() interrupt 4//串口中断
- {
- RI=0;
- a=SBUF;
- control(a);
- delay(1);
- }
- void control(uchar l)//中断控制电机动作
- {
- switch(l)
- {
- case 'A':moveup();break;
- case 'B':movedown();break;
- case 'C':moveleft();break;
- case 'D':moveright();break;
- case 'Z':flag=1;break;
- default:break;
- }
- }
- void delay(uint z)//延时
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void moveup()//竖直方向向上
- {
- flag=0;
- if(P10!=1)
- {
- for(i=0;i<8;i++)
- {
- P2=tabup[i];
- delay(50);
- }
- }
- }
- void movedown()//竖直方向向下
- {
- flag=0;
- if(P11!=1)
- {
- for(i=0;i<8;i++)
- {
- P2=tabdown[i];
- delay(50);
- }
- }
- }
- void moveleft()//水平方向向左
- {
- flag=0;
- if(P12!=1)
- {
- for(i=0;i<8;i++)
- {
- P2=tableft[i];
- delay(50);
- }
- }
- }
- void moveright()//水平方向向右
- {
- flag=0;
- if(P13!=1)
- {
- for(i=0;i<8;i++)
- {
- P2=tabright[i];
- delay(50);
- }
- }
- }
- void moveauto()//自动运行
- {
- P1=0;
- while(!P10)
- {
- for(i=0;i<8;i++)
- {
- P2=tabup[i];
- delay(50);
- }
- }
- while(!P11)
- {
- for(i=0;i<8;i++)
- {
- P2=tableft[i];
- delay(50);
- }
- }
- while(!P12)
- {
- for(i=0;i<8;i++)
- {
- P2=tabdown[i];
- delay(50);
- }
- }
- while(!P13)
- {
- for(i=0;i<8;i++)
- {
- P2=tabright[i];
- delay(50);
- }
- }
- }
- void controlkey(uchar i)//按键控制电机动作
- {
- switch(i)
- {
- case 1:moveup();break;
- case 2:movedown();break;
- case 4:moveleft();break;
- case 8:moveright();break;
- case 16:flag=1;break;
- default:break;
- }
- }
- void main()
- {
- P1=0;
- flag=0;
- init();
- while(1)
- {
- if(flag==1)
- {
- moveauto();//自动运行
- }
- P0=0xff
- u=P0;
- controlkey(u);
- }
- }
复制代码
实物连接是按照仿真连接的 ,并且单片机和2003驱动板都加电源的 ,而且实物连线都 检查很多遍,确认实物连接没问题
|