51单片机-直流电机(PWM:脉冲宽度调制)实验-会呼吸的灯直流电机调速

news2024/11/13 10:09:34

作者:Whappy(菜的扣脚)

脉冲宽度调制(Pulse Width Modulation,PWM)是一种通过调节信号的占空比来控制功率输出的技术。它主要通过改变脉冲信号的高电平持续时间相对于低电平的时间来调节功率传递给负载的量。PWM 技术可以实现以下功能:

1. 电机速度控制

  • 直流电机调速:通过改变PWM信号的占空比,可以控制电机的输入电压,进而控制电机的转速。占空比越高,电机转速越快;占空比越低,转速越慢。
  • 步进电机控制:PWM 也可以用于精确控制步进电机的速度和方向。

2. 灯光亮度调节

  • LED亮度调节:通过改变PWM信号占空比,调节LED灯的平均电流,从而控制LED的亮度。占空比越高,亮度越高;占空比越低,亮度越低。

3. 音频信号产生

  • 声音输出:PWM可以用来生成音频信号。例如,PWM可以用于音频合成,生成不同频率的方波信号,通过扬声器产生不同音调的声音。
  • 音量控制:通过调节PWM信号的占空比,可以控制音频信号的强度,从而调节声音的音量。

4. 加热器功率控制

  • 加热元件控制:通过调节加热器的PWM信号占空比,可以控制传递给加热器的能量,从而调节温度。

5. 开关电源的调节

  • DC-DC 转换器:PWM广泛应用于开关模式电源(如DC-DC转换器),通过调节占空比来控制输出电压。
  • 逆变器和整流器:在电源中,PWM用于逆变和整流,以实现高效的电能传输和转换。

6. 无线通信调制

  • 数据传输调制:在某些无线通信系统中,PWM可以用于调制数据,例如红外通信中的信号编码。

7. 伺服系统控制

  • 位置控制:在伺服电机控制中,PWM信号用于精确控制伺服电机的角度位置。PWM信号的脉冲宽度决定伺服电机的旋转角度。

8. 电池充电控制

  • 充电控制器:PWM用于控制电池的充电过程,调节电流和电压,防止电池过度充电,并延长电池寿命。

9. 信号生成与调制

  • 信号生成:通过调整PWM信号的占空比和频率,PWM可以用于产生不同频率和波形的信号,如方波、锯齿波等。
  • 模拟信号生成:PWM可以通过低通滤波器生成模拟电压,用于数模转换。

10. 机器人控制

  • 机器人运动控制:PWM常用于机器人的电机速度控制、舵机控制等,确保机器人运动的精准和稳定。

H桥驱动可以控制电机的正反转。电机是一个感性元件,带有电感效应,在用mos管和三级管驱动时,要加上一个耳机管保护电路。

现象:

51单片机!定时器实现PWM呼吸灯&直流电机调速

1.呼吸灯-延时实现(控制占空比)软件模拟PWM实现(通过控制一个周期内高电平所持续的时间:即高电平持续时间越久,亮度持续的就越久)

#include <REGX52.H>
#include "intrins.h"

#define LED		P2



void Delay(unsigned int xms)		//@11.0592MHz
{
	while(xms--);
}


void main(void)
{
	
	unsigned char Time,i;
	
	while(1)
	{
		for(Time=0; Time<100; Time++)
		{
			for(i=0; i<20; i++)
			{
				LED = 0X00;
				Delay(Time);
				LED = 0XFF;
				Delay(100-Time);
			}			
		}
		
		for(Time=100; Time>0; Time--)
		{
			for(i=0; i<20; i++)
			{
				LED = 0X00;
				Delay(Time);
				LED = 0XFF;
				Delay(100-Time);
			}			
		}
	}		
	     		
}




























2.呼吸灯(定时器实现)(控制占空比):

#include <REGX52.H>
 
/****配置LED****/
sbit LED = P2^0;
bit Direct_flag = 0; 	//LED的呼吸方向的开关
/****函数声明****/
void T0init();
/****全局变量****/
unsigned int PWM_wanttime=0;			//想要多长时间改变的占空比一次
unsigned int Breath_wanttime=0;		//想要多长时间改变呼气或者吸气的值时间
unsigned int  PWM_value = 0;				//占空比的大小
 
void main()
{
	T0init();
	while(1)
	{
	}	
}
/*********************************************************
* 函数说明 :1ms定时
* 入口参数 :void
* 返回值   :void
*********************************************************/
void T0init()
{
    TMOD |= 0x01;	//设置定时器为工作方式1  
    TH0=0XFC;   //1ms定时,装入初值
    TL0=0X66;
    ET0 = 1;    //开定时器的中断
    TR0 = 1;    //开定时器
    EA = 1;     //开总中断
}
 
void Time0(void) interrupt 1
{
 
    TH0=0XFC;   //1ms定时,装入初值
    TL0=0X66;
 
    PWM_wanttime++;			//改变的占空比一次的标志
    Breath_wanttime++;		//呼气或者吸气的时间改变的标志
 
 
    if(PWM_wanttime == PWM_value)      	//判断是否到了点亮LED的时候
        LED = 0;                    	//点亮LED
    if(PWM_wanttime == 10)            	//当前周期结束
    {
        LED = 1;                    	//熄灭LED
        PWM_wanttime = 0;              	//重新计时,去改变占空比
    }
 
 
    if((Breath_wanttime == 200) && (Direct_flag == 0))	  //200ms 改一次占空比,占空比每次增加10%
    {                               
        Breath_wanttime = 0;
        PWM_value++;				//改变占空比的值
 
        if(PWM_value == 9)          //占空比更改方向
            Direct_flag = 1; 
    }
 
    if((Breath_wanttime == 200) && (Direct_flag == 1))	 //200ms 改一次占空比,占空比每次减少10%
    {                               
        Breath_wanttime = 0;
        PWM_value--;				//改变占空比的值
 
        if(PWM_value == 1)          //占空比更改方向
            Direct_flag = 0; 
    }
}
 

3.直流电机(定时器实现)(控制占空比):(其余代码模块在主页其他实验通用-用16位重装值,初始值设置100us)

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

sbit Motor = P1^0;


unsigned char Counter,Compare;
unsigned char KeyNum,Speed;

void main(void)
{
	Timer0_Init();
	Compare = 50;
	while(1)
	{	
	     KeyNum = Key();

		if(KeyNum == 1)
		{
			Speed++;
			Speed %= 7;
			if(Speed == 0) {Compare=0;}
			if(Speed == 1) {Compare=40;}
			if(Speed == 2) {Compare=50;}
			if(Speed == 3) {Compare=60;}
			if(Speed == 4) {Compare=70;}
			if(Speed == 5) {Compare=80;}
			if(Speed == 9) {Compare=90;}
			if(Speed == 10 ) {Compare=100;}
		}
		Nixie(1,Speed);
	}
}



void Timer0_Rountine(void)  interrupt 1
{
	static unsigned int T0Count ;  //Timer0_Rountine(void) 函数结束之后T0Count保留其原来的值
	
	TL0 = 0xA4;		//设置定时初值
	TH0 = 0xFF;		
	
	Counter++;
	Counter %= 100;
	if(Counter < Compare)
	{
		Motor = 1;
	}
	else
	{
		Motor = 0;
	}
	
}

本实验到此!就告一段路了,因此,我来进行总结一下,PWM说白了,就是控制占空比的大小来控制高电平持续的时间,简单的说也就是控制PWM模拟我们的模拟电信号的变化!在这里可通过延时函数或定时器来实验PWM的调制,就是改变占空比。

原理很简单!但是PWM有一个算法很好用!自己查(控制算法)

PWM原理 PWM频率与占空比详解-CSDN博客(可参考PWM)

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

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

相关文章

上市公司-客户ESG数据集(dta+xlsx+参考文献)(2009-2023年)

参考《经济问题》中李普玲&#xff08;2024&#xff09;的做法&#xff0c;将供应商与主要客户数据对应起来&#xff0c;并对上市公司及关联上市公司的ESG数据进行匹配&#xff0c;形成“供应商——客户ESG”的数据集&#xff0c;保留客户的销售占比 一、数据介绍 数据名称&am…

标准管理系统Vue项目

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程&#xff1a;封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

Springboot与minio:

一、介绍 Minio是一个简单易用的云存储服务&#xff0c;它让你可以轻松地把文件上传到互联网上&#xff0c;这样无论你在哪里&#xff0c;只要有网络&#xff0c;就能访问或分享这些文件。如果你想要从这个仓库里取出一张图片或一段视频&#xff0c;让网站的访客能看到或者下载…

硬件体系架构的学习

硬件体系架构的学习 RISC全称Reduced Instruction Set Compute&#xff0c;精简指令集计算机&#xff1b; CISC全称Complex Instruction Set Computers&#xff0c;复杂指令集计算机。 SOC片上系统概念 System on Chip&#xff0c;简称Soc&#xff0c;也即片上系统。从狭义…

Spark-ShuffleWriter-UnsafeShuffleWriter-钨丝内存分配

一、上下文 《Spark-ShuffleWriter-UnsafeShuffleWriter》中提到在进行Page内存分配时&#xff0c;调用了一行代码 MemoryBlock page memoryManager.tungstenMemoryAllocator().allocate(acquired); 这里就会走MemoryManager的钨丝内存分配&#xff0c;下面我们来详细看下 …

python运行时错误:找不到fbgemm.dll

python运行时错误&#xff1a;找不到fbgemm.dll 报错&#xff1a; OSError: [WinError 126] 找不到指定的模块。 Error loading "D:\program\py\312\Lib\site-packages\torch\lib\fbgemm.dll" or one of its dependencies. 原因是Windows下缺失&#xff1a;libomp140…

Mastering openFrameworks_第十一章_网络

网络 网络为多个设备之间的数据交换提供了一种方式。它是一个主要组成部分&#xff0c;允许远程控制移动和平板设备应用程序中的一些参数&#xff0c;也用于使交互式项目在多台计算机上同步工作。在本章中&#xff0c;您将学习如何在openFrameworks项目中实现和使用OSC和TCP协…

BrainSegFounder:迈向用于神经影像分割的3D基础模型|文献速递--Transformer架构在医学影像分析中的应用

Title 题目 BrainSegFounder: Towards 3D foundation models for neuroimagesegmentation BrainSegFounder&#xff1a;迈向用于神经影像分割的3D基础模型 01 文献速递介绍 人工智能&#xff08;AI&#xff09;与神经影像分析的融合&#xff0c;特别是多模态磁共振成像&am…

系统安装CH384串口卡驱动

1. 解压驱动文件CH38XDRV.tar&#xff0c;并进入驱动目录 cd CH38XDRV/DRV_28S/LINUX/driver$ 2. 编译 sudo make edgeedge-PC:~/CH38XDRV/DRV_28S/LINUX/driver$ sudo make 请输入密码: 验证成功 make -C /lib/modules/4.19.0-arm64-desktop/build M/home/edge/CH38XDRV/DRV…

2024年【四川省安全员B证】新版试题及四川省安全员B证考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 四川省安全员B证新版试题参考答案及四川省安全员B证考试试题解析是安全生产模拟考试一点通题库老师及四川省安全员B证操作证已考过的学员汇总&#xff0c;相对有效帮助四川省安全员B证考试试卷学员顺利通过考试。 1、…

数据库事务的详解

1、 介绍 什么是事务? 事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成&#xff0c;在同一个事务当中&#xff0c;所有的SQL语句都成功执行时&#xff0c;整个事务成功&#xff0c;有一个SQL语句执行失败&#xff0c;整个事务都执行失败。(一组操作同时…

计算机人工智能前沿进展-大语言模型方向-2024-09-14

计算机人工智能前沿进展-大语言模型方向-2024-09-14 1. Multimodal learning using large language models to improve transient identification of nuclear power plants B Qi, J Sun, Z Sui, X Xiao, J Liang - Progress in Nuclear Energy, 2024 使用大型语言模型进行多…

Html在线编辑器

Html在线编辑器提供富文本编辑器,在线文章编辑器,富文本编辑器,Html在线编辑器使用&#xff0c;具有高级功能的Html在线编辑器可全屏编辑,Web版Html在线编辑器在线使用,文章,网站编辑,微信公众号可以在线使用编辑器功能等。

select系统调用(实现I/O复用)

API 在一段指定时间内&#xff0c;监听用户感兴趣的文件描述符上的可读、可写、异常事件。 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);文件描述符集合fd_set 是一个用于管理文件描述符集合的结构体。select调用…

flutter集成百度地图定位 ‘BMKLocationManager.h‘ file not found报错

一、写在前面 好久不见~最近接手了一个flutter的项目&#xff0c;需求是接入百度地图的定位插件。但是按照官网的文档来做&#xff0c;安卓没有问题&#xff0c;但是ios就惨了&#xff0c;各种编译报错。 flutter_bmflocation: ^3.6.0 集成报错 ‘BMKLocationManager.h’ fil…

Renesas R7FA8D1BH (Cortex®-M85)内部RTC的应用

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP配置RTC 2.1 配置参数 2.2 RTC模块介绍 3 RTC相关函数 3.1 R_RTC_Open() 3.2 R_RTC_Close() 3.3 R_RTC_ClockSourceSet() 3.4 R_RTC_CalendarTimeSet() 3.5 R_RTC_CalendarTimeGet()…

HC-SR04超声波传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 ultrasonic.h文件 ultrasonic.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 HC-SR04超声波传感器是通过发送和接收超声波&#xff0c;利用时间差和声音传播速度…

Python编码系列—Python团队开发工作流:高效协作的艺术

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

煤炭检测系统源码分享

煤炭检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

A股上市公司企业创新能力、质量、效率-原始数据+dofile+结果(2006-2023年)

上市公司的创新能力体现在其不断研发新技术、新产品和服务的能力上&#xff0c;这是企业保持竞争优势的关键&#xff1b;质量则是指公司所提供的产品或服务达到高标准的程度&#xff0c;高质量是赢得客户信任和市场份额的基础&#xff1b;效率则涵盖了生产运营中的资源利用程度…