找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3819|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机控制MG99R舵机源码

[复制链接]
跳转到指定楼层
楼主
ID:487423 发表于 2019-3-11 12:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用舵机型号为MG99R

产品参数:

速度: 4.8v 0.20sec/60°           6.0V 0.19sec/60°

扭力:4.8V 13KG-cm               6.0V  15KG-cm

电压 4.8V-7.2V

空载工作电流:120Ma             堵转工作电流:1450mA

响应脉宽时间=<5usec

上升沿时间对应角度:

0.5ms           0

1ms           45

1.5ms           90

2.0ms           135

2.5ms           180

驱动舵机需要一个20ms的时基脉冲,高电平在0.5-2.5ms

舵机有三根线:黄色为信号线,红色为电源线,棕色为地线。

单片机源程序:
  1. #include <reg51.h>
  2. unsigned int target=6,percent=0;//将最初的高电平时间设为0.6ms
  3. sbit pwm=P0^0;//P0^0口输出脉冲信号
  4. sbit key1=P3^0;
  5. sbit key2=P3^1;
  6. //函数说明
  7. void Timer0initial();
  8. void initial_Timer();
  9. void delay(unsigned int x);
  10. void keyscan();

  11. void delay(unsigned int x)//延时
  12. {
  13.         unsigned int i,j;
  14.         for(i=0;i<x;++i)
  15.         for(j=120;j>0;--j);
  16. }
  17. void keyscan()
  18. {
  19.         if(key1==0)
  20.         {
  21.                 delay(3);
  22.                 if(key1==0)
  23.                 {
  24.                         if(target>=7)
  25.                         {
  26.                                 target-=1;
  27.                         }
  28.                         while(key1==0)
  29.                         {P1=0x00;}//避免长按一直转动
  30.                 }
  31.                 P1=0xff;
  32.         }
  33.         if(key2==0)//刚启动只能按按键2
  34.         {
  35.                 delay(3);
  36.                 if(key2==0)
  37.                 {
  38.                         if(target<=25)
  39.                         {
  40.                                 target+=5;//可以调节舵机每次转过的角度
  41.                         }
  42.                         while(key2==0)
  43.                         {P1=0x00;}
  44.                 }
  45.                 P1=0xff;
  46.         }
  47. }
  48. void initial()
  49. {
  50.         key1=1;
  51.         key2=1;
  52.         P1=0xff;//设置P1初值
  53.         initial_Timer();
  54. }
  55. void Timer0initial()
  56. {
  57.         TH0=(65536-65)/256;
  58.         TL0=(65536-65)%256;
  59. }//每0.1ms产生一次中断(实测)
  60. void initial_Timer()
  61. {
  62.         EA=1;//开启总中断
  63.         ET0=1;//允许T0中断
  64.         TMOD=0x01;//使用工作方式1
  65.         Timer0initial();
  66.         TR0=1;//软件中断允许
  67. }

  68. void Timer0() interrupt 1 using 0//中断方式为定时器/计数器0内部中断
  69. {
  70.         percent+=1;
  71.         if(percent==200)
  72.         {
  73.                 percent=0;
  74.                 pwm=1;//高电平输出
  75.         }
  76.         if(percent==target)
  77.         {
  78.                 pwm=0;
  79.         }
  80.         Timer0initial();
  81. }
  82. void main()
  83. {
  84.         initial();
  85.         while(1)
  86.         {
  87.                 keyscan();
  88.         }
  89. }
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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