蓝桥杯嵌入式G4开发板实战:用555定时器+STM32CubeMX测PWM频率和占空比(附完整代码)
蓝桥杯嵌入式G4开发板实战用555定时器STM32CubeMX测PWM频率和占空比附完整代码在嵌入式系统开发中精确测量PWM信号的频率和占空比是一项常见但至关重要的任务。对于参加蓝桥杯嵌入式竞赛的选手或正在学习STM32G4系列微控制器的开发者来说掌握这项技能不仅能解决实际问题还能在比赛中获得优势。本文将带你从硬件连接到软件实现完整走通这个实战项目。1. 硬件准备与原理分析蓝桥杯嵌入式开发板G4系列自带两个555定时器这为我们提供了理想的信号源。通过旋钮R39和R40可以调节输出信号的频率而PA15和PB4引脚则分别连接这两个定时器的输出。关键硬件连接要点555定时器1输出 → PA15TIM2_CH1555定时器2输出 → PB4TIM16_CH1使用杜邦线进行交叉验证PA7→PB4PA6→PA15测量PWM占空比需要利用定时器的双通道捕获功能。一个通道捕获上升沿周期开始另一个通道捕获下降沿高电平结束通过计算两者时间差与整个周期的比值就能得到精确的占空比。2. STM32CubeMX配置详解正确的CubeMX配置是整个项目成功的基础。以下是关键配置步骤2.1 定时器基本参数设置打开CubeMX选择对应的STM32G4系列芯片配置TIM2和TIM16定时器时钟源内部时钟分频系数(Prescaler)79系统时钟80MHz分频后得到1MHz计数频率计数模式向上计数自动重装载值保持默认最大值0xFFFF2.2 输入捕获通道配置TIM2配置用于占空比测量通道1直接模式上升沿触发通道2间接模式下降沿触发使能捕获中断TIM16配置仅频率测量通道1直接模式上升沿触发使能捕获中断注意间接模式通道的触发方式必须设置为下降沿这是测量高电平时间的关键。3. 代码实现与关键逻辑3.1 中断回调函数实现完整的捕获逻辑在HAL_TIM_IC_CaptureCallback回调函数中实现。以下是核心代码片段float ccrl_val1a, ccrl_val1b 0; // 必须使用float类型 unsigned int frq1 0, frq2 0; float duty1, duty2 0; void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if(htim-Instance TIM2) { if(htim-Channel HAL_TIM_ACTIVE_CHANNEL_1) { ccrl_val1a HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // 周期 ccrl_val1b HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); // 高电平时间 __HAL_TIM_SetCounter(htim, 0); frq1 1000000 / ccrl_val1a; // 频率1MHz/周期计数 duty1 (ccrl_val1b / ccrl_val1a) * 100; // 占空比计算 HAL_TIM_IC_Start(htim, TIM_CHANNEL_1); HAL_TIM_IC_Start(htim, TIM_CHANNEL_2); } } if(htim-Instance TIM16) { ccr1_val2 HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); __HAL_TIM_SetCounter(htim, 0); frq2 1000000 / ccr1_val2; HAL_TIM_IC_Start(htim, TIM_CHANNEL_1); } }3.2 主函数初始化在main.c中需要启动定时器捕获中断HAL_TIM_IC_Start_IT(htim2, TIM_CHANNEL_1); HAL_TIM_IC_Start_IT(htim2, TIM_CHANNEL_2); HAL_TIM_IC_Start_IT(htim16, TIM_CHANNEL_1);4. 常见问题与调试技巧在实际项目中开发者常会遇到以下几个典型问题问题1占空比始终为0原因使用了整型变量存储捕获值导致除法结果为0解决必须使用float类型变量存储ccrl_val1a和ccrl_val1b问题2测量值不稳定排查步骤检查硬件连接是否牢固确认CubeMX配置与代码一致适当增加软件滤波算法问题3高频信号测量不准优化方案降低定时器分频系数提高计时精度使用更高性能的定时器如TIM1现象可能原因解决方案无信号硬件连接错误检查杜邦线连接频率偏差大定时器配置错误核对时钟树配置占空比跳变信号噪声干扰增加硬件滤波电路5. 进阶应用与性能优化掌握了基础测量方法后可以进一步优化系统动态范围扩展技术自动切换定时器分频系数适应不同频率范围双定时器级联测量超低频信号实时显示与通信// 通过串口输出测量结果示例 printf(频率: %.2f Hz, 占空比: %.1f%%\r\n, frq1, duty1);误差补偿算法温度漂移补偿非线性校正移动平均滤波在实际蓝桥杯竞赛中这类功能往往能成为加分项。建议选手在基础功能稳定后至少实现一种优化策略。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2552599.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!