×
嵌入式 > 技术百科 > 详情

STM8S之电量采集

发布时间:2021-04-19 发布时间:
|

简介

本文介绍STM8S系列如何使用ADC的一个通道,对电量进行采集。


实验平台

编译软件:IAR for STM8 1.42.2

硬件平台:stm8s003f3p6开发板

仿真器:ST-LINK

库函数版本:STM8Sx_AN3298_FW_V4.0.0


硬件原理图


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

锂电池电压范围为3V~4.2V。


实验步骤

1、工程中添加自己写的电量采集驱动

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


//******************************************************************************        

//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文件夹中)

//******************************************************************************        

//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)添加驱动的路径


$PROJ_DIR$..USER  

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


2、应用层中调用


1)添加头文件(main.c中)


#include "Battery_Check.h"


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

  //电源电量采集

  Battery_Check_Init();


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

  U16 nBattery_Check_Value = 0;

 

  //读取电量

  nBattery_Check_Value = Battery_Check_Read();   




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
NS推出采用第二代PowerWise技术的能源管理单元及先进电源控制器