![]() |
發布時間: 2021-11-23 11:18
正文摘要:用Proteus仿真沒提示有問題,但步進電機只能順時針旋轉,請教各位了謝謝。仿真接線圖如下: 完整代碼如下: #include<reg52.h> sbit A1=P2^1; sbit B1=P2^2; sbit C1=P2^3; sbit D1=P2^4; #d ... |
我笨,兩天了也沒弄明白。 |
天ノ憶 發表于 2021-11-23 18:00 好主意,謝謝啦 |
B B BC C CD D DA,而反向是A AD D DC C CB B BA,程序中未定義反向的相序 |
為什么不定義個數組用循環,一條一條寫不覺得很麻煩嗎
|
csmyldl 發表于 2021-11-23 13:55 按你說的我修改了,應該是還有錯誤,仿真時仍舊只看到順時針旋轉。 #include<reg52.h> sbit A1=P2^0; sbit B1=P2^1; sbit C1=P2^2; sbit D1=P2^3; #define C_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電。 #define C_AD1 {A1=1;B1=0;C1=0;D1=1;}//AD相通電,其他相斷電。 #define C_BA1 {A1=1;B1=1;C1=0;D1=0;}//BA相通電,其他相斷電。 #define C_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電。 #define C_CB1 {A1=0;B1=1;C1=1;D1=0;}//CB相通電,其他相斷電。 #define C_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電。 #define C_DA1 {A1=1;B1=0;C1=0;D1=1;}//DA相通電,其他相斷電。 #define C_DC1 {A1=0;B1=0;C1=1;D1=1;}//DC相通電,其他相斷電。 #define C_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電。 #define C_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電。 #define C_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電。 #define C_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電。 #define C_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電。 unsigned char speed; bit Flag; void delayus(unsigned char t) { while(--t); } void delayms(unsigned char t) { while(t--) { delayus(245); delayus(245); }} main() { unsigned int i=512; //旋轉一周時間。 EA=1; EX0=1; IT0=1; speed=10; while(i--) { C_OFF while((i--)&&Flag) //正向。 { C_A1 delayms(speed); C_AB1 delayms(speed); C_B1 delayms(speed); C_BC1 delayms(speed); C_C1 delayms(speed); C_CD1 delayms(speed); C_D1 delayms(speed); C_DA1 delayms(speed); } C_OFF i=512; while((i--)&&(!Flag)) //反向。 { C_A1 delayms(speed); C_AD1 delayms(speed); C_D1 delayms(speed); C_DC1 delayms(speed); C_C1 delayms(speed); C_CB1 delayms(speed); C_B1 delayms(speed); C_BA1 delayms(speed); } } } void zhang0(void)interrupt 0 { if(!INT0) { delayms(10); //延時防抖。 if(!INT0) { Flag=!Flag; } } } |
正向相序是A AB B BC C CD D DA,而反向是A AD D DC C CB B BA,程序中未定義反向的相序 |