电力电子课设—数控产生PWM波——使用51单片机输出占空比可调PWM波(按钮控制、数码管显示)控制速成教程

news2024/11/26 18:31:06

我们学校电气专业开始做电力电子的课设了,小组选了一项制作硬件电路的任务,里面有要求采用数控方式实现DC-DC电压变换的输出电压调节,数控在电路中的体现就是用单片机输出可调占空比的PWM作用于产生PWM波控制IGBT的芯片。考虑到可能有同学没接触过51单片机的C语言编程,特写下此篇文章,希望能够给大家带来帮助。

选用51开发板

本人买了这本书,配套了一个开发板,懂的都懂哈,这本书非常适合初学者入门

目标分析

我们的目标:数码管显示当前输出PWM波占空比,使用按键可以调节占空比。

所以,我们需要:

1.一个引脚输出PWM波;

2.一个定时器控制PWM波的占空比;

3.若干按钮对占空比进行操作;

4.数码管显示占空比。

以下对这四个任务逐一进行拆解。

数码管

数码管有共阴极和共阳极两种,它们可通过向端子输入不同的字形码,就可在数码管显示对应的数字。

大家DIY的时候选扩展数码管最好用共阳极的数码管,因为共阳极数码管通过低电平驱动发光,要求驱动功率小。不过本教程配套的开发板上配了共阴极数码管,我们就用共阴极数码管了。

以下是详细解释为什么要使用共阳极数码管的文章:

单片机驱动共阳数码管和共阴数码管的比较-昌晖仪表网 (yunrun.com.cn)

选择数码管上的2个位,对应占空比0~99。

按钮

使用按钮需消抖。原因如下:

什么是按键消抖?为什么要消抖?_百度知道 (baidu.com)

这里选用四个按钮,详细作用见代码注释。

定时器

定时器配置内容可看看此文章:

51单片机定时器/计数器_单片机计数器_KeLin&的博客-CSDN博客

定时时间=振荡周期*12*(65536-初值)。

PWM波输出

选择一个引脚,当定时器达到初始装载时间A,引脚从高电平跳转到低电平;当定时器达到初始装载时间B,引脚从低电平跳转到高电平。

完整代码

#include<reg52.h> 
#define uchar unsigned char
//PWM周期选择:1毫秒
#define PWMZHOUQI 1000
#define JISHIMAX 65536-PWMZHOUQI
#define CHUZHI	30

#define duan P0	 
sbit wei1=P2^4; //LED显示器的位
sbit wei2=P2^5;
sbit wei3=P2^6; 
sbit wei4=P2^7;
sbit k1=P3^4;	 //+1、-1
sbit k2=P3^5; //可长按
sbit k3=P3^6;	//改变变化方向
sbit k4=P3^7;	 //重置占空比
sbit output=P2^0; //PWM输出端口

int is_gd=0;
int GD=	JISHIMAX*CHUZHI;//高电平时间
int zhankongbi=CHUZHI;

uchar code num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f};//对应数字0~9



void delay(unsigned int xms)   //按键消抖用延时,单位毫秒
{
	unsigned int i,j;
	for(i=xms;i>0;i--)
		for(j=112;j>0;j--);

}

void timer0_init() 
{
	TMOD=0x01;//16位定时器
	TH0=(GD>>8)&0xFF;//初始值
	TL0=GD&0xFF;
	EA=1; //打开总中断
	ET0=1; //打开定时器T0中断
	TR0=1; //启动定时器T0

}
void main()
{
	int dir=1;
	int shi;
	int ge;
	int had_press=0;
	output=1;
	is_gd=1;
	timer0_init();
	while(1)
	{
	   if(k4==0)
		{
			delay(10);
			if(k4==0)
			{
				while(k4==0);
				zhankongbi=CHUZHI;
				had_press=1;
			}
		}

		if(k3==0)
		{
			delay(10);
			if(k3==0)
			{
				while(k3==0);
				dir=-dir;
				had_press=1;	
			}
		}

		if(k1==0)
		{
			delay(10);
			if(k1==0)
			{
				while(k1==0);
				if ((zhankongbi+dir)>=0&& (zhankongbi+dir)<=99)
					zhankongbi+=dir;
				had_press=1;	
			}
		}

		if(k2==0)
		{
			delay(10);
			while(k2==0)
			{
				delay(10);
				if ((zhankongbi+dir)>=0&& (zhankongbi+dir)<=99)
					zhankongbi+=dir;
				had_press=1;	
			}
		}
		shi=zhankongbi/10;
		ge=zhankongbi%10;

		if (had_press)
		{
			GD=JISHIMAX*zhankongbi;
			TH0=(GD>>8)&0xFF;//初始值
			TL0=GD&0xFF;
			is_gd=1;	
		}
		
		duan=num[shi];
		wei1=0;
		wei2=0;
		wei3=1;
		wei4=0;
		delay(5);
		duan=num[ge];
		wei1=0;
		wei2=0;
		wei3=0;
		wei4=1;
		delay(5);

	}
}

void timer0()interrupt 1
{	
	if(is_gd)
	{
		TH0=((JISHIMAX*(1-zhankongbi))>>8)&0xFF;//初始值
		TL0=(JISHIMAX*(1-zhankongbi))&0xFF;	
	}	
	if(!is_gd)
	{
		TH0=(GD>>8)&0xFF;//初始值
		TL0=GD&0xFF;
	}
	is_gd=-is_gd;
	output=~output;
}

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

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

相关文章

金领冠520解密母乳源代码,助推婴配粉中国式现代化高速发展

又是一年520&#xff0c;又是一个“全国母乳喂养宣传日”。 1990年5月10日&#xff0c;为保护、促进和支持母乳喂养&#xff0c;更好地实行优生优育&#xff0c;原中华人民共和国国家卫生部召开新闻发布会&#xff0c;确立每年5月20日为“全国母乳喂养宣传日”。 那时&#x…

[GXYCTF2019]BabySQli1

拿到题目一看就是sql注入&#xff0c;所以还是老样子账号admin密码随便输入&#xff0c;回显但是密码错误 当用户名随便输入时&#xff0c;回显用户名错误&#xff0c;说明是先检测用户名&#xff0c;再检测密码 应该是存在过滤 通过burp爆破大致找出过滤字符&#xff0c;还有就…

css flex布局

css flex布局 flex是flexible Box的缩写&#xff0c;意为“弹性布局”&#xff0c;任何一个容器都可以指定为flex布局。 当我们为父盒子设为flex布局以后&#xff0c;子元素的float、clear和vertical-align属性将失效 总结flex布局原理&#xff1a; 就是通过给父盒子添加fl…

Java - AQS(一)

Java - AQS&#xff08;一&#xff09; 在Java中&#xff0c;AQS代表AbstractQueuedSynchronizer&#xff08;抽象队列同步器&#xff09;。AQS是Java并发包中用于构建同步器的基础框架。它提供了一种实现同步状态管理、线程等待和通知的机制。 AQS主要通过一个int类型的状态…

轻松玩转开源大语言模型bloom(四)

前言 前几篇都围绕着语言模型的decoding strategy来讲述&#xff0c;今天将进入进阶篇&#xff0c;在解码策略效果有限和提示词修改也无法满意的情况下如何提升模型的效果呢&#xff1f;这时我们需要对大语言模型进行fine-tune&#xff0c;即微调。一般我们用的大语言模型都是…

chatgpt赋能Python-python5个数从小到大排序

Python中的5个数从小到大排序 在Python中&#xff0c;排序是一个常见的操作。我们经常需要对一组数据进行排序&#xff0c;以便更方便地对数据进行分析和处理。在本文中&#xff0c;我们将探讨Python中如何排序5个数&#xff0c;具体来说&#xff0c;是从小到大排序。 介绍 …

chatgpt赋能Python-python5__3

Python5%-3: 介绍和结论 什么是Python5%-3 Python5%-3是在Python 3语言版本中增加的一个新特性&#xff0c;它是Python语言中对移动开发的支持扩展&#xff0c;这个特性被称为Python5%-3。 具体来说&#xff0c;Python5%-3允许开发者能够更方便地创建移动应用程序&#xff0…

大脑MRI去噪技术研究进展

导读 磁共振(MR)图像诊断的准确性取决于图像的质量&#xff0c;而图像质量下降的主要原因是由于噪声和伪影。噪声是由成像环境错误或传输系统失真所引起的。因此&#xff0c;去噪方法对提高图像质量起着重要作用。然而&#xff0c;在去噪和保留结构细节之间需要权衡。现有的大…

【Linux】Linux 下的权限(初)

d1 目录下有目录dir&#xff0c;和一个普通文件 test.c 重点看到文件的各种权限&#xff0c;拆分清晰地理解&#xff08;重&#xff09; 观察到权限和文件类型一坨除了第一列的文件类型其他的都是文件相关的权限&#xff0c;而且是三个三个分开 为什么分开呢&#xff1f;是因为…

【leetcode】456. 132 模式 单调栈出栈特性

看题意是要在数组中找到一个大于左右元素波峰。 一开始看数据量是 10e5&#xff0c;还以为是 nlogn算法。没想到居然是个 n 的单调栈。 这道题利用了递减单调栈出栈的特性, 出栈元素 k、栈中某一个特定元素 j 满足 nums[j] > nums[k]&#xff0c;如果从数组后面向前遍历的…

什么是uni-app?为什么要学习uni-app?

文章目录 前言 一、什么是uni-app框架&#xff1f; 二、为什么要学&#xff1f; 三、uni-app开发的适用场景是什么&#xff1f; 总结 前言 随着前端技术的不断发展进步&#xff0c;跨端开发成为了程序猿不得不面临的一个难题&#xff0c;uni-app的出现解决了程序猿不断重复…

《Java 核心技术面试》课程笔记(十)

如何保证集合是线程安全的? 典型回答 Java 提供了不同层⾯的线程安全支持。 在传统集合框架内部&#xff0c;除了 Hashtable 等同步容器&#xff0c;还提供了所谓的同步包装器&#xff08;Synchronized Wrapper&#xff09;&#xff0c;我们可以调用 Collections 工具类提供…

16款ChatGPT工具,太炸裂了,收藏!

1.ChatGPT for google 一个浏览器插件&#xff0c;可搭配现有的搜索引擎来使用。 最大化搜索效率&#xff0c;对搜索体验的提升相当离谱&#xff1a; 安装完插件后&#xff0c;在搜索引擎搜索任何问题&#xff0c;都能获取两份答案。 左边是谷歌抓取的全网资源&#xff0c;右…

完美解决:“因为计算机丢失VCRUNTIME140_1.dll”

VCRUNTIME140_1.dll是Microsoft Visual C Redistributable的一个组件&#xff0c;它包含了许多用于C编程的函数和类。如果你的系统缺少了这个文件&#xff0c;那么你可能会遇到“找不到VCRUNTIME140_1.dll无法继续执行代码”的错误提示。 方法1&#xff1a;直接复制VCRUNTIME…

python多进程与多线程

1 Python多线程 1.1 GIL 其他语言&#xff0c;CPU是多核时是支持多个线程同时执行。但在Python中&#xff0c;无论是单核还是多核&#xff0c;同时只能由一个线程在执行。其根源是GIL的存在。GIL的全称是Global Interpreter Lock(全局解释器锁)&#xff0c;来源是Python设计之…

[MySQL]事务的浅谈

欲买桂花同载酒 终不似 少年游 目录 1.MySQL为什么需要事务 2.MySQL对事务的支持 3.关于事务的操作 控制方式(对于单条SQL) 控制方式二(START TRANSACTION 或 BEGIN) 4.关于ACID 5.关于事务的隔离级别 5.1事务可能存在的问题 5.2事务隔离级别 5.3难点(RR 级别 …

Autosar RTE S/R接口implicit与Explicit的实现与区别

文章目录 前言接口的代码implicitIReadIWrite ExplicitReadWrite 区别与使用场景总结 前言 Autosar官方文档阅读起来比较费劲&#xff0c;一般从实际应用中来了解更多规范中的内容。本文介绍最常用的RTE S/R接口的implicit隐式与Explicit显式两种方式的实现与差别 接口的代码…

SSM + MySQL + Vue2.x + ElementU 图书管理系统(期末作业)

图书管理系统 项目介绍 &#x1f525; SSM MySQL Vue2.x ElementUI &#x1f525; 本项目使用 Idea 开发工具采用当前最火的Java Web前端框架开发&#xff0c;在保证质量的同时界面美观&#xff0c;交互友好&#xff0c;实在是期末大作业的首选项目。 软件架构 使用软…

HashMap源码详解

文章目录 简单介绍提出问题流程说明及验证put元素的流程怎样找到要存储的下标位置的?什么时候会扩容? 加载因子、阈值这些有什么含义?怎样扩容的?扩容的流程.链表可以转成红黑树, 那会从红黑树转成链表吗?什么时候会从链表转成红黑树 小总结 简单介绍 HashMap是Java中最最…

Metal入门学习:绘制纹理图片

一、编程指南PDF下载链接(中英文档&#xff09; 1、Metal编程指南PDF链接 https://github.com/dennie-lee/ios_tech_record/raw/main/Metal学习PDF/Metal 编程指南.pdf 2、Metal着色语言(Metal Shader Language:简称MSL)编程指南PDF链接 https://github.com/dennie-lee/ios_te…