打印
[应用相关]

【转】STM32之电量采集

[复制链接]
1015|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
[size=13.6364px]、硬件原理
1)硬件原理图





由上图可知通过PB1口采集电压,其中采集的电压为锂电池经过分压后的电压。
锂电池电压范围为3V~4.2V。

2)采集电压引脚的通道


其中ADC12_IN9,是指可以是ADC1的第9通道,也可以是ADC2的第9通道。


[size=13.6364px]五、[size=13.6364px]基础知识


[size=13.6364px]1、stm32f103c8t6的ADC是如何的?
答:
stm32f103c8t6这款芯片一共有2个ADC,每个ADC有18个通道,每个通道有12bit。

[size=13.6364px]最大的转换速率为1MHz(转换时间1us),时钟不要超过14M,否则准确度会下降。

[size=13.6364px]2、什么是规则通道组和注入通道组?
[size=13.6364px]答:规则通道组是普通的ADC组,而注入通道组具有优先级更高的抢占式权利,能随时打断规则通道组的ADC通道,获得ADC转换的优先权。
[size=13.6364px]类似于我们在买票时,规则通道组是普通老百姓,而注入通道组是老人、军人,他们可以任意插队……

[size=13.6364px]六、实验步骤
[size=13.6364px]
1、编写ADC的驱动


3、工程中添加自己写的驱动1)工程中添加GUA_ADC1.c和GUA_Battery_Check.c


[size=13.6364px]


2)在MDK设置中添加驱动源文件路径





4、添加库的驱动
1)添加库的驱动文件


2)添加库的驱动头文件(stm32f10x_conf.h 中)


[cpp] view plain copy


  • #include "stm32f10x_adc.h"  


5、在应用层中调用

1)添加驱动头文件(main.c中)
[cpp] view plain copy


  • #include "GUA_Battery_Check.h"  


2)添加驱动初始化代码(main.c的main函数中)

[cpp] view plain copy


  • //电源电量采集  
  • GUA_Battery_Check_Init();  



3)添加测试代码
①写测试代码(main.c中)
[cpp] view plain copy


  • //******************************************************************************              
  • //name:             GUA_Test            
  • //introduce:        测试代码           
  • //parameter:        none                  
  • //return:           none           
  • //author:           甜甜的大香瓜                  
  • //email:            897503845@qq.com      
  • //QQ group          香瓜单片机之STM8/STM32(164311667)                    
  • //changetime:       2016.12.29                       
  • //******************************************************************************  
  • static void GUA_Test(void)  
  • {   
  •   U16 nGUA_Battery_Check_Value = 0;   
  •       
  •     while(1)  
  •     {  
  •         //读取电量  
  •         nGUA_Battery_Check_Value = GUA_Battery_Check_Read();   
  •     }  
  • }  


②调用测试代码main.c的main函数中

[cpp] view plain copy


  • //测试代码  
  • GUA_Test();  


七、实验结果
仿真并查看测试代码中电量读取情况,如下图

上图可知读取到的电量数值为2760,由于adc的精度是12bit(4096)、参考电压为3.3V,因此实际读出的电量值为2760*3.3/4096=2.2236328125V
由于该采集电压是经过分压后的,代入公式“Vbat*75/(51+75)=2.2236328125”后,可计算出Vbat=3.735703125V。
用万用表实测锂电池电压为3.7V(200V档)。


沙发
yiyigirl2014| | 2017-2-24 21:28 | 只看该作者
通过分压电路,将目标点位的电压线性的调整到测量工具的范围,更加精确。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

168

帖子

2

粉丝