小学生
最后登录1970-1-1
在线时间 小时
注册时间2023-6-18
|
RA6M5 有2个ADC单元,每个ADC单元有12位、10位、8位读取数据的格式可以选择,在单元0上有13个ADC通道,而在单元1上有16个ADC通道。 ADC单元具有三种扫描方式分别为:单次描模式、连续扫描模式和分组扫描模式, 对于RA6M5来说ADC单元具有强大的功能,具体我们可以通过ADC特性和ADC的结构框图中分析每个部分的功能。
RA6M5 的ADC特性如下:
2 个ADC转换单元。
可以进行TrustZone安全设置。
支持内部温度检测,内部参考电压。
逐次逼近型ADC,支持的分辨率:12-bit, 10-bit, 8-bit。
转换时间短:0.4 μs/每通道(12-bit ADC、时钟PCLKC (ADCLK)等于50 MHz的条件下)。
可启用A/D 数据存储缓冲区是一个环形缓冲区,由16个缓冲区组成,用于顺序存储A/D转换后的数据。
自诊断在每次扫描开始时执行一次,在ADC执行生成中的三个参考电压值中选择一个A/D转换值。
野火启明6M5开发板的 ADC 电位器电路图如图所示:
P000引脚可以连接到MCU内部的 ADC 外设,从而对电位器输入的模拟信号进行采集。
FSP配置ADC如下:
RTT上用于操作ADC的接口主要有如下几个:
rt_device_find() 根据ADC设备名称查找设备获取设备句柄
rt_adc_enable() 使能ADC设备
rt_adc_read() 读取ADC设备数据
rt_adc_disable() 关闭ADC设备
测试代码
- #define ADC_DEV_NAME "adc0" /* ADC 设备名称 */
- #define ADC_DEV_CHANNEL 0 /* ADC 通道 */
- #define REFER_VOLTAGE 330 /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
- #define CONVERT_BITS (1 < < 12) /* 转换位数为12位 */
- static int adc_vol_sample(int argc, char *argv[])
- {
- rt_adc_device_t adc_dev;
- rt_uint32_t value, vol;
- rt_err_t ret = RT_EOK;
- /* 查找设备 */
- adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
- if (adc_dev == RT_NULL)
- {
- rt_kprintf("adc sample run failed! can't find %s device!\\\\n", ADC_DEV_NAME);
- return RT_ERROR;
- }
- /* 使能设备 */
- ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
- /* 读取采样值 */
- value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
- rt_kprintf("the value is :%d \n", value);
- /* 转换为对应电压值 */
- vol = value * REFER_VOLTAGE / CONVERT_BITS;
- rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
- /* 关闭通道 */
- ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
- return ret;
- }
- /* 导出到 msh 命令列表中 */
- MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);
复制代码
效果:
|
|