浅谈基于Apollo2 mcu的智慧农业系统
(1)Apollo mcu 的最大可转换信号为3.3V,但其参考电压分提供四种参考类型
- 内部参考电压1.5V
AM_HAL_ADC_REF_INT_1P5
- 内部参考电压2V
AM_HAL_ADC_REF_INT_2P0
- 外部参考电压1.5V
AM_HAL_ADC_REF_EXT_1P5
- 外部参考电压2V
AM_HAL_ADC_REF_EXT_2P0
这4部分,可以在代码配置当中选择:
sADCConfig.ui32Reference= AM_HAL_ADC_REF_INT_2P0;
(2)Apollo2 mcu提供的三种工作模式
1)模式0,ADC进行料需采集,延时基本为0
2)模式1,ADC在样本采集之间是关闭的,但是不需要重新校准,延时<50us
3)模式2,ADC在样本采集之间完全断电,需要重新校准(初始化ADC),延时<600us
三种模式的主要差异,是转换间隔,模式一适用于长时间,不间断的进行转换,模式二是短间隔,中间从新启动ADC转换快速。模式三转换中间可以完全关闭ADC,但是重新启动时也需要重新配置校准ADC。
图2
(3)代码配置
考虑到环境数据不会快速改变,所以这里选用模式2 。通过软件定时器唤醒ADC进行检测,从而达到最低功耗的效果。配置ADC代码如下:(参考电压 内部2.0V 、14位精度、LPOWER2模式、扫描一次)
Void adc_config(void)
{
am_hal_adc_config_t sADCConfig;
//
// Enable the ADC power domain.
//
am_hal_pwrctrl_periph_enable(AM_HAL_PWRCTRL_ADC);
//
// Set up the ADC configuration parameters. These settings are reasonable
// for accurate measurements at a low sample rate.
//
sADCConfig.ui32Clock = AM_HAL_ADC_CLOCK_HFRC;
sADCConfig.ui32TriggerConfig= AM_HAL_ADC_TRIGGER_SOFT;
sADCConfig.ui32Reference= AM_HAL_ADC_REF_INT_2P0;
sADCConfig.ui32ClockMode= AM_HAL_ADC_CK_LOW_POWER;
sADCConfig.ui32PowerMode= AM_HAL_ADC_LPMODE_0;
sADCConfig.ui32Repeat = AM_HAL_ADC_NO_REPEAT;
am_hal_adc_config(&sADCConfig);
am_hal_adc_int_enable(AM_HAL_ADC_INT_CNVCMP);
// Set up an ADC slot
am_hal_adc_slot_config(0, AM_HAL_ADC_SLOT_AVG_1 |
AM_HAL_ADC_SLOT_14BIT |
AM_HAL_ADC_SLOT_CHSEL_SE0 |
AM_HAL_ADC_SLOT_ENABLE);
am_hal_adc_enable();
}
使用LPOWER2 模式的时候,需要注意,当定时器触发中断的时候,time_ISR里面需要重新配置ADC,adc_config完成之后,才能进行定时器触发,执行顺序不能颠倒:
(4)电压十六进制转换成10进制数值并显示
由datasheet的资料显示(图3),ADC检测MAX电压为VDDH,而VDDH为3.3V。所以ADC的检测范围应该为 0~3.3V ,超过3.3V只会显示最大值3.3V。长时间检测超过标准范围的电压值,可能对引脚甚至芯片造成破坏。
图3
14位精度下,采集次数为1 的转换代码可以通过以下实现:
if (ui32Status & AM_HAL_ADC_INT_CNVCMP)
{
g_ui16ADCVDD_code = am_hal_adc_fifo_pop();
//g_ui16ADCVDD_code= AM_HAL_ADC_FIFO_SAMPLE(g_ui16ADCVDD_code);
am_util_stdio_printf("g_ui16ADCVDD_code= 0x%05X ",g_ui16ADCVDD_code);
fVBATT = ((float)g_ui16ADCVDD_code) * 3.3f / 1024.0f / 64.0f ; // 2^16
am_util_stdio_printf("VDD= %.3f ",fVBATT);
}
但如果只是单次检测,最大值为3.298,并不能达到3.3的最大值。小数点后面的精度,是根据检测的次数所决定的。(如图4)选择为14.6模式,采集次数选择(图5),次数越多,小数点精度越高。在使用128次采集的时候要特别注意,得到的累加值是大于FIFO通道容量的,需要进行移位操作。
图4
图5
图片新闻
技术文库
最新活动更多
-
1月8日火热报名中>> Allegro助力汽车电气化和底盘解决方案优化在线研讨会
-
1月9日立即预约>>> 【直播】ADI电能计量方案:新一代直流表、EV充电器和S级电能表
-
即日-1.16立即报名>>> 【在线会议】ImSym 开启全流程成像仿真时代
-
即日-1.20限时下载>>> 爱德克(IDEC)设备及工业现场安全解决方案
-
即日-1.24立即参与>>> 【限时免费】安森美:Treo 平台带来出色的精密模拟
-
即日-1.31立即参与>>> 【限时免费下载】村田白皮书
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论