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;}
}

PWM开发SG90舵机相关推荐

  1. 【51单片机STC89C52】IO口模拟PWM控制SG90舵机

    一.PWM PWM ,英文名 Pulse Width Modulation ,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编 ...

  2. 盛辉SG90舵机 51单片机PWM控制程序 手机屏幕触控

    前阵子刷手游,一直要点击屏幕,刚好手上有个sg90舵机,就简单做一个触控手机屏幕的小制作. 效果如图: 因为之前没用过舵机,上网搜索了一下,发现文章比较少,参考了这博客,写了个最简单的来回摆角程序. ...

  3. Arduino ESP8266控制SG90舵机输出PWM信号

    1. 什么是舵机: 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素.舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口. 舵机是一种位置(角 ...

  4. 树莓派-10-安装jupyter并控制SG90舵机

    1 开发工具jupyter notebook 1.1 安装jupyter #(1)安装jupyter notebook $ sudo pip3 install jupyter $ sudo pip3 ...

  5. STM32驱动sg90舵机失败

    背景:        十月份参加学校举办的Robomaster校内赛,使用sg90舵机驱动机械臂夹取小球. 遇到问题:        使用STM32单片机的定时器输出PWM来驱动舵机,一直无法使舵机运 ...

  6. arduino舵机达180不到_【拓展教程】教你玩转Stduino之SG90舵机

    大家好 今天小诺给大家介绍的是拓展教程第二篇--SG90舵机 SG90舵机相信大家都很熟悉 毕竟在很多大牛展示的项目里面SG90舵机是必备的一部分 SG90舵机 关键词: 51:stm32:Ardui ...

  7. 树莓派控制多个舵机_树莓派控制SG90舵机

    SG90舵机硬件接口: SG90 一共三根线,红线接5v电源,棕线GND,黄线为数据控制线,接到GPIO上舵机参数: SG90 脉冲周期为20ms,脉宽0.5ms-2.5ms对应的角度-90到+90, ...

  8. 树莓派操控SG90舵机

    目录 舵机接线 PWM介绍 使用PWM控制舵机 这里使用树莓派来操作sg90的舵机.先看一下这个舵机的样子: 这就是传说中的SG90舵机啦,转角是0-180. SG90舵机接线: SG90舵机有三条线 ...

  9. php控制舵机,分享一个关于SG90舵机的实验(+串口控制)

    新手第一次做实验,如果有写的不对的地方,还希望各位大佬多多指导. --------第一次做实验,也发现了自己学习过的东西掌握的不是很好,大佬们有啥入门级别的模块也可以推荐一下,分享当然更好了. --- ...

最新文章

  1. 面向对象分析和设计(OOA/D)
  2. Python3学习笔记(一)简介 、 安装 、 解释器
  3. 字体图标 —— IconMoon
  4. 写程序和做网店的压力都很大
  5. 图标圆角角度_UI设计中图标的规范及原则【附全套视频】
  6. Google CVPR 2019最新成果!用神经架构搜索实现更好的目标检测
  7. 实现编辑商品信息功能
  8. ft2232驱动安装方法_教你win10系统显卡驱动安装失败的解决方法「系统天地」
  9. js原生方式实现bind方法
  10. 手机txt拆分器_TXT文本分割器
  11. 韦东山Linux嵌入式学习——硬件复习
  12. springboot easyexcel 导出excel案例及文件无法打开
  13. Windows映射网络驱动器
  14. 十六进制换算成二进制、八进制、十进制
  15. IDEA开发Springboot时,远程使用企业内部不能连接数据库的解决方法
  16. 双11还没完,商家已经被退货“逼疯”了
  17. 【Leetcode】1335. Minimum Difficulty of a Job Schedule
  18. 解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展
  19. 【软件构造】实验一的心得体会
  20. 学前端要多久?学前端要多久?学前端多少钱

热门文章

  1. nginx安装配置 linux
  2. 数字媒体是以计算机和网络为基础,03-17 数字媒体艺术概论第一章
  3. 技术分享 | 无人机集群——分布式控制算法
  4. word中段落里面的选项“如果定义了文档网格,则对齐到网格”起什么作用?
  5. linux命令发请求,Linux命令发送Http的get或post请求(curl和wget两种方法)
  6. Ubuntu22.04点击.appimage软件不运行
  7. “直接基于成本法”与“模拟权益法”两种合并报表模式比较与分析:响应新准则
  8. JS原生获取class对象(getElementsByClassName)
  9. 【单片机】自学单片机第01天|单片机简介、内部资源、最小系统
  10. 在树莓派3B+上部署Intel NCS2神经网络计算棒