找回密码
 立即注册

QQ登录

只需一步,快速开始

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

对180度360度sg90舵机的使用经验+单片机程序

[复制链接]
ID:638793 发表于 2020-1-18 17:53 | 显示全部楼层 |阅读模式
大部资料都是在网上找到网友大神所共享的,我只是在理解他们的资料上加上了自己的一些注解,在网上找了几种舵机的,刚接触有点懵,之后找得多了就理解了,想要控制一个硬件就要先了解这个硬件。这里有介绍180度舵机和360度舵机的具体使用,有网上大神的程序,这个更多的是一个网上对舵机使用的一个整合。如果若有不到之处,希望大家积极指出,

模拟舵机:需要不断的发送目的地PWM信号,才能旋转到指定位置。例如:我现在让它旋转90度,我就需要不断的发送90度的PWM信号直到到达指定位置才能停止。我们使用的SG90就是一个模拟舵机

数字舵机:只需给一个目的地PWM信号,即可旋转到指定位置。例如:我现在让它旋转90度,我只需要发送一次90度的PWM信号,它就可以旋转到90度。
PWM信号:PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.

占空比:高电平(或者低电平)占整个周期的时间就叫作占空比。
HC]T`2GVI@AIF5{]5IQ_LP5.png

了解了上面的基本知识我们就可以来认识我们今天的主角:sg90舵机


B32E1FE5C21D13AC897240E4772956E9.jpg


上图就是我们今天的主角,有三条线,接线方法:
         
棕色----------------------GND


          红-------------------------VCC


          橙色----------------------信号线



原理:舵机内部有一个基准电压,微处理器产生的PWM信号通过信号线进入舵机产生直流偏置电压,与舵机内部的基准电压作比较,获得电压差输出。电压差的正负输出到电机驱动芯片上,从而决定正反转。当舵机开始旋转的时候,舵机内部通过级联减速齿轮带动电位器旋转,使得电压差为零,电机停止转动。


那么我们如何获取这个 舵机呢。
首先我们上某宝能够找到180°、360°SG90舵机。

我们先来讲的是180度的舵机。
我们知道sg90舵机是一个模拟舵机,需要我们一直给指定的脉冲。那么这个指定的脉冲是什么?查资料可以知道180度舵机不同占空比与对应角度
关系:
高电平在一个周期(20ms)的持续时间对应的舵机角度,
  高电平t占整个周期T(20ms)的时间
  
  舵机旋转的角度
  
  0.5ms
  
  0
  
  1ms
  
  45
  
  1.5ms
  
  90
  
  2ms
  
  135
  
  2.5ms
  
  180
  
如下图可形象地表示脉冲与角度关系
20140419164038468.gif


知道了脉冲与角度关系,主要讲解一下如何写这个脉冲,这里所使用的是方法是定时器+中断,定时器每0.1ms中断一次,需要中断200次才能达到20ms。我们此时需要一个全局变量来记录中断的次数,当中断达到200次时,全局变量重新清零。当中断次数小于n时,信号线输出高电平,否则输出低电平。此时n的值对应关系如下。
n=5>>0度   n=10>>45度   n=15>>90度   n=20>>135度   n=25>>180度


voidInitTimer()        //这里设置0.1ms中断一次   使用11.0592Mhz晶振
{
    TMOD = 0x01;
    TH0 = 0xFF;
    TL0 = 0XA4;      
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
voidTimer() interrupt 1
{
    TH0 = 0xFF;
    TL0 = 0xA4;       //重新赋值
        count++;
        if(count<=200)
        {
           if(count<=n)
           {
                      pwm=1;
           }
           else
           {
                      pwm=0;
           }
        }
        else
        {
           count=0;
           pwm=0;
        }
}

单片机源程序如下:
#include<reg52.h>
#defineuchar unsigned char
#defineuint unsigned int

sbitpwm=P1^0;      //信号输出
sbitk1=P3^5;        //按键k1接P3^5,控制顺时针旋转
sbitk2=P3^4;        //按键k2接P3^4,控制逆时针旋转

ucharcount=0;
uchar n=5;       //初始位置-在0°附近  改变n值可以改变舵机的初始位置
//这个n值在不同的舵机可能存在一点误差,可以改变他的值来试试具体位置
voiddelay5ms()
{
    unsigned char a,b;
    for(b=19;b>0;b--)
        for(a=130;a>0;a--);
}
voidkey()
{
  if(k1==0)
  {
            delay5ms();
          if(k1==0)
          {
             while(k1==0); //判断当键盘松开时
                   if(n<=25) n++;//判断是否旋转到180°
                 else n=26;           
          }
  }
    if(k2==0)
  {
            delay5ms();
          if(k2==0)
          {
             while(k2==0); //判断当键盘松开时
                   if(n>=6) n--; //判断是否旋转到0°
                 else n=5;
          }
  }
}

voidInitTimer()        //  0.1ms   11.0592Mhz
{
    TMOD = 0x01;
    TH0 = 0xFF;
    TL0 = 0XA4;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

voidmain()
{
    InitTimer();
        while(1)
        {
          key();
        }
}

voidTimer() interrupt 1      //特别注意此处,0--外部中断0,1--定时器中断0,2--外部中断1,3--定时器中断1,4--串行口中断1
{
    TH0 = 0xFF;
    TL0 = 0xA4;
        count++;
        if(count<=200)
        {
           if(count<=n)
           {
                      pwm=1;
           }
           else
           {
                      pwm=0;
           }
        }
        else
        {
           count=0;
           pwm=0;
        }
}

Ps:某宝上可能还会有另一种90度sg90舵机,这个是一个另类的180度舵机,可以一样使用上面的程序,他与180度舵机不同的是不同占空比对应的舵机角度如图:
1)5{K@96(1XBWGPY`KU]TTY.png

360度舵机
顾名思义,360度舵机可以360度旋转,因此与180度舵机有相当大的区别,首先360度舵机不能够控制旋转角度,一般的舵机是给一个特定的PWM,舵机会转到相应的角度,而360度舵机是只能够控制方向和旋转转速,所以360度舵机给定一个PWM,会以特定的速度和方向转动。
PWM信号与360舵机转速的关系:

0.5ms----------------正向最大转速;
1.5ms----------------速度为0;
2.5ms----------------反向最大转速;


总结:无论是180度90度还是360度舵机,只要我们知道了它脉冲与角度的对应关系我们就可以利用定时器加中断的方法来产生这个相应的PWM信号,进而控制舵机旋转指定角度。


}OQ]EY@S~7GHQ~PW7I6MV5R.png

以上程序51hei提供下载:
sg90程序.zip (26.13 KB, 下载次数: 92)

评分

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

查看全部评分

回复

使用道具 举报

ID:155987 发表于 2020-4-9 15:10 | 显示全部楼层
并不是控制角度的,而是控制速度的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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