51单片机(十五)直流电机驱动(PWM)

news2024/11/26 10:03:36

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习51单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

单片机安装软件、各种资料以及源码的路径:
https://pan.baidu.com/s/1vDTN2o8ffvczzNQGfyjHng
提取码:gdzf

本节主要介绍学习直流电机驱动(PWM)的相关知识,包括直流电机驱动(PWM)介绍、本节目标等;并利用两个小实验来写程序进行练习,分别是LED呼吸灯以及 直流电机调速,最后附上相关代码。

文章目录

  • 一、直流电机驱动(PWM)和本节目标
    • 1.1 直流电机驱动(PWM)基础知识
    • 1.2 本节目标
  • 二、LED呼吸灯
  • 二、直流电机调速

一、直流电机驱动(PWM)和本节目标

1.1 直流电机驱动(PWM)基础知识

直流电机介绍

在这里插入图片描述
本节我们主要学习的是直流电机,当然除了直流电机外还有很多其他种类的电机,比如步进电机、舵机、无刷电机、空心杯电机灯;

步进电机的结构中,外壳一整圈都分布着磁铁,中间有个转子,转子也是永磁体;通过对不同角度的磁铁进行通电,从而产生不同方向的磁力,改变转子的角度,最终吸引转子朝着特定的方向转动; 其好处就是,转子转动的速度,完全是由我们代码写入的通电时间决定的;

舵机可以输出固定的角度;常用与小车的转向电机;

无刷电机一般在四轴飞行器中会用到;其转速非常快,适合为飞机起飞提供强劲的动力;功率比较大,动力比较足;

电机驱动电路

在这里插入图片描述
电机对于单片机来说也是一种功率比较大的负载;如果将电机直接接在单片机的i/o口上,肯定是驱动不了的;而且有可能会损坏单片机的i/o口;所以我们需要在电机和i/o口之间加入驱动电路;

常见的驱动电路由两种,分别是大功率器件直接驱动和H桥驱动;

大功率器件直接驱动方式的特点是,它只能驱动电机朝着一个方向转动;因为这种电路不具备调换电机正反方向的功能;

H桥驱动方式是电机驱动里面非常有名的一种驱动方式;这种方式可以控制电机正反转;所以如果我们需要驱动电机正反转,那么就选H桥驱动电路;

在这里插入图片描述
大功率器件直接驱动方式跟三极管开关差不多,图中的Q1 PNP三极管要求选择一个功率比较大的器件;常见的达林顿管或mos管;

当IN输入低电平时,Q1三极管就会导通,电流就会由上往下(上图中)流动;D1二极管是用来保护电路的,称为续流二极管;正常驱动时,电流由上往下流动时,经过B1,就会驱动B1电机进行旋转;

续流二极管的作用是:因为电机是感性负载元件,所以在驱动时就要留意其感性值(电感值);即当电路正常通电,电机正常运转一段时间,突然断电后,由于电感的特性,在断电的瞬间,电感会产生很大的电压,如果不加续流二极管,则电感产生的电压有反向击穿三极管的风险;加了续流二极管后,电感和续流二极管则会连通形成回路,消耗电机在断电瞬间产生的电压,直到消耗完;

下面是H桥驱动:
在这里插入图片描述
因为整天的形状像是H,所以这个电路被称为H桥;

在这里插入图片描述

如果使Q1和Q4两个三极管导通,而Q3和Q2两个三极管断开,那么电流就是从左上角流向右下角,如上图所示,这样电机就会朝着一个方向转动;如果反过来,Q3和Q2两个三极管导通,Q1和Q4两个三极管断开,则电流就是从右上角流向左下角,如下图所示,这样电机就会朝着另一个方向转动;通过这种方式控制电机的正反转,因为电流方向既可以向右又可以向左;

在这里插入图片描述
在H桥驱动中,因为电流可以正方向也可以反方向,所以没办法加续流二极管,所以就要求四个三极管具有很强的耐压特性,以保证能够扛得住电感在断电瞬间感应出来的高电压;

下面介绍电机调速的相关知识

在这里插入图片描述
PWM通俗解释:

第一种情况,可以先让电机通电转1ms,然后将其断开5ms,此时,断电后电机由于惯性还在转,只是速度会缓慢下降;下降5ms后,继续通电,又加速转了1ms,然后又断开,用惯性减速5ms;这样反复进行,电机通电增长的速度远小于断电后下降的速度,最终电机则会以一个比较缓慢的速度在运行;

第二种情况,让电机通电转5ms,然后将其断开1ms,此时断电后电机由于惯性还在转,只是速度会缓慢下降;下降1ms后,继续通电,又加速转了5ms,然后又断开,用惯性减速1ms;这样反复进行,电机通电增长的速度远小于断电后下降的速度,电机则会以一个比较快速的速度在运行;

第三种情况,让电机通电转5ms,然后将其断开5ms,此时断电后电机由于惯性还在转,只是速度会缓慢下降;下降5ms后,继续通电,又加速转了5ms,然后又断开,用惯性减速5ms;这样反复进行,电机通电增长的速度基本等于断电后下降的速度,电机则会以一个比中间的的速度在运行,比第一种情况速度大,比第二种情况的速度小;

总结一下就是,转的时间比较短,停的时间比较长,那么速度就比较低;反之,转的时间比较长,停的时间比较短,则转速比较高;

当然这里只是举个例子,具体在应用中设置多长时间通电和多长时间断电,就是下面要学习的PWM,脉冲宽度调制;

PWM经常用于这种存在惯性的场景,比如LED,断电后不会立马灭,而是有余晖慢慢变灭;比如电机,断电后不会立马停止转动,而是由于惯性慢慢的减速; 在这些具有惯性的场景中,PWM还是有很好的应用效果的;

PWM的参数包括:
频率:对于电机来说,就是断电和通电的次数,如果频率比较高,则电机转动的比较平滑;反之如果频率比较低,则电机转动的会有抖动;

占空比:占空比就是打开的时间比上一个周期的总时间;

精度:精度就是占空比的变化步距;

学习完PWM,就可以猜到电机调速的大致思想就是,不断的给电机高电平->低电平->高电平->低电平->高电平->低电平->高电平->低电平->高电平.........;通过控制频率就能控制电机的速度;

1.2 本节目标

目标1:LED呼吸灯

如下图所示,第一个LED灯以呼吸灯的形式进行亮灭

在这里插入图片描述
目标2:直流电机调速

将直流电机插在开发板上,按键K1、K2、K3可以对直流电机进行调速;

当按下K1时,1级速度速,如下图:
在这里插入图片描述

当按下K2时,2级速度速,如下图:

在这里插入图片描述

当按下K3时,3级速度速,如下图:

在这里插入图片描述

二、LED呼吸灯

代码路径:51单片机入门教程资料\课件及程序源码\程序源码\KeilProject\15-1 LED呼吸灯

具体代码:

#include <REGX52.H>

sbit LED=P2^0;

void Delay(unsigned int t)
{
	while(t--);
}

void main()
{
	unsigned char 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;					//LED亮
				Delay(Time);			//延时Time
				LED=1;					//LED灭
				Delay(100-Time);		//延时100-Time
			}
		}
	}
}

二、直流电机调速

代码路径:51单片机入门教程资料\课件及程序源码\程序源码\KeilProject\15-2 直流电机调速

具体代码:

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Nixie.h"
#include "Timer0.h"

sbit Motor=P1^0;

unsigned char Counter,Compare;	//计数值和比较值,用于输出PWM
unsigned char KeyNum,Speed;

void main()
{
	Timer0_Init();
	while(1)
	{
		KeyNum=Key();
		if(KeyNum==1)
		{
			Speed++;
			Speed%=4;
			if(Speed==0){Compare=0;}	//设置比较值,改变PWM占空比
			if(Speed==1){Compare=50;}
			if(Speed==2){Compare=75;}
			if(Speed==3){Compare=100;}
		}
		Nixie(1,Speed);
	}
}

void Timer0_Routine() interrupt 1
{
	TL0 = 0x9C;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	Counter++;
	Counter%=100;	//计数值变化范围限制在0~99
	if(Counter<Compare)	//计数值小于比较值
	{
		Motor=1;		//输出1
	}
	else				//计数值大于比较值
	{
		Motor=0;		//输出0
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/525392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【并发编程】深入理解Java并发之synchronized实现原理

文章目录 一、synchronized 实现同步示例二、synchronized 典型错误示例三、Java 对象头与 Monitor四、synchronized代码块底层原理五、synchronized方法底层原理六、Java虚拟机对synchronized的优化 一、synchronized 实现同步示例 public class MyThread extends Thread{pri…

分布式事务之Seata讲解

文章目录 1 Seata1.1 简介1.2 架构1.3 四种事务模式1.3.1 XA1.3.1.1 定义1.3.1.2 优缺点1.3.1.3 代码中实现 1.3.2 AT1.3.2.1 定义1.3.2.2 全局锁1.3.2.2.1 AT模式脏写问题1.3.2.2.2 全局锁 1.3.2.3 AT模式优缺点1.3.2.4 与XA模式区别1.3.2.5 代码中实现 1.3.3 TCC模式1.3.3.1 …

云服务器配合CookieCloud插件,实现浏览器网站Cookie同步

CookieCloud是由方糖开发的一个浏览器网站Cookie同步工具&#xff0c;Cookie是一个可以短时间代表我们登录身份的凭证&#xff0c;CookieCloud同步Cookie其实就是在同步登录状态&#xff0c;由一个浏览器插件和一个可以自行搭建的服务器端组成&#xff0c;可以定时地、在本地加…

linux pl320 mbox控制器驱动分析 - (2) 消息传递示例

linux pl320 mbox控制器驱动分析 - &#xff08;2&#xff09;消息传递示例 1 Messaging from Core0 to Core12 Back-to-back messaging from Core0 to Core13 Messaging from Core0 to Cores 1, 2, and 3 using Auto Acknowledge4 Auto Link messaging from Core0 to Core1 us…

算法设计 || 第5题:钓鱼问题-北京大学网站在线算法题(贪心算法)

目录 &#xff08;一&#xff09;题目网址视频网址 &#xff08;二&#xff09;手写草稿思考 Part1: 慕课PPT Part2: 笨蛋的学习 &#xff08;一&#xff09;题目网址视频网址 北京大学网站在线算法题&#xff1a;1042 -- Gone Fishing (poj.org) 视频讲解&#xff08;北…

进一步了解傅里叶变换的应用(附案例代码)

傅里叶变换&#xff08;Fourier Transform&#xff09;是一种非常常见的数学工具&#xff0c;能够将一个函数&#xff08;或时域信号&#xff09;分解成一些基本频率的合成。它使我们可以将时域信号&#xff08;例如波形图&#xff09;转换成频域信号&#xff0c;因而更容易地看…

ArcGIS按比例缩放图斑

今天介绍一下&#xff0c;在ArcGIS中&#xff0c;当我们需要按比例缩放图斑时&#xff0c;该如何操作呢。 可以使用“缩放”工具对要素进行缩放&#xff08;使整个要素变大或变小&#xff09;。在处理比例略有误差的数据&#xff08;例如&#xff0c;来自多个源的细分宗地&…

ChatGPT背后的大预言模型 以及《ChatGPT全能应用一本通》介绍

大型语言模型已经彻底改变了我们通过自然语言处理进行交互的方式&#xff0c;使得更多的基于语言的应用程序成为可能&#xff0c;例如语言翻译&#xff0c;问答&#xff0c;文本摘要和聊天机器人。 由于这些模型是在大量文本数据集&#xff08;如书籍&#xff0c;文章和社交媒…

C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)

目录 条件操作符 逗号表达式 下标引用、函数调用和结构成员 1. [ ] 下标引用操作符 2. ( ) 函数调用操作符 3. 访问一个结构的成员 表达式求值 1.隐式类型转换 2.算术转换 3.操作符的属性 条件操作符 条件操作符是一种用于简化条件表达式的运算符。它通常表示为问号 …

《游戏编程模式》--重访设计模式--学习

序 在线阅读地址&#xff1a; 命令模式 Design Patterns Revisited 游戏设计模式 (tkchu.me) 参考文章&#xff1a; GameDesignPattern_U3D_Version/Assets/002FlyweightPattern at master TYJia/GameDesignPattern_U3D_Version GitHub 看到了没见过的观点&#xff1a;…

我的算法基础实验代码-下篇

第一题 题目介绍 输入一些数值&#xff0c;求出现的次数最多的数。如果有多个并列&#xff0c;则从大到小输出。 解题思路 代码实现 package com.nineWeek;import java.util.*;/*** author WangYH* version 2021.1.3* date 2023/5/7 18:29*/public class NumMostTimes {pu…

第十四届蓝桥杯b组c/c++

D:飞机降落&#xff08;全排列&#xff09; #include<iostream> #include<cstring> using namespace std;const int N 12; int n; struct node{int t, d, l; //t为此飞机的最早降落时间 d为盘旋时间 l为降落所需时间 }p[N]; bool st[N];//DFS求全排列模型 bool d…

【真题解析】系统集成项目管理工程师 2021 年下半年真题卷

本文为系统集成项目管理工程师考试(软考) 2021 年上半年真题&#xff0c;包含答案与详细解析。考试共分为两科&#xff0c;成绩均 ≥45 即可通过考试&#xff1a; 综合知识&#xff08;选择题 75 道&#xff0c;75分&#xff09;案例分析&#xff08;问答题 4 道&#xff0c;75…

ChatGPT 学习与使用总结

ChatGPT 学习与使用总结 最近ChatGPT大火&#xff0c;2023有可能就是AGI元年了。近两个月使用下来&#xff0c;ChatGPT给我最深刻的感觉就是它所具备的理解和思维能力&#xff0c;第一次体验时真的是非常震撼&#xff0c;完全是之前各种『人工智障』智能助理所不能比拟的&…

Windows系统出现蓝屏怎么办?这些方法可以修复!

Windows 系统蓝屏死机&#xff08;BSOD&#xff09;&#xff0c;也被称为“停止错误”&#xff0c;是Windows系统最常见的故障之一。 当Windows遇到严重的故障时就会显示蓝屏&#xff0c;系统崩溃。蓝屏上显示一个停止代码&#xff0c;如"MEMORY_MANAGEMENT"&#xf…

NeRF与三维重建专栏(一)领域背景、难点与数据集介绍

前言 关于该系列专栏&#xff0c;主要介绍NeRF在三维重建中的应用&#xff08;这里我们特指MVS&#xff0c;multi-view stereo&#xff0c;也即输入带位姿的图片&#xff0c;输出三维结构例如点云、mesh等&#xff1b;并且后面的工作也都是围绕MVS with NeRF讨论的。虽然也有w…

人类与ChatGPT:互动中的共同进步

一、ChatGPT的发展历程 1. GPT模型 ChatGPT是由OpenAI推出的一款聊天机器人&#xff0c;其核心技术基于GPT模型。GPT模型&#xff08;Generative Pre-training Transformer&#xff09;是一种基于Transformer结构的预训练语言模型。它在大规模的文本语料库上进行无监督的预训…

解析 ip addr 的输出的内容含义

解读 ip addr 的输出的网络连接信息含义 一、ifconfig 与 ip addr 用过Linux的读者都知道&#xff0c;在Linux查看ip可以使用ifconfig&#xff0c;当然这个ifconfig属于net-tools 工具集&#xff0c;其来源于BSD&#xff0c;Linux从2001年就不对其进行维护了。那我们应该用什…

基于下垂控制的并网逆变器控制MATLAB仿真模型

资源地址&#xff1a; 基于下垂控制的并网逆变器控制MATLAB仿真模型资源-CSDN文库 主要模块&#xff1a; 建议使用MATLAB2021b及以上版本打开&#xff01; 功率计算模块、下垂控制模块、电压电流双环控制模块、虚拟阻抗压降模块 扰动设置&#xff1a; 在0.5秒到2秒始端设置…

微软出品的实用小工具

微软出品的实用小工具 分享一些微软出品的实用小工具&#xff0c;希望对大家有所帮助。 文章目录 微软出品的实用小工具SysinternalsSuite常用工具AutorunsprocdumpProcess Explorer进程监视器 Process MonitorpsloggedonAccessChk示例 PsToolsrdcmanTcpviewVmmap Sysinternals…