大部资料都是在网上找到网友大神所共享的,在网上找了几种舵机的,刚接触有点懵,之后找得多了就理解了,想要控制一个硬件就要先了解这个硬件。这里有介绍180度舵机和360度舵机的具体使用,有网上大神的程序,这个更多的是一个网上对舵机使用的一个整合。如果若有不到之处,希望大家积极指出,

模拟舵机:需要不断的发送目的地PWM信号,才能旋转到指定位置。例如:我现在让它旋转90度,我就需要不断的发送90度的PWM信号直到到达指定位置才能停止。我们使用的SG90就是一个模拟舵机
数字舵机:只需给一个目的地PWM信号,即可旋转到指定位置。例如:我现在让它旋转90度,我只需要发送一次90度的PWM信号,它就可以旋转到90度。
PWM信号:PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.
占空比:高电平(或者低电平)占整个周期的时间就叫作占空比。
了解了上面的基本知识我们就可以来认识我们今天的主角:sg90舵机

 

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

棕色----------------------GND

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

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

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

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

我们先来讲的是180度的舵机。
我们知道sg90舵机是一个模拟舵机,需要我们一直给指定的脉冲。那么这个指定的脉冲是什么?查资料可以知道180度舵机不同占空比与对应角度
关系:
高电平在一个周期(20ms)的持续时间对应的舵机角度,(在这20ms内每个周期高电平的占空比一致)

  高电平t占整个周期T(20ms)的时间
  
  舵机旋转的角度
  
  0.5ms
  
  0度
  
  1ms
  
  45度
  
  1.5ms
  
  90度
  
  2ms
  
  135度
  
  2.5ms
  
  180度
  

           如图可形象地表示脉冲与角度关系:

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

某宝上可能还会有另一种90度sg90舵机,这个是一个另类的180度舵机,可以一样使用上面的程序,他与180度舵机不同的是不同占空比对应的舵机角度如图:
 

360度舵机

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

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

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

 1 #include<reg52.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4
5 sbit pwm=P1^0; //信号输出
6 sbit k1=P3^1; //按键k1接P3^1,控制顺时针旋转
7 sbit k2=P3^2; //按键k2接P3^2,控制逆时针旋转
8
9 uchar count=0;
10 uchar n=5; //初始位置-在0°附近 改变n值可以改变舵机的初始位置
11           //这个n值在不同的舵机可能存在一点误差,可以改变他的值来试试具体位置
12 void delay5ms() //延时5ms
13 {
14 unsigned char a,b;
15 for(b=19;b>0;b--)
16 for(a=130;a>0;a--);
17 }
18 void key()  //按键处理
19 {
20 if(k1==0)
21 {
22 delay5ms();
23 if(k1==0)
24 {
25 while(k1==0); //判断当键盘松开时
26 if(n<=25)
27 n++;      //判断是否旋转到180°
28 else
29 n=26;
30 }
31 }
32 if(k2==0)
33 {
34 delay5ms();
35 if(k2==0)
36 {
37 while(k2==0); //判断当键盘松开时
38 if(n>=6) n--; //判断是否旋转到0°
39 else n=3;
40 }
41 }
42 }
43
44 void InitTimer()  // 定时器设置 0.1ms 11.0592Mhz
45 {
46 TMOD = 0x01;
47 TH0 = 0xFF;
48 TL0 = 0XA3;
49 EA = 1;
50 ET0 = 1;
51 TR0 = 1;
52 }
53
54 void main()
55 {
56 InitTimer();
57 while(1)
58 {
59 key();
60 }
61 }
62
63 void Timer() interrupt 1 //特别注意此处,0--外部中断0,1--定时器中断0,2--外部中断1
64 {              //3--定时器中断1,4--串口中断1
65 TH0 = 0xFF;
66 TL0 = 0xA3;
67 count++;
68 if(count<=200)
69 {
70 if(count<=n)
71 {
72 pwm=1;
73 }
74 else
75 {
76 pwm=0;
77 }
78 }
79 else
80 {
81 count=0;
82 pwm=0;
83 }
84 }

180度\360度sg90舵机的使用及代码程序的更多相关文章

  1. js获取两个经纬度之间的角度(0度-360度)

    /** * 获取角度 */mapNumberUtil.getAngle = function(lng_a,lat_a, lng_b, lat_b){ var a = (90 - lat_b) * Ma ...

  2. 使用Javascript来创建一个响应式的超酷360度全景图片查看幻灯效果

    360度的全景图片效果常常可以用到给客户做产品展示,今天这里我们推荐一个非常不错的来自Robert Pataki的360全景幻灯实现教程,这里教程中将使用javascript来打造一个超酷的全景幻灯实 ...

  3. C# 图片旋转360度程序

    这几天开发一个程序,需要将一个图片旋转360度然后每一个角度保存下来.刚开始本来想着是让美工弄的,但是让一个美工手动转360度,她会喷你一脸. using System; using System.C ...

  4. 360度角转AS3角度

    var ang:Number=400; ang=ang%360; //as3角指0~180,0~-180的角 //1. 360度角转as3角 if(ang>180)ang-=360; else ...

  5. 基于mysql数据库集群的360度水平切割

    1.why sharding? 我们都知道,信息行业发展日益迅速,积累下来的数据信息越来越多,互联网公司门要维护的数据日益庞大.设想一下,假如腾讯公司只用一个数据库的一张表格来存储所有qq注册用户的登 ...

  6. threesixty.min.js 和jquery.threesixty.js使用总结----实现360度展示

    最近公司做一个项目需要360度展示汽车的外观,就用到了threesixty.min.js,自己总结一下使用方法: treesixty.min.js 源码: /*! threesixty-slider ...

  7. 安卓端360度全景图的html5实现

    这里是一款旅游相关的安卓应用,其中虚拟旅游的功能采用html5的360度全景图技术实现,使用户能够身临其境的感受旅游景点的风光. 此处引入了ddpanorama插件,它的原理是在canvas上绘制全景 ...

  8. jQuery Panorama Viewer – 360度全景展示插件

    jQuery Panorama Viewer 这款插件可以帮助你在网站中嵌入全景图片.要做到这一点,首先只需要在页面中引入最新的 jQuery 库,以及 jquery.panorama_viewer. ...

  9. 利用Canvas实现360度浏览

    前言:最近几个月来到新公司,主要从事移动端方面的开发,有时候也挺忙挺累的,于是就好一段时间没写博客了.其实自己在这几个月里,自己对canvas以及createjs和egret都有了一定程度上的认识与掌 ...

随机推荐

  1. LeetCode-028-实现 strStr()

    实现 strStr() 题目描述:实现 strStr() 函数. 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下 ...

  2. RENIX软件连接机箱测试RTSM基本操作——网络测试仪实操

    本文主要介绍了RENIX软件RTSM功能连接机箱测试的基本操作.文章分为三部分内容,第一部分为RTSM功能简介,第二部分为RTSM原理简介,第三部分为RTSM测试方案的具体介绍. 第一部分.RTSM功 ...

  3. SpringCloud Nacos + Ribbon 调用服务的 2 种方法!

    在 Nacos 中,服务调用主要是通过 RestTemplate + Ribbon 实现的,RestTemplate 是 Spring 提供的 Restful 请求实现类,而 Ribbon 是客户端负 ...

  4. TCP/IP方法安装打印机

    在计算机安装打印机驱动和添加打印机(TCP/IP方法) 一:打印机的型号和驱动. 1.1:如何知道自己的打印机是什么品牌和型号?: 通过观察打印机表面的logo或者其他文字图案来辨别 如下图: 1.2 ...

  5. 矩池云上安装ikatago及远程链接教程

    https://github.com/kinfkong/ikatago-resources/tree/master/dockerfiles 从作者的库中可以看到,该程序支持cuda9.2.cuda10 ...

  6. Spring Cloud Gateway 不小心换了个 Web 容器就不能用了,我 TM 人傻了

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

  7. linux su、sudo、sudo su、sudo -i的用法和区别

    sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过有时间限制,Ubuntu默认一次时长15分钟. su : 切换到某某用户模式,提 ...

  8. AC+AP组网无线WiFi网速超慢延迟卡顿问题解决

    AP是什么? AP是Access Point的简称,即无线接入点,其作用是把局域网里通过双绞线传输的有线信号(即电信号)经过编译,转换成无线电信号传递给电脑.手机等无线终端,与此同时,又把这些无线终端 ...

  9. vue路由传参丢失问题

    vue路由传递参数如果用params传递参数,那么页面刷新就会丢失数据,可以改用query来传递参数,这样刷新就不会丢失

  10. libx264开发笔记(一):libx264介绍、海思平台移植编译

    前言   在编译ffmpeg时,使用到h264编码时是需要依赖libx264的,本文章是将将libx264作为静态库移植到海思上.   相关博客 <Qt开发笔记之编码x264码流并封装mp4(一 ...