当前位置: 首页 > 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信号进行两个设备之间握手已经很普遍的使用,比如新能源充电枪之间握手等应用。

http://www.lryc.cn/news/393894.html

相关文章:

  • spring cloud gateway客户端websocket断开连接,服务侧连接没有关闭的问题处理
  • 确认下单:购物车页面点击 去结算 按钮发起两个请求trade(显示购物车的商品信息和计算商品的总金额)findUserAddressList
  • 聚类分析方法(一)
  • Midjourney对图片细微调整和下载保存
  • Python文件写入操作
  • FPGA_GTX:简要版
  • 使用mq向队列发送消息流程
  • Git中两个开发分支merge的原理
  • 数字图像处理、机器视觉(计算机视觉)、计算图形学概念
  • Android SurfaceFlinger ——获取显示屏信息(十八)
  • QCustomPlot+ vs2022+ qt
  • Perl 语言开发(五):循环语句
  • 线性系统理论及应用GUI设计及仿真
  • RAG综述汇总
  • 智慧水利的变革之路:如何通过大数据、物联网和人工智能构建高效、智能、可持续的水利管理新模式
  • springcloud-gateway 网关组件中文文档
  • Android Gradle开发与应用Gradle详细使用
  • 软件架构的23个基本原则:构建稳健、可扩展的系统
  • 江苏省生产经营单位安全管理考核(附答案)
  • Kafka第四篇——生产数据总体概括,源码解析分区策略,数据收集器,Sender发送线程,key值
  • 二叉树的链式结构
  • 【STM32】在标准库中使用DMA
  • 多线程详解
  • 软件工程需求之:业务需求与用户需求
  • Nettyの源码分析
  • MySQL远程登录
  • html的作业
  • 【TORCH】查看dataloader里的数据,通过dataloader.dataset或enumerate
  • KDTree 简单原理与实现
  • [c++] 可变参数模版