大多数灵动 MCU(如 MM32F103、MM32L073、MM32F527 等)采用的是基于 STM32 类似架构的 ADC,具备以下特性:
特性 描述
连续转换模式 支持无需CPU参与的自动连续采样
多通道扫描模式 可自动轮询多个电压通道
DMA 支持 可直接将采样数据搬运至内存,减轻CPU负担
触发机制 支持软件触发 / 定时器硬件触发(周期性采样)
二、用于电池曲线记录的典型配置
1. ADC 连续采样模式 + DMA + Timer 触发
组合效果如下:
定时器控制采样周期(如每秒采样一次)
ADC 连续采样多通道
DMA 自动搬运结果到内存
MCU主核无需实时干预
这非常适合用于:
电池电压变化趋势记录
长时间供电状态分析(如1小时、1天)
多组电池监测(多通道)
三、实现步骤概览(伪代码说明)
c
复制
编辑
// 1. 配置定时器触发ADC
TIMx->CR2 |= TIM_TRGO_UPDATE; // 设置为TRGO输出源
TIMx->PSC = ...; // 设置预分频
TIMx->ARR = ...; // 设置周期(采样周期)
// 2. 配置ADC为连续+触发模式
ADC_InitStructure.ContinuousConvMode = ENABLE;
ADC_InitStructure.ExternalTrigConv = ADC_ExternalTrigConv_Tx_TRGO;
ADC_InitStructure.NbrOfChannel = 1;
ADC_Init(ADCx, &ADC_InitStructure);
// 3. 启用DMA:将ADC结果直接传输到数组
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADCx->DR;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)adc_data_buf;
DMA_InitStructure.DMA_BufferSize = N;
DMA_InitStructure.DMA_Mode = CIRCULAR;
DMA_Init(DMAx, &DMA_InitStructure);
DMA_Cmd(DMAx, ENABLE);
最终结果:只需读取 adc_data_buf[],即可获得一段时间内的电压变化序列。
四、数据处理建议(提升效率)
技术 描述
DMA Circular模式 数据不断覆盖旧数据,适合环形曲线缓存
中值滤波 /移动平均 去除突变点,提升趋势判断准确性
数据压缩 每分钟取最大/最小/平均点,减少存储占用
Flash日志 若要掉电保存,可定期写入 Flash/EEPROM
|