历史上的今天
返回首页

历史上的今天

今天是: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();   

推荐阅读

史海拾趣

CT Micro公司的发展小趣事
  1. 创业初期与技术创新

CT Micro公司最初由几位电子工程领域的专家创立,他们看到了微型计算机断层扫描(Micro-CT)技术在电子行业中的巨大潜力。初期,公司面临着资金短缺和技术难题,但他们通过不断研发和创新,成功开发出了一款具有高性价比的Micro-CT设备,迅速获得了市场的认可。

  1. 市场拓展与合作伙伴关系

随着产品的成熟,CT Micro开始积极寻求市场拓展。他们与多家电子制造企业建立了合作关系,为这些企业提供Micro-CT设备的定制服务。通过与这些企业的合作,CT Micro不仅扩大了市场份额,还进一步提升了产品的技术水平和应用范围。

  1. 研发升级与产品迭代

面对日益激烈的市场竞争,CT Micro不断投入研发力量,对Micro-CT设备进行升级和迭代。他们成功推出了多款新型设备,具有更高的分辨率、更快的扫描速度和更低的辐射剂量。这些新产品的推出,进一步巩固了CT Micro在电子行业中的领先地位。

  1. 国际化战略与市场拓展

随着国内市场的饱和,CT Micro开始实施国际化战略。他们积极参与国际展览和研讨会,展示自己的产品和技术实力。同时,他们还在海外设立了销售和服务中心,为国际客户提供更加便捷的服务。通过这些努力,CT Micro成功打开了国际市场的大门。

  1. 社会责任与可持续发展

在快速发展的同时,CT Micro也积极履行社会责任。他们注重环保和可持续发展,采用环保材料和节能技术生产产品。此外,他们还积极参与公益事业,为贫困地区的教育和医疗事业贡献力量。这些举措不仅提升了公司的社会形象,也为其可持续发展奠定了坚实基础。

请注意,这些故事框架是虚构的,并不代表CT Micro公司的实际发展情况。如果您需要了解CT Micro公司或类似公司的真实故事,建议您查阅相关公司的官方网站、新闻报道或行业分析报告。

Beckhoff Automation GmbH公司的发展小趣事

随着电子行业的全球化趋势日益明显,BCD Semi公司积极拓展国内外市场,与众多知名企业建立了紧密的合作关系。公司通过与合作伙伴共同研发、生产和销售半导体产品,实现了资源共享和优势互补,进一步提升了市场竞争力。同时,BCD Semi还积极参加国际电子展会和交流活动,展示公司的最新技术和产品,为公司的品牌建设和市场拓展奠定了坚实的基础。

Electroswitch公司的发展小趣事

Electroswitch Electronics Products(以下简称“Electroswitch”)成立于1986年,是Electro Switch Corp的一个子公司,后者早在1946年就已创立。在创立之初,Electroswitch就致力于设计和制造高品质的开关产品,以满足电子应用领域的各种需求。通过不断的技术创新和产品优化,Electroswitch逐渐在电子行业中树立了良好的声誉。

Bivar公司的发展小趣事

在电子行业的初期,Bivar公司以其创新的技术突破赢得了市场的认可。公司研发出一款新型电阻器,具有高稳定性和长寿命的特点,迅速在行业内引起了关注。凭借这一技术优势,Bivar逐渐在电阻器市场上占据了一席之地,并逐渐扩大生产规模,实现了公司的初步成长。

EECO Switch公司的发展小趣事

在人机界面产品领域,开关是不可或缺的重要组件。EECO Switch公司凭借其卓越的研发实力,不断在开关技术上取得突破和创新。公司成功开发出了二进制编码的指轮开关、STRIPSWITCH®和微DIP®印刷电路板上安装的编码开关等多种产品,这些产品不仅具有高度的可靠性和稳定性,而且操作简便、功能丰富,满足了不同客户的需求。

台湾三礼(3L)公司的发展小趣事

进入21世纪,随着全球电子产业的快速发展,三礼公司看到了中国内地市场的巨大潜力。2006年,公司决定扩大在中国内地的生产规模,投资建构了40,000平方米的厂房,并成立了专业客制化产品厂——和瑞电子(3LQ)。这一举措不仅提升了公司的生产能力,还使得产品更加符合市场需求,进一步巩固了公司的市场地位。

问答坊 | AI 解惑

从哪开始学单片机与ARM7

公司现在有2个产品一个是ARM7的还有个是SyncMOS sm8958A的板子上还有个Atmel ATF1508AS,现在要我接手,我该从哪学起呢?我以前是做Windows下软件开发的会Java和C#,C也会,但很久没用了,重新上手的话,估计时间不长。还望各位解答,谢谢。…

查看全部问答>

C8051 FO20 SPI口怎么配置

C8051 FO20 SPI口怎么配置 最好有源代码 …

查看全部问答>

现在有一份作51单片机的工作机会,不知该不该去做?

我目前是作java 企业计算方面的软件开发,现在有一份作51单片机的工作机会,不知该不该去做?我想往嵌入式方向转,我的定位是linux+arm,  看网上讲51和arm相差很大,不知我从51开始接近嵌入式开发有没有什么问题?有没有走弯路?   ...…

查看全部问答>

USB键盘驱动的问题

在Windows XP下,我插入USB键盘后看到系统在设备管理器中变化了两个,一个是键盘下的KeyBoard Device,一个是人体输入设备下的USB人体输入设备,请问这两个相互之间是怎样联系的啊?? 再者:我在写一个键盘的驱动程序,要求是读取USB键盘数据 ...…

查看全部问答>

tffs问题.

在shell中,调用tffsshow报告说"通信失败". 问题出在调用i28f128Identify函数卡在flmap上. 什么原因啊?…

查看全部问答>

端口P1使用问题

我把P1端口的P1.7作为中断用,下降沿有效,并且检测到P1IFG置 0x80, 但是while(P1IFG&0X80)或while((P1IN&0X80)==0)就不能用,进入不了循环 换成while(!(P1IN&BIT0))就可以,,这是为什么…

查看全部问答>

求教

请大家指点一下小弟,我想学arm,但对于此却真的不知从何抓起,我不知道选哪本书,选哪个型,希望得到指点。 我学的是51.…

查看全部问答>

要做PFC程序了,发篇文章和大家一起学习

[ 本帖最后由 dontium 于 2012-3-24 11:26 编辑 ]…

查看全部问答>

【求助】一堆元件和工具怎么收纳整理

这个帖子也不知道发哪里合适。请问大家的工具和元件是怎么整理收纳的?现在我是有很多大小不一的箱子,电子元件用小袋子装好分类在不同的小箱子里。各种工具扔在2个略大箱子里。用起来找起来挺不方便的,想有没有一个大的收纳箱,里面有大小不一的 ...…

查看全部问答>

分享一本射频书,非常不成

射频电路设计-理论与应用 其实射频不难,不信看看这本书,肯定你看懂。…

查看全部问答>