电池电压检测

 1.首先在项目中引入STM8 中ADC 的库文件#include "stm8s_adc1.h"。

 2.初始化:

1、AD输入通道对应的IO设置为上拉输入;

2、配置AD参数,如:预分频系数、是否使用外部触发转换、是否使用施密特触发器、是否使用缓存以及是否使用扫描模式等;

3、开启ADC;

4、开启转换;

  AD参数

ADC1_ExternalTriggerConfig(ADC1_EXTTRIG_TIM,DISABLE);//不使用外部触 ADC1_SchmittTriggerConfig(ADC1_SCHMITTTRIG_CHANNEL4,DISABLE);
//禁止AIN2 AIN4的施密特触发器,降低IO静态功耗
//PD5,PD6上的通道如果施密特方式禁用会导致串口无法收发数据!
ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE,//单次转换
                      ADC1_CHANNEL_0,//只能选择一个通道!
                      ADC1_ALIGN_RIGHT);//右对齐
ADC1_Cmd(ENABLE);//开启ADC

3获取ADC的值

开启转换并且通过ADC1_GetConversionValue()来得到ADC的值,ADC值可以多取几次再取平均值。

 ADC1_StartConversion();//开启一次转换一次
 while(!ADC1_GetFlagStatus(ADC1_FLAG_EOC));//等待转换完成
 ADC1_ClearFlag(ADC1_FLAG_EOC);//软件清除
     
 ADC = ADC1_GetConversionValue();//获取ADC值

4.ADC值转化为电压值

第一要确定你的ADC用几位表示

第二要确定你的最大值时对应的参考电压

比如

AD_return=(averageADC*3300/1024)*6; //转化为电压 参考电压为3.3v  测得值为实际的1/6  单位毫伏

上面这个转化参考电压为3.3V,10位ADC

所以要用测得的ADC值乘以3300/1024,因为测得的ADC为实际电压的分压的值,所以还要乘上具体你的分压,具体根据设计的电路来,才能得到实际电压值,上面的测得的ADC为实际电压的1/6分压,所以要乘以6。

你可能感兴趣的:(电池电压检测)