蓝桥杯嵌入式——PWM采集一路频率

CubeMX配置

PB4和PA15分别对应板子上的R39频率输出1,R40频率输出2

通过示波器测量J9,R39的频率范围为PWM1 output = 710hz-22.4khz

PWM2 output = 630hz-22.0khz

PWM的最小频率对应最大周期:Tmax = 0.001410437235543s

我们的系统时钟为80Mhz,通过80分频给到定时器时钟为1Mhz,因为定时器一般是16位的所以计数值最大为65535,1Mhz的频率计数到65535需要花费0.065535(s),

所以0.001410437235543(s) < 0.065535(s),不会溢出

如何求周期?

使用从模式控制器的复位Reset模式,当触发输入上升沿有效时,计数器复位到默认值0,并把值写入捕获寄存器,再次触发上升沿时,把计数值写入捕获寄存器,通过计数值就能求得周期

开始测量:

我们先测量R39的频率,基于基本定时器工程,打开CubeMX

Slave Mode: 配置从模式为的Reset模式,

Trigger Source: TI1FP1作为从模式寄存器的输入,触发CNT复位

Clock Source:内部时钟用来CNT的计数

Channel1 : 直接输入捕获模式

打开中断

更改NVIC中断优先级为3

生成代码

keil编写代码

为PWM创建.c和.h及其他初始化配置文件,打开源码,从源中copy定时器3和引脚PB4的初始化函数(注意!!引脚的初始化代码要放到基本定时器6里去)

注意,这里的htim3需要外部拓展,因为在it.c里也需要调用他

从源代码的it.c中copy TIM3中断函数到主代码的it.c

所有中断的变量都需要这样操作!声明bsp_pwm.h文件,这样才能it.c才会访问到变量htim3

接下来当中断产生时就会跳到it.c的TIM3_IRQHandler(void) ,所以要在main.c中打开定时器中断

因为我们要用到定时器的捕获功能,所以还需要以中断的形式启动定时器输入捕获,

这两个函数需要背下来!!

当中断产生时进入it.c的定时器3中断服务函数,当捕获事件发生时会有回调函数

Go to他并将此函数写入main.c中

编写中断回调函数,读取通道1的周期值,背下这个函数

作用:当输入捕获中断发生时,就会蹦到这个回调函数里执行代码,在此函数里获取数值

因为我们配置了从模式的复位模式,所以在第一个上升沿时会自动清零,在第二个上升沿时自动计数

把读到的周期数值显示到LCD屏幕上

当旋钮旋到最大时周期显示为1400us,但实际周期为0.0014s

如果要显示频率则用1000000/PWM_T_Count

相关推荐
不悔哥5 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
XiHongShi20165 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
深圳老胡5 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
女神下凡5 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
梅梅9665 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片
开发笔记-阿牛5 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
CoderYanger5 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
CHENKONG_CK5 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
三佛科技-187366133975 天前
128KB~512KB Flash车规级MCU选型指南(FT32A072 / FT32A103 系列)
单片机·嵌入式硬件
Brilliantwxx5 天前
【STM32】 SPI Flash 驱动开发实战:阻塞模式驱动 W25Q64(含工程代码)
开发语言·stm32·单片机·嵌入式硬件