历史上的今天
返回首页

历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2019年10月17日 | 浅谈用单片机控制SG90舵机

2019-10-17 来源: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;

      }

  }

}


推荐阅读

史海拾趣

GSME Electronics公司的发展小趣事

在半导体行业,技术创新是企业持续发展的关键。GSME Electronics深知这一点,不断加大研发投入,提升公司的研发实力。公司拥有一支朝气蓬勃的高素质员工团队,他们致力于新产品的开发和旧产品的升级换代。通过不断的技术创新和研发努力,GSME Electronics在半导体器件领域取得了多项技术突破,为公司的发展注入了新的动力。

Caliber公司的发展小趣事

人才是企业发展的根本。Caliber公司深知这一点,始终将人才培养作为企业发展的重中之重。公司建立了完善的人才培养机制,通过内部培训、外部引进等多种方式,不断提升员工的技能水平和综合素质。同时,Caliber还注重营造积极向上的企业文化氛围,激发员工的创新精神和团队合作精神。这些举措为公司的长远发展提供了有力的人才保障。

以上便是关于Caliber公司在电子行业中发展起来的五个故事。这些故事虽然基于虚构,但所描述的内容都是基于电子行业的一般发展规律和趋势进行合理推测和构建的。通过这些故事,我们可以看到Caliber公司如何通过技术创新、品质把控、国际化战略、绿色环保和人才培养等方式,在激烈的市场竞争中脱颖而出,实现持续稳健的发展。

DREMEL公司的发展小趣事

在电子行业的快速发展中,Dremio公司以其独特的数据治理技术崭露头角。他们开发了一种新型的数据处理引擎,能够直接在云数据湖中查询和分析数据,无需将数据复制到专有数据仓库中。这一创新技术大大提高了数据处理效率,降低了成本,并为企业提供了更灵活的数据管理方式。Dremio凭借这一技术,迅速在电子行业中树立了领先地位。

振宝佳(DMBJ)公司的发展小趣事

随着大陆市场化程度的加深和基础设施的完善,振宝佳公司看到了大陆市场的巨大潜力。为了更好地服务大陆客户,公司于2005年做出了重大战略转移,将总部迁移到塘厦。这一决策不仅使公司能够更贴近市场,也为其后续的发展奠定了坚实的基础。

DC Components公司的发展小趣事

为了进一步扩大市场份额,DC Components公司积极开拓国际市场。公司通过与全球客户的合作,将产品出口到多个国家和地区,实现了全球化布局。这种市场拓展策略不仅提升了公司的品牌影响力,还为公司的未来发展打开了更广阔的空间。

Aplus Flash Technology Inc公司的发展小趣事

随着电子行业的快速发展,Aplus Flash Technology Inc公司意识到单凭自身的力量难以应对市场的快速变化。于是,公司积极寻求与其他企业的战略合作,共同开发新产品、拓展新市场。通过与一家知名手机制造商的合作,Aplus Flash Technology Inc公司的闪存芯片成功应用于多款热销手机中,大大提高了公司的知名度和市场份额。此外,公司还与多家芯片设计公司和半导体制造商建立了紧密的合作关系,共同推动电子行业的发展。

问答坊 | AI 解惑

2007年全国大学生电子设计竞赛 讨论专用帖(附加了几道与公布器件相关的题目、附加

本帖最后由 paulhyde 于 2014-9-15 08:57 编辑 2007年全国大学生电子设计竞赛马上拉开帷幕根据清单可以猜测很多题目。有需要的话大家踊跃讨论。附2007年全国赛元件清单: 1、基本仪器清单 20MHz普通示波器(双通道,外触发输入,有X轴输入,可选 ...…

查看全部问答>

模拟技术是一门手艺

模拟技术是一门手艺,硬件工程师的功力全在画印制板上,就像厨师的功力全在火候上一样。电原理图就像菜谱,网上随处可找到。我们看了菜谱,但炒出的菜和厨师不一样,但菜的名字是一样的。我们可以在网上、杂志中找到各种原理图,按照原理图画出印制 ...…

查看全部问答>

博客大赛要开始啦!

各位论坛上的朋友们:         看着eeworld论坛上的工程师圈子不断扩大,不断提升,我们心里甚是欢喜~ 借此,我们也想趁着热乎气儿,举办一次规模庞大,专业性强的博客大赛,希望大家多多参与哦。现在这个活动正在 ...…

查看全部问答>

ThinkPad玩high了 联想将推彩色版上网本

ThinkPad要出上网本的消息已成板上钉钉的事实,今日曝光的产品外观、配置等资料已表明此产品正在有条不紊的进行中。从此次爆出的详细消息看,ThinkPad X100e上网本并不是只有黑白两款颜色,还包含了另外一款红色外观的产品,当然硬件配置是相同的。 ...…

查看全部问答>

新手求助。。。MSP430单片机控制液晶显示

如何用单片机控制液晶显示器? 我用的是MSP430f149单片机,现在需要在这块板子上编码,去控制液晶显示器显示东西。 请问前辈们给点思路,该怎么做? 我不知道从何处下手。。。谢谢了…

查看全部问答>

lm3s101 gpio口互连的问题

情况是这样的,我用pa0发送周期为100us的方波信号,用pa1接收,中间连接一个39k的电阻,为什么用示波器检测到的信号低电平被拉高了 0.68v,高电平仍然是3.几v,而不连接pa1的话低电平还是0,不会被拉高。这个是为什么,求解答啊,我想要的是不被拉 ...…

查看全部问答>

无线视频传输

最近想搞一下无线传输,想无线传输视频信号,不过还没涉及过这一方面,听听大家的意见,用个什么片子好呢,,,,24L01?我看看大家都在用什么片子呢…

查看全部问答>

本版最近没什么人气啊,国赛将至

本帖最后由 paulhyde 于 2014-9-15 09:15 编辑 本版最近没什么人气啊,国赛将至  …

查看全部问答>

给你写的launchpad430--TIMER--系列1

技术说明 如图所示。。。在使用定时器之前,我们首先应该清楚我们将用这个定时器干什么,430的定时器功能比较丰富, 有定时、比较、捕获。 定时很好理解,就是设定好输入时钟以及计数个数后,定时器就会在输入时钟周期个数达到设定个数后发生中 ...…

查看全部问答>

全球首创内置三级管的非隔离LED恒流驱动QX6102/20W

概述 QX6102是一款内置NPN功率三极管,具有自供电功能的高精度降压型大功率LED恒流驱动芯片,适用于交流85V到265V全范围输入电压的非隔离LED恒流驱动电源。芯片采用自供电结构,无需辅助绕组,内置NPN三极管,提供高性价比。专利的高端电流检测、 ...…

查看全部问答>