- 博客(6)
- 收藏
- 关注
原创 【电赛信号题必备】基于STM32F4的全数字锁相放大器实现
本文提出了一种基于STM32F407+FPU的全数字双通道锁相放大器方案,解决了传统模拟方案外围电路复杂、相位测量不精确等问题。该方案采用协方差数学修正算法实现零相移,相位差测量精度达0.04°。通过32位相位累加器、CCM RAM查表和线性插值算法提高信号纯度,利用双重ADC和DMA乒乓缓存实现双通道同步。经MATLAB仿真和硬件测试验证,该方案在强噪声环境下仍能稳定提取信号相位,且运算效率高、CPU占用率低。项目提供完整源码和文档支持,适用于电赛仪器、光电检测等领域。
2025-12-18 01:12:57
1479
1
原创 【FreeRTOS入门】两个Delay函数
在 STM32 + FreeRTOS 的开发中,延时是最基础的功能。很多初学者(包括使用 CubeMX 生成代码的开发者)在刚开始接触时,往往只会用 vTaskDelay(或 CMSIS 层的 osDelay)。当你只想让 LED 闪烁或者按键消抖时,vTaskDelay 很好用。但是,当你试图用它去控制一个PID 闭环波形发生器或者定频率的 ADC 采样时,你会发现系统越跑越慢,时间越跑越偏。这并非系统 Bug,而是你选错了“工具”。
2025-11-30 01:45:27
1084
原创 【FreeRTOS入门】通过一个小实验了解环形缓冲区
任务A(生产者):负责生产数据(例如:DHT11 每500ms读取一次温湿度)。任务B(消费者):负责处理数据(例如:OLED屏幕需要刷新显示)。初学者的常见做法// 全局变量// DHT11任务写:global_temp = read();// OLED任务读: display(global_temp);这种做法的弊端数据丢失:如果OLED刷新很慢,而DHT11读得很快,中间的数据就被覆盖了(虽然在这个例子中DHT11较慢,但在高速ADC采集中很常见)。读写冲突。
2025-11-29 20:23:22
1095
原创 【FreeRTOS入门】手写一个简易malloc,彻底搞懂内存管理的核心逻辑
很多嵌入式初学者在使用 FreeRTOS 时,只会机械地调用 pvPortMalloc 和 vPortFree,一旦遇到内存泄漏栈溢出或者系统卡死,就束手无策了。其实,FreeRTOS 的内存管理(特别是常用的 heap_4.c)并没有那么神秘。它本质上就是在一块大数组上进行“切蛋糕”和“拼蛋糕”的游戏。今天,我们就利用 C 语言最基础的指针和链表知识,手写一个简易版的内存管理器。读懂了这段代码,你就读懂了 FreeRTOS 内存管理的 80%!这不到 80 行的代码,就是RTOS内存管理的雏形。
2025-11-28 16:12:58
916
1
原创 【电赛信号题必备】加权平均滤波(EWMA)算法
在单片机开发(如 STM32)中,我们经常使用 ADC 采集传感器数据。但由于电源纹波、线路干扰等原因,读出来的原始数据往往会上下跳动(噪声)。很多同学的第一反应是使用均值滤波(采集 N 次求平均)。占用内存:需要定义一个数组 buffer。滞后性:N 越大,滞后越严重。今天分享一个更高效的算法——EWMA(指数加权移动平均),也常被称为一阶低通滤波。它不需要数组,只需要记录上一次的滤波结果,就能实现非常丝滑的滤波效果。EWMA 是一种性价比极高的算法。
2025-11-28 00:03:34
1218
1
原创 【电赛信号题必备】轻量级 Complex 复数运算模块
在嵌入式开发中,标准 C 库对复数的支持往往不尽如人意,而庞大的 DSP 库对于简单的标量复数运算又显得过于臃肿。本文提供了一个纯 C 语言实现的通用复数(Complex)运算库,填补了 HAL 库在基础复数计算上的空白。代码实现了复数的定义、加减乘除及模运算,重点解决了复数除法中分母趋近于 0 导致的计算溢出问题(引入 1e-9 容差机制)。该模块具有极高的可移植性和鲁棒性,非常适合用于电赛信号处理算法的底层实现。
2025-11-27 22:18:49
1239
2
STM32F407 HAL库 DDS AD9910代码参考示例
2025-07-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅