[BLE(低功耗蓝牙)] STEVAL-IDB007V1电池电压检测

bkn1860   2018-1-27 17:41 楼主
今天学习了一下STEVAL-IDB007V1的ADC,在DMA demo基础上实现了电池电压检测。开发板设置如下:JP2需要跳线到BAT这一端

跳线设置.png


板卡背面需要电池供电:

电池.png

BlueNRG-1的ADC分为以下种转换模式,选择电池电压转换模式:

狂徒.png
代码设置就几句搞定,还是很好操作的:

  1. void ADC_Configuration(void)
  2. {
  3.   SysCtrl_PeripheralClockCmd(CLOCK_PERIPH_ADC, ENABLE);
  4.   
  5.   /* Configure ADC */
  6.   /* ADC_Input_AdcPin1 == ADC1 */
  7.   /* ADC_Input_AdcPin2 == ADC2 */
  8.   /* ADC_Input_AdcPin12 == ADC1 - ADC2 */
  9.   xADC_InitType.ADC_OSR = ADC_OSR_200;
  10.   //ADC_Input_BattSensor; //ADC_Input_TempSensor;// ADC_Input_AdcPin1 // ADC_Input_AdcPin12 // ADC_Input_AdcPin2
  11.   xADC_InitType.ADC_Input = ADC_Input_BattSensor;//ADC_Input_AdcPin1; //ADC_Input_AdcPin12//ADC_Input_BattSensor
  12.   xADC_InitType.ADC_ConversionMode = ADC_ConversionMode_Continuous;//ADC_ConversionMode_Continuous;//ADC_ConversionMode_Single
  13.   xADC_InitType.ADC_ReferenceVoltage = ADC_ReferenceVoltage_0V6; //ADC_ReferenceVoltage_0V6;
  14.   xADC_InitType.ADC_Attenuation = ADC_Attenuation_0dB;//ADC_Attenuation_0dB ADC_Attenuation_9dB54
  15.    
  16.   ADC_Init(&xADC_InitType);
  17.   
  18.   /* Enable auto offset correction */
  19.   ADC_Calibration(ENABLE);
  20.   ADC_AutoOffsetUpdate(ENABLE);
  21. }


获取转换结果的时候直接调用:

  1. printf("ADC value: %.0f mV\r\n", ADC_ConvertBatterySensor(buffer_adc[i],ADC_ReferenceVoltage_0V6)*1000.0);


即可通过串口打印出电池电压:

串口数据.png

转换出来的电压和万用表测量结果一样,能满足需求。

需要注意的一点是,BlueNRG的ADC转换和其他MCU稍有区别,内部直接采用了过采样,这样可以在10bit ADC的基础上提高转换结果精度。OSR设置的是过采样的次数。

微信截图_20180127173423.png
  • 跳线设置.png

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复