新人报道区
直播中

徐童旭

8年用户 74经验值
擅长:控制/MCU
私信 关注

用51单片机(STC89C52)控制MG995舵机不动的问题

本人最近参加一个智能小车比赛,现在遇到这个问题,即不能用51单片机控制MG995舵机。针对这个问题,我也在网上查了一些资料,感觉有几个原因1.程序问题,希望大神来看一下,下面给程序;

2.给舵机的电压和电流不够;(用的是4节1.5V干电池,用万用表测过有5.3V)
3.没有共地;(最后有共地)
4.单片机IO口要接一个电阻才能与舵机控制线连接。(这个还没有测试)
如果有其他原因请大神赐教。

程序:
  1.   //***********************************************************************************//
  2. //蓝牙参考程序
  3. //Designed by caizx
  4. //2015.4.14
  5. //单片机型号:STC89C52
  6. //晶振:11.0592MHz
  7. //***********************************************************************************//
  8. //注意晶振用11.0592MHz!
  9. #include
  10. #define uchar unsigned char
  11. #define uint unsigned int
  12. //L298N的输入控制引脚INT1~4
  13. ***it IN1=P1^0;
  14. ***it IN2=P1^1;
  15. ***it ENA=P1^2;
  16. ***it PWM1=P1^6;//舵机信号控制线
  17. uchar i=0,g;
  18. uchar m=0,n;
  19. //用于接收蓝牙数据的变量,之后可以通过判断这个变量实现你要的动作
  20. unsigned char bluetooth_data;

  21. //定时器初化,用为波特率发生器,串口与蓝牙模块通信
  22. void timer_Init(void)
  23. {
  24.     TMOD=0x20;//设置串口
  25.         TH1=0xfd;//设波特率为9600bps
  26.         TL1=0xfd;
  27.         TR1=1;        //打开定时器
  28. }
  29. //串口设置,同样为与蓝牙通信的串口作准备
  30. void UART_Init(void)
  31. {
  32.         REN=1;//开始接收
  33.         SM0=0;//8位UART
  34.         SM1=1;
  35.         EA=1;//中断
  36.         ES=1;       
  37. }
  38. //定时器中断服务程序 舵机控制部分
  39. void DigDisplay(uchar g)
  40. {       
  41.         TH0=0xff;//(65535-1830)/256;        //给定时器赋初值,定时100us
  42.         TL0=0xa4;//(65535-1830)%256;       
  43.         if(i
  44.         PWM1=1;
  45.         else
  46.         PWM1=0;
  47.         i++;
  48.         if(i>200)
  49.         i=0;
  50. }
  51. //定时器中断服务程序 电机调速控制部分
  52. void DigDisplay1(uchar n)
  53. {       
  54.         TH0=0xff;//(65535-1830)/256;        //给定时器赋初值,定时100us
  55.         TL0=0xa4;//(65535-1830)%256;       
  56.         if(m
  57.         ENA=1;
  58.         else
  59.         ENA=0;
  60.         m++;
  61.         if(m>200)
  62.         m=0;
  63. }

  64. //直流电机正反转
  65. /*
  66.           
  67.         ENA=1;
  68.         IN1=0;        //正转
  69.         IN2=1;
  70.                   
  71.         ENA=1;
  72.         IN1=1;//反转
  73.         IN2=0;                                */


  74. //主函数
  75. void main()
  76. {

  77.         Timer_Init();        //定时器初始化                                                  
  78.         UART_Init();        //串口设置初始化
  79.         while(1)
  80.         {
  81.                 switch(bluetooth_data)//判断bluetooth_data的值,这个值应与手机app上你设置的值保持一致
  82.                 {
  83.                         //下面是假设的动作,具体动作定义由你而定
  84.                         case 'F':ENA=1;IN1=0;IN2=1;DigDisplay(15);break;//前进
  85.                         case 'B':ENA=1;IN1=1;IN2=0;DigDisplay(15);break;//后退
  86.                         case 'L':ENA=1;IN1=0;IN2=1;DigDisplay(10);break;//左转45度
  87.                         case 'R':ENA=1;IN1=0;IN2=1;DigDisplay(20);break;//右转45度
  88.                         case '1':ENA=1;IN1=0;IN2=1;DigDisplay(15);DigDisplay1(n++);break;//加速 按键A
  89.                         case '3':ENA=1;IN1=0;IN2=1;DigDisplay(15);DigDisplay1(n--);break;//减速 按键C
  90.                         case '0':ENA=0;IN1=0;IN2=0;DigDisplay(15);break; //停止
  91.                 }
  92.         }
  93. }

  94. //中断服务程序,在这里接收蓝牙发来的数据,在SBUF里面
  95. void Uart_Isr() interrupt 4//串口中断
  96. {
  97.         RI=0;        //清除接收标志
  98.         bluetooth_data=SBUF;        //接收数据
  99. }



已退回5积分

回帖(4)

徐童旭

2016-7-20 22:12:12
希望有大神来帮忙
举报

徐童旭

2016-7-20 22:13:24
我也只是大一学电气的一名学生,有问题请多多赐教
举报

徐童旭

2016-7-20 22:13:47
谢谢啦
举报

徐童旭

2016-7-20 22:15:04
我也只是大一学生,学电气的,这是第一个比赛,希望有人指点
举报

更多回帖

发帖
×
20
完善资料,
赚取积分