【mcuclub】舵机-SG90

article/2025/8/18 23:59:42

一、实物图(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;                           //开定时器

}

流程设计

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


http://chatgpt.dhexx.cn/article/EwmC1ptL.shtml

相关文章

STM32外设系列—sg90(舵机)

文章目录 一、sg90简介二、引脚连接三、控制方法四、程序设计4.1 配置定时器4.2 编写控制程序 五、360舵机 一、sg90简介 首先介绍说一下什么是舵机。舵机是一种位置&#xff08;角度&#xff09;伺服的驱动器。适用于一些需要角度不断变化的&#xff0c;可以保持的控制系统。…

java基本类型与包装类型

基本数据类型&#xff1a;byte&#xff0c;int&#xff0c; short&#xff0c; long&#xff0c; boolean&#xff0c;char&#xff0c; float&#xff0c;double等 包装类型 &#xff1a; Byte&#xff0c;Integer&#xff0c;Short&#xff0c;Long&#xff…

java基本类型与包装类型区别

java基本类型与包装类型区别 Java中基本类型都有固定的存储空间&#xff0c;不像其他大多数语言那样随机器硬件架构的变化而变化&#xff0c;这种占存储空间大小的不变性是java程序比其他大多数语言编写的程序更具可移植性的原因之一。 java中基本类型和包装类的区别&#xff1…

【包装类型】

文章目录 包装类八种基本类型及其包装类手动装箱/拆箱自动装箱/拆箱整数型常量池 Integer方法 包装类 我们已经知道&#xff0c;Java的数据类型分两种&#xff1a; 基本类型&#xff1a;byte&#xff0c;short&#xff0c;int&#xff0c;long&#xff0c;boolean&#xff0c;…

Java为什么要有基本数据类型和包装类型

作为面向对象语言为代表的Java, 在很多任务场景中经常看到它的身影。那么&#xff0c;Java为什么要有基本数据类型和包装类型&#xff1f; 这个问题看似简单&#xff0c;其实也不好回答。毕竟这个问题不仅你我感觉到困惑&#xff0c;许多大佬也感觉到困惑&#xff0c;一些人希望…

基本类型和包装类型的区别详解

六年前&#xff0c;我从苏州回到洛阳&#xff0c;抱着一幅“海归”的心态&#xff0c;投了不少简历&#xff0c;也“约谈”了不少面试官&#xff0c;但仅有两三个令我感到满意。其中有一位叫老马&#xff0c;至今还活在我的手机通讯录里。他当时扔了一个面试题把我砸懵了&#…

Boolean类型(基本与包装类型)

前面的话 当 Number、String、Boolean使用new操作符时&#xff0c;它们就不仅仅是基本类型了&#xff0c;变成了基本的包装类型&#xff0c;即引用类型。Boolean类型应该算是这三种类型中最简单的类型&#xff0c;这篇文章将介绍Boolean类型。 定义 Boolean类型只有两个字面…

34、Java 中有了基本数据类型,为什么还需要有包装类型?包装类型是啥?

文章目录 一、引入&#xff08;基本数据类型弊端&#xff09;二、包装类(1) 模拟包装类的实现(2) 包装类&#xff08;Wrapper Class&#xff09;(3) 自动装箱、自动拆箱① 自动装箱② 自动拆箱 三、整数类型包装类细节 ☆ 一、引入&#xff08;基本数据类型弊端&#xff09; &…

包装类和基本类型

什么是包装类 所谓包装类&#xff0c;就是能够直接将简单类型的变量表示为一个类&#xff0c;在执行变量类型的相互转换时&#xff0c;我们会大量使用这些包装类。 包装类 包装类有以下用途 1.集合不允许存放基本数据类型&#xff0c;故常用包装类 2.包含了每种基本类型的相…

包装类型和基本类型

包装类型和基本类型 Java中有八种基本数据类型&#xff0c;分别对应着八大包装类型&#xff0c;因为包装类型的实例都存在于堆中&#xff0c;所以包装类型也称为引用类型。 基本类型属于原始数据类型&#xff0c;变量中存储的就是原始值。包装类型属于引用数据类型&#xff0…

Java 的八大基本类型及其包装类型(超级详细)

Java 中有八种内置的基本数据类型&#xff0c;他们分别是 byte、short、int、long、float、double、char 和 boolean&#xff0c;其中&#xff0c;byte、short、int 和 long 都是用来表示整数&#xff0c;float 和 double 是用来表示浮点数的&#xff0c;那它们之间有什么区别和…

Java 八大包装类(超详细!)

一、8种基本数据类型对应的包装类型名 基本数据类型包装类型bytejava.lang.Byte&#xff08;父类Number&#xff09;shortjava.lang.Short&#xff08;父类Number&#xff09;intjava.lang.Integer&#xff08;父类Number&#xff09;longjava.lang.Long&#xff08;父类Numbe…

关于InnoDB的读写锁类型以及加锁方式

&#xff08;本文为了方便&#xff0c;英文关键词都都采用小写方式&#xff0c;相关知识点会简单介绍&#xff0c;争取做到可以独立阅读&#xff09; 文章开始我会先介绍本文需要的知识点如下&#xff1a; innodb的主键索引&#xff08;一级索引&#xff09;和二级索引&#x…

C++线程中的几类锁

C线程中的几类锁 多线程中的锁主要有五类&#xff1a;互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言&#xff0c;所得功能与性能成反比。而且我们一般不使用递归锁&#xff08;C提供std::recursive_mutex&#xff09;&#xff0c;这里不做介绍。 互斥锁 互斥锁用于控制多…

Oracle - 锁

锁概念 锁出现在数据共享的环境中&#xff0c;它是一种机制&#xff0c;在访问相同资源时&#xff0c;可以防止事务之间的破坏性交互。例如&#xff0c;在多个会话同时操作某表时&#xff0c;优先操作的会话需要对其锁定。 事务的分离性要求当前事务不能影响其他的事务&#…

用友数据库错误“未能读取并闩锁页(1:3355)(用闩锁类型SH)”修复

客户硬盘无法识别&#xff0c;检测后&#xff0c;硬盘有坏道&#xff0c;由于数据库正在坏道上&#xff0c;所以恢复出来的用友数据库无法附加。 通过无日志附加后&#xff0c;做DBCC检测数据库出现以下错误&#xff1a; “消息8966&#xff0c;级别16&#xff0c;状态1&#x…

Mysql中锁的类型有哪些?

Mysql中锁的类型有哪些&#xff1f; 1. 基于锁的属性分类&#xff1a;共享锁、排他锁2. 基于锁的粒度分类&#xff1a;行级锁&#xff08;INNODB&#xff09;、表级锁&#xff08;INNODB、MYISAM&#xff09;、页级锁&#xff08;BDB引擎&#xff09;、记录锁、间隙锁、临键锁。…

mysql 常见锁的类型(一)

文章目录 一、锁的分类1.1 加锁的目的1.2 锁的类别 二、乐观锁和悲观锁2.1. 乐观锁2.2. 悲观锁&#xff1a; 三、共享锁与排他锁四、表锁五、意向锁六、行级锁七、记录锁&#xff08;Record Locks&#xff09;八、间隙锁&#xff08;Gap Locks&#xff09;九、临键锁&#xff0…

MySQL-InnoDB常用锁类型解析

Shared&#xff08;乐观锁&#xff09; and Exclusive Locks&#xff08;互斥锁&#xff09;&#xff1a; InnoDB有两种锁类型&#xff0c;Shared&#xff08;s&#xff09; and Exclusive&#xff08;x&#xff09; Locks&#xff08;乐观锁和互斥锁&#xff09;。 Shared&…

MySql InnoDB锁类型

MySql InnoDB锁类型 从类型上来分类&#xff0c;InnoDB存储引擎实现了两种标准的锁 共享锁(S-Lock)&#xff1a;允许事务读一行数据 排它锁(X-Lock)&#xff1a;允许事务删除或者更新一行数据 如果一个事务获取了S锁&#xff0c;那么其他事务也可以立即获得S锁&#xff0c;…