如何配置ADC_基于onsemi_RSL10

该ADC的配置是基于onsemi_RSL10,如果想了解有关该板子的信息介绍,可以点击Onsemi低功耗蓝牙soc:RSL10介紹进行了解。

一.初始化配置

1. 启用ADC分配器和采样模式和采样频率
Sys_ADC_Set_Config(ADC_VBAT_DIV2_NORMAL | ADC_NORMAL ADC_PRESCALE_1280H);
①参数1:
选择正常模式(VBAT分频器始终启用):ADC_VBAT_DIV2_NORMAL
或者负载循环VBAT分频器(仅在ADC转换时启用) : ADC_VBAT_DIV2_DUTY
②参数2:
选择模式为正常模式:ADC_NORMAL
还是连续模式:ADC_CONTINUOUS
③配置采样频率
 
2. 配置ADC中断使能
Sys_ADC_Set_BATMONIntConfig(INT_EBL_ADC | ADC_CHANNEL <<
ADC_BATMON_INT_ENABLE_ADC_INT_CH_NUM_Pos | INT_EBL_BATMON_ALARM);
①参数1:设置ADC的中断
②参数2:ADC_CHANNEL :配置使用通道几产生中断
③参数3:设置VBAT的中断启用,即电池中断
 
3. 选择通道和该通道对应的输入源:
Sys_ADC_InputSelectConfig(ADC_GND_CHANNEL, ADC_POS_INPUT_GND | ADC_NEG_INPUT_GND);
①:参数1:选择通道几
②参数2:选择正极待测电压输入源
③参数3:选择负极输入源,一般为地

4.配置OFFSET寄存器:
offset寄存器中提供了一个偏移校正因子,自动将补偿值应用到被测量的ADC数据:
(这个选用可以看你是单通道还是全差分还是怎样选择)
方式1: 将两个ADC通道的输入选择都设置为GND,这样OFFSET就会被自动减去。
即提供自动补偿值,参考标准正负极自动校准
Sys_ADC_InputSelectConfig(ADC_GND_CHANNEL, ADC_POS_INPUT_GND |
ADC_NEG_INPUT_GND);
方式2:手动设置补偿值,后面数值为你根据计算的出来的,具体计算比较麻烦。
ADC->OFFSET=0x000000000;
方式3:都不设置
上面两个都不设置,即不会提供补偿值,OFFSET为0;

5.DIO口设置
如果测量的ADC值不为VABT,为某个DIO口,需要初始化该DIO口:
Sys_DIO_Config(1, DIO_MODE_INPUT|EXTCLK_NO_PULL );
①参数1:DIO口端口号
②参数2:设置DIO口模式,即为输入模式
③参数3:设置是否上拉:这里为不上拉,文档要求这样设置,一般不设上拉,会影响输入的电压。
 
6.使能ADC中断:
NVIC_EnableIRQ(ADC_BATMON_IRQn);

7.使用电池低电量提醒:
这个作用是设置了电池电量的中断,当低于一定数值的时候,触发中断提醒电量过低。
Sys_ADC_Set_BATMONConfig((100 << ADC_BATMON_CFG_ALARM_COUNT_VALUE_Pos) |
(THRESHOLD_CFG <<
ADC_BATMON_CFG_SUPPLY_THRESHOLD_Pos) |
BATMON_CH(ADC_CHANNEL));
 
8.三个值的设置(关于电池监控):
①.ALARM_COUNT_VALUE:
当 SUPPLY_COUNT_VALUE= ALARM_COUNT_VALUE的时候,设置警告阈值
②.SUPPLY_THRESHOLD
低电压检测阈值(7.8 mV台阶)
③.SUPPLY_SRC:
选择需要监控的电源电压源
 
注意通道6的选择是 VBAT/2,即电池电压除以2。

二.配置中断服务函数

 
当ADC有数值产生中断的时候,就会进入该函数,然后
1.读取某个通道的ADC值
uint32_t adc_status = Sys_ADC_Get_BATMONStatus();
2.取平均ADC值
取100次ADC的值,然后进行计算最后读取的ADC模拟值;

三.发送数值

ADC的计算公式(RSL10):
一般取一个基准的电压,对应数字电压值作为基准,比如RSL10是取0-2v作为基准(其他的不一定这样),然后对应8位分辨率,或者14位分辨率,这里用14位,即2^14。然后你测量的值只能在0-2的范围内,超过就为饱和了,即超过2v只显示2v。
 
待测电压模拟值(所求) 参考电压值(2v)
—————————— = ——————-————
待测电压数字值 参考电压数字值(2^14)
 
代码中(adc_value)(待测电压数字值) / (float)ADC_GAIN,ADC_GAIN为2^13次方,因为跟参考电压值2消去,所以变成2^13次方。
 
注意:这里测试的VBAT电池的电压使用了内部分频器将其电压分为一半测试,即VBAT/2,不是完整的,所以下面计算VBAT的ADC值的时候,跟计算其他ADC值不一样,要*2才是真实VABT的值:所以计算VABT的ADC值应该为: adc_in_volts = (adc_value*2.0f) / (float)ADC_GAIN;

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论