历史上的今天
今天是:2024年12月18日(星期三)
2019年12月18日 | STM8S之电量采集
2019-12-18 来源:eefocus
简介
本文介绍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();
上一篇:STM8L之定时器3的精确延时
下一篇:STM8S之内外部16M晶振
史海拾趣
|
公司现在有2个产品一个是ARM7的还有个是SyncMOS sm8958A的板子上还有个Atmel ATF1508AS,现在要我接手,我该从哪学起呢?我以前是做Windows下软件开发的会Java和C#,C也会,但很久没用了,重新上手的话,估计时间不长。还望各位解答,谢谢。… 查看全部问答> |
|
我目前是作java 企业计算方面的软件开发,现在有一份作51单片机的工作机会,不知该不该去做?我想往嵌入式方向转,我的定位是linux+arm, 看网上讲51和arm相差很大,不知我从51开始接近嵌入式开发有没有什么问题?有没有走弯路? ...… 查看全部问答> |
|
在Windows XP下,我插入USB键盘后看到系统在设备管理器中变化了两个,一个是键盘下的KeyBoard Device,一个是人体输入设备下的USB人体输入设备,请问这两个相互之间是怎样联系的啊?? 再者:我在写一个键盘的驱动程序,要求是读取USB键盘数据 ...… 查看全部问答> |
|
这个帖子也不知道发哪里合适。请问大家的工具和元件是怎么整理收纳的?现在我是有很多大小不一的箱子,电子元件用小袋子装好分类在不同的小箱子里。各种工具扔在2个略大箱子里。用起来找起来挺不方便的,想有没有一个大的收纳箱,里面有大小不一的 ...… 查看全部问答> |




