標(biāo)題: 51單片機(jī)做的5線4項步進(jìn)電機(jī)云臺,仿真可以運行,實物連接不轉(zhuǎn) [打印本頁]

作者: ∮醉心∮·    時間: 2020-11-10 15:33
標(biāo)題: 51單片機(jī)做的5線4項步進(jìn)電機(jī)云臺,仿真可以運行,實物連接不轉(zhuǎn)
5線4項步進(jìn)電機(jī)做的云臺,仿真可以運行,實物連接不轉(zhuǎn)。求大神指點原因!!愁啊....
以下是 單片機(jī)代碼:

  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit P10=P1^0;
  5. sbit P11=P1^1;
  6. sbit P12=P1^2;
  7. sbit P13=P1^3;
  8. uchar i,a,flag,u;
  9. code tabup[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//豎直電機(jī)正轉(zhuǎn) 1~2 相勵磁
  10. code tabdown[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//豎直電機(jī)反轉(zhuǎn) 1~2 相勵磁
  11. code tableft[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//水平電機(jī)正轉(zhuǎn) 1~2 相勵磁
  12. code tabright[]={0x60,0x20,0x30,0x10,0x90,0x80,0xc0,0x40};//水平電機(jī)反轉(zhuǎn) 1~2 相勵磁
  13. void control(uchar);
  14. void moveauto();
  15. void moveup();
  16. void movedown();
  17. void moveleft();
  18. void moveright();
  19. void delay(uchar);
  20. void init()//初始化
  21. {
  22. TMOD=0x20;//設(shè)置定時器 1 為工作方式 2
  23. TH1=0xFA;
  24. TL1=0xFA;
  25. TR1=1;//開定時器
  26. PCON=0x80;
  27. SCON=0x50;//9600, n, 8,1
  28. EA=1;//開總中斷
  29. ES=1;//開串口中斷
  30. }
  31. void serial() interrupt 4//串口中斷
  32. {
  33. RI=0;
  34. a=SBUF;
  35. control(a);
  36. delay(1);
  37. }
  38. void control(uchar l)//中斷控制電機(jī)動作
  39. {
  40. switch(l)
  41. {
  42. case 'A':moveup();break;
  43. case 'B':movedown();break;
  44. case 'C':moveleft();break;
  45. case 'D':moveright();break;
  46. case 'Z':flag=1;break;
  47. default:break;
  48. }
  49. }
  50. void delay(uint z)//延時
  51. {
  52. uint x,y;
  53. for(x=z;x>0;x--)
  54. for(y=110;y>0;y--);
  55. }
  56. void moveup()//豎直方向向上
  57. {
  58. flag=0;
  59. if(P10!=1)
  60. {
  61. for(i=0;i<8;i++)
  62. {
  63. P2=tabup[i];
  64. delay(50);
  65. }
  66. }
  67. }
  68. void movedown()//豎直方向向下
  69. {
  70. flag=0;
  71. if(P11!=1)
  72. {
  73. for(i=0;i<8;i++)
  74. {
  75. P2=tabdown[i];
  76. delay(50);
  77. }
  78. }
  79. }
  80. void moveleft()//水平方向向左
  81. {
  82. flag=0;
  83. if(P12!=1)
  84. {
  85. for(i=0;i<8;i++)
  86. {
  87. P2=tableft[i];
  88. delay(50);
  89. }
  90. }
  91. }
  92. void moveright()//水平方向向右
  93. {
  94. flag=0;
  95. if(P13!=1)
  96. {
  97. for(i=0;i<8;i++)
  98. {
  99. P2=tabright[i];
  100. delay(50);
  101. }
  102. }
  103. }
  104. void moveauto()//自動運行
  105. {
  106. P1=0;
  107. while(!P10)
  108. {
  109. for(i=0;i<8;i++)
  110. {
  111. P2=tabup[i];
  112. delay(50);
  113. }
  114. }
  115. while(!P11)
  116. {
  117. for(i=0;i<8;i++)
  118. {
  119. P2=tableft[i];
  120. delay(50);
  121. }
  122. }
  123. while(!P12)
  124. {
  125. for(i=0;i<8;i++)
  126. {
  127. P2=tabdown[i];
  128. delay(50);
  129. }
  130. }
  131. while(!P13)
  132. {
  133. for(i=0;i<8;i++)
  134. {
  135. P2=tabright[i];
  136. delay(50);
  137. }
  138. }
  139. }
  140. void controlkey(uchar i)//按鍵控制電機(jī)動作
  141. {
  142. switch(i)
  143. {
  144. case 1:moveup();break;
  145. case 2:movedown();break;
  146. case 4:moveleft();break;
  147. case 8:moveright();break;
  148. case 16:flag=1;break;
  149. default:break;
  150. }
  151. }
  152. void main()
  153. {
  154. P1=0;
  155. flag=0;
  156. init();
  157. while(1)
  158. {
  159. if(flag==1)
  160. {
  161. moveauto();//自動運行
  162. }
  163. P0=0xff
  164. u=P0;
  165. controlkey(u);
  166. }
  167. }
復(fù)制代碼



實物連接是按照仿真連接的 ,并且單片機(jī)和2003驅(qū)動板都加電源的 ,而且實物連線都 檢查很多遍,確認(rèn)實物連接沒問題

作者: weijoyer    時間: 2020-11-11 16:49
硬件電路檢查一下,看看是不是缺少什么,還有實際應(yīng)用中不能讓電機(jī)轉(zhuǎn)太快,不然電機(jī)無響應(yīng)
作者: weiweimao1    時間: 2020-11-11 16:51
仿真和實物不同,P0加上上拉電阻試試。
作者: dj3365191    時間: 2020-11-12 13:44
你的代碼編譯后出現(xiàn)如下提示:
YT.C(164): error C141: syntax error near 'u'
作者: dj3365191    時間: 2020-11-12 14:15
P0=0xff后面少了大寫分號
作者: SUN_    時間: 2020-11-12 17:21
你可以適當(dāng)降低一下頻率,還有就是不要將ABCD向接錯了。!
作者: SUN_    時間: 2020-11-12 17:22
不行就先寫一個測試程序,讓它轉(zhuǎn)起來,然后慢慢調(diào)
作者: ∮醉心∮·    時間: 2020-11-15 13:14
dj3365191 發(fā)表于 2020-11-12 14:15
P0=0xff后面少了大寫分號

實際程序是 有的 ,可能是 復(fù)制這里沒復(fù)制上
作者: ∮醉心∮·    時間: 2020-11-15 13:16
weijoyer 發(fā)表于 2020-11-11 16:49
硬件電路檢查一下,看看是不是缺少什么,還有實際應(yīng)用中不能讓電機(jī)轉(zhuǎn)太快,不然電機(jī)無響應(yīng)

電源,晶振,2003驅(qū)動,按鍵,電機(jī)都檢查或 很多 次了,沒有問題
作者: ∮醉心∮·    時間: 2020-11-15 13:16
weiweimao1 發(fā)表于 2020-11-11 16:51
仿真和實物不同,P0加上上拉電阻試試。

還是不可以的,哎
作者: ∮醉心∮·    時間: 2020-11-15 13:18
dj3365191 發(fā)表于 2020-11-12 13:44
你的代碼編譯后出現(xiàn)如下提示:
YT.C(164): error C141: syntax error near 'u'

沒有提示錯誤啊??
作者: ∮醉心∮·    時間: 2020-11-15 13:24
哪位大神能指導(dǎo)一下啊 ,感恩不盡!給他介紹對象襖




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1