SG90舵机(模拟舵机)

一、日常吐槽额~~~~~~,在开始今天的主题之前,占用大家一些时间。容我骂街一番,$##%%%$%#$#$$%^艹……………….,哎呀妈呀,骂的有点喘不过来了,额~呸,是言(文明人,文明人)。

可能就奇了怪了,你不好好码字,骂什么街呢!说来惭愧,上边被骂的人就是笔者自己。今天在调试程序的时候,对,就这个鬼舵机,怎么都不转!!!检查硬件---检查程序---百度,如此反复N小时。始终找不到问题所在,程序呢,怎么看,怎么美!硬件呢,怎么看,怎么帅!说是急,那是快,电闪雷鸣,刀光剑影,啪,一个数字1摔在脸上,于是乎,快速打开课本,啪~啪~啪,数字0、1,大脑瓜子一拍,哎呀,一定是这错误了!快速拿起闪闪发光的鼠标,熟练的打开Keil4,一段操作猛如虎,只听见那吱~吱~吱~吱,舵机工作了~~~~

粗心大意:定时器0对应的中端口----void Timer() interrupt 1

马虎大意的我写成了这样:void Timer() interrupt 0.

家都走错了,人家咋可能给你钱,大家一定要引以为戒,细心细心再细心中断号中断源

0外部中断0

1定时器中断0

2外部中断1

3定时器中断1

4串行口中断1

注意:C语言用关键字“interrupt+数字”来代替汇编中中断入口地址

——————————————————————————————————

以上非本次笔记重点,只是笔者一点小小的吐槽,外加一点小小的知识

——————————————————————————————————

二、主咖登场基本概念:1.舵机:舵机是一种位置(角度)伺服的驱动器,适用那些需要角度不断变化并可以保持的控制系统。舵机只是一种通俗的叫法,其实质是一个伺服马达。

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

3.数字舵机:只需给一个目的地PWM信号,即可旋转到指定位置。例如:我现在让它旋转90度,我只需要发送一次90度的PWM信号,它就可以旋转到90度。

4.PWM信号:PWM(脉冲宽度调制)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。那么什么叫PWM信号呢,笔者就简单的谈一下自己的看法,我们都知道,我们所使用的单片机都是数字电路,它的I/O口只有两种状态,那就是高电平(1),低电平(0)。知道了这些之后,我们通过控制微处理器输出1-0-1-0-1-0-1-0……如此循环往复,就成为下图1所示的情况,这就是PWM信号。

图1.PWM信号

5.占空比:高电平(或者低电平)占整个周期的时间就叫作占空比。

6.PWM频率:PWM频率是指每秒钟信号从高电平到低电平再到高电平的次数。

工作原理  理解以上的概念,对我们接下来的学习是非常有必要的,希望大家能好好掌握上面的概念。

我所使用的SG90舵机,如下图2所示

图2

接线方法:

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

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

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

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

重点:作为一个单片机编写者,具体的原理,我们不必要搞清楚,我们只需知道如何控制它即可,以下将讲解如何控制舵机运转。

第一步:我们需要使用单片机产生周期为20ms,高电平t等于0.5ms-2.5ms之间的这样一个方波。定时器+中断产生这样的方波。

高电平在一个周期(20ms)的持续时间对应的舵机角度,如下图所示。高电平t占整个周期T(20ms)的时间舵机旋转的角度

0.5ms0度

1ms45度

1.5ms90度

2ms135度

2.5ms180度

第二步:简单讲一下编程思想吧,我所使用的是方法是定时器+中断,定时器每0.5ms中断一次,需要中断40次才能达到20ms。我们此时需要一个全局变量来记录中断的次数,当中断达到40次时,全局变量重新清零。当中断次数小于a时,信号线输出高电平,否则输出零。此时a的值对应关系如下(1--0度,2--45度,3--90度,4--135度,5--180度)。

第三步:着重讲程序中一个语句的含义

为什么此处要此处a==16,a==32,首先,这个值是我一步步测试出来的,如果你看见源程序的话,上面有详细的介绍,此处不再赘述。

我们知道SG90是一个模拟舵机,需要不断的给出信号才能到达指定的位置。到达这个位置并不是一蹴而就的,它需要时间,实际上面的a==16,相当于延时,这段时间刚好能够让舵机达到指定的位置,然后在接收下一个回摆程序。a==32,是因为我需要让它来回摆动的时间对称,所以才用a==32的。有兴趣的可以改变a的值,观察一下具体的情况。

单片机源程序如下:

#includesbit SG_PWM=P0^0;

unsigned char count=0;

unsigned char PWM_count=3;                  //1--0度,2--45度,3--90度,4--135度,5--180度

unsigned char a=0;

void Timer_Init()

{

TMOD=0X01;      //T0定时方式1

TH0=0Xfe;

TL0=0X33;       //计数初值设置为0.5ms

ET0=1;          //打开定时器0的中断

TR0=1;          //打开定时器0

EA=1;           //开总中断

}

void Timer() interrupt 1      //特别注意此处,0--外部中断0,1--定时器中断0,2--外部中断1,3--定时器中断1,4--串行口中断1

{

TR0=0;

TH0=0Xfe;

TL0=0X33;       //重新赋计数初值为0.5ms

if(count<=PWM_count)

{

SG_PWM=1;

}

else

{

SG_PWM=0;

}

count++;

if(count>=40)

{

count=0;

a++;

}

TR0=1;

}

void main()

{

Timer_Init();

while(1)

{

if(a==16)                             //20是比较舒服的连贯动作,20以上动作些许不连贯  10的时候出现打架情况,15的时候打架几乎没有,16比较完美

{

PWM_count=1;

}

if(a==32)

{

PWM_count=3;

a=0;

}

}

}

sg90舵机c语言编程,浅谈用单片机控制SG90舵机(原理+编程)相关推荐

  1. 编程浅谈-以一个初出茅庐的Java程序员视角

    编者是一个从事Java开发的普通软件攻城狮,迄今为止,粗粗算来不过刚刚进入编程的世界不过两年,但在这两年的光阴里,每当我抬头仰望星空(苦命加班)时脑海里总有这样一个疑问--"什么是编程&qu ...

  2. 浅谈WEBGIS运用栅格地图实现原理[更新:Google Maps带来的新型WebGIS设计模式]

    为什么要取这样的一个题目呢?主要是因为今天去了一家公司和他们谈了谈,本来是指望做兼职的,谈到最后当然是不成了.去谈的是地图制作(可兼职)一职,要求是地图制图经验,最后加了个有WEBGIS开发经验.本来 ...

  3. 51单片机控制SG90舵机、MG90S舵机

    舵机的控制信号为周期是20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化.也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应 ...

  4. 分三种情况C语言编程,浅谈C语言教学的现状及几点建议.doc

    浅谈C语言教学的现状及几点建议 浅谈C语言教学的现状及几点建议 摘 要 针对C语言教学中存在的问题提出建议,以期对C语言教学有一定帮助. 关键词 C语言:课程设置:创新能力 中图分类号:G642 文献 ...

  5. c语言在数学方面的应用编程,浅谈数学在C语言编程中的应用.doc

    浅谈数学在C语言编程中的应用 浅谈数学在C语言编程中的应用 [][]C语言对学习者的数学基础要求较高对一部分学生来说学好C语言有一定的困难.本文就本专业知识和自身对C语言的学习经验对数学在C语言编程中 ...

  6. 但为君故——浅谈非科班大一在校大学生选择编程的心路历程。

    好的,先生们女士们大家好,如果您和我足够有道缘,如果我足够幸运,那么接下来您将看到的是一名非科班大一在校大学生选择编程的一段心路历程. 首先简单自我介绍一下,小生姓陈名奕涛,字幼彦,籍贯江苏,英文名是 ...

  7. 2-路插入排序c语言算法,浅谈2路插入排序算法及其简单实现

    2路插入排序算法是在直接插入排序算法的基础上增加了一个辅助数组,其目的是减少排序过程中的移动次数,需要增加n个记录的辅助空间. 难点可能在于对取余的考虑吧,可以把辅助数组看成一个环状空间,这样就能更好 ...

  8. 适合中职学生的C语言课本,浅谈中职c语言校本教材的开发.pdf

    申学.i罘{辅导 浅谈中职 C语言校本教材的开发 @ 付世杰 摘 要:校本教材是适应教学需要的一个很重要的工具,校本教材的 在校本教材的编写过程中,教师把教育理论与教育实践结合起来,通过 开发会给我们 ...

  9. C语言:浅谈各种复杂的声明

    初学者在面对各种复杂的声明面前往往不知所措,甚至可以说一头雾水,不知道从何下手,本文就C语言中各种复杂的声明浅谈一下,希望可以帮助到初学者,下次再遇到复杂的声明时不在迷茫. 我们先来了解一下复杂的声明 ...

  10. 【第一章】浅谈游戏作弊类型与核心原理

    浅谈游戏作弊与核心原理 导语 外挂发展史 外挂核心以及原理 本章总结 下期预告 建议收藏此专栏以免迷路 导语 为什么有的人说游戏外挂开发门槛极低,但为什么又有的人说游戏外挂开发门槛极高? 只有了解了外 ...

最新文章

  1. 如何在Django中接收JSON格式的数据
  2. 1807. [NOIP2014]寻找道路P2296 寻找道路
  3. 全球四大农业贸易数字化-丰收节贸易会:谋定粮食区块链
  4. 从玉谋定农业大健康-国情讲坛·林裕豪 :粤港澳大湾区菜篮子
  5. html的ideo标签兼容那些浏览器,关于video 标签的浏览器支持
  6. I - Ant Trip (无向图欧拉回路+并查集),判断
  7. ASP.NET Core中如何调整HTTP请求大小的几种方式
  8. 从逻辑回归到最大熵模型
  9. 2012总结--目录
  10. linux中_Linux基础知识(Linux系统、Linux中的链表)
  11. 46. 考虑使用函数对象而不是函数作为STL算法的参数
  12. 第十三次CCFCSP认证(2018年3月)真题碰撞的小球
  13. springboot学习笔记2106版
  14. 短语wipe the slate clean
  15. 2022年美赛成绩什么时候出,2022美赛思路与注意事项。
  16. Hamcrest 总结
  17. Shiro-单点登录原理
  18. 畅视影院APP源码,电影网站app源码
  19. 数据库备份的三种方式 不要再干掉数据库跑路啦~
  20. ARM 代码烧录方案与原理详解 --- SWD/JTAG + Bootloader + OTA (ICP + ISP + IAP)

热门文章

  1. 罗斯蒙特流量计指示故障的原因
  2. 单机MySQL性能_单机数据库性能测试总结
  3. 灰度发布和AB test
  4. Django实现web端tailf日志文件
  5. visio添加箭头图标
  6. 【等保】二级等保常见问题解答汇总
  7. sipp uas 脚本
  8. 微服务网关选型,请收下我的膝盖!
  9. python中取绝对值简单方法总结
  10. MATLAB矩阵的平均值和最大值