基于51单片机让SG90舵机动起来
外观:
接线方法:
棕色----------------GND
红色----------------VCC
橙色----------------信号线
原理:
舵机内部有一个基准电压,微处理器产生的PWM信号通过信号线进入舵机产生直流偏置电压,与舵机内部的基准电压作比较,获得电压差输出。电压差的正负输出到电机驱动芯片上,从而决定正反转。当舵机开始旋转的时候,舵机内部通过级联减速齿轮带动电位器旋转,使得电压差为零,电机停止转动。
怎么样才能让舵机动起来呢? 既然舵机是靠脉冲驱动的,那我们给舵机一定的脉冲就能够让它动起来。 有一个时间周期(20ms),如果高电平占1ms,低电平占19ms,那么占空比就是5%,这里有舵机旋转所需的占比(以180°舵机为例):
0.5ms |
0度 |
1ms |
45度 |
1.5ms |
90度 |
2ms |
135度 |
2.5ms |
180度 |
由次可以知道,高电平占空比越大,舵机旋转角度越大,记住舵机有最大角度限制,占空比最大不能大过可旋转角度所需占空比,不然舵机转不过去,卡在那里,对舵机的寿命也有一定影响。
软件设计:
我们知道想让舵机转动,必须给舵机一个脉冲,脉冲说白了就是高低电平,高低电平的占比不同,转的角度也就不同。
这里使用51的定时器,每过0.1ms计时一次,20ms为一个周期,同时定义一个变量,一个常量,将二者进行比较即可。
程序:
//实际上想让舵机转到指定角度,是需要自己实验的,每个舵机都不一样,原理是参考的。
#include <reg52.h>sbit SEV_PWM = P1^7; //设定PWM输出的I/O端口,有个引脚输出unsigned char count = 0; //比较值
unsigned char SEV_conut=9; //pwm控制值/*延时程序*/
void Delay(unsigned int s)
{unsigned int i;for(i=0; i<s; i++);for(i=0; i<s; i++);
}/*定时器T0初始化*/
void Com_Init()
{TMOD |= 0x01; //定时器T0设置成方式1TH0 = 0xff; //定时常数 0.1ms 晶振为11.0592MHzTL0 = 0xa4;ET0 = 1; //中断标志 TR0 = 1; //定时器开关EA=1; //总开关
}/*T0中断初始化*/
void Time0_Init() interrupt 1
{TR0 = 0; //定时器开关TH0 = 0xff; //重装时间常数 0.1msTL0 = 0xa4;count++; //比较值,很关键if(count <= SEV_conut) //5==0° 10==90°{ SEV_PWM = 1; //高电平}else { SEV_PWM = 0; //低电平}if (count >= 200) //T = 20ms清零 20ms为周期,重新开始{ count = 0; }TR0 = 1; //开启T0
}void main()
{Com_Init(); //中断初始化,打开定时器while(1){ SEV_conut=9; count=0; //重新赋值,重新比较Delay(50000); //延时是为了留一些时间给舵机反映。SEV_conut=2;count=0;Delay(50000);SEV_conut=17;count=0;Delay(50000);}
}
总结:
控制舵机其实就是控制输出PWM,而PWM的输出就需要配置51单片机的定时器,总的来说还是要对51单片机的定时器熟悉。
基于51单片机让SG90舵机动起来相关推荐
- 51单片机控制SG90舵机、MG90S舵机
舵机的控制信号为周期是20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化.也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应 ...
- 51单片机控制sg90舵机
1.PWM PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就 ...
- 基于51单片机的超声波避障小车(HC-SR04,SG90舵机)
+ 一.HC-SR04超声波模块 二.SG90舵机 三.总程序编写 一.HC-SR04超声波模块 HC-SR04时序图 触发信号输入端(Trig)输入一个10微秒以上的高电平信号,超声发送口收到信号自 ...
- 最简单DIY基于51单片机的舵机控制器
51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 第三篇:最简单DIY蓝牙PS2遥控器控制蓝牙智能小车 第四篇:最简单DI ...
- (含代码)基于51单片机的红外遥控(独立按键)舵机开关灯控制
硬件说明: 采用STC89C51作为主控芯片,结合SG90舵机模块,红外遥控(独立按键),等电路模块实现远程控制舵机. 应用实例: 在不改变外部电路的情况下,实现远程开灯,关灯. 远程控制机器开关状态 ...
- 最简单DIY基于51单片机、PCA9685、IIC、云台的舵机集群控制程序
51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 第三篇:最简单DIY蓝牙PS2遥控器控制蓝牙智能小车 第四篇:最简单DI ...
- 基于51单片机密码锁-舵机开锁-CXM
这个项目的起因还是因为每次进出寝室十分的麻烦才有了这个项目 所以我和我的铁子就决定搞个密码锁 我负责软件我的铁子负责硬件 目录 原理图 主要功能函数讲解 硬件 先简单介绍一下整个架构 原理图 主要功能 ...
- 基于51单片机智能小车(超声波+舵机)
基于stc89c52单片机避障+舵机两驱三轮智能小车 前期准备:学会使用Keil4,学好51单片机基本知识,学会控制IO的输入与输出,内容学到外部中断,定时器,(串口通信,可以实现蓝牙控制) 准备材料 ...
- 基于51单片机的简易雷达定位装置
简易超声波雷达 任务: 一. 摘要: 超声波测距广泛运用于各类电子产品精确距离测量,如汽车尾部的倒车雷达对倒车时的障碍物进行精确判断,反馈到驾驶员,使驾驶员能做出准确的判断和操作:各类航模中当即将触地 ...
最新文章
- Podman中如何运行一个 Linux 虚拟机?
- qt dll 1% 不是有效的win32应用程序
- MFC中进度条控件的使用方法
- Javaweb学习笔记——(二十二)——————文件上传、下载、Javamail
- 云服务器的IT价值与部署分析
- HALCON 21.11:深度学习笔记---分类(10)
- vc java动态库_Java调用已经写好的VC++动态链接库
- Springboot使用Filter以及踩过的坑
- 张俊芳电机学18章计算题以及答案
- python网易云_使用Python实现下载网易云音乐的高清MV
- 运算放大器分析----虚短和虚断简单计算
- java计算机毕业设计ssm拼团旅游系统element 前后端分离
- 程序员与黑客的故事 程序员应有的工作素质
- 2022-05微软漏洞通告
- NR TAC Tracking Area Code
- python3是什么意思啊_python3指的是什么意思
- 测评Mimick模型对词向量重构效果
- 【转载】让盐和味精告诉你,「变量」是什么 | 亲子课堂 第 4 课
- html5 canvas绘制圆形印章,以及与页面交互
- C语言学习2:Hello World!详解