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

news2024/12/26 23:08:27

我们学校电气专业开始做电力电子的课设了,小组选了一项制作硬件电路的任务,里面有要求采用数控方式实现DC-DC电压变换的输出电压调节,数控在电路中的体现就是用单片机输出可调占空比的PWM作用于IRF520模块,实现电压的变化,以作用于SG3525驱动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/583181.html

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

相关文章

chatgpt赋能python:Python不等于0:为什么Python成为SEO的热门选择?

Python不等于0&#xff1a;为什么Python成为SEO的热门选择&#xff1f; 如果你正在寻找一门适合SEO的编程语言&#xff0c;Python可能就是你的不二选择。Python在SEO行业越来越流行&#xff0c;因为它具有许多与SEO相关的功能和特点。通过本文&#xff0c;我们将会介绍Python为…

Flutter调优--深入探究MediaQuery引起界面Rebuild的原因及解决办法 | 京东云技术团队

前言 我们可以通过MediaQuery.of(context)方法获取到一些设备和系统的相关信息&#xff0c;比如状态栏的高度、当前是否是黑暗模式等等&#xff0c;使用起来相当方便&#xff0c;但是也要注意可能引起的页面rebuild问题。本文会介绍一个典型的例子&#xff0c;并深入源码来探讨…

chatgpt赋能python:用Python下载MP3的方法

用Python下载MP3的方法 如果你想从互联网上下载MP3&#xff0c;那么你可以使用Python来实现这个任务。在本文中&#xff0c;我们将介绍如何用Python编写程序来下载MP3&#xff0c;同时还将分享一些有用的工具和资源。 Python中使用的库 要下载MP3&#xff0c;你需要使用Pyth…

接口测试简介以及接口测试用例设计思路

接口测试简介 1.什么是接口 接口就是内部模块对模块&#xff0c;外部系统对其他服务提供的一种可调用或者连接的能力的标准&#xff0c;就好比usb接口&#xff0c;他是系统向外接提供的一种用于物理数据传输的一个接口&#xff0c;当然仅仅是一个接口是不能进行传输的&#x…

如何快速入门高性能计算?五个实用学习建议分享

高性能计算 &#xff08;High-Performance Computing&#xff0c;HPC&#xff09;是指通过计算机技术实现高速运算&#xff0c;对大规模科学计算、数据分析、复杂制造等领域的研究与应用提供支撑。目前&#xff0c;HPC已经广泛应用于医学、天文、材料科学、地球科学、气象科学、…

【cmake 学习】cmake判断当前所处系统(CMAKE_SYSTEM_NAME)

目录 1、使用内置变量判断 2、使用变量 CMAKE_SYSTEM_NAME 判断 1、使用内置变量判断 cmake 内置了许多用于表示系统的变量&#xff0c;如 UNIX、WIN32、LINUX、IOS等。假设当前系统为Linux系统&#xff0c;那么 LINUX 变量的值为 1。 更多变量可以参考&#xff1a;cmake-v…

最近距离 | EXCEL中批量查找与原点最近距离的目标点

一 需求 企业送餐、物流、通勤、选址等经常会遇到这样的需求&#xff0c;仓储地是固定的&#xff0c;客户下单后由于客户的地址具有随机性&#xff0c;需按照地理位置分布结合仓储位置进行分析&#xff0c;按距离近及远合理分配仓储&#xff0c;以便节省配送成本。 本文就以这…

深度学习AI编译器-MLIR简介

1、什么是MLIR MLIR&#xff1a;Multi-Level Intermediate Representation 多级中间表达 LLVM下的子项目编译器基础框架统一IR格式&#xff0c;提高通用性和可复用性自带Tensor类型&#xff0c;目前主要用于深度学习领域 中间表达 IR&#xff08;Intermediate Representatio…

Day55【动态规划】392.判断子序列、115.不同的子序列

392.判断子序列 力扣题目链接/文章讲解 视频讲解 本题目可以用双指针法来做 class Solution { public:bool isSubsequence(string s, string t) {// pointer to s, pointer to tint ps 0, pt 0; for (pt 0; pt < t.size(); pt) { // 遍历t&#xff0c;在t中按顺序寻找…

Kali-linux Gerix Wifi Cracker破解无线网络

Gerix Wifi Cracker是另一个aircrack图形用户界面的无线网络破解工具。本节将介绍使用该工具破解无线网络及创建假的接入点。 9.3.1 Gerix破解WEP加密的无线网络 在前面介绍了手动使用Aircrack-ng破解WEP和WPA/WPA2加密的无线网络。为了方便&#xff0c;本小节将介绍使用Geri…

数字图像处理①基于ADMM的全变分去噪算法

文章目录 1. Problem2. 仿真结果3. MATLAB算法4. 源码地址参考文献 1. Problem 在图像处理中&#xff0c;图像信号总会因为各种原因受到噪声的干扰&#xff0c;其中高斯噪声就是典型的干扰类型之一。 针对图像去噪的模型有很多种&#xff0c;其中全变分模型被认为是最有效的模…

北醒Modbus协议在Python下实现功能配置

目录 实验目的测试环境Python库需求Benewake(北醒) TF雷达接口及通讯协议说明接口定义Modbus通信协议说明功能码说明 接线示意图库安装说明例程运行与测试 实验目的 实现485接口系列雷达Modbus协议在Python上实现功能配置。 本例程界面分为主菜单、测距子菜单、配置子菜单&…

社区团购-v.1.6.0更新

likeshop社区团购系统发布新版本1.6.0&#xff0c;主要更新如下&#xff1a; 新增&#xff1a; 小程序-登录引导用户填写头像和昵称 小程序-热更新代码弹窗 后台-正版检测、版本检测 后台-页面装修支持拖拽排序 后台-订单管理增加导出功能 修复&#xff1a; 后台-关联团…

本地化部署AI语言模型RWKV指南,ChatGPT顿时感觉不香了。

之前由于ChatGpt处处受限&#xff0c;又没法注册的同学们有福了&#xff0c;我们可以在自己电脑上本地化部署一套AI语言模型&#xff0c;且对于电脑配置要求也不是非常高&#xff0c;对它就是RWKV。 关于RWKV RWKV是一个开源且允许商用的大语言模型&#xff0c;灵活性很高且极…

Linux之搭建环境

文章目录 1 FileZilla软件2 Linux搭建samba文件共享服务器&#xff0c;实现基于Linux和Windows的共享文件服务2.1 smaba的安装与基本应用2.2 samba的账号权限配置 1 FileZilla软件 在跟着正点原子教程安装后&#xff0c;出现如下问题 解决方法如下 参考文章解决FileZilla连接…

游戏配音怎么弄的?分享三个游戏配音制作方法

随着时代的发展&#xff0c;人们对于配音的要求也越来越高&#xff0c;除了传统的文字配音外&#xff0c;现在又出现了游戏配音。其实游戏配音也是有一定门槛的&#xff0c;并不是人人都可以做得好的。但是如果你想要拥有一位自己喜欢的游戏角色&#xff0c;那么你就要学会游戏…

MyBatis 快速入门(上)

文章目录 一. MyBatis 是什么?二. 学习 MyBatis 的意义三. MyBatis 学习四. 创建 Mybatis 查询4.1 创建数据库和表4. 2 MyBatis 环境搭建1. 添加 MyBatis 框架支持image-202305052040340772. 设置 MyBatis 的配置信息2.1 设置数据库连接的相关信息2.2 MyBatis 的xml 保存路径 …

如何白嫖可联网GPT- NEW Bing

这里写自定义目录标题 前沿方法安装总结 前沿 目前我们想体验可联网的GPT只能去OPENAI官网购买plus会员&#xff0c;一个月20刀&#xff0c;换算一下的话大概在140左右&#xff0c;当然由于OPENAI某些原因经常封禁不符合规定的账号&#xff0c;那么有没有一种办法能白嫖快速的…

Qt Qml 实现键鼠长时间未操作锁屏

文章目录 摘要实现思路键盘鼠标监控百度到的方法我的自己方法 最后 关键字&#xff1a; Qt、 Qml、 QInputEvent 、 QStandardItem、 eventFilter 摘要 今日需求&#xff1a; 项目中需要实时检测用户是否长时间为操作键盘和鼠标&#xff0c;如果超过预设时间未操作键盘和…

Linux之管道

目录 Linux之管道 操作符号 作用 用法 管道符使用场合 匿名管道与命名管道的区别 如何创建命名管道 案例举例 案例1 --- 将/etc/passwd中的用户按UID大小排序 案例2 --- 统计出最占CPU的5个进程 案例3 --- 统计当前/etc/passwd中用户使用的shell类型 案例4 --- 统计网站…