找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7354|回复: 1
收起左侧

单片机舵机控制程序以及仿真与原理详解

[复制链接]
ID:420142 发表于 2018-11-7 22:10 | 显示全部楼层 |阅读模式
单片机控制舵机仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序如下:
  1. #include <reg52.h>             //头文件
  2. #define uchar unsigned char           //宏定义无符号字符型
  3. #define uint  unsigned  int           //宏定义无符号整型

  4. uint b;                //中断值
  5. uint N=0;                //占空比计数值
  6. uint X=8;                //初始角度值  (取值范2~15)


  7. uchar key_up;
  8. uchar key_down;
  9. /*************************************************************************/
  10. sbit P2_2=P2^2;//角度加
  11. sbit P2_3=P2^3;//角度减
  12. sbit PWM=P1^0;//PWM输出          (舵机控制端)
  13. /*************************************************************************/
  14. void get_key(void)//按键扫描函数

  15. {
  16. while(P2_2==0)//按键加计数标志
  17. {key_up=1;
  18. }
  19. while(P2_3==0)//按键减计数标志
  20. {key_down=1;
  21. }
  22. }
  23. /*************************************************************************/
  24. void timer0( ) interrupt 1 //定时器0工作方式1
  25. {
  26. TH0=0xff;          //重装计数初值
  27. TL0=0x38;          //重装计数初值
  28. b++;
  29. get_key();
  30. if (key_up==1)
  31.        {
  32.            if(X!=15)//判断是否计数到9999
  33.               {
  34.                X=X+1;//加一
  35.                key_up=0;
  36.                            }
  37.         }
  38. if (key_down==1)
  39.        {
  40.             if(X!=2)//判断是否计数到0
  41.               {
  42.                    X=X-1;//减一
  43.                key_down=0;
  44.                }
  45.         }
  46. }
  47. /*************************************************************************/
  48. void main()
  49. {
  50. TMOD=0X01;          //定时器中断0
  51. TH0=0xff;          //重装计数初值
  52. TL0=0x38;          //重装计数初值
  53. EA=1;                                  //开CPU中断
  54. ET0=1;                                  //开T/C0中断
  55. TR0=1;
  56. while(1)                           //无限循环
  57.         {
  58. PWM=1;                   //输出PWM正
  59. while(1)
  60. {
  61. b=0;
  62. while(!b);
  63. if (N==X)
  64. PWM=0;
  65. if (N==100)break;
  66. N++;

  67.           }
  68.             N=0;
  69.           }
  70. }                                                                                                                  
复制代码

微型伺服马达原理与控制(中鸣)
1
、微型伺服马达内部结构

一个微型伺服马达内部包括了一个小型直流马达;一组变速齿轮组;一个反馈可调电位器;及一块电子控制板。其中,高速转动的直流马达提供了原始动力,带动变速(减速)齿轮组,使之产生高扭力的输出,齿轮组的变速比愈大,伺服马达的输出扭力也愈大,也就是说越能承受更大的重量,但转动的速度也愈低。


2、微行伺服马达的工作原理

一个微型伺服马达是一个典型闭环反馈系统,其原理可由下图表示:


减速齿轮组由马达驱动,其终端(输出端)带动一个线性的比例电位器作位置检测,该电位器把转角坐标转换为一比例电压反馈给控制线路板,控制线路板将其与输入的控制脉冲信号比较,产生纠正脉冲,并驱动马达正向或反向地转动,使齿轮组的输出位置与期望值相符,令纠正脉冲趋于为0,从而达到使伺服马达精确定位的目的。

3、如何控制伺服马达

标准的微型伺服马达有三条控制线,分别为:电源、地及控制。电源线与地线用于提供内部的直流马达及控制线路所需的能源,电压通常介于4V—6V之间,该电源应尽可能与处理系统的电源隔离(因为伺服马达会产生噪音)。甚至小伺服马达在重负载时也会拉低放大器的电压,所以整个系统的电源供应的比例必须合理。

入一个周期性的正向脉冲信号,这个周期性脉冲信号的高电平时间通常在1ms—2ms之间,而低电平时间应在5ms到20ms之间,并不很严格,下表表示出一个典型的20ms周期性脉冲的正脉冲宽度与微型伺服马达的输出臂位置的关系:


在参照上表设计控制脉冲宽度时应注意以下的注意事项。

4、伺服马达的电源引线


电源引线有三条,如图中所示。伺服马达三条线中红色的线是控制线,接到控制芯片上。中间的是SERVO工作电源线,一般工作电源是5V。 第三条是地线。

5、伺服马达的运动速度

伺服马达的瞬时运动速度是由其内部的直流马达和变速齿轮组的配合决定的,在恒定的电压驱动下,其数值唯一。但其平均运动速度可通过分段停顿的控制方式来改变,例如,我们可把动作幅度为90o的转动细分为128个停顿点,通过控制每个停顿点的时间长短来实现0o—90o变化的平均速度。对于多数伺服马达来说,速度的单位由“度数/秒”来决定。


6使用伺服马达的注意事项
  • 除非你使用的是数码式的伺服马达,否则以上的伺服马达输出臂位置只是一个不准确的大约数。
  • 普通的模拟微型伺服马达不是一个精确的定位器件,即使是使用同一品牌型号的微型伺服马达产品,他们之间的差别也是非常大的,在同一脉冲驱动时,不同的伺服马达存在±10o的偏差也是正常的。
  • 正因上述的原因,不推荐使用小于1ms及大于2ms的脉冲作为驱动信号,实际上,伺服马达的最初设计表也只是在±45o的范围。而且,超出此范围时,脉冲宽度转动角度之间的线性关系也会变差。
  • 要特别注意,绝不可加载让伺服马达输出位置超过±90o的脉冲信号,否则会损坏伺服马达的输出限位机构或齿轮组等机械部件。
  • 由于伺服马达的输出位置角度与控制信号脉冲宽度没有明显统一的标准,而且其行程的总量对于不同的厂家来说也有很大差别,所以控制软件必须具备有依据不同伺服马达进行单独设置的功能。




所有资料51hei提供下载:
021、舵机控制程序及其仿真.zip (238.95 KB, 下载次数: 130)
回复

使用道具 举报

ID:1 发表于 2018-11-14 02:10 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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