当前位置: 首页 > news >正文

零基础STM32单片机编程入门(八)定时器PWM输入实战含源码视频

文章目录

    • 一.概要
    • 二.PWM输入框架图
    • 三.CubeMX配置一个PWM输入例程
      • 1.硬件准备
      • 2.创建工程
      • 3.调试
    • 四.CubeMX工程源代码下载
    • 五.讲解视频链接地址
    • 六.小结

一.概要

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用单片机数字输出(1或0)来对外部模拟电路进行控制的一种非常有效的技术。
在这里插入图片描述
在闭环控制系统中,通过实时监测PWM信号的频率变化,可以及时做出反馈调整,保证系统稳定工作。 对于外部输入的PWM信号,需要获取其精确的频率值来匹配内部PWM模块,实现精准同步或者解码其他信息。当PWM信号出现异常(如频率超出预设范围),可以通过输入捕获快速检测并采取相应的保护措施,所以研究PWM输入也有意义。

二.PWM输入框架图

定时器部分框图如下,其中PWM相关的主要是基本定时器和PWM输入控制部分。

PWM输入检测部分信号流向

在这里插入图片描述

该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:
● 两个ICx信号被映射至同一个TIx输入。
● 这2个ICx信号为边沿有效,但是极性相反。
● 其中一个TIxFP信号被作为触发输入信号,而从模式控制器被配置成复位模式。

在这里插入图片描述

如下图所示:
TI1为输入PWM波信号波形,TIMx_CNT为计数器计数值,当第一个下降沿信号到来,IC2会先进行捕获,然后到下一个上升沿到来,IC1进行捕获!在捕获的同时,IC1和IC2会把CNT的值映射到对应的CCR1、CCR2的寄存器里面,这个值就是我们需要的计数值!

那么我们所需测量的周期就是IC1捕获的值,脉冲宽度即为IC2测量的值。

在这里插入图片描述

三.CubeMX配置一个PWM输入例程

1.硬件准备

STLINK接STM32F103C8T6小系统板,STLINK接电脑USB口。

在这里插入图片描述

2.创建工程

打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F103C8,再双击就创建新的工程
在这里插入图片描述
配置下载口引脚
在这里插入图片描述
配置外部晶振引脚
在这里插入图片描述
配置系统主频
在这里插入图片描述
配置TIM1,1ms定时器,TIM1内部时钟是72MHZ,72分频就是1MHZ,计数1000次归零,计数时间就是1ms,脉冲宽度是500us,根据上述配置,PWM波频率就是1KHZ,占空比就是50%。
在这里插入图片描述

配置定时器3通道2为PWM输入引脚,TI2FP2触发,CH2采样上升沿,CH1采样下降沿

在这里插入图片描述
定时器3中断使能
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述
生成工程
在这里插入图片描述
用Keil5打开工程
在这里插入图片描述

增加代码
在这里插入图片描述

在这里插入图片描述
主要代码

/* Duty Cycle Value */
__IO uint32_t            TempDutyCycle = 0,DutyCycle;//占空比
/* Frequency Value */
__IO uint32_t            TempFrequency = 0,Frequency;//频率
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{/* Prevent unused argument(s) compilation warning */if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2){/* Get the Input Capture value */TempDutyCycle = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);//捕捉占空比}if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){/* Get the Input Capture value */TempFrequency = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);//捕捉周期}/* NOTE : This function should not be modified, when the callback is needed,the HAL_TIM_IC_CaptureCallback could be implemented in the user file*/
}int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */if (HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1) != HAL_OK)//启动定时器通道1,PWM输出{/* PWM generation Error */while(1);}if (HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_2) != HAL_OK)//使能TIM3通道2捕捉{/* Starting Error */while(1);  }if (HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1) != HAL_OK)//使能TIM3通道1捕捉{/* Starting Error */while(1);}/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */HAL_Delay(1000);//等待1秒if(TempFrequency!=0){Frequency=1000000/TempFrequency;DutyCycle=TempDutyCycle*100/TempFrequency;}/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

3.调试

用杜邦线把板子的PA7和PA8连接起来,这样PA8引脚输出的PWM波,就能被PA7采集到。
进入调试模式,把Frequency跟DutyCycle放入到Watch窗口,就能看到PWM输入的信号的周期跟占空比
在这里插入图片描述

四.CubeMX工程源代码下载

链接:https://pan.baidu.com/s/1gq_kl9D9f6LEp5Ng4jZG4Q
提取码:ryf8
如果链接失效,可以联系博主给最新链接

程序下载下来之后解压就行

五.讲解视频链接地址

PWM输入讲解视频

六.小结

PWM输入虽然没有PWM输出使用那么广泛,但通过PWM信号进行两个设备之间握手已经很普遍的使用,比如新能源充电枪之间握手等应用。

相关文章:

零基础STM32单片机编程入门(八)定时器PWM输入实战含源码视频

文章目录 一.概要二.PWM输入框架图三.CubeMX配置一个PWM输入例程1.硬件准备2.创建工程3.调试 四.CubeMX工程源代码下载五.讲解视频链接地址六.小结 一.概要 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用单…...

spring cloud gateway客户端websocket断开连接,服务侧连接没有关闭的问题处理

之前在单体架构项目中使用了websocket主动推送消息的功能,后来改成了微服务架构,结果发现部分消息丢失,没能推送给客户端;深入排查发现服务端无法感知websocket连接状态,但是在单体架构里面是没这个问题的,…...

确认下单:购物车页面点击 去结算 按钮发起两个请求trade(显示购物车的商品信息和计算商品的总金额)findUserAddressList

文章目录 1、确认下单:购物车页面点击去结算1.1、在OrderController类中创建 trade 方法1.2、在CartController类中创建 checkedCartInfos1.3、CartServiceImpl 实现 checkedCartInfos的业务功能1.4、在service-cart-client模块下定义远程openFeign接口1.5、在SpzxO…...

聚类分析方法(一)

目录 一、聚类分析原理(一)聚类分析概述(二)聚类的数学定义(三)簇的常见类型(四)聚类框架及性能要求(五)簇的距离 二、划分聚类算法(一&#xff0…...

Midjourney对图片细微调整和下载保存

点击v2是对第二图片细微调整。 点击u3对第3张图片进行放大。 保存图片: 对点击u3放大的图片,双击 , 右键保存图片...

Python文件写入操作

本套课在线学习视频(网盘地址,保存到网盘即可免费观看): ​​https://pan.quark.cn/s/b19a7c910cf6​​ 在Python编程中,文件操作是一项基础且重要的技能。本文将详细介绍如何使用Python将列表内容写入文件以实现文件…...

FPGA_GTX:简要版

1. GTX介绍 Xilinx FPGA的GT意思是Gigabyte Transceiver。通常称呼为Serdes、高速收发器。GT在xilinx不同系列有着不同的产品,从7系列到UltraScale系列分别有GTP、GTX、GTZ、GTH、GTY和GTM。不同GT整体结构上类似,为了支持越来越高的line rate&#xff…...

使用mq向队列发送消息流程

新建队列q1和q2绑定交换机和队列之间的消息路由向默认的交换机发送消息查看两个队列中的交换机消息(get messages),也可以在overview选项卡页面查看实时流量图 这里注意: 1.交换机是转发消息用的,他并没有存储消息的…...

Git中两个开发分支merge的原理

一 分支合并 1.1 原理 分支合并:就是将A分支修改后且commit的内容,合并到B分支,这些修改且提交的内容和B分支对应的内容和位置进行比较: 1.不一样的话,提示冲突,需要人工干预。 2.一样的话,…...

数字图像处理、机器视觉(计算机视觉)、计算图形学概念

数字图像处理(Digital Image Processing)--又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程,以提高图像的实用性,达到人们所要求的预期结果。从输入到输出来看,数字图…...

Android SurfaceFlinger ——获取显示屏信息(十八)

经过前面文章对开机启动动画的流程梳理,引出了实际上在开机启动动画中,并没有Activity,而是通过 OpenGL es 进行渲染,最后通过某种方式,把数据交给 Android 渲染系统。 让我们回忆一下开机动画前期准备的相关步骤,大致分为如下几个: 1)getInternalDisplayToken:获取显…...

QCustomPlot+ vs2022+ qt

零、printSupport 步骤一:下载QCustomPlot 访问QCustomPlot的官网 QCustomPlot 下载最新版本的源代码。 步骤二:配置项目 创建新的Qt项目: 打开VS2022,创建一个新的Qt Widgets Application项目。 将QCustomPlot源代码添加到项目…...

Perl 语言开发(五):循环语句

目录 1. 循环语句概述 2. while 循环 2.1 基本语法 2.2 示例 2.3 无限循环 3. until 循环 3.1 基本语法 3.2 示例 3.3 无限循环 4. for 循环 4.1 基本语法 4.2 示例 4.3 嵌套循环 5. foreach 循环 5.1 基本语法 5.2 示例 5.3 遍历哈希 6. 循环控制语句 6.1 …...

线性系统理论及应用GUI设计及仿真

目录 1.控制系统的状态空间模型 1.1.状态空间模型 1.2 传递函数模型 1.3 传递函数转换为状态空间模型 1.4.状态空间模型转换为传递函数 1.5.状态空间模型转化为约当标准型 2.线性系统的时域分析 2.1.矩阵指数函数的计算 2.2.线型定常连续系统的状态空间模型求解 3.线…...

RAG综述汇总

第一篇:Retrieval-Augmented Generation for Large Language Models: A Survey(同济/复旦) 论文链接 1.简介 这篇全面的综述论文详细研究了 RAG 范式的发展,包括 Naive RAG、Advanced RAG 和 Modular RAG。介绍了 RAG 框架的三个基础技术,…...

智慧水利的变革之路:如何通过大数据、物联网和人工智能构建高效、智能、可持续的水利管理新模式

目录 一、引言:智慧水利的时代背景与意义 二、大数据:水利管理的数据基石 (一)数据收集与整合 (二)数据分析与挖掘 三、物联网:水利管理的感知神经 (一)智能感知与监…...

springcloud-gateway 网关组件中文文档

Spring Cloud网关 Greenwich SR5 该项目提供了一个基于Spring生态系统的API网关,其中包括:Spring 5,Spring Boot 2和项目Reactor。Spring Cloud网关的目的是提供一种简单而有效的方法来路由到API,并向它们提供跨领域的关注&#x…...

Android Gradle开发与应用Gradle详细使用

一、Gradle 基础知识 1. Gradle 构建脚本 Gradle 构建脚本通常使用 Groovy 或 Kotlin DSL 编写。Android 项目中有两个主要的 Gradle 构建脚本: a、项目级构建脚本 (build.gradle 或 build.gradle.kts):位于项目的根目录中,用于配置项目范…...

软件架构的23个基本原则:构建稳健、可扩展的系统

软件架构是任何软件项目成功的关键。良好的架构不仅能够支撑软件的功能实现,还能确保其性能、可维护性、可扩展性和安全性。在软件工程领域,经过多年的研究和实践,已经总结出了许多宝贵的原则和模式,用以指导软件架构的设计。以下…...

江苏省生产经营单位安全管理考核(附答案)

单选题 1.生产经营单位的主要负责人在本单位发生重大生产安全事故后逃匿的,由( )处 15 日以下拘留。 A、公安机关 B、检察机关 C、安全生产监督管理部门正确答案:A 2.据一些资料表明,心跳呼吸停止,在()min内进行抢救,约80%可以救活。 A、1 B、2 C、3正确答案:A 3.拉开闸刀时…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...