24年专注锂电池定制

定制热线: 400-666-3615

基于STM32F103内部AD测量电池电压

2020-05-02   点击量:666

STM32的ADC介绍:


STM32拥有1~3个ADC(STM32F101/102系列只有1个ADC),这些ADC可以独立使用,也可以使用双重模式(提高采样率)。STM32的ADC是12位逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、持续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户含义的高/低阀值


STM32的ADC最大的转换速率为1Mhz,也就是转换时间为1us(在ADCCLK=14M,采样周期1.5个ADC时钟下得到),不要让ADC的时钟超过14M,否则将导致结果准确度下降


STM32将ADC的转换分为2个通道组:规则通道组和注入通道组。规则通道相当于你正常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执行的。同这个类似,注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才得以继续转换


STM32的ADC通道与GpIO对应表:


基于STM32F103内部AD测量电池电压,硬件电路如下:


根据电路,GpIOpA5作为电池电压测量端口:


1、GpIO以及ADC初始化;


voidpower_init(void)


{


GpIO_InitTypeDefGpIO_InitStructure;


ADC_InitTypeDefADC_InitStructure;


/*V_BAT*/


RCC_ApB2periphClockCmd(RCC_ApB2periph_GpIOA|RCC_ApB2periph_ADC1,ENABLE);


GpIO_InitStructure.GpIO_pin=GpIO_pin_5;


GpIO_InitStructure.GpIO_Mode=GpIO_Mode_AIN;


GpIO_InitStructure.GpIO_Speed=GpIO_Speed_50MHz;


GpIO_Init(GpIOA,&GpIO_InitStructure);


RCC_ADCCLKConfig(RCC_pCLK2_Div6);


ADC_DeInit(ADC1);


ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//独立工作模式


ADC_InitStructure.ADC_ScanConvMode=DISABLE;//非扫描模式


ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//单次转换模式


ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;


ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;


ADC_InitStructure.ADC_NbrOfChannel=1;


ADC_Init(ADC1,&ADC_InitStructure);


ADC_Cmd(ADC1,ENABLE);//使能ADC1


ADC_ResetCalibration(ADC1);//使能复位校准


while(ADC_GetResetCalibrationStatus(ADC1));//等待复位校准结束


ADC_StartCalibration(ADC1);//开启AD校准


while(ADC_GetCalibrationStatus(ADC1));//等待校准结束


}


2、获取ADC值,转化成电池电压值


//获取某个通道的ADC值


floatGet_Adc(BYTEch)


{


uint16_tadc;


floatVbat;


ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);


ADC_SoftwareStartConvCmd(ADC1,ENABLE);


while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));


returnADC_GetConversionValue(ADC1);


}


//将通道5的值计算电池电压值


floatpower_Get_VBAT(void)


{


floatadc;


adc=Get_Adc(5);


adc=adc+Get_Adc(5);


adc=adc+Get_Adc(5);


adc=adc+Get_Adc(5);


adc=adc/4;


g_VBat=(adc*2)*3.3/4096;//电阻1/2分压


returng_VBat;


}


注:使用pA5作为电压值采集端口,根据上表,ADC采样通道为通道5。


声明: 本网站所发布文章,均来自于互联网,不代表本站观点,如有侵权,请联系删除(QQ:378886361)

钜大特种电池工程研究院

钜大特种电池工程研究院

钜大特种锂离子电池工程研究中心是由东莞钜大电子有限公司兴建,并与中南大学、华南理工大学和东莞理工学院相关科研团队联合运营的特种锂离子电池产业化研发中心,研究中心秉持"以特殊环境、特殊用途和特殊性能的需求为导向,以产学研深度融合为创新驱动"的办院方针,力求满足用户独特的需要,从而为用户创造独特的价值。