打印
[应用相关]

【转】STM8S之电量采集

[复制链接]
692|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TXQDM|  楼主 | 2017-2-24 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、简介
本文介绍STM8S系列如何使用ADC的一个通道,对电量进行采集。


二、实验平台
编译软件:IAR for STM8 1.42.2
硬件平台:stm8s003f3p6开发板
仿真器:ST-LINK
库函数版本:STM8Sx_AN3298_FW_V4.0.0


三、版权声明

博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.NET/feilusia
联系方式:897503845@qq.com
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902
香瓜单片机之STM8/STM32群:164311667

甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、实验前提
1、在进行本文步骤前,请先阅读以下博文:
暂无


2、在进行本文步骤前,请先实现以下博文:

暂无



五、硬件原理图




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

六、实验步骤

1、工程中添加自己写的电量采集驱动
1)写一个电量采集驱动Battery_Check.c (存放在工程的USER文件夹中)
[cpp] view plain copy


  • //******************************************************************************         
  • //name:         Battery_Check.c        
  • //introduce:    电量检测驱动      
  • //author:       甜甜的大香瓜        
  • //changetime:   2016.07.25      
  • //email:        897503845@qq.com      
  • //******************************************************************************  
  • #include "stm8s.h"  
  • #include "Battery_Check.h"  
  •   
  • /*********************宏定义************************/  
  • #define BATTERY_CHECK_COUNT_PER_COLLECT         5   //每次采集的次数  
  •   
  • //******************************************************************************         
  • //name:             Battery_Check_Read         
  • //introduce:        读电量      
  • //parameter:        none         
  • //return:           返回16bit的电量,右对齐        
  • //author:           甜甜的大香瓜               
  • //email:            897503845@qq.com            
  • //changetime:       2016.07.25                 
  • //******************************************************************************   
  • u16 Battery_Check_Read(void)  
  • {  
  •   u16 nBattery_Check_Value = 0;  
  •   u16 nNum = 0;  
  •   
  •   //采集BATTERY_CHECK_COUNT_PER_COLLECT次,累加采集的电量值  
  •   for(nNum = 0; nNum < BATTERY_CHECK_COUNT_PER_COLLECT; nNum++)  
  •   {  
  •     //开始转换  
  •     ADC1_StartConversion();  
  •       
  •     //累加读取adc的转换值  
  •     nBattery_Check_Value += ADC1_GetConversionValue();     
  •   }  
  •    
  •   //求出电量平均值  
  •   nBattery_Check_Value /= BATTERY_CHECK_COUNT_PER_COLLECT;  
  •       
  •   //返回  
  •   return nBattery_Check_Value;  
  • }  
  •   
  • //******************************************************************************         
  • //name:             Battery_Check_Init         
  • //introduce:        电量检测初始化      
  • //parameter:        none         
  • //return:           none        
  • //author:           甜甜的大香瓜               
  • //email:            897503845@qq.com            
  • //changetime:       2016.07.25                  
  • //******************************************************************************   
  • void Battery_Check_Init(void)  
  • {  
  •   //寄存器复位默认值  
  •   ADC1_DeInit();   
  •    
  •   //单次转换、通道3、时钟分频器fmaster/2、关闭外部触发转换事件、右对齐数据、关闭指定通道的施密特触发  
  •   ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_3, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE);   
  •    
  •   //使能  
  •   ADC1_Cmd(ENABLE);  
  • }  


2)写一个电量采集驱动头文件Battery_Check.h(存放在工程的USER文件夹中)

[cpp] view plain copy


  • //******************************************************************************         
  • //name:         Battery_Check.h         
  • //introduce:    电量检测的头文件      
  • //author:       甜甜的大香瓜        
  • //changetime:   2016.07.25      
  • //email:        897503845@qq.com      
  • //******************************************************************************  
  • #ifndef _BATTERY_CHECK_H_  
  • #define _BATTERY_CHECK_H_  
  •   
  • /*********************头文件************************/   
  • #include "stm8s.h"  
  •    
  • /*********************宏定义************************/  
  •   
  •   
  • /*********************外部函数声明************************/   
  • u16 Battery_Check_Read(void);  
  • void Battery_Check_Init(void);  
  •   
  • #endif  


3)工程中添加Battery_Check.c




4)添加驱动的路径


[cpp] view plain copy


  • $PROJ_DIR$\..\USER   

注意USER文件夹是与“Project”、“FWlib”文件夹同级的自定义文件,用于存放香瓜写的代码。


2、应用层中调用
1)添加头文件(main.c中)

[cpp] view plain copy


  • #include "Battery_Check.h"  


2)初始化(main.c的main函数中)


[cpp] view plain copy


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


3)采集电量(main.c的main函数中)

[cpp] view plain copy


  • U16 nBattery_Check_Value = 0;  
  •   
  • //读取电量  
  • nBattery_Check_Value = Battery_Check_Read();     


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

本版积分规则

110

主题

593

帖子

11

粉丝