找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机舵机控制so easy

  [复制链接]
跳转到指定楼层
楼主
ID:137999 发表于 2017-8-6 17:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
还是那句话,难者不会,会者不难。就只看你愿不愿意尝试,硬件的乐趣又何止于此。
硬件于我何加焉?
1.原理
真正了解一个东西和会用一个东西我一直认为那是两个境界。欲达登峰造极的地步,必须究其理那是必须的。

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
2.控制

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
0.5ms————–0度;
1.0ms————45度;
1.5ms————90度;
2.0ms———–135度;
2.5ms———–180度;
注意:

舵机的输入线共有三条,如图6所示,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。
本人所用舵机为红色VCC,橙色信号线,棕色GND


上一个51单片机定时器模拟PWM控制舵机的程序
PCA的各位下载吧。。。
源程序:
  1. #include <reg52.h>

  2. sbit PWMOUT = P1^0;

  3. unsigned char HighRH = 0;  //高电平重载值的高字节
  4. unsigned char HighRL = 0;  //高电平重载值的低字节
  5. unsigned char LowRH  = 0;  //低电平重载值的高字节
  6. unsigned char LowRL  = 0;  //低电平重载值的低字节

  7. void ConfigPWM(unsigned int fr, unsigned char dc);
  8. void ClosePWM();

  9. void main()
  10. {
  11.     unsigned int i;
  12.    
  13.     EA = 1;     //开总中断
  14.    
  15.     while (1)
  16.     {
  17.                 ConfigPWM(50, 2);   
  18.                    for (i=0; i<40000; i++);
  19.         ClosePWM();
  20.         ConfigPWM(50, 5);   
  21.         for (i=0; i<40000; i++);
  22.         ClosePWM();
  23.         ConfigPWM(50, 7);   
  24.         for (i=0; i<40000; i++);
  25.         ClosePWM();            
  26.         ConfigPWM(50, 10);   
  27.                    for (i=0; i<40000; i++);
  28.         ClosePWM();
  29.                 ConfigPWM(50, 12);   
  30.                    for (i=0; i<40000; i++);
  31.         ClosePWM();
  32.                 ConfigPWM(50, 10);   
  33.                    for (i=0; i<40000; i++);
  34.         ClosePWM();
  35.                 ConfigPWM(50, 7);   
  36.         for (i=0; i<40000; i++);
  37.         ClosePWM();
  38.                 ConfigPWM(50, 5);   
  39.         for (i=0; i<40000; i++);
  40.         ClosePWM();
  41.     }
  42. }
  43. /* 配置并启动PWM,fr-频率,dc-占空比 */
  44. void ConfigPWM(unsigned int fr, unsigned char dc)
  45. {
  46.     unsigned int  high, low;
  47.     unsigned long tmp;
  48.    
  49.     tmp  = (11059200/12) / fr;  //计算一个周期所需的计数值
  50.     high = (tmp*dc) / 100;      //计算高电平所需的计数值
  51.     low  = tmp - high;          //计算低电平所需的计数值
  52.     high = 65536 - high + 12;   //计算高电平的重载值并补偿中断延时
  53.     low  = 65536 - low  + 12;   //计算低电平的重载值并补偿中断延时
  54.     HighRH = (unsigned char)(high>>8); //高电平重载值拆分为高低字节
  55.     HighRL = (unsigned char)high;
  56.     LowRH  = (unsigned char)(low>>8);  //低电平重载值拆分为高低字节
  57.     LowRL  = (unsigned char)low;
  58.     TMOD &= 0xF0;   //清零T0的控制位
  59.     TMOD |= 0x01;   //配置T0为模式1
  60.     TH0 = HighRH;   //加载T0重载值
  61.     TL0 = HighRL;
  62.     ET0 = 1;        //使能T0中断
  63.     TR0 = 1;        //启动T0
  64.     PWMOUT = 1;     //输出高电平
  65. }
  66. /* 关闭PWM */
  67. void ClosePWM()
  68. {
  69.     TR0 = 0;     //停止定时器
  70.     ET0 = 0;     //禁止中断
  71.     PWMOUT = 1;  //输出高电平
  72. }
  73. /* T0中断服务函数,产生PWM输出 */
  74. void InterruptTimer0() interrupt 1
  75. {
  76.     if (PWMOUT == 1)  //当前输出为高电平时,装载低电平值并输出低电平
  77.     {
  78.         TH0 = LowRH;
  79.         TL0 = LowRL;
  80.         PWMOUT = 0;
  81.     }
  82.     else              //当前输出为低电平时,装载高电平值并输出高电平
  83.     {
  84.         TH0 = HighRH;
  85.         TL0 = HighRL;
  86.         PWMOUT = 1;
  87.     }
  88. }
复制代码

完整的代码工程请在2楼下载.


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:137999 发表于 2017-8-6 17:57 | 只看该作者
附件在这。

PCA产生PWM控制舵机.zip

1.02 KB, 下载次数: 53, 下载积分: 黑币 -5

回复

使用道具 举报

板凳
ID:1 发表于 2017-8-6 23:29 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

地板
ID:222772 发表于 2017-8-7 10:28 | 只看该作者
留个脚印,到时学到就看看
回复

使用道具 举报

5#
ID:134765 发表于 2017-8-7 14:50 | 只看该作者
请问舵机和电机到底区别何在,,一直傻傻分不清
回复

使用道具 举报

6#
ID:225059 发表于 2017-8-8 10:34 | 只看该作者
留个脚印,等日后学习舵机是再来看看
回复

使用道具 举报

7#
ID:833307 发表于 2020-11-3 14:00 | 只看该作者
留个脚印, 这两天让SG90 ,头都大了, 用舵机测试模块都行正厂,但是用单片机就不行, 代码也看不出什么问题来
回复

使用道具 举报

8#
ID:719067 发表于 2020-11-11 21:48 | 只看该作者
留个脚印,以后学到再来看看
回复

使用道具 举报

9#
ID:857258 发表于 2020-12-9 10:22 | 只看该作者
现在先留个脚印
回复

使用道具 举报

10#
ID:582255 发表于 2021-2-6 21:34 | 只看该作者
现在先留个脚印
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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