C51单片机定时器2实现SG90舵机控制

这篇具有很好参考价值的文章主要介绍了C51单片机定时器2实现SG90舵机控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

谈起舵机最初的了解应用于航模,偶然的机会在网上看到有牛人使用多个舵机做人形机器人的关节,感觉这小东西很有趣,蒙发了买来学习学习的想法,这已经是多年前的事了,后来由于某些原因,这个想法直到今年才落地。小东西到手后,把玩了解后,本人把学习过程记录下来,分享出来,由于本人水平有限,疏漏难免。

一、知识链接:

1、SG90舵机简介:

C51单片机定时器2实现SG90舵机控制

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。

SG90 舵机技术参数: 

产品名称

SG90 9g 塑料齿数字舵机

产品净重

9g

产品尺寸

23*12.2*29mm

产品扭矩

1.5kg/cm

反应速度

0.3sec/60degree

工作电压

4.2V-6V

使用温度

0-55

动作死区

10us

齿轮介质

塑料

工作模式

模拟

2、电路接口:

C51单片机定时器2实现SG90舵机控制

  1. 棕色:GND,2、红色:+5V,3、橙色:脉冲输入端

3、工作原理:

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
 

C51单片机定时器2实现SG90舵机控制

  舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。

4、控制原理:

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:

   0.5ms--------------0度;

   1.0ms------------45度;

   1.5ms------------90度;

   2.0ms-----------135度;

   2.5ms-----------180度;

请看下形象描述吧:

C51单片机定时器2实现SG90舵机控制

二、编程控制:

1、硬件的连接:(如下图)

C51单片机定时器2实现SG90舵机控制

2、控制要求:

   1)系统上电:按下KEY1开始工作,舵机快速回0度。

   2)工常工作:舵机从0度出发以0.5s每45度的速由左向右运动,直到180度后,从180度出发以0.5s每45度的速由右向左运动,直到0度后,往复运动。

   3)当再次按下KEY1暂停。

   4)再次按下KEY1后继续往复运动。

3、实现代码:

  #include "reg52.h"

/* define SFR */

sfr T2MOD = 0xc9;                   //timer2 mode register

sbit out = P0^0;                     //Clock Output pin

sbit KEY3=P3^2;//控制循环

unsigned char count,flag,flag1,flag2;

unsigned int count1,count2;

void DelayUs2x(unsigned char t)

{  

 while(--t);

}

void DelayMs(unsigned char t)

{

    

 while(t--)

 {

     //大致延时1mS

     DelayUs2x(245);

    DelayUs2x(245);

 }

}

//舵机的控制,需要一个20ms的时基脉冲,控制高电平时间为0.5ms~2.5ms范围内即可控制舵机在0 ~ 180°转动。

//

//t=0.5ms---------------舵机转动到0°   flag=5

//t=1.0ms---------------舵机转动到45°    flag=10

//t=1.5ms---------------舵机转动到90°    flag=15

//t=2.0ms---------------舵机转动到135°    flag=20

//t=2.5ms---------------舵机转动到180°    flag=25

void Timer2Init(void)    //100微秒@11.0592MHz

{

   T2MOD = 0x00;    //初始化模式寄存器

   T2CON = 0x00;    //初始化控制寄存器

   TL2 = 0xA4;   //设置定时初始值

   TH2 = 0xFF;   //设置定时初始值

   RCAP2L = 0xA4;      //设置定时重载值

   RCAP2H = 0xFF;      //设置定时重载值

   //TR2 = 1;    //定时器2开始计时

   ET2=1;

   EA=1;

   count=0;

   flag=5;//初始位置

   flag1=0;

   flag2=1;

   count1=0;

}

void main()

{

   Timer2Init();

   while(1)

   {

       if(KEY3==0)

       {

      DelayMs(20);

        if(KEY3==0)

        {

        while(KEY3==0);

        TR2 = 1;

        flag1=!flag1;

        }

      }

     }

     

//输入程序代码

}

void t2_isr() interrupt 5 using 1

{

   TF2=0;

   count++;

   count1++;

   if(count>=flag)

   {

   count=0;

    out=~out;

   }

   if(count1>=1000)

   {

   count1=0;

   count2++;

   if(count2>=5)

   {

      count2=0;

      if(flag>=25) flag2=0;

      if(flag<=5) flag2=1; 

      if(flag2==0&&flag1)flag-=5;

      if(flag2==1&&flag1)flag+=5;

      //flag+=5;

   }

   }

}

4、运行效果:

舵机控制文章来源地址https://www.toymoban.com/news/detail-423719.html

到了这里,关于C51单片机定时器2实现SG90舵机控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C51单片机——通过使用定时器控制LED闪灭

    目录 0 引言 1 定时的原理 1.1 生活中的定时 1.2单片机中的定时器 2 C语言程序设计 2.1 定时器的内部功能 2.2 设置寄存器 2.3 实验程序 3 有两个小问题(算是延伸吧) 3.1 只能0.05s闪一次吗? 3.2 每次都要在草稿纸手算初始值好麻烦

    2024年02月06日
    浏览(73)
  • 51单片机-定时器(简易时钟的实现)

    最近在学习51单片机,学到了 定时器 这块,由于自己的基础不太扎实,在这方面花了很多时间,这里通过对定时器和中断的介绍,用 简易时钟 这个例子来对学习的内容进行加深巩固,把自己的经验分享给大家,希望对大家能够有帮助。 其实就是单片机的内部,通过系统时钟

    2024年02月03日
    浏览(68)
  • 51单片机入门 - 详解定时器实现按键控制流水灯方向

    操作系统:Windows 10 x84-64 单片机:STC89C52RC 编译器:SDCC 烧录软件:stcgal 1.6 开发板:普中51单片机开发板A2套件(2022) 在 VS Code 中新建项目到烧录的过程: 左侧EIDE图标 - 新建项目 - 空项目 - 8位MCU项目 - 保存文件夹。 更改构建配置: SDCC ;更改烧录配置: stcgal 。 在项目文件

    2024年02月06日
    浏览(47)
  • 51单片机定时器

    目录 前言 一、定时器的介绍及其作用 二、定时器的内部构造及其原理 计算机周期 定时器的工作模式与流程 定时器中断相关寄存器 寄存器的配置  三、程序 总结         下面来介绍学习51单片机第一个也是最常用的片上外设——定时器。该硬件是集成在单片机内部的,

    2024年02月05日
    浏览(57)
  • 51单片机定时器/计数器(定时器中断)

    实现功能 通过定时器终端控制LED灯 D1 间隔一秒闪烁 单片机型号:STC89C52 定时器介绍 1、51单片机定时器原理 定时器实质上就是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到定数器满时,再输入一个脉冲就使定时器回零

    2024年02月06日
    浏览(57)
  • 51单片机(七)定时器

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月07日
    浏览(56)
  • 51单片机——定时器中断

    新版51单片机内部有 3 个16位可编程的定时器/计数器,即定时器 T0,T1,T2 。他们既有 定时 功能又有 计数 功能,我们可以通过配置与它们相关的特殊功能寄存器可以选择启用定时功能或计数功能;其中需要注意的是,这个定时器系统是单片机内部的一个独立的硬件部分,它与

    2023年04月10日
    浏览(44)
  • 51单片机定时器实验(汇编)

    基于AT89C51的定时器实验,汇编语言,分享出来是希望各位能共同学习。附上注释希望能认真研究,若有错误请指出,谢谢。 一、实验目的 掌握单片机定时器的使用方法。 掌握中断的使用方法。 二、实验内容 采用中断方式控制定时器。使得单片机P1.0引脚产生周期为1S的方波

    2024年02月11日
    浏览(59)
  • 51单片机之定时器篇

    首先,学好单片机必须要搞懂定时器,定时器是单片机重要的组成部分之一,总之,学不好定时器,单片机相当于没学,下面就让我介绍如何学好单片机定时器。 学习单片机首先要明白的: 1,51单片机有两组定时器/计数器,既可以定时,又可以计数,总称之定时器 2,单片

    2024年02月11日
    浏览(54)
  • 51单片机 | 定时器中断实验

      这一节介绍51单片机的定时器中断。 STC89C5X 含有 3 个定时器:定时器 0、定时器 1、定时器 2(注意: 51 系列单片机一定有基本的 2 个定时器(定时器 0 和定时器 1),但不全有 3 个中断,需要查看芯片手册,通常我们使用的是基本的 2 个定时器:定时器 0/1)。本节要实现

    2024年02月06日
    浏览(111)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包