小华 HC32F460 内置 12 位逐次逼近型 ADC,最多支持 16 个外部通道。做多通道连续采样时,推荐用序列扫描(SEQ)模式配合 DMA 搬运,避免 CPU 频繁进出中断导致丢采样点。
一、时钟配置
ADC 时钟源来自 PCLK1 分频。HC32F460 主频 200MHz 时 PCLK1 为 100MHz,官方建议 ADC 工作时钟不超过 60MHz,一般取 2 分频(50MHz)比较稳妥,过高的 ADC 时钟在高温下容易造成采样值跳动。
二、通道序列与扫描
SEQ 模式支持把最多 16 个通道按任意顺序排成序列,转换时按序列顺序依次采样。配置时注意:
1. 用 M0 系列库的 ADC_SetSequence() 接口把要采的通道依次加入序列;
2. 使能结果寄存器地址自动递增,否则 DMA 每次搬运的地址都停在第一个通道;
3. 序列结束后可选择触发一次转换完成中断,也可以直接由 DMA 传输完成中断收尾。
三、采样时间
采样时间要按信号源内阻设置:低阻信号(运放输出、DAC 输出)可以设最短采样周期;高阻信号(热敏电阻分压、高阻传感器)建议拉到 19.5 周期以上,否则采样值会系统性偏低。
四、DMA 配置
DMA1 的某个通道绑定 ADC 结果寄存器,数据宽度 16 位,外设地址固定、内存地址递增,传输个数等于序列通道数。开启传输完成中断,在中断里把环形缓冲推进一个水位,主循环统一做均值或滤波。
五、常见坑
1. 只开 ADC 全局中断、不开 DMA 完成中断:序列模式下每个通道都进一次中断,频率高容易漏;
2. 忘记使能结果寄存器地址自动递增:DMA 搬回来全是第一通道的数据;
3. 换通道组(CHGR)后没有重新触发转换:新通道配置不生效,采到的还是旧值;
4. 结果对齐没统一:右对齐时有效数据在低 12 位,左对齐时在高 12 位,处理前先确认。
以上是最近在数据采集板上调 HC32F460 的完整记录,欢迎大家补充交流。 |
|