这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【CH582M】CH582M的IADC功能(3)-----如何配置ADC

共1条 1/1 1 跳转至页

【CH582M】CH582M的IADC功能(3)-----如何配置ADC

专家
2026-10-14 20:10:49     打赏

一、外部通道采样

(1)、设置 R8_ADC_CFG 的 RB_ADC_POWER_ON 为 1 开启 ADC,通过 RB_ADC_CLK_DIV 选择采样频率,通过 RB_ADC_BUF_EN 和 RB_ADC_PGA_GAIN 启用输入缓冲器及选择信号增益等; 

(2)、设置 R8_ADC_CHANNEL 寄存器,选择外部或内部信号通道; 

(3)、设置 R8_ADC_CONVERT 寄存器,置位 RB_ADC_START,启动 ADC 转换; 

(4)、查询等待 RB_ADC_START 自动清零或者等待 RB_ADC_IF_EOC 置 1,表示转换完成,可以读取R16_ADC_DATA 获取 12 位 ADC 转换数据,时间足够时建议再次转换并丢弃首次 ADC 数据; 

(5)、重复 2、3、4 步骤,可以继续采样另一通道或者下一组数据。 

(6)、单次 ADC 转换周期:ADC 采样(4 个时钟)+ 切换 1 个时钟 + 转换时间(12 个时钟)≈ 17 个Tadc周期,连续 ADC 时还要加上 1 个时间间隔,其中,Tadc = TCK32M / RB_ADC_CLK_DIV。 

(7)、如果使用差分输入: 

使能差分,选择 0#通道:实际是对 AIN0(正端)和 AIN2(负端)的电压进行差分转换; 

使能差分,选择 1#通道:实际是对 AIN1(正端)和 AIN3(负端)的电压进行差分转换; 

ADC 转换后的结果,如果数据大于 0x800 表示差分正端的电压高于差分负端的电压;如果数据小于 0x800 表示差分正端的电压低于差分负端的电压。以 PGA 增益选择 0dB 为例,理论可测电压范围为-1.05V~1.05V,0x400 表示差分正端的电压低于差分负端的电压约 0.5 个 Vref。

二、内部温度传感器采样

(1)、设置 R8_TEM_SENSOR 寄存器的 RB_TEM_SEN_PWR_ON 为 1 开启温度传感器,设置 R8_ADC_CHANNEL为 15,选择温度传感器信号连接到 ADC 输入; 

(2)、设置 RB_ADC_POWER_ON 为 1 开启 ADC,设置 RB_ADC_DIFF_EN 为 1,设置 RB_ADC_CLK_DIV,设置RB_ADC_BUF_EN 为 0,设置 RB_ADC_PGA_GAIN 为 11; 

(3)、设置 R8_ADC_CONVERT 寄存器,置位 RB_ADC_START 为 1,启动 ADC 转换; 

(4)、查询等待 RB_ADC_START 自动清零或者等待 RB_ADC_IF_EOC 置 1,读取 R16_ADC_DATA 获取 12 位ADC 转换数据,精度要求较高时,建议重复 3 和 4 步骤多次,计算 ADC 数据的平均值; 

(5)、根据电压与温度换算关系得到温度值,具体请参考评估板例子程序。 

 三、启用 DMA 自动连续 ADC

(1)、参考非 DMA 方式设置 ADC 参数和选择通道等; 

(2)、设置 R8_ADC_AUTO_CYCLE 选择连续 ADC 的周期; 

(3)、设置寄存器 R16_ADC_DMA_BEG 为存储 ADC 数据缓冲区的首地址,设置寄存器 R16_ADC_DMA_END为存储 ADC 数据缓冲区的结束地址(不含),并设置 R8_ADC_CTRL_DMA 的 RB_ADC_DMA_ENABLE 为 1,使能 DMA 功能; 

(4)、可选步骤,如果需要启用中断则设置相应的中断使能寄存器位,当 RB_ADC_IE_EOC=1 时将由RB_ADC_IF_END_ADC 触发 ADC 完成中断,当 RB_ADC_IE_EOC=0 且 RB_ADC_IE_DMA_END=0 时将由RB_ADC_IF_EOC 触发 ADC 完成中断; 

(5)、将 RB_ADC_AUTO_EN 置 1 以开启自动连续 ADC; 

(6)、每次 ADC 完成后,RB_ADC_IF_EOC 和 RB_ADC_IF_END_ADC 都会置 1,但 RB_ADC_IF_END_ADC 会在DMA 取走数据时自动清零,所以,如果需要查询 ADC 完成状态,那么可以查询 RB_ADC_IF_EOC。 







关键词: CH582M     ADC    

共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]