找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2580|回复: 11
收起左侧

51单片机做的5线4项步进电机云台,仿真可以运行,实物连接不转

[复制链接]
ID:841557 发表于 2020-11-10 15:33 | 显示全部楼层 |阅读模式
5线4项步进电机做的云台,仿真可以运行,实物连接不转。求大神指点原因!!愁啊....
以下是 单片机代码:

  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};//竖直电机正转 1~2 相励磁
  10. code tabdown[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//竖直电机反转 1~2 相励磁
  11. code tableft[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//水平电机正转 1~2 相励磁
  12. code tabright[]={0x60,0x20,0x30,0x10,0x90,0x80,0xc0,0x40};//水平电机反转 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;//设置定时器 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)//中断控制电机动作
  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)//按键控制电机动作
  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. }
复制代码

IMG_20201110_151501.jpg

仿真连接

仿真连接


实物连接是按照仿真连接的 ,并且单片机和2003驱动板都加电源的 ,而且实物连线都 检查很多遍,确认实物连接没问题
回复

使用道具 举报

ID:339654 发表于 2020-11-11 16:49 | 显示全部楼层
硬件电路检查一下,看看是不是缺少什么,还有实际应用中不能让电机转太快,不然电机无响应
回复

使用道具 举报

ID:423511 发表于 2020-11-11 16:51 | 显示全部楼层
仿真和实物不同,P0加上上拉电阻试试。
回复

使用道具 举报

ID:143767 发表于 2020-11-12 13:44 | 显示全部楼层
你的代码编译后出现如下提示:
YT.C(164): error C141: syntax error near 'u'
回复

使用道具 举报

ID:143767 发表于 2020-11-12 14:15 | 显示全部楼层
P0=0xff后面少了大写分号
回复

使用道具 举报

ID:313791 发表于 2020-11-12 17:21 | 显示全部楼层
你可以适当降低一下频率,还有就是不要将ABCD向接错了!!!
回复

使用道具 举报

ID:313791 发表于 2020-11-12 17:22 | 显示全部楼层
不行就先写一个测试程序,让它转起来,然后慢慢调
回复

使用道具 举报

ID:841557 发表于 2020-11-15 13:14 | 显示全部楼层
dj3365191 发表于 2020-11-12 14:15
P0=0xff后面少了大写分号

实际程序是 有的 ,可能是 复制这里没复制上
回复

使用道具 举报

ID:841557 发表于 2020-11-15 13:16 | 显示全部楼层
weijoyer 发表于 2020-11-11 16:49
硬件电路检查一下,看看是不是缺少什么,还有实际应用中不能让电机转太快,不然电机无响应

电源,晶振,2003驱动,按键,电机都检查或 很多 次了,没有问题
回复

使用道具 举报

ID:841557 发表于 2020-11-15 13:16 | 显示全部楼层
weiweimao1 发表于 2020-11-11 16:51
仿真和实物不同,P0加上上拉电阻试试。

还是不可以的,哎
回复

使用道具 举报

ID:841557 发表于 2020-11-15 13:18 | 显示全部楼层
dj3365191 发表于 2020-11-12 13:44
你的代码编译后出现如下提示:
YT.C(164): error C141: syntax error near 'u'

没有提示错误啊??
回复

使用道具 举报

ID:841557 发表于 2020-11-15 13:24 | 显示全部楼层
哪位大神能指导一下啊 ,感恩不尽!给他介绍对象袄
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表