news 2026/4/18 12:09:46

STM32平衡车测试,定时中断读取速度

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32平衡车测试,定时中断读取速度

一.PWM设置

接下来配置一下PWM输出
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);启动PWM
然后逻辑分析仪查看结果。

二.动态改变占空比

因为单纯的占空比设置肯定不能满足我们对于平衡车的要求。
HAL_Delay(10);
a += 300;
if(a > 900){
a = 100;
}
//通过这个宏改变占空比
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, a);
可以看到我们的占空比是在不断地变化的,之后就完成我们的PWM了。
先找到逻辑分析仪对应的软件,之后我们来配置定时器编码器接口,使用的是TIM3的ch1和ch2
之后就是不分频然后启动预加载值。之后把定时器设置为编码器模式。之后生成文件用于试验测速是否可行,记得勾选生成.c和.h文件。
使用cubemx配置完成之后,我们就可以观测波形了。
先来了解一下函数
  1. 硬件中断发生:定时器溢出。
  2. 固定入口:CPU跳到固定地址TIM3_IRQHandler这是谁都不能改的)。
  3. HAL库接管:TIM3_IRQHandler里直接调用了HAL_TIM_IRQHandler(&htim3)。这个HAL函数会做所有标准杂活:检查是哪种中断、清除中断标志等。
  4. 关键一步:当HAL_TIM_IRQHandler判断出这次是“更新中断”(即溢出)后,它就会去寻找并调用一个名为HAL_TIM_PeriodElapsedCallback的函数。

  5. 你的舞台:HAL_TIM_PeriodElapsedCallback就是留给你的“插槽”。HAL库提供了一个默认的空函数,但如果你自己写了一个,程序就会执行你的版本。你在这个函数里写if(htim->Instance == TIM3)和记录溢出方向的代码,这才是你的定制化处理逻辑。
所以,“回调”的意思是:HAL库的通用处理函数“回过头来调用”你提供的函数。这样,你无需关心复杂的中断标志位清除等底层细节,只需关注核心业务逻辑
TIM_HandleTypeDef *htim这个函数里面的参数是什么意思
也有可能你写完程序的注释,再次生成就会变成乱码,需要在这里加一个系统的环境变量,可以搜索一下。
之后我们可以用串口看一下是否会溢出。使用我们的串口发送函数。
接下来我们据需要进行溢出判断也就是速度,看看到底是正向溢出还是反向溢出
假设定时器是16位,最大值65535
编码器计数:... 65533, 65534, 65535, 0, 1, 2, ...
如果没有溢出记录,我们会以为从65535到2是转少了
实际上:65535 → 溢出 → 0 → 1 → 2 = 实际增加了4
// 全局变量
int32_t overflow_count = 0; // 溢出次数,正数表示正转溢出,负数表示反转溢出
uint32_t last_counter = 0; // 上一次读取的计数值
之后我们需要启动定时器2定一个基准时间用来给编码器测速。
第一步先要配置好管脚和串口,然后启动我们得定时器3配置为编码器模式。
这样子就可以实现编码器测速以及中断溢出检测了
我们可以看到CNT得值以及溢出后得中断。接下来我们规定速度。
测速得话,我们还需要一个定时器用来产生时间间隔,然后我们得脉冲数,和这个时间间隔计算就可以可到我们得速度:转速 = (单位时间内的脉冲数) / (编码器每转脉冲数 × 时间间隔)
  • TIM3的CNT值 = 脉冲数
  • TIM2的溢出周期 = 时间间隔
int n = 0; // 记录溢出数量先定义一个带符号得变量用于判断方向。记录TIM3在测量周期内的计数器溢出次数。
  • TIM3的CNT寄存器只有16位(最大值65535)
  • 当电机转得很快时,CNT可能会溢出多次
  • n 记录的是完整的65535循环次数
编码器正向旋转 → TIM3向上计数(0,1,2,...)
编码器反向旋转 → TIM3向下计数(65535,65534,...)但是我们这里设置9方便观察结果
TIM2每100ms中断一次,进行转速计算

我们先进行编程

先开启中断

主循环打印值测试一下

之后是我们的中断函数,到这里我们就测试完成了

我们在cube中配置完成后

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:47:31

Strudel终极指南:Web实时算法音乐编码从零到精通

Strudel终极指南:Web实时算法音乐编码从零到精通 【免费下载链接】strudel Web-based environment for live coding algorithmic patterns, incorporating a faithful port of TidalCycles to JavaScript 项目地址: https://gitcode.com/gh_mirrors/st/strudel …

作者头像 李华
网站建设 2026/4/18 3:50:23

快速上手tsParticles:打造专业级网页粒子特效的完整指南

快速上手tsParticles:打造专业级网页粒子特效的完整指南 【免费下载链接】tsparticles 项目地址: https://gitcode.com/gh_mirrors/tsp/tsparticles 想要为你的网站添加令人惊艳的动态粒子效果吗?tsParticles参数化设计让创建可配置的粒子系统变…

作者头像 李华
网站建设 2026/4/18 3:51:31

电力系统必备指南:如何快速掌握EN50160电压特征标准

电力系统必备指南:如何快速掌握EN50160电压特征标准 【免费下载链接】标准EN50160-公共供电系统的电压特征_中文版PDF下载介绍 本开源项目提供标准EN50160《公共供电系统的电压特征》中文版PDF下载资源。该标准详细规定了公共供电系统的电压等级、电压偏差、电压波动…

作者头像 李华
网站建设 2026/4/18 3:50:01

技术报告:加密算法实现与性能优化研究

技术报告:加密算法实现与性能优化研究 1. 引言 在数字化时代,数据安全至关重要。加密算法作为保障数据机密性、完整性和认证性的核心技术,广泛应用于金融、通信、物联网、云计算等领域。然而,随着数据量的激增和实时性要求的提高…

作者头像 李华
网站建设 2026/4/18 5:41:58

3D模型转换神器:5分钟搞定FBX/GLB/USD格式互转

3D模型转换神器:5分钟搞定FBX/GLB/USD格式互转 【免费下载链接】awesome-blender 🪐 A curated list of awesome Blender addons, tools, tutorials; and 3D resources for everyone. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-blend…

作者头像 李华
网站建设 2026/4/17 13:56:22

Wan2.2视频生成模型:重新定义AI视频创作的效率与质量平衡

Wan2.2视频生成模型正以惊人的技术突破刷新行业认知,这款开源AI模型不仅实现了720P高清视频的生成能力,更将部署门槛降低至消费级显卡,为技术爱好者和内容创作者带来了前所未有的创作自由。 【免费下载链接】Wan2.2-T2V-A14B-Diffusers 项…

作者头像 李华