小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 32109|回复: 63

51版WIFI小车下位机程序(加入8路舵机功能) 兼容工作室控制平台

[复制链接]
发表于 2013-5-3 16:36:30 | 显示全部楼层 |阅读模式
本帖最后由 robotStudio 于 2014-3-21 14:06 编辑

官方淘宝第二分店:http://dsrobot.taobao.com为您提供优质的服务!
应广大车友朋友的强烈要求,即“51版WIFI小车下位机程序兼容工作室控制平台”之后加入8路舵机功能,程序兼容工作室的控制平台。后期有时间再加入调速功能。。。敬请期待。。。
注意:由于单片机最小系统供电不稳定,需要特殊处理,本人推荐新手朋友们使用工作室的“驱动板”。。。
演示视频:

优酷转码-发布耽误4天的时间,气死我了,视频上传晚了。。。
  1. #include<REG52.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint buffer[3];
  5. uint rec_flag=0;

  6. sbit servo0=P1^0;
  7. sbit servo1=P1^1;
  8. sbit servo2=P1^2;
  9. sbit servo3=P1^3;
  10. sbit servo4=P1^4;
  11. sbit servo5=P1^5;
  12. sbit servo6=P1^6;
  13. sbit servo7=P1^7;

  14. uint pwm[]={1382,1382,1382,1382,1382,1382,1382,1382}; //初始90度,(实际是1382.4,取整得1382)
  15. uint pwm_flag=0;
  16. uint code ms0_5Con=461; //0.5ms计数 (实际是460.8,取整得461)
  17. uint code ms2_5Con=2304; //2.5ms计数
  18. /*-----------------------串口初始化----------------------------*/
  19. void UART_Init(void)
  20. {
  21. TMOD = 0x21;
  22. PCON = 0x00;
  23. SCON = 0x50;
  24. TH1 = 0xFd; //设置波特率 9600
  25. TL1 = 0xFd;
  26. TR1 = 1; //启动定时器1

  27. ES = 1; //开串口中断
  28. EA = 1; //开总中断
  29. IT0=0;
  30. EX0=1;

  31. }

  32. /*------------------------舵机定时器--------------------------*/
  33. void Timer0Init()
  34. {
  35. //0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms
  36. //2.5 ms初始值 F700, (12n/11059200=2.5/1000, n=2304, X=65536-2304=63232 > F700)
  37. TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
  38. TH0=-ms2_5Con>>8; //给定初值,2.5ms中断
  39. TL0=-ms2_5Con;
  40. EA=1; //总中断打开
  41. ET0=1; //定时器0中断打开
  42. TR0=1; //定时器0开关打开
  43. }

  44. /*------------------------角度值转换--------------------------*/
  45. uint Transform(uchar val)
  46. {
  47. //0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms
  48. //2.5 ms初始值 F700, (12n/11059200=2.5/1000, n=2304, X=65536-2304=63232 > F700)
  49. //return (uint)(((float)(2/180)*X+0.5)/1000*11059200/12);
  50. uint a = (val+46)*10;
  51. if(a<ms0_5Con)
  52. a=ms0_5Con;
  53. if(a>ms2_5Con)
  54. a=ms2_5Con;
  55. return a;
  56. }

  57. /*-------------------------主函数---------------------------*/
  58. void main(void)
  59. {
  60. UART_Init(); //初始化串口
  61. Timer0Init();//舵机定时初始化
  62. while(1)
  63. {
  64. }
  65. }

  66. /*--------------------串口解析执行-------------------------*/
  67. void Communication_Decode(void)
  68. {
  69. if(buffer[0]==0x00)
  70. {
  71. switch(buffer[1])
  72. {
  73. case 0x01:P2=0xF6; return;
  74. case 0x02:P2=0xF9; return;
  75. case 0x03:P2=0xF5; return;
  76. case 0x04:P2=0xFA; return;
  77. case 0x00:P2=0x00; return;
  78. default: return;
  79. }
  80. }
  81. else if(buffer[0]==0x01)
  82. {
  83. if(buffer[2]>180)
  84. return;
  85. switch(buffer[1])
  86. {
  87. case 0x01:pwm[0]=Transform(buffer[2]); return; //角度值与脉宽计数值转换
  88. case 0x02:pwm[1]=Transform(buffer[2]); return;
  89. case 0x03:pwm[2]=Transform(buffer[2]); return;
  90. case 0x04:pwm[3]=Transform(buffer[2]); return;
  91. case 0x05:pwm[4]=Transform(buffer[2]); return;
  92. case 0x06:pwm[5]=Transform(buffer[2]); return;
  93. case 0x07:pwm[6]=Transform(buffer[2]); return;
  94. case 0x08:pwm[7]=Transform(buffer[2]); return;
  95. default : return;
  96. }
  97. }
  98. else
  99. {
  100. return;
  101. }
  102. }

  103. /*------------------------舵机中断函数--------------------------*/
  104. void SteeringGear() interrupt 1
  105. {
  106. switch(pwm_flag)
  107. {
  108. case 1: servo0=1; TH0=-pwm[0]>>8; TL0=-pwm[0]; break;
  109. case 2: servo0=0; TH0=-(ms2_5Con-pwm[0])>>8; TL0=-(ms2_5Con-pwm[0]); break;
  110. case 3: servo1=1; TH0=-pwm[1]>>8; TL0=-pwm[1]; break;
  111. case 4: servo1=0; TH0=-(ms2_5Con-pwm[1])>>8; TL0=-(ms2_5Con-pwm[1]); break;
  112. case 5: servo2=1; TH0=-pwm[2]>>8; TL0=-pwm[2]; break;
  113. case 6: servo2=0; TH0=-(ms2_5Con-pwm[2])>>8; TL0=-(ms2_5Con-pwm[2]); break;
  114. case 7: servo3=1; TH0=-pwm[3]>>8; TL0=-pwm[3]; break;
  115. case 8: servo3=0; TH0=-(ms2_5Con-pwm[3])>>8; TL0=-(ms2_5Con-pwm[3]); break;
  116. case 9: servo4=1; TH0=-pwm[4]>>8; TL0=-pwm[4]; break;
  117. case 10: servo4=0; TH0=-(ms2_5Con-pwm[4])>>8; TL0=-(ms2_5Con-pwm[4]); break;
  118. case 11: servo5=1; TH0=-pwm[5]>>8; TL0=-pwm[5]; break;
  119. case 12: servo5=0; TH0=-(ms2_5Con-pwm[5])>>8; TL0=-(ms2_5Con-pwm[5]); break;
  120. case 13: servo6=1; TH0=-pwm[6]>>8; TL0=-pwm[6]; break;
  121. case 14: servo6=0; TH0=-(ms2_5Con-pwm[6])>>8; TL0=-(ms2_5Con-pwm[6]); break;
  122. case 15: servo7=1; TH0=-pwm[7]>>8; TL0=-pwm[7]; break;
  123. case 16: servo7=0; TH0=-(ms2_5Con-pwm[7])>>8; TL0=-(ms2_5Con-pwm[7]); break;
  124. default:TH0=0xff; TL0=0x80; pwm_flag=0;
  125. }
  126. pwm_flag++;
  127. }

  128. /*------------------------串口中断函数--------------------------*/
  129. void INT_UartRcv(void) interrupt 4
  130. {
  131. static int i;


  132. if(RI==1)
  133. {
  134. RI = 0;
  135. if(rec_flag==0)
  136. {

  137. if(SBUF==0xff)
  138. {
  139. rec_flag=1;
  140. i=0;
  141. }
  142. }
  143. else
  144. {
  145. if(SBUF==0xff)
  146. {
  147. rec_flag=0;
  148. if(i==3)
  149. {
  150. Communication_Decode();
  151. }
  152. i=0;
  153. }
  154. else
  155. {
  156. buffer[i]=SBUF;
  157. i++;
  158. }
  159. }
  160. }
  161. else
  162. {
  163. TI = 0;
  164. }
  165. }
复制代码

大帅机器人工作室http://dsrobot.taobao.com为您提供优质的服务!

点评

本人小白一个,请问您这代码是做什么用的?  发表于 2013-11-20 00:08
回复

使用道具 举报

发表于 2013-5-3 16:43:43 | 显示全部楼层
很给力,晚上下载下来试试去。
回复 支持 反对

使用道具 举报

发表于 2013-5-3 16:50:38 | 显示全部楼层
这个是不是只能控制舵机啊?不能控制小车的移动?用工作室的安卓和PC版的上位机可以直接控制吗?不用设置什么吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-3 17:39:55 | 显示全部楼层
317130687 发表于 2013-5-3 16:50
这个是不是只能控制舵机啊?不能控制小车的移动?用工作室的安卓和PC版的上位机可以直接控制吗?不用设置什 ...

可以控制小车,并且可以控制舵机。。。兼容论坛的控制软件。。。
回复 支持 反对

使用道具 举报

发表于 2013-5-3 21:50:45 | 显示全部楼层
robotStudio 发表于 2013-5-3 17:39
可以控制小车,并且可以控制舵机。。。兼容论坛的控制软件。。。

我的单片机最小系统P0口没有上拉电阻,可以用P0口控制舵机吗?还有,电机的接线还是P1.0到P1.3吗?谢谢,麻烦您了。
回复 支持 反对

使用道具 举报

发表于 2013-5-3 23:03:37 | 显示全部楼层
为什么没错误,但是提示“目标文件未生成”?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-4 09:54:02 | 显示全部楼层
317130687 发表于 2013-5-3 21:50
我的单片机最小系统P0口没有上拉电阻,可以用P0口控制舵机吗?还有,电机的接线还是P1.0到P1.3吗?谢谢, ...

p0口还是乖乖的加上上拉电阻吧,电机接线是p1.0-p1.3
回复 支持 反对

使用道具 举报

发表于 2013-5-4 11:20:12 | 显示全部楼层
V5    准备加上舵机试试!!
回复 支持 反对

使用道具 举报

发表于 2013-5-4 15:54:58 | 显示全部楼层
为什么编译的时候提示:目标文件未生成。
回复 支持 反对

使用道具 举报

发表于 2013-5-4 16:33:15 | 显示全部楼层
不错哦! 有时间好好学习了
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-4-24 05:58 , Processed in 1.075907 second(s), 19 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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