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);
- }
- }
復制代碼
IMG_20201110_151501.jpg (3.76 MB, 下載次數(shù): 58)
下載附件
2020-11-10 15:26 上傳
無標題.png (192.16 KB, 下載次數(shù): 58)
下載附件
仿真連接
2020-11-10 15:28 上傳
實物連接是按照仿真連接的 ,并且單片機和2003驅動板都加電源的 ,而且實物連線都 檢查很多遍,確認實物連接沒問題
|