文章目录
一、题目
测量电路可以测量和显示脉冲波信号的平均值、高电平值、低电平值,量程 3.3V,分辨率 0.1V、测量误差不大于 5%。
二、思路
- 使用 ADC + DMA 采集信号,DMA 将采集到的数据存入环形缓冲区数组中
- 使用 TIM3 作为 ADC 采样触发定时器
- 在传输完成回调函数里,对最近一批采样数据进行计算
- 使用 OLED 显示结果
- 关于分辨率:使用 12 位 ADC, 则量化等级有 2 12 2^{12} 212 个,参考电压为 V r e f V_{ref} Vref,则每个最小量化步长大小为:
Q = V r e f 2 N . Q = \frac{V_{ref}}{2^{N}}. Q=2NVref. - 注意:怎样使求的平均值准确?
- 使用 FFT:否则处理的信号有频率限制。
DFT 的主要作用是将离散的时域信号转换为频域信号,从而得到信号在不同频率上的幅度与相位分布。
三、CubeMX 配置
-
配置 debug 方式

-
配置外部时钟晶振

-
配置 ADC

-
配置 DMA

-
配置定时器

-
配置 I2C2

-
配置时钟树

-
配置 DSP 库(没有使用)



-
在 Keil 中导入 DSP(没有使用)

添加宏定义(没有使用)

添加三个 include(没有使用)
/* USER CODE BEGIN Includes */
#include "oled.h"
#include <stdio.h>
#include "arm_math.h"
#include "arm_const_structs.h"
/* USER CODE END Includes */

在 Define 添加(没有使用)
,ARM_MATH_CM3
四、代码编写
- 头文件
/* USER CODE BEGIN Includes */
#include "oled.h"
/* USER CODE END Includes */
PRIVATE DEFINE
/* USER CODE BEGIN PD */
#define ADC_BUFFER_LENGTH 1024 // 环形缓冲区数组大小
#define VOLTAGE_MAX 3.3f // 输出电压上限
/* USER CODE END PD */
- 变量定义

最低0.47元/天 解锁文章
7692

被折叠的 条评论
为什么被折叠?



