蓝桥杯09-PWM脉冲调制的操作

2023-05-16

目录

一、原理

二、设置思路:

三、题目练习


一、原理

 1.脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

2、配置PWM模块的功能,具体有:

①:设置PWM定时器周期,该参数决定PWM波形的频率。

②:设置PWM定时器比较值,该参数决定PWM波形的占空比。

3.简单来说,就是通过控制PWM的占空比duty(高电平所占时间)来实现所需的功能;(第七届比赛赛题)

二、设置思路:

计算出占空比在给定频率(1KHz)下的时间,通过引入count变量,以一个脉冲周期100次为例,60%占空比就是count++到60次高电平状态;当count=duty(占空比)时,执行操作;

对于多状态转换,使用状态机更好

三、题目练习

以b站小蜜蜂老师的题目为引例:

 

#include "reg52.h"

sbit L1 = P0^0;
sbit S7 = P3^0;

void SelectHC573(unsigned char channel)
{
	switch(channel)
	{
		
		case 4: P2 = (P2 & 0x1f) | 0x80; break;
		case 5: P2 = (P2 & 0x1f) | 0xa0; break;
    case 6: P2 = (P2 & 0x1f) | 0xc0; break;
	  case 7: P2 = (P2 & 0x1f) | 0xe0; break;
	}
	
}

unsigned char count=0;
unsigned char pwm_duty=0; //占空比设置为可变
void InitTimer0()
{
	TMOD = 0x01;
	TH0 = (65535 - 100) / 256;
	TL0 = (65535 - 100) % 256;
	
	ET0 = 1;
	EA = 1;
	
}

void ServiceTimer() interrupt 1
{
	TH0 = (65535 - 100) / 256;       //10 ms = 10000us  定时中断100us,则100次中断达到一个周期
	TL0 = (65535 - 100) % 256;       //    将一个脉冲划分为100份,若占空比10%,则计数10次高电平后计数90次低电平后置零完成
	
	count++;
	if(count == pwm_duty)
	{
		L1 = 1 ;
	}
	
	
	else if(count == 100)
	{
		L1 = 0;
		count = 0;
	}
	
	
}



void Delay(unsigned char t)
{
	while(t--);
}
unsigned char stat=0;
void ScanKey()
{
	if(S7 == 0)
	{
		Delay(500);
		if(S7 == 0)
		{
			 //多状态时使用状态机的跳转
			switch(stat)
			{
				case 0 : L1 = 0; 
								TR0 = 1;
								pwm_duty = 10;
								stat = 1;
				break;
				
				case 1 : 
								pwm_duty = 50;
								stat = 2;
				break;
				
				case 2 : 
								pwm_duty = 90;
								stat = 3;
				break;	
				
					case 3 : 
								L1 = 1;
					     TR0 = 0;
								stat=0;
				break;
			}
			while (S7 == 0); //防止出现误判误操作
		}
	
	}
}



void main()
{
	SelectHC573(4);
	L1 = 1;
	InitTimer0();
	while(1)
	{
		ScanKey();
	}
	
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯09-PWM脉冲调制的操作 的相关文章

  • 蓝桥杯09-PWM脉冲调制的操作

    目录 一 原理 二 设置思路 xff1a 三 题目练习 一 原理 1 脉冲宽度调制 xff08 PWM xff09 是一种对模拟信号电平进行数字编码的方法 通过高分辨率计数器的使用 xff0c 方波的占空比被调制用来对一个具体模拟信号的电平
  • stm32中pwm频率和占空比设置

    对于72M频率来说 xff0c 计算pwm频率是 xff1a 频率 xff1a Fpwm 61 72M arr 43 1 psc 43 1 单位 xff1a Hz 占空比 xff1a duty circle 61 TIM3 gt CCR1
  • 我感觉现代交流传动技术及其控制系统,似乎就是讲的电机控制,PWM控制,似乎还讲到了串级控制调速。

    我感觉现代交流传动技术及其控制系统 xff0c 似乎就是讲的电机控制 xff0c PWM控制 xff0c 似乎还讲到了串级控制调速 先是传动 xff0c 然后传动里面分为交流传动 无人机的电机算不算交流传动
  • DSP28335的PWM信号

    DSP的PWM信号 简介 DSP28335共12路16位的ePWM xff0c 能进行频率和占空比控制 ePWM的时钟TBCLK 61 SYSCLKOUT HSPCLKDIV CLKDIV PWM信号频率由时基周期寄存器TBPDR和时基计数
  • STM32F103系列PWM波

    话不多说 xff0c 直接上我能跑通的代码 pwm h span class token macro property span class token directive hash span span class token direct
  • TM4C123系列(三)————PWM输出

    一 实验介绍 使用PWM控制板载LED绿灯与蓝灯交替呼吸闪烁 二 PWM介绍 TM4C123有两个PWM模块 xff0c 每个模块有四个发生器和一个控制模块 xff0c 每个发生器可以产生两路PWM输出 xff0c 一共可以输出16路PWM
  • Linux驱动开发(十七)---树莓派PWM驱动

    前文回顾 Linux驱动开发 xff08 一 xff09 环境搭建与hello world Linux驱动开发 xff08 二 xff09 驱动与设备的分离设计 Linux驱动开发 xff08 三 xff09 设备树 Linux驱动开发 x
  • 蓝桥杯之单片机学习(十)——PWM脉宽调制信号的发生与控制

    文章目录 一 训练任务1 1 具体要求 二 代码展示三 一些介绍 一 训练任务 在CT107D单片机综合训练平台上 xff0c 利用PWM脉宽信号实现独立按键S7对L1指示灯亮度变化的控制 1 1 具体要求 PWM脉宽信号的频率为100Hz
  • STM32通过PWM控制ESC30C电调

    最近在搞一个水下推进器 xff0c 这东西的控制其实跟四旋翼的螺旋桨控制差不多 但我也是第一次用STM32板子来控制电调驱动桨叶旋转 xff0c 因此踩了很多坑 网上找了很多资料 xff0c 但是很多都写的不是很清楚 xff0c 这边稍微记
  • Simulink 使用C语言发PWM波 (二)触发采样

    1 定义结构体 2 定义S Function输出端口数量 3 定义采样时间 4 初始化参数 5 用代码实现三角波载波 根据调制波配置占空比并在计数器为0时采样电感电流 6 simulink图 至此实现了电感电流使用C语言采样
  • STM32CubeIDE---HAL库PWM使用速记

    一 如何计算 理论分析 xff1a HAL库函数之呼吸灯 PWM波 简书 jianshu com 预分频系数 PSC 自动重装载值 ARR 捕获 比较寄存器值 CCR 频率计算 xff1a 定时器频率 PSC 43 1 ARR 43 1 占
  • STM32F103VCT6 高级定时器的PWM输出

    要求得到下列波形 xff0c 死区时间1us CH1和CH1之间的相位差事3us 频率50HZ 1 xff0c To get TIM1 counter clock at 72MHz the prescaler is computer as
  • STM32输出PWM波形错误解析

    一 背景 项目中需要用STM32F407输出4路PWM波形控制两个A4950模块 xff0c 从而驱动2个直流电机 使用TIM1的在PE9 PE11 PE13 PE14上分别产生4路PWM波形 xff0c 前两路 xff08 记作pwm1
  • 【STM32CubeMX】使用STM32F103C8T6输出PWM波形实现呼吸灯

    STM32CubeMX 使用STM32F103C8T6输出PWM波形实现呼吸灯 一 关于PWM二 Cube MX创建工程三 修改代码四 效果展示五 总结六 参考与代码下载 一 关于PWM 1 关于PWM 含义 PWM xff08 Pulse
  • stm32使用PWM播放音频

    我之前研究过STM32的DAC播放wav音频文件 xff0c 今天突然发现使用PWM也可以实现WAV文件的播放 xff0c 让在大开了眼界 xff0c 转载如下 xff1a stm32使用PWM播放音频 pwm stm32 dac pcm
  • stm32通用定时器输出PWM控制舵机

    stm32的通用定时器有TIM2 TIM3 TIM4 TIM5 xff0c 每个定时器都有独立的四个通道可以作为 xff1a 输入捕获 输出比较 PWM输出 单脉冲模式输出等 stm32除了基本定时器 xff0c 其他定时器都能输出PWM
  • 用PWM控制舵机(以是stm32为例)

    因为做校创需要用到舵机 xff0c 以前知道大致的理论 xff0c 因此看了一些帖子 xff0c 总结一下被以后查看 什么是PWM波 PWM就是脉冲宽度调制 xff0c 也就是占空比可变的脉冲波形 pwm的占空比 xff0c 就是指高电平保
  • PMIC驱动之—PMIC硬件相关知识

    PMIC 电源管理集成电路 Power Management IC 在之前项目中 驱动最小系统 对于PMIC这块儿很懵懂 故抽时间查看一些优秀博文及资料 加强对电源管理的理解 本文介绍 PMIC 硬件电路相关的一些知识 在此作一些阶段性的学
  • 快速学习Stm32舵机控制板控制多个舵机运动以及调速

    本次分享stm32对多个舵机的控制 之前讲解过单个舵机的控制 以及控制原理 定时器的使用和pwm的输出来控制一个舵机的角度转向 这次就和大家分享一下多个舵机的控制以及调速 利用单片机实现对 8 个舵机的同时控制 掌握多个舵机控制程序实现方法
  • STM32通用定时器使用详解

    1 通用定时器基本介绍 通用定时器包括TIM2 TIM3 TIM4和TIM5 STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成 每个定时器都是完全独立的 没有互相共享任何资源 它们可以一起同步操作 定时器可以进行定

随机推荐

  • Xshell连接不上Ubuntu 20.04.1 LTS的解决方案

    第一步 xff1a 打开终端输入ifconfig查看IP地址是否错误 xff0c 如果提示如下图 xff0c 需要安装net tools xff0c 输入如下命令 sudo apt install net tools 第二步 xff1a 安
  • “花生壳”实现内网穿透搭建个人网站

    我们先简单介绍一下内网穿透 xff0c 也叫 NAT 穿透 xff0c 进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机 xff0c 在目前国内的内网穿透工具很多 xff0c
  • arch linux 超全安装

    Arch Linux安装 1 制作安装介质 下载ISO镜像文件 xff1a https archlinux org download 官方下载网址 注 xff1a 下载选择 xff0c 中国镜像 制作安装介质 xff1a 在Windows中
  • MySQL8.0远程连接和用户授权相关设置

    文章目录 1 开启MySQL远程连接2 关闭MySQL远程连接3 修改防火墙规则 xff0c 开放端口4 创建用户以及给用户授权5 删除用户及权限 1 开启MySQL远程连接 mysql u root p 进入MySQL数据库后进行一下操作
  • Git代码回归到指定commit

    摘要 工作中 xff0c Git的使用越来越频繁 除了最常用的clone add commit push pull等命令 xff1b 还有回退命令reset 这一篇博客就记录一下该回退命令的简单使用 现在有了可视化工具方便很多 xff0c
  • openGauss企业版安装

    openGauss企业版安装 一 下载openGauss 企业版软件包二 安装Python 3三 安装系统软件依赖四 系统环境设置1 关闭防火墙 安装好了记得打开 2 关闭SELINUX3 设置时区和时间4 设置网卡MTU值5 查看host
  • 专项测试实战 | 如何测试 App 流畅度(基于 FPS 和丢帧率)

    本文为霍格沃兹测试学院学员学习笔记 xff0c 进阶学习文末加群 FPS 和丢帧率可以在一定程度上作为 APP 流畅度的一项衡量标准 xff0c 本文介绍利用 adb shell dumpsys gfxinfo 命令获取软件渲染加载过程的数
  • iOS 视图(UIView)动画

    如果需要在视图 xff08 UIView xff09 上进行一些简单动画 xff0c 可以使用视图动画 视图动画底层也是使用Core Animation xff0c 只是动画的实现细节都封装起来了 UIKit类通常都有animated布尔型
  • MyBatis重复查询产生的一级缓存问题,导致查询失败

    问题 业务场景一直在一个事务中执行同一个sql xff0c myBatis默认第一次查询数据库 xff0c 第二次直接在一级缓存中取 那么在复杂业务中 xff0c 别的线程改变数据的时候 xff0c 那么久可能造成一直使用缓存中的值而造成数
  • 如何安全的从ubuntu16.04升级到18.04?

    Ubuntu全盘备份与恢复 xff0c 亲自总结 xff0c 实测可靠 按照ubuntu官方发布计划 xff0c ubuntu16 04将在2021年4月停止工作 xff0c 加上新出的一些硬件和算法都是考虑了到18 04的兼容 xff0c
  • 当Mysql的Update和Deletes语句不能使用报错时的问题

    当发生Error Code 1175 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
  • Python代码使用tesseract进行文字识别console没有反应

    今天使用tesseract进行识别 xff0c 跟着B站的视频写了如下代码 span class token keyword import span pytesseract span class token keyword as span
  • 【C++】string的深浅拷贝问题

    深浅拷贝 问题引入浅拷贝深拷贝总结 问题引入 对于一个普通的string类 xff1a class String public String const char str 61 34 34 构造函数 if nullptr 61 61 str
  • 安装debian11系统

    镜像下载地址 xff1a https gemmei ftp acc umu se debian cd current amd64 iso cd debian 11 6 0 amd64 netinst iso 一 选择图形化安装 xff08
  • 头歌平台(EduCoder)————软件测试(黑盒测试)

    第1关 xff1a 等价类划分法 任务描述 本关任务 xff1a 编写代码 xff0c 使用等价类划分法进行黑盒测试 相关知识 为了完成本关任务 xff0c 你需要掌握等价类划分法 第2关 xff1a 边界值法 任务描述 本关任务 xff1
  • Copilot插件下载--IDEA

    1 将你的 github copilot 更新到最新版本 xff08 1 1 24 1610 xff09 然后关闭idea 2 下载这个版本的 github copilot 1 1 20 1417 https plugins jetbrai
  • 蓝桥杯(2)——蜂鸣器与继电器的使用

    目录 蜂鸣器与继电器的使用 一 原理 二 代码控制 三 与LED的连接控制举例 蜂鸣器与继电器的使用 一 原理 首先 xff0c 如何去控制蜂鸣器与继电器呢 xff0c 必须要知道的是蜂鸣器与继电器的各个引脚图 xff08 如下 xff09
  • 蓝桥杯05-独立按键的操作

    目录 xff08 一 xff09 1 原理 xff1a 2 思路 xff1a 一般按下某一键 xff0c 以S7为例时 xff0c 用if函数判断是否按下来执行之后的操作 xff08 延时去抖动 xff09 xff08 二 xff09 xf
  • 蓝桥杯07-51单片机的中断系统

    1 中断 xff1a 你正在追电视剧 神雕侠侣 正看得入迷的时候 xff0c 电话响了 xff0c 你暂停电视剧 xff0c 去接电话 xff0c 在接电话的过程中 xff0c 门铃又响了 xff0c 你暂时放下电话 xff0c 去把门打开
  • 蓝桥杯09-PWM脉冲调制的操作

    目录 一 原理 二 设置思路 xff1a 三 题目练习 一 原理 1 脉冲宽度调制 xff08 PWM xff09 是一种对模拟信号电平进行数字编码的方法 通过高分辨率计数器的使用 xff0c 方波的占空比被调制用来对一个具体模拟信号的电平