PWM开发SG90舵机

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

1. 简介
PWM,全称:Pulse Width Modulation,脉冲宽度调制缩写,它是通过宽度对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%。
简言之:

  • 脉冲宽度调制
  • 通过占空比编码模拟信号
  • 占空比(一个周期内,高电平占据时长的百分比)
    在这里插入图片描述

2.PWM如何实现信号输出

  • 通过芯片内部模块输出,一般观察手册或者芯片IO口都会标明这个是否是PWM口。如下图增强51,STC15w的CPU
    在这里插入图片描述
  • 若没有集成PWM功能,可以通过IO软件模拟,相对硬件PWM来说精准度略差。

3.舵机介绍
如图所示为sg90舵机,常见的有0-90°、0-180°、0-360°:
在这里插入图片描述

  • 如何控制:
    PWM波的频率大约50HZ,即周期=1/频率=1/50=0.02s=20ms

  • 确定舵机转动角度与PWM值之间的关系
    在这里插入图片描述
    简记为下图:
    在这里插入图片描述
    4.编程实现
    控制舵机每隔2s 0°,90°切换

#include "reg52.h"
sbit sg90_con = p1^1;
int angle;
int cnt=0;
//延时2s,利用STC-ISP软件延时生成
void Delay2000ms()		//@11.0592MHz
{unsigned char i, j, k;i = 15;j = 2;k = 235;do{do{while (--k);} while (--j);} while (--i);
}
void Time0Init()
{	//1.配置定时器0工作模式,16位计时TMOD = 0x01;//2.给初值,定一个0.5ms出来(利用STC-ISP生成)TL0 = 0x33;		//设置定时初值TH0 = 0xFE;		//设置定时初值//3.开始计时TR0 = 1;TF0 = 0//4.打开定时器0中断ET0 = 1//5.打开总中断EAEA  = 1}
//延时300ms
void Delay300ms()		//@11.0592MHz
{unsigned char i, j, k;i = 3;j = 26;k = 223;do{do{while (--k);} while (--j);} while (--i);
}
void main()
{Delay300ms();//让硬件稳定一下angle = 1; //初始角度是0度,0.5ms,溢出1就是0.5,高电平sg90_con = 1;//一开始从高电平开始//每隔2秒切换一次角度while(1){angle = 3; //90° 2ms高电平Delay2000ms();angle = 1;cnt = 0;	Delay2000ms();}
}
void Time0Handler() interrupt 1
{	cnt++; //统计爆表的次数,cnt=1的时候,爆表了1//重新给初值TL0 = 0x33;		//设置定时初值TH0 = 0xFE;		//设置定时初值//控制PWM波if(cnt < angle){sg90_con = 1;}else{sg90_con = 0;}if(cnt == 40){ //爆表40次,经过了20mscnt = 0;   //当40次表示20ms,重新让cnt从0开始,计算下一次的20mssg90_con = 1;}
}

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

相关文章

控制SG90舵机

1. 什么是舵机 如下图所示&#xff0c;最便宜的舵机sg90&#xff0c;常用三根或者四根接线&#xff0c;黄色为PWM信号控制 用处&#xff1a;垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等 常见的有0-90、0-180、0-360 VCC:接电压端 GND:接地端 PWM信号&#…

STM32控制SG90舵机

简介 通过使用STM32控制SG90舵机进行转动 PWM输出&#xff1a;PC6 定时器&#xff1a;TM3&#xff0c;通道1 接线如下&#xff1a; 控制原理及PWM配置 舵机的控制一般需要一个20ms的时基脉冲&#xff0c;该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分 PWM周…

【mcuclub】舵机-SG90

一、实物图&#xff08;SG90&#xff09; 二、原理图 编号名称功能1GND电源地&#xff08;棕色线&#xff09;2VCC电源正&#xff08;红色线&#xff09;3I/O信号线&#xff08;黄色线&#xff09; 三、简介 舵机&#xff08;英文叫Servo&#xff09;&#xff0c;是伺服电机的…

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;、记录锁、间隙锁、临键锁。…