当前位置:网站首页>(十五)51单片机——呼吸灯与直流电机调速(PWM)
(十五)51单片机——呼吸灯与直流电机调速(PWM)
2022-08-03 05:57:00 【Meursault639】
目录
学习目标
今天我们的学习目标就是实现一个简单的呼吸灯,之后再用PWM实现直流电机的调速功能,驱动我们的电机,制造一个可以调速的小电风扇。
成果展示
呼吸灯
直流电机
引言
首先,我们要解决一个问题,就是我们如何去调节LED灯的亮度?第一时间想到的肯定是调电压,只要电压低,亮度不久下来了吗?确实是这样的,但是在单片机中调节电压不现实,所以我们采用让灯亮一下,灭一会,我们通过控制供电的时间,来达到控制LED灯的亮度。其实PWM也是这样类似的思想,那我们从控制灯的亮度开始,来慢慢理解PWM的工作原理吧!
代码
#include <REGX52.H>
sbit LED = P2^0;
void Delay(unsigned int t)
{
while(t--);
}
void main(){
unsigned int Time,i;
while(1){
for(Time = 0; Time < 100; Time++){//改变亮灭时间,由暗到亮
for(i = 0; i < 20; i++){//计次延时
LED = 0;//LED亮
Delay(Time); //延时Time
LED = 1;//LED灭
Delay(100 - Time);//延时100-Time
}
}
for(Time = 100; Time > 0; Time--){//改变亮灭时间,由亮到暗
for(i = 0; i < 20; i++){
LED = 0;
Delay(Time);
LED = 1;
Delay(100 - Time);
}
}
}
}
运行结果如上所示,起到了控制LED灯亮度的功能。
硬件知识
介绍
- 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转
- 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成
- 除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等
驱动电路
大功率器件直接驱动
ULN2003D在我们之前介绍过,后面那个相当三极管,起到放大电路的作用,下面的二极管起到保护电路的作用,因为电机可能感应出来比较大电压,从而烧坏电路,
H桥驱动
就是通过导通Q1、Q4形成正向电流或者Q2、Q3形成反向电流,但就是需要确保反向电流不会损坏电路。
PWM介绍
- PWM(Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域
- PWM重要参数:
频率 = 1 / TS 占空比 = TON / TS 精度 = 占空比变化步距
其实就是通过不断给电压,不给电压,来调节频率,和之前的呼吸灯类似。
产生PWM
模型结构
波形
其实核心原理还是一样的,只不过我们使用定时器来实现PWM。我们结合我们的代码来理解要好一点。
代码
#include "Nixie.h"
#include "Time0.h"
sbit Motor = P1^0;
unsigned char Counter,Compare;//计数值和比较值,用于输出PWM
unsigned char KeyNum,Speed;
void main(){
Timer0_Init();
Compare = 4;
while(1){
KeyNum = Key();
if(KeyNum == 1){
Speed++;
Speed %= 4;
if(Speed==0){Compare=0;} //设置比较值,改变PWM占空比
if(Speed==1){Compare=45;}
if(Speed==2){Compare=70;}
if(Speed==3){Compare=90;}
}
Nixie(1,Speed);
}
}
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count;
TL0 = 0xAD; //设置定时初始值
TH0 = 0xFF;
Counter++;
Counter%=90;
if(Counter < Compare){
Motor = 1;
}else
Motor = 0;
}
总结
总体来说本节知识不难,希望对大家有所帮助,如果有错误也希望能及时指出,谢谢大家。
边栏推荐
猜你喜欢
人脸检测和识别--face recognition包
MySQL 流程控制
MySQL的Replace用法详解
ES6 - 剩余参数,Array的扩展方法,String的扩展方法
QT信号与槽
ClickHouse删除数据之delete问题详解
Umi 4 快速搭建项目
MySql之json_extract函数处理json字段
el-tree设置利用setCheckedNodessetCheckedKeys默认勾选节点,以及通过setChecked新增勾选指定节点
El - table column filter functions, control columns show and hide (effect and easy to implement full marks)
随机推荐
Embedding two implementations of the torch code
PHP 获取服务器信息
置顶文章-
pyspark---低频特征处理
docker-compose部署mysql
ISIJ 2022收官,中国初中生再展风采
Getting Started with Chrome Plugin Development
mysql 时间字段默认设置为当前时间
pyspark---对suuid区间编码(基于曝光数、点击数)
UniApp 获取当前页面标题(navigationBarTitleText)
力扣解法汇总622-设计循环队列
el-tree设置选中高亮焦点高亮、选中的节点加深背景,更改字体颜色等
Charles抓包显示<unknown>解决方案
torch.nn.modules.activation.ReLU is not a Module subclass
cookie和session区别
volatile
html+css+php+mysql实现注册+登录+修改密码(附完整代码)
5 个开源的 Rust Web 开发框架,你选择哪个?
商业智能BI业务分析思维:供应链分析 – 如何控制牛鞭效应(二)
MySQL 日期时间类型精确到毫秒