PWM技术的应用

目录

PWM技术简介

PWM重要参数

PWM实现呼吸灯

脉宽调制波形

PWM案例

电路图

keil文件

直流电机

直流电机的控制

直流电机的驱动芯片L293D

L293D引脚图

L293D功能表

直流电机案例

电路图

keil文件

步进电机

步进电机特点

步进电机驱动芯片L298

L298引脚图

L298逻辑功能表

四相步进电机原理

步进电机案例

电路图

keil文件

PWM技术简介

  • PWM即脉宽调制技术,在具有惯性的系统中,可通过对一系列脉冲的宽度进行调制,来等效的获得所需要的模拟参量,常适用于电机控速度,开关电源等领域
  • 占空比:在一个周期内,其高电平持续的时间除以整个周期的值就是占空比;其一般用D表示。

PWM重要参数

  • 频率:f=1/Ts
  • 占空比:D=Ton/Ts

注意:

  • 由右图可知,Ts内电机两端的平均电压为:U=(Ton/Ts)*Umax=D*Umax
  • 左图就是由PWM调制技术所获得的模拟量电压。
  • 通常我们的PWM会保证一个周期的时间是一样的

PWM实现呼吸灯

呼吸灯:呼吸灯是指在控制器的控制下,灯光实现由亮到暗或由暗到亮的逐渐变化(感觉就像是人在呼吸一样)。

脉宽调制波形

  • t:高电平时长
  • T:脉冲周期
  • Up脉冲电压幅度值
  • 占空比:D=t/T
  • 均值电压:U=t/T*Up

注意:

  • 通过改变相同周期内U的占空比就可以实现呼吸灯的效果。
  • 若上面的脉宽调制状态中灯用共阳极连接,那么就可以实现灯的由亮到灭

PWM案例

需求:实现发光二极管的呼吸效果。

电路图

keil文件

#include "REGX52.H"
void delay(unsigned int n){
	int i=0,j=0;
	for(i=0;i<n;i++){
		for(j=0;j<120;j++);
	}
}
void pwm(unsigned char k){
		unsigned int n=0;
		for(n=0;n<10;n++){
			P2=0xff;
			delay(k);
			P2=0x00;
			delay(10-k);
		}
}
void main()
{
	unsigned int t;
	while(1)
	{
		//由亮到暗
		for(t=1;t<10;t++){
			pwm(t);
		}
		//由暗到亮
		for(t=9;t>0;t--){
			pwm(t);
		}
	}
}

注意:因为我的LED二极管为共阳极连接,所以从单片机输出的信号0为亮,1为灭。

直流电机

前言:

  • 定义输出或输入为直流电能的旋转电机称为直流电机,他是能实现直流电能和机械能相互转化的电机。
  • 当他做电动机运行时是直流电动机,将电能转化为机械能;当作发电机运行时是直流发电机,将机械能转化为电能。
  • 直流电机主要由永磁体(定子)线圈(转子)和换向器组成。
  • 除去直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等

直流电机的控制

  • 方向控制:直流电机只有正负极,只需要交换正负极就可以调节正反转。
  • 转速控制:在负载变化不大的时候,加在直流电机两端的电压大小与其速度近似成正比

直流电机的驱动芯片L293D

前言:

  • 单片机的驱动电流不足以直接驱动直流电机,所以我们需要去外接一个驱动电路来完成单片机对直流电机的一个操作。
  • L293D支持逻辑控制电压和电机驱动电压4.5——36V,最大输出电流为600ma,由于其驱动能力有限,多应用于小型电器
  • L293D是4通道高电流半H桥输出驱动电路。L293D提供双向驱动电流高达600ma。兼容所有TTL输入。驱动电路shang水水水水内部ESD保护,内有过热关断保护,每个输出都是推拉式驱动电路,可以驱动感性负载
  • 作用:单片机可以发挥控制优势,发出控制电机的信号,让大电流从这个模块流通不经过单片机,保护了单片机,进而实现了电机驱动,同时也发挥了单片机的控制优势。

L293D引脚图

L293D功能表

注意:

  • 上面的EN为使能引脚,也就类似于开关引脚。
  • L293D可以驱动两个直流电机
  • 功能表中两个X分别代表两个输入,也就是上面芯片的1a和4a部位,上面芯片的y部位为对应的输出
  • 停止是自然而然的停止,不受外力干扰;刹停是紧急置停。

直流电机案例

需求:使电机按顺时针转动,并且转动的速度占总速度的1/4。

电路图

注意:IN1引脚给1,IN2引脚给0,电机顺时针转动;IN1引脚给0,IN2引脚给1,电机逆时针转动(通过调整占空比可以调整电机的转速)。

keil文件

#include "reg51.h"
sbit IN1=P2^0;
sbit IN2=P2^1;
sbit E=P2^2l;
void delay(unsigned int n){
	int i=0,j=0;
	for(i=0;i<n;i++){
		for(j=0;j<120;j++);
	}
}
void motor(){
	IN1=1;
	delay(25);//电压延时占1/4
	IN1=0;
	delay(75);//空电压延时占3/4
	IN2=0;
	E=1;
}
void main()
{
	while(1)
	{
		motor();
	}
}

步进电机

含义:步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机一个脉冲信号,电机则转过一个步距角。

步进电机特点

  • 当步进电机接收到一定顺序的脉冲时,他就会根据脉冲的控制时序进行顺时针和逆时针的转动,脉冲的顺序决定了步进电机旋转的方向,脉冲的个数决定了步进电机转动的角度,脉冲的频率决定了步进电机的转速;
  • 有脉冲时步进电机就会转动一定的角度,没有脉冲时他就会保持当前位置
  • 步进电机具有快速启动和快速停止的特性
  • 当负载在一定范围内时,步进电机的转速与负载无关
  • 步进电机转动的方向很容易的通过反方向给脉冲时序来改变

步进电机驱动芯片L298

前言:L298是一种二相和4相单机的专用驱动器,即内含两个H桥的高电压大电流双全桥式驱动器,接受标准TTL逻辑电平信号,可用来驱动器电感性负载。H桥可承受46V电压,相电流高达2.5A。L298的逻辑电路使用5V电源。

L298引脚图

  • 引脚1和引脚15是电流监测端,分别为2个H桥的电流反馈脚,不用时可以直接接地
  • 引脚2和引脚3为电机驱动输出端
  • 引脚4为功率电源电压,此引脚需接100nf电容器
  • 引脚5和引脚7为电机控制信号输入端,TTL电平兼容
  • 引脚6和引脚11为TTL电平兼容输入使能端,低电平禁止输出
  • 引脚8为接地端
  • 引脚9为逻辑电源电压端。此引脚需并接100nf电容器
  • 引脚10和引脚12为电机控制信号输入端,TTL电平兼容
  • 引脚13和引脚14为电机驱动输出端

L298逻辑功能表

四相步进电机原理

理解:四相步进电机中心抽头接地(或电源),在四相线圈分别加以控制信号,就可以使之步进旋转。控制方法有4步法和8步法。四步法即按照如下电平变化在A、B、C、D引脚上产生控制信号:1001、1100、0110、0011,然后循环(每步90度)。若要使电机反向旋转,则在A、B、C、D引脚上逆序输入上述控制信号即可。8步法是四步法的分解,每步是四步法的步脚之半。其控制信号是:1001、1000、1100、0100、0110、0010、0011、0001(每步45度)

步进电机案例

需求:让步进电机每1s逆时针转动45度。

电路图

keil文件

#include "reg51.h"
#逆时针输入控制信号(8步法的倒序)
unsigned char str[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
#近似延时Nms
void delay(unsigned int n){
	int i=0,j=0;
	for(i=0;i<n;i++){
		for(j=0;j<120;j++);
	}
}
void stepper(){
	int i=0;
	for(i=0;i<8;i++){
		P2=str[i];
		delay(1000);
	}
}
void main()
{
	while(1)
	{
		stepper();
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Canvas与艺术】绘制黑白纹章,内嵌陶渊明南山诗

【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>用Canvas绘制黑白纹章</title><style type"text/css…

Doris实践——信贷系统日志分析场景的实践应用

目录 前言 一、早期架构演进 1.1 架构1.0 基于Kettle MySQL离线数仓 1.2 架构2.0 基于 Presto / Trino统一查询 二、基于Doris的新一代架构 三、新数仓架构搭建经验 3.1 并发查询加速 3.2 数仓底座建设 四、Doris助力信DolphinScheduler 和 Shell 贷业务场景落地 4.…

QT----opencv4.8.0编译cuda版本,QTcreater使用

目录 1 编译opencv4.8.02 验证能否加载GPU cuda12.1 opencv4.8.0 vs2019 cmake3.29 1 编译opencv4.8.0 打开cmake&#xff0c;选择opencv480路径&#xff0c;build路径随意 点击configure后&#xff0c;选择这些选项&#xff0c;opencv_word&#xff0c;cuda全选&#xff0c;…

一款功能强大且易于使用的视频剪辑应用程序

一款功能强大且易于使用的视频剪辑应用程序&#xff0c;它提供了丰富多样的转场特效和滤镜&#xff0c;让用户能够轻松地为视频添加各种炫酷的效果。与其他视频编辑软件相比&#xff0c;剪映国际版的最大亮点在于其完全免费使用。首先&#xff0c;剪映国际版为用户提供了丰富的…

pth转onnx,同时使用onnx进行部署

当像我一样的菜鸡在使用开源的深度学习代码时&#xff0c;对于输出的pth模型文件&#xff0c;在预测时使用开源的predict.py文件进行部署&#xff0c;但是使用pth文件有一个问题&#xff0c;就是每次他都要重新加载一次模型&#xff0c;而且不方便移植&#xff0c;所以&#xf…

Java 面向对象(基础)

1、面向对象的概述及两大要素&#xff1a;类与对象 1. 面向对象内容的三条主线&#xff1a; - Java类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 - 面向对象的特征&#xff1a;封装、继承…

31-数据流:通过iam-authz-server设计,看数据流服务的设计

IAM数据流服务iam-authz-server的设计和实现。 iam-authz-server的功能介绍 iam-authz-server目前的唯一功能&#xff0c;是通过提供 /v1/authz RESTful API接口完成资源授权。 /v1/authz 接口是通过github.com/ory/ladon来完成资源授权的。 因为iam-authz-server承载了数据流…

ES6展开运算符

1.展开可迭代对象&#xff08;简单理解为数组和伪数组&#xff09;&#xff0c;如数组、 NodeList 、arguments。 可以通过展开运算符把一个伪数组转换为数组 const a [...document.body.children]; console.log(a); console.log(Array.isArray(a));2.实现数组的浅拷贝 cons…

51单片机入门之独立按键

目录 1.按键简介 2.独立按键控制LED亮灭 3.独立按键控制LED移位 1.按键简介 在生活中&#xff0c;我们常常会见到各种按键&#xff0c;我们的开发板上也有按键&#xff0c;就在左下角有四个按键&#xff0c;我们把它们叫做独立按键。 独立按键的原理比较简单&…

【三十三】【算法分析与设计】回溯(1),46. 全排列,78. 子集,没有树结构,但是依旧模拟树结构,回溯,利用全局变量+递归函数模拟树结构

46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1&#xff0c;2&#xff0c;3] 输出&#xff1a;[[1&#xff0c;2&#xff0c;3]&#xff0c;[1&#xff0c;3&a…

WPF中通过自定义Panel实现控件拖动

背景 看到趋时软件的公众号文章&#xff08;WPF自定义Panel&#xff1a;让拖拽变得更简单&#xff09;&#xff0c;发现可以不通过Drag的方法来实现ListBox控件的拖动&#xff0c;而是通过对控件的坐标相加减去实现控件的位移等判断&#xff0c;因此根据文章里面的代码,边理解边…

考题抄错会做也白搭--模版方法模式

1.1 选择题不会做&#xff0c;蒙呗&#xff01; "题目抄错了&#xff0c;那就不是考试题目了&#xff0c;而考试试卷最大的好处就是&#xff0c;大家都是一样的题目&#xff0c;特别是标准化的考试&#xff0c;比如全是选择或判断的题目&#xff0c;那就最大化地限制了答题…

整合Mybatis(Spring学习笔记十二)

一、导入相关的包 junit 包 Mybatis包 mysql数据库包 Spring相关的包 Aop相关的包 Mybatis-Spring包&#xff08;现在就来学这个&#xff09; 提示jdk版本不一致的朋友记得 jdk8只支持spring到5.x 所以如果导入的spring(spring-we…

Linux:进程终止和等待

一、进程终止 main函数的返回值也叫做进程的退出码&#xff0c;一般0表示成功&#xff0c;非零表示失败。我们也可以用不同的数字来表示不同失败的原因。 echo $?//打印最近一次进程执行的退出码 而作为程序猿&#xff0c;我们更需要知道的是错误码所代表的错误信息&#x…

【智能算法】磷虾群算法(KHA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2012年&#xff0c;Gandomi等人受到自然界中磷虾生存行为启发&#xff0c;提出了磷虾群算法&#xff08;Krill Herd Algorithm, KHA&#xff09;。 2.算法原理 2.1算法思想 KHA受南极鳞虾群觅食行…

Java | Leetcode Java题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; class Solution {public int myAtoi(String str) {Automaton automaton new Automaton();int length str.length();for (int i 0; i < length; i) {automaton.get(str.charAt(i));}return (int) (automaton.sign * automaton.ans);} …

Matlab|储能辅助电力系统调峰的容量需求研究

目录 1 主要内容 目标函数 约束条件 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《储能辅助电力系统调峰的容量需求研究》&#xff0c;主要是对火电、风电和储能等电力设备主体进行优化调度&#xff0c;在调峰能力达不到时采用弃负荷&#xff0c;程序以…

无人售货奶柜:开启便捷生活的新篇章

无人售货奶柜&#xff1a;开启便捷生活的新篇章 在这个快节奏的现代生活中&#xff0c;科技的革新不仅为我们带来了前所未有的便利&#xff0c;更在不经意间改变着我们的日常。其中&#xff0c;无人售货技术的出现&#xff0c;尤其是无人售货奶柜&#xff0c;已经成为我们生活…

012:vue3使用vue-i18n实现国际化

文章目录 1. 安装 vue-i18n2. 创建文件存储翻译的语言3. 注册i18n实例4. 在main.ts中引入vue-i18n实例5. 在组件模板中使用6. 在js中使用7. locale.value 实现国际化语言切换8. vue3 中ref里面的国际化值没生效问题 1. 安装 vue-i18n cnpm i --save vue-i18n2. 创建文件存储翻…

树状数组-数据结构

树状数组 t[x] 节点的父节点为 t[x lowbit(x)] 整棵树的深度为 log2n 1 1 . add(x,k) 给指定的节点x加上k — 动态的维护前缀和 需要从x开始&#xff0c;向上找到所有父节点&#xff0c;值都加上k 2. ask(x) 求取节点x之前的前缀和 求取单点之前的前缀和只需要累加即可 …