历史上的今天
返回首页

历史上的今天

今天是:2024年11月25日(星期一)

正在发生

2019年11月25日 | 浅谈用单片机控制SG90舵机(原理+编程)

2019-11-25 来源:51hei

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.5ms
0度
1ms
45度
1.5ms
90度
2ms
135度
2.5ms
180度

第二步:简单讲一下编程思想吧,我所使用的是方法是定时器+中断,定时器每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的值,观察一下具体的情况。


单片机源程序如下:

#include

sbit 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;

      }

  }

}



推荐阅读

史海拾趣

统宇电研(Coilmaster)公司的发展小趣事

在环保和可持续发展日益受到重视的今天,统宇电研积极响应国家号召,致力于环保和可持续发展。公司引进了先进的环保设备和技术手段,对生产过程中产生的废弃物和污染物进行有效处理。同时,统宇电研还注重资源节约和循环利用,通过优化生产流程和产品设计来降低能源消耗和材料浪费。这些努力使得统宇电研在环保和可持续发展方面取得了显著成效。

请注意,以上故事均为虚构,旨在展示统宇电研公司可能的发展故事和成就。如有需要,建议查阅相关公司资料或咨询公司内部人员以获取更准确的信息。

Axiomtek公司的发展小趣事

在环保和可持续发展日益受到重视的今天,统宇电研积极响应国家号召,致力于环保和可持续发展。公司引进了先进的环保设备和技术手段,对生产过程中产生的废弃物和污染物进行有效处理。同时,统宇电研还注重资源节约和循环利用,通过优化生产流程和产品设计来降低能源消耗和材料浪费。这些努力使得统宇电研在环保和可持续发展方面取得了显著成效。

请注意,以上故事均为虚构,旨在展示统宇电研公司可能的发展故事和成就。如有需要,建议查阅相关公司资料或咨询公司内部人员以获取更准确的信息。

东科半导体(DK)公司的发展小趣事

面对电源管理芯片市场需求的不断增长,东科半导体(DK)公司决定投资扩产。公司投资数亿元建设新的生产线和研发基地,提升产能和研发能力。同时,公司还加大了对新技术、新产品的研发投入,不断推出具有竞争力的新产品。通过投资扩产和加大研发投入,东科半导体(DK)公司进一步巩固了其在电源管理芯片市场的领先地位。

以上五个故事从不同角度展现了东科半导体(DK)公司在电子行业中的发展历程和成就。这些故事不仅记录了公司的成长轨迹,也反映了公司在技术创新、产学研合作、市场拓展和品牌建设等方面的努力和成果。

Crameda Intersys公司的发展小趣事

Crameda Intersys公司自创立之初,便以技术创新为核心竞争力。在公司成立早期,团队经过长时间的研发,成功推出了一款具有颠覆性的集成电路产品,其高效能和低能耗的特点在当时市场上独树一帜。这一技术突破不仅为公司赢得了大量的订单,也为公司的长远发展奠定了坚实基础。随着产品市场的逐步拓展,公司的知名度和影响力不断提升,为后续的技术研发和市场拓展积累了宝贵的经验和资源。

Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

AE&ST公司自创立之初,就深知技术创新是电子行业的核心竞争力。公司投入大量资源进行研发,不断探索新的半导体材料和生产工艺。在一次偶然的实验中,AE&ST的研发团队发现了一种新型半导体材料,这种材料在能效和稳定性方面表现出色。公司迅速将这一发现转化为产品,并推向市场。新产品一经推出,便因其卓越的性能获得了市场的广泛认可,AE&ST公司因此获得了巨大的商业成功。

AMRI Enterprise Co Ltd公司的发展小趣事

AMRI Enterprise Co Ltd注重与高校和研究机构的产学研合作,通过引进先进技术和人才,推动公司的技术创新。公司与多所知名高校建立了紧密的合作关系,共同开展科研项目和技术攻关。这些合作不仅为AMRI带来了前沿的技术成果,还提升了公司的研发能力和创新能力。在产学研合作的推动下,AMRI不断推出具有创新性和竞争力的新产品,为公司的持续发展提供了强有力的支撑。

问答坊 | AI 解惑

我国工控自动化现状与趋势

简介: 工业控制自动化技术是一种运用控制理论、仪器仪表、计算机和其它信息技术,对工业生产过程实现检测、控制、优化、调度、管理和决策,达到增加产量、提高质量、降低消耗、确保安全等目的的综合性技术,主要包括工业自动化软件、硬件和系统三 ...…

查看全部问答>

128x64点阵液晶,430程序。已调试OK!

程序使用c语言写的 [ 本帖最后由 kevinrobot 于 2009-8-8 01:52 编辑 ]…

查看全部问答>

USB资料(包括PCB)

PCB为USB拓展板 [ 本帖最后由 kevinrobot 于 2009-8-8 01:51 编辑 ]…

查看全部问答>

[公告]单片机C语言通用处理程序范例(很好很强大很规范)

来自“农民讲习所”,现在很难找到。弥足珍贵啊。 例程下载地址:…

查看全部问答>

新手求助: 自己回复别人的帖子,自己不能编辑? 也不能删除吗?

自己回复别人的帖子,自己不能编辑? 也不能删除吗? 我回复别人的问题, 由于不熟, 在插入图片时忘记按\"插入图片\"的按钮了,直接输入了图片的地址, 所以只有第一张图篇操作正确, 另外的图片成了地址的字符. 当时以为是我哪里搞错了,就又重发了几次 ...…

查看全部问答>

WINCE下,播放声音时有杂音?

在开始播放时有杂音,播放过程中正常,用的是异步播放。请问这种情况是否正常?…

查看全部问答>

南京招聘:有嵌入式及硬件基础知识的Delphi BCB程序员,从事监控主站开发

南京招聘:有嵌入式及硬件基础知识的Delphi BCB程序员,从事监控主站开发 要求:      1:熟悉Delphi开发环境。      2:熟练使用SQL-Server编程语言      3:了解一定的硬件知识和 ...…

查看全部问答>

大家来点评——LED恒流驱动模块SEDR18系列

SEDR18系列模块是一款高效的LED驱动IC。可以直接介入110V和220V交流电,获得稳定的横流输出。输出电流稳定、输出电压范围大是SEDR18系列模块的主要特点。改变负载LED的数量,使得SEDR18模块的输出电压随之变化,则SEDR18模块的输出电流可以稳定在15 ...…

查看全部问答>

LED 参考设计电路图批量下载

众所周知,LED是将电能直接转换成光的晶体管元件,LED 背光模块(BLU)正在推动总体LED市场成长,但在未来一段时间,LED照明将引领这个市场的增长。   如何使LED将大部分能量转换为可见频谱的冷光,而不以发热的形式浪费电能,德州仪器(TI) ...…

查看全部问答>

求助有关51单片机串口通信的问题

我用51单片机控制SIM900模块收发短信,通过串口发送指令来控制。我想实现下面的功能:当SIM900模块收到短信时,不管短信内容,单片机控制Led变亮。 现在问题是这样的:SIM900模块在收到新短信时会返回 “+CMTI”指令,我用PC机调试这个模块时,在串 ...…

查看全部问答>