蓝桥杯嵌入式学习记录——PWM输出

目录

一、PWM原理介绍

二、学习目的

三、cubeMX的配置

四、PWM输出代码


一、PWM原理介绍

        PWM(Pulse Width Modulation,脉宽调制)是一种通过改变信号的脉冲宽度控制电平的技术。它通过调整脉冲信号的占空比(高电平时间与周期的比例)来实现对电压或电流的精确控制。

PWM的原理可以简单描述为以下几个步骤:

  1. 选择一个固定的周期:PWM信号由一系列周期性的脉冲组成,其中周期是固定的,表示脉冲信号的重复时间。

  2. 设置一个目标值:根据需要控制的设备或系统,设置一个目标值,例如期望的电压或电流。

  3. 比较目标值和当前值:将目标值与一个计数器进行比较,该计数器在每个周期内递增。如果目标值大于计数器的当前值,则输出高电平;如果目标值小于计数器的当前值,则输出低电平。

  4. 调整占空比:通过调整目标值与计数器的比较关系,可以改变脉冲信号的占空比。占空比越大,高电平时间越长,输出电平的平均值也就越高;占空比越小,高电平时间越短,输出电平的平均值也就越低。

  5. 输出PWM信号:根据比较结果,生成相应的脉冲信号。通常,高电平表示逻辑1或高电平电压,低电平表示逻辑0或低电平电压。

二、学习目的

        我们今天的学习目的是完成第十一届蓝桥杯嵌入式真题中的两路PWM输出部分,通过PA6、PA7两个引脚输出PWM脉冲,频率分别为100MHz、200MHz,并且通过两个按键来分别调节两路PWM输出的占空比,每次按下按键增加10%的占空比。

三、cubeMX的配置

我们需要通过定时器来完成PWM的输出,所以需要设置两个引脚为PWM输出引脚

1、打开cubeMX,选择PA6、PA7引脚并设置为定时器引脚

由上图可知,将PA6设置为TIM16_CH1,PA7设置为TIM17_CH1

这是因为我们需要选择通道1进行输出,而同为通道1的TIM3在上一节按键的使用中已经被用作按键的中断定时器,所以选择定时器16、17的通道1来进行PWM输出

2、点击Timers,选择TIM16、TIM17,勾选Activated打开使能,选择PWM Generation CH1

然后设置分频系数,预分频器值设置为8000-1数器重载值设置为100-1,此时脉冲频率为100MHz

同理,预分频器值设置为4000-1数器重载值设置为100-1,此时脉冲频率为200MHz

公式如下:

定时时间 = (预分频器值\times计数器重载值)/ 定时器时钟频率

脉冲频率 = 1 / 定时时间

3、设置脉冲数为20

四、PWM输出代码

        由于定时器的代码在cubeMX配置完成后就会自动生成,所以只需要在主函数中调用以下函数来启动定时器16、17:

HAL_TIM_PWM_Start(&htim16, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);

再用以下函数设置占空比即可:

__HAL_TIM_SetCompare(&htim16, TIM_CHANNEL_1, pa6_duty);__HAL_TIM_SetCompare(&htim17, TIM_CHANNEL_1, pa7_duty);

其中pa6_duty和pa7_duty是占空比,范围是10-90

与PWM输出相关的主函数代码如下:

main.c

// main.c#include "main.h"
#include "tim.h"
#include "gpio.h"#include "led.h"
#include "lcd.h"
#include "interrupt.h"
#include "stdio.h"...  // 省略部分初始代码extern struct keys key[];
uchar pa6_duty = 10;       // 定义占空比
uchar pa7_duty = 10;       // 定义占空比char view = 0;             // 用于表示界面 0 or 1
char text[30];             // LCD显示的内容
void key_proc(void)        // 通过按键来切换界面、调节PWM占空比
{if(key[3].flag == 1){view =! view;key[3].flag = 0;}if(key[0].flag == 1){pa6_duty += 10;if(pa6_duty >= 100) pa6_duty = 10;__HAL_TIM_SetCompare(&htim16, TIM_CHANNEL_1, pa6_duty);key[0].flag = 0;}if(key[1].flag == 1){pa7_duty += 10;if(pa7_duty >= 100) pa7_duty = 10;__HAL_TIM_SetCompare(&htim17, TIM_CHANNEL_1, pa7_duty);key[1].flag = 0;}
}void disp_proc(void)      // 界面的切换
{if(view == 0){sprintf(text, "       Para");LCD_DisplayStringLine(Line0,(unsigned char *)text);LCD_DisplayStringLine(Line1,(unsigned char *)"                    ");LCD_DisplayStringLine(Line2,(unsigned char *)"                    ");}if(view == 1){sprintf(text, "       DATA");		LCD_DisplayStringLine(Line0,(unsigned char *)text);sprintf(text, "    PA6:%d / 100     ", pa6_duty);LCD_DisplayStringLine(Line1,(unsigned char *)text);sprintf(text, "    PA7:%d / 100     ", pa7_duty);LCD_DisplayStringLine(Line2,(unsigned char *)text);		}
}int main()
{
...// 省略部分初始代码LCD_Init();                // LCD的初始化LCD_Clear(Blue);LCD_SetBackColor(Blue);LCD_SetTextColor(White);HAL_TIM_Base_Start_IT(&htim3);              // 开启定时器3HAL_TIM_PWM_Start(&htim16, TIM_CHANNEL_1);  // 开启定时器16HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);  // 开启定时器17while(1)
{disp_proc();key_proc();	
}
}

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

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

相关文章

软考 系统分析师系列知识点之信息系统战略规划方法(8)

接前一篇文章:软考 系统分析师系列知识点之信息系统战略规划方法(7) 所属章节: 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.4 战略数据规划法 按照詹姆斯.马丁(James Martin)的观点&a…

互联网加竞赛 基于计算机视觉的身份证识别系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-sen…

【STM32 CubeMX】I2C中断方式与DMA方式

文章目录 前言一、I2C中断方式1.1 CubeMX配置I2C中断1.2 I2C中断函数使用Master模式Mem模式 1.3 DMA方式发送和接收CubeMX配置IIC DMA方式Master模式Mem模式 总结 前言 在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可…

基于非线性系统的Lipschitz观测器simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1非线性系统及观测器概述 4.2 Lipschitz观测器原理 5.完整工程文件 1.课题概述 基于非线性系统的Lipschitz观测器simulink建模与仿真,该系统设计了一个观测器,称为Lipschitz观…

Capacity Maximization for Movable Antenna Enabled MIMO Communication

文章目录 II. SYSTEM MODEL AND PROBLEM FORMULATIONC. Problem Formulation III. PROPOSED ALGORITHMA. Alternating OptimizationB. Solution for Problem (P2-m) APPENDIX II. SYSTEM MODEL AND PROBLEM FORMULATION C. Problem Formulation 为了揭示支持 MA 的MIMO通信的…

【LeetCode: 103. 二叉树的锯齿形层序遍历 + BFS】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

定时器0中断实验

实现现象:下载程序后,D11小灯循环点亮1秒,熄灭1秒。使用单片机内部定时器可以实现准确延时。 注意事项:无。 程序代码: #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedef unsign…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第三天-ARM Linux ADC和触摸屏开发 (物联技术666)

链接:https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd1688 提取码:1688 教学内容: 1、ADC S3C2440的A/D转换器包含一个8通道的模拟输入转换器,可以将模拟输入信号转换成10位数字编码。 在A/D转换时钟频率为2.5MHz时&…

用结构体数组,完成宠物信息登记管理。

管理宠物的名字&#xff0c;品种&#xff0c;年龄。 实现功能如下: 1.插入宠物信息 2.遍历宠物信息 #include <stdio.h> #define N 100 typedef struct chongwu { char name[20]; char pingz[10]; int age; }cw; void intset_cw(cw *ptr,int *pnum) { printf("请…

第三十回 张都监血溅鸳鸯楼 武行者夜走蜈蚣岭-python可接受任意数量参数的函数

武松回到孟州城&#xff0c;来到张都监后花园墙外&#xff0c;这是一个马院&#xff0c;问清楚后槽张团练他们三人还在鸳鸯楼吃酒&#xff0c;直接一刀杀了。武松从后门这里爬过墙&#xff0c;来到了厨房&#xff0c;将两个还在服侍的丫环杀了。 武松认得路&#xff0c;蹑手蹑…

揭秘分账系统的神奇力量,快速实现财务高效分配!

当今电商企业面对的财务管理挑战日益复杂&#xff0c;需要精确、高效的财务分配方案来应对。而分账系统正是应运而生的一项神奇科技&#xff0c;它以其优秀的性能和功能&#xff0c;迅速成为电商、连锁企业、集市、农贸市场等财务管理的不可或缺的利器。 一、财务高效分配的重要…

Java Web 中forward 和 redirect 的区别

前言 在Java Web开发中&#xff0c;页面跳转是构建用户界面和实现业务逻辑的重要组成部分。Forward&#xff08;转发&#xff09;和Redirect&#xff08;重定向&#xff09;是两种常见的跳转方式&#xff0c;它们分别具有不同的特点和适用场景。正确地选择和使用这两种跳转方式…

LeetCode 250. Count Univalue (二叉树后序遍历好题)

LeetCode 250. Count Univalue Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of the subtree have the same value. Example : Input: root [5,1,5,5,5,null,5] 5 / 1 5 / \ 5 5 5 Output: 4 解法1&#xff1a;…

Rust中的模块路径和pub关键字详解

Rust是一门注重安全性和性能的系统编程语言&#xff0c;其模块系统提供了一种有力的组织代码的方式。在本文中&#xff0c;我们将介绍Rust中的模块路径&#xff08;Path&#xff09;和pub关键字的用法。 模块结构 首先&#xff0c;让我们看一下一个简单的Rust模块示例&#x…

4 scala集合-Map

和 Java 一样&#xff0c;Scala 也有表示键值对&#xff08;Key-Value&#xff09;集合的 Map 数据结构。同样&#xff0c;Map 也分不可变和可变&#xff0c;不可变需要使用类 scala.collection.mutable.Map。 1 不可变 Map 可以使用以下语法定义不可变 Map 对象 val/var ma…

高性能MySQL 阅读笔记

mysql由服务器端与存储引擎两部分组成&#xff0c;存储引擎部分的锁机制对服务器端是透明的。服务器端内置缓存机制&#xff0c;有解析器和优化器机制。不同的存储引擎对事务、并发等都用不同的处理。 ACID代表的特性&#xff1a;原子性、一致性、隔离性、持久性 共享锁与排他…

ChatGPT重大升级:能自动记住用户的习惯和喜好,用户有权决定是否共享数据给OpenAI

OpenAI刚刚宣布了ChatGPT的一项激动人心的更新&#xff01; OpenAI在ChatGPT中新加了记忆功能和用户控制选项&#xff0c;这意味着GPT能够在与用户的互动中记住之前的对话内容&#xff0c;并利用这些信息在后续的交谈中提供更加相关和定制化的回答。 这一功能目前正处于测试阶…

【机器学习笔记】5 机器学习实践

数据集划分 子集划分 训练集&#xff08;Training Set&#xff09;&#xff1a;帮助我们训练模型&#xff0c;简单的说就是通过训练集的数据让我们确定拟合曲线的参数。 验证集&#xff08;Validation Set&#xff09;&#xff1a;也叫做开发集&#xff08; Dev Set &#xf…

XMall 开源商城 SQL注入漏洞复现(CVE-2024-24112)

0x01 产品简介 XMall 开源电商商城 是开发者Exrick的一款基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等。 0x02 漏洞概述 XMall 开源商城 /item/list、/item/listSearch、/sys/…

【天幕系列 03】深度学习领域的最新前沿:2024年的关键突破与趋势

文章目录 导言01 深度学习的基本原理和算法1.1 神经网络&#xff08;Neural Networks&#xff09;1.2 前馈神经网络&#xff08;Feedforward Neural Network&#xff09;1.3 反向传播算法&#xff08;Backpropagation&#xff09;1.4 激活函数&#xff08;Activation Function&…