本帖最后由 wushouqing 于 2019-3-5 14:08 编辑
1 摘要
本篇应用笔记主要介绍如何使用 HC32F146 / HC32M140系列芯片的 ADC模块来进性电压转
换。
2 ADC简介
什么是 ADC?
模数转换器(Analog to digital converter)。
转换模式说明
扫描模式
扫描模式包括单次转换模式和连续转换模式。
扫描模式下支持通道选择顺序扫描或者无序扫描。
扫描模式下支持定时器/软件触发。
扫描模式下支持中断请求触发的 DMA传输。
优先级模式
优先级顺序为:L1(外部端口触发)转换>L2(定时器/软件触发)转换>扫描采样模式转
换。
优先级模式下支持外部端口/定时器/软件触发。
比较功能说明
转换结果比较
转换结果高 12位进行比较,可配置比较值,可选择大于或小于比较值。
转换结果区间比较
转换结果高 12位进行比较,可配置比较上限/下限阈值,可选择比较区间范围内/外,可识
别范围外“超出上限”或“低于下限”。
3 HC32F146 / HC32M140系列的 ADC
3.1 简介
HC32F146 / HC32M140系列 MCU内部集成 ADC模块,具有12位精度,可选择外部参考电压
Avref或模拟电压 AVCC,提供扫描和优先级转换,转换结果比较及区间比较功能,并提供外
部端口、定时器、软件触发方式。
3.2 说明
该系列的ADC模块有两种转换模式:扫描和优先级转换,本 AN中样列
ADC_PrioritySw_ScanSw主要介绍了扫描转换和优先级转换配合使用即优先级转换打断扫描转
换的用法。
扫描转换主要特征:
采样通道:顺序扫描和无序扫描。
转换触发:软件触发和定时器触发。
转换方式:单次转换和连续转换。
FIFO操作:可提供16级FIFO,字节访问SFD,读取最高 8位(31:24),半字访问 SFD,读
取最高16位(31:16),字访问时,FIFO移位。
优先级转换主要特征:
优先级方式:优先级 L1(外部端口触发)>优先级 L2(软件或定时器触发)>扫描转换。
采样通道:优先级L1和优先级 L2的使用不同寄存器配置采样通道。
转换触发:外部触发、软件触发和定时触发。
转换方式:单次转换。
FIFO操作:可提供4级 FIFO,字节访问 SFD,读取最高 8位(31:24),半字访问 SFD,读取最高 16位(31:16),字访问时,FIFO移位。
3.2.1 寄存器介绍
4 样例代码
4.1 代码介绍
用户可根据上述的工作流程编写自己的代码来学习验证该模块,也可以直接通过华大半导体的
网站下载到设备驱动库(Device Driver Library, DDL)的样例代码并使用其中的 ADC的
Example进行验证。
以下部分简要介绍本 AN使用到的样例 ADC_PrioritySw_ScanSw所涉及的各项配置。
1)配置 GPIO:
Gpio_SetAnalog( T1_PORT, T1_PIN, TRUE);
Gpio_SetAnalog( T2_PORT, T2_PIN, TRUE);
2)配置优先级转换:
stcAdcPrioCfg.bExtTriggerEn = FALSE;
stcAdcPrioCfg.bTimerTriggerEn = FALSE;
stcAdcPrioCfg.enFifoStages = AdcPrioFifoStages1;
Adc_PrioConvChnCfg(&stcAdcPrioCfg, DEFAULT_CHN, AdcChn10);
3)配置扫描转换:
stcAdcScanCfg.bRepeat = TRUE;
stcAdcScanCfg.bTimerTriggerEn = FALSE;
stcAdcScanCfg.enFifoStages = AdcScanFifoStages1;
Adc_ScanConvChnCfg(&stcAdcScanCfg, AdcScanChnModeOrder, CHSL(AdcChn8));
4)配置各通道采样时间:
stcAdcSampTimeCfg.enFreqDiv = SampFreqSysTDiv16;
stcAdcSampTimeCfg.enTimeReg0 = AdcSampTime6AdcClk;
stcAdcSampTimeCfg.enTimeReg1 = AdcSampTime12AdcClk;
Adc_ChnSampleTimeCfg(&stcAdcSampTimeCfg, ST1CHN(AdcChn10));
5)通用配置:
stcAdcInitCfg.enAdcRefVol = AdcRefVolInternal;
stcAdcInitCfg.enAdcResultAlign = AdcResultAlignLeft;
stcAdcInitCfg.pstcAdcSampTimeCfg = &stcAdcSampTimeCfg;
stcAdcInitCfg.pstcAdcPrioCfg = &stcAdcPrioCfg;
stcAdcInitCfg.pstcAdcScanCfg = &stcAdcScanCfg;
4.2 代码运行
用户可以通过华大半导体的网站下载到 ADC的样例代码,并配合评估用板(SK-HC32F146-
64L V10)运行相关代码学习使用 ADC模块。
以下部分主要介绍如何在评估板上运行 ADC样例代码并观察结果:
- 确认安装正确的 IAR(或 Keil,此处使用IAR做样例说明,Keil中操作方法类似)工具(请
从华大半导体完整下载相应的安装包,并参考用户手册进行安装)。
- 从华大半导体网站下载 ADC样例代码。
- 下载并运行样例代码:
1) 打开adc-> ADC_PrioritySw_ScanSw项目,并打开‘main.c’如下视图:
2) 点击 重新编译链接整个项目。
3) 点击 将代码下载到评估板上。
4) 可以看见类似如下的视图:
5) 在 207行打上断点:
6) 点击 运行。
7) 在扫描转换过程中,当优先级转换成功转换 5次,即会运行到207行断点处:
8) 运行完毕后可以关闭项目文件。
9) 用户亦可通过修改代码中 ADC的相关配置参数或初始化数据来进一步学习ADC模块的
功能。
5 总结
以上章节简要介绍了 HC32F146 / HC32M140系列的ADC,说明了ADC模块的寄存器及部分
操作流程,并且演示了如何使用使用优先级转化打断扫描转换,在实际开发中用户可以根据自
己的需要配置和使用 ADC。
|