单片机PWM舵机控制
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一、PWM是什么?
- 二、如何控制舵机?
一、PWM是什么?
PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进
行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通
过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的
时间占据整个信号周期的百分比,例如方波的占空比就是50%.
脉冲宽度调制
通过占空比编码模拟信号
占空比 一个周期内,高电平占据时长的百分比
二、如何控制舵机?
1. 什么是舵机
如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制
用处:垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等
常见的有0-90°、0-180°、0-360°
2. 怎么控制舵机
向黄色信号线“灌入”PWM信号,通过控制高电平的时间,来控制舵机的角度
PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右
数据:
0.5ms-------------0度; 2.5% 对应函数中占空比为250
1.0ms------------45度; 5.0% 对应函数中占空比为500
1.5ms------------90度; 7.5% 对应函数中占空比为750
2.0ms-----------135度; 10.0% 对应函数中占空比为1000
2.5ms-----------180度; 12.5% 对应函数中占空比为1250
3、定时器定时
定时器需要定时20ms, 关心的单位0.5ms, 40个的0.5ms,初值0.5ms,定时器看晶振频率。
加1经过了多少时间
当晶振频率(时钟频率)是11.0592MHz的时候,等于11059.2KHz = 11059200Hz
机器周期 = 12 x 时钟周期 =12 x (1/时钟频率) 秒 = 12 / 时钟频率 秒 = 12 / 11059200 秒 = 12 000 000/ 11059200 微秒 = 1.085 微秒
代码如下(示例):
#include <reg52.h>
int jd;
sbit sg90_c = P1^1;
int cnt =0;
void Delay300ms() //@11.0592MHz
{unsigned char i, j, k;i = 3;j = 26;k = 223;do{do{while (--k);} while (--j);} while (--i);
}void Time0init() //定时器0初始化
{//1.配置定时器0工作模式位16位计时TMOD=0x01; //TL0,TH0全用 0 1//2.给初值,定一个10ms出来TL0= 0x33;TH0= 0xFE; //TL0存放低八位00,TH0存放高8位DC//3.开始计时TR0=1;//4.打开定时器0中断ET0=1;//5.打开总中断EAEA=1;
}void main()
{Delay300ms();Time0init();jd =1; //角度为1,即只有一个0.5ms的高电平,为0°cnt = 0;sg90_c = 1; //先让舵机一开始处于高电平//4.爆表了while(1){jd=4; //舵机转135°时,高电平时间是2ms,需要4个0.5mscnt =0;Delay300ms();jd = 1;cnt=0;Delay300ms();}
}//TF0爆表时,硬件自动调用中断函数
void Time0Handler() interrupt 1 //定时器0的中断号
{cnt++;//重新赋初值TL0=0x33;TH0=0xFE;if(cnt<jd) //舵机转135°时,高电平时间是2ms,需要4个0.5ms{sg90_c=1; }else{sg90_c = 0; //一直保持低电平到结束}if(cnt==40) //爆表40次,经过20ms,结束第一次PWM周期,PWM为50HZ{cnt=0; //重新让cnt从0开始,计算下一次的20mssg90_c=1; //每次cnt为0时(即初始状态)处于高电平,等待PWM}}
单片机PWM舵机控制相关推荐
- 【聆思CSK6 视觉AI开发套件试用】头肩、手势识别体验与PWM舵机控制
本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动,更多开发板试用活动请关注极术社区网站.作者:酷电玩家 环境搭建 官方文档详细环境搭建教程:环境搭建 1.下载Git进行安装. 2.安 ...
- 单片机PWM输出控制直流电机(89c51系列、stc12c5a60s2系列)
目录 [pwm是如何控制电机转速] [89C51系列单片机产生pwm波] [STC12C5A60S2系列单片机输出PWM] [pwm是如何控制电机转速] 在本科学习中,学生所做的小车多数为使用lm29 ...
- 英飞凌TC264之PWM舵机控制
1.PWM是由GTM模块产生 通用定时器模块(GTM) 有4个ATOM子模块,每个子模块有8路可独立配置的通道 有3个TIM子模块,每个子模块有8路可独立配置的通道 有2个TOM子模块,每个子模块有1 ...
- 最简单DIY基于蓝牙、51单片机和舵机的钢铁爱国者机关枪控制器
51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 第三篇:最简单DIY蓝牙PS2遥控器控制蓝牙智能小车 第四篇:最简单DI ...
- 舵机控制激光头(51单片机)
舵机控制激光头 介绍 什么是舵机 原理 转动方法 实现方法 编程实例 定义变量类型,管脚 定时器初始化 定时器中断函数 主函数 结尾 介绍 什么是舵机 舵机是一种位置(角度)伺服的驱动器,适用于那些需 ...
- 用STM32CubeMX配置输出PWM信号控制多路舵机(HAL)
1.软件准备 (1)编程平台:Keil5 (2)CubeMX 2.硬件准备 (1)本此使用最小核心板STM32F103C8T6为例 (2)一个舵机:SG90或者MG996等均可 (3)ST-link ...
- STC51单片机38——按键控制舵机连续运动,稳定不抖动
初次按键控制舵机连续运动,舵机可能会抖动,这十有八九是程序时序有些问题. 仿真: //开发板按钮K3和K4,舵机信号线P27 //程序为12m晶振,开发板为11.0592M #include" ...
- 机械臂控制C语言程序,51单片机的6自由度机械臂 16路舵机控制 源码
/*************************************************************************************************** ...
- pwm控制的基本原理_单片机PWM控制基本原理详解~
PWM是Pulse Width Modulation的缩写,它的中文名字是脉冲宽度调制,一种说法是它利用微处理器的数字输出来对模拟电路进行控制的一种有效的技术,其实就是使用数字信号达到一个模拟信号的效 ...
最新文章
- 转载:使用 OpenCV 识别 QRCode
- Linux环境编译安装Mysql以及补装innodb引擎方法
- php strstartwith,PHP8新增的三个字符串函数 str_contains, str_starts_with, str_ends_with
- 《统计学》学习笔记之统计量及其抽样分布
- 转:Delphi2010新发现-类的构造和析构函数功能
- 多个线程对串口读取 modbus_看完这个,如果还不懂Modbus,那您去撞豆腐吧
- 关于Kendo UI 开发教程
- Python学习之路day02——007字典的嵌套
- 百度开源的 71 个炸天项目
- sqlite可视化工具sqliteman的问题
- 《走出软件作坊》51:幽幽一缕香
- 三维动画在计算机上的应用,三维动画运用领域有哪些地方?
- 如何部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程
- 国外的服务器国内可以直连吗,国内服务器和境外服务器有什么区别?
- linux 查找某个程序,Linux查找特定程序whereis实例详解
- ESlint 自动格式化代码 补缺代码 添加空格
- Ironic注册/部署/inspect/clean节点操作记录
- 互联网高级测试工程师至少具备的能力
- 选修课《创新创业执行力》第一次课有感
- 领英暂停国内注册后,有哪些方法可获取账号?
热门文章
- 大数据时代已经来临 分析未来十年发展趋势
- 如何在服务器右下角显示时间,win7 64位右下角怎么显示时间日期与星期?
- Web开发-简单BBS论坛
- 免费ARP(Gratuitous ARP)的介绍
- 数字化转型潮起 金融机构“科技范儿”十足
- FVM in CFD 学习笔记_第15章_流动计算:不可压缩流动_1_交错网格上的SIMPLE算法
- 那年少年时,你在做什么呢
- c语言自动贩卖机设计报告,自动贩卖机电子技术课程设计
- Java初学者作业——实现控制台的猜数字游戏。游戏运行时产生一个1~100之间的随机数字
- 笨方法学Python 习题 42: 对象、类、以及从属关系