• 【mcuclub】舵机-SG90


    一、实物图(SG90)

    二、原理图

    编号名称功能
    1GND电源地(棕色线)
    2VCC电源正(红色线)
    3I/O信号线(黄色线)

    三、简介

    舵机(英文叫Servo),是伺服电机的一种,伺服电机就是带有反馈环节的电机,这种电机可以进行精确的位置控制或者输出较高的扭矩。舵机也叫RC伺服器,通常用于机器人、遥控汽车,飞机航模等。类似舵机这样的伺服系统通常由小型电动机,电位计,嵌入式控制系统和变速箱组成。电机输出轴的位置由内部电位计不断采样测量,并与微控制器(例如STM32,Arduino)设置的目标位置进行比较;根据相应的偏差,控制设备会调整电机输出轴的实际位置,使其与目标位置匹配,这样就形成了闭环控制系统。

    四、内部结构

    ①:信号线:接收来自微控制器的控制信号;

    ②:电位器:可以测量输出轴的位置量,属于整个伺服机构的反馈部分;

    ③:内部控制器:处理来自外部控制的信号,驱动电机以及处理反馈的位置信号,是整个伺服机构的核心;

    ④:电机:作为执行机构,输出多少转速,转矩,位置;

    ⑤:传动机构/舵机系统:该机构根据一定传动比,将电机输出的行程缩放到最终输出的角度上;

    五、工作原理

    舵机内部有一个基准电路,产生周期为20ms、宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。经过电路板IC方向判断,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到位。

    舵机转动的角度是通过调节PWM信号的占空比来实现的。标准的PWM信号的周期固定为20ms,理论上脉宽分布应该在1ms到2ms之间,实际上在0.5ms到2.5ms之间,脉宽与转角0°——180°相对应。不同厂家不同型号的舵机也会有所差异。

    六、程序

    /**********************************

    变量定义

    **********************************/

    uint servo_pwm = 4;              //舵机pwm值

    /**********************************

    函数定义

    **********************************/

    /****

    *******定时器0初使化函数

    *****/

    void Timer0_Init(void)

    {

       TMOD &= 0xF0;                 //清除 T0 的工作模式

       TMOD |= 0x01;                 //配置 T0 的GATE=0;C/T=0; M1=0; M0=1;(模式1(16位))

       TH0 = (65536-92)/256;         //配置 T0 高8位计数初始值

       TL0 = (65536-92)%256;         //配置 T0 低8位计数初始值

       TR0 = 1;                     //启动 T0

       ET0 = 1;                      //启动 T0 中断

       EA = 1;                      //打开总中断

    }

    /****

    *******T0计时中断函数

    *****/

    void Timer0_Handler(void) interrupt 1

    {

       static uint timer0_count;

       TR0 = 0;                            //关定时器

       TH0 = (65535-92)/256;               //重新赋初值

       TL0 = (65535-92)%256;

       timer0_count++;

       if(timer0_count >= 200)    //定义一个周期,T = 20ms清零

       {

          timer0_count = 0;

       }

       if(timer0_count < servo_pwm)        //调节占空比

       {

          SERVO = 1;

       }

       else

       {

          SERVO = 0;

       }

       TR0 = 1;                           //开定时器

    }

    流程设计

    首先初始化引脚,然后初始化定时器,在定时器中断函数中定义一个周期,调节周期内高电平的占空比,从而调整角度。

  • 相关阅读:
    Ubuntu 22.04 安装配置 flatpak
    android插件开发
    Spring Cloud Alibaba+saas企业架构技术选型+架构全景业务图 + 架构典型部署方案
    【操作系统-线程池】Pthread 线程池的设计及实现
    MySQL | 事务隔离级别详解和实现原理
    Spark入门介绍
    python 列表常用方法
    苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理?
    Python正则表达式保姆式教学,带你精通大名鼎鼎的正则!
    RFID智能制造应用:助力企业提升制造效率!
  • 原文地址:https://blog.csdn.net/weixin_61121477/article/details/127762946