本帖最后由 qin123541 于 2022-10-4 21:13 编辑
泰凌B91系列芯片支持通过GPIO模拟信号输入采集供电电压,也支持电池电压(Vbat)直接采集。
电压采集方式选择:
1 GPIO方式:可以直接接gpio采集, 如果电压超过 ADC 采样范围时,必须使⽤外部分压电路采集,再输⼊到采样点,
2 Vbat方式: 电压范围1.8~3.5V时,
本文基于TLSR951x SDK V2.0.0里面ADC_demo修改而来。代码修改如下:
1 app_config.h里将 ADC_SAMPLE_MODE修改为ADC_VBAT_SAMPLE
注意app.c里面sys_init(LDO_1P4_LDO_1P8, VBAT_MAX_VALUE_LESS_THAN_3V6);后面必须设置为VBAT_MAX_VALUE_LESS_THAN_3V6。
2 app.c里面添加#include "printf.h",一般串口输出采集的电池电压值进行对比。
3 定义u16 vol_temp; //电压采集中间变量
u16 vol; //电压平均值
u8 num=10;//采集电压10次求平均值
4 将delay_ms(1000);延时改为delay_ms(100);
采集10次电压,然后求平均值,把此值跟供电电压对比,主函数源码如下。
void main_loop (void)
{
#if (ADC_MODE == ADC_DMA_MODE)
#if (ADC_SAMPLE_MODE != ADC_TEMP_SENSOR_SAMPLE)
adc_vol_mv_val = adc_get_voltage_dma();
#else
adc_temp_val = adc_get_temperature_dma();
#endif
#elif(ADC_MODE == ADC_NDMA_MODE)
#if (ADC_SAMPLE_MODE != ADC_TEMP_SENSOR_SAMPLE)
adc_vol_mv_val = adc_get_voltage();
#else
adc_temp_val = adc_get_temperature();
#endif
#endif
delay_ms(100);
gpio_toggle(LED1);
vol_temp+=adc_vol_mv_val;
if(++num==10)
{
num=0;
vol=vol_temp/10;
printf("%d\n",vol);
}
}
测试对比结果:待续!