一、前言
一般航模电池的电量是和电压相关的, 过放必然导致电池永久过放,所以我们有必要通过监控电池电压的变化, 近似表示电池的电量, 在电池电量比较低的情况下, 提醒我们充电。
3S 满电的时候是 12.6V, 过放时电压低于 9.6V。
2S 满电的时候是 8.4 V , 过放时电压低于 7.4V。
原理图如下
简单分析可知, 电池电压经过电阻分压, 衰竭为原来的 1/11 之后, 送单片机 ADC 检测, 以 12 位 ADC 的 STM32 举例, Get_Battery 为ADC 采集的变量, 那么很容易计算得到电池的电量为:
Battery_Voltage = Get_Battery * 3.3 * 11 / 4096(单位: V)
二、代码
adc.c
#include "adc.h"
void Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE ); //使能ADC1通道时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
//PA4 作为模拟通道输入引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1); //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1
ADC_ResetCalibration(ADC1); //使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
ADC_StartCalibration(ADC1); //开启AD校准
while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
}
u16 Get_Adc(u8 ch)
{
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
}
int Get_battery_volt(void)
{
int Volt;//电池电压
Volt=Get_Adc(Battery_Ch)*3.3*11*100/4096; //电阻分压,具体根据原理图简单分析可以得到
if(Volt>1260)Volt=1260;
return Volt;
}
adc.h
#ifndef _ADC_H
#define _ADC_H
#include "config.h"
#define Battery_Ch 4
void Adc_Init(void);
u16 Get_Adc(u8 ch);
int Get_battery_volt(void);
#endif
上一篇:【STM32平衡小车】一篇快速上手MPU6050
下一篇:【STM32平衡小车】STM32定时器配置为编码器模式
推荐阅读
史海拾趣
Hengstler GmbH在电子行业中的五个发展故事
故事一:从钟表工坊到工业计数器的先驱
Hengstler GmbH的故事始于1846年,当时创始人Johannes Hengstler在德国西南部的奥尔丁根镇开设了一家钟表工坊,专注于生产钟表弹簧。随着时间的推移,Hengstler逐渐扩展其业务领域。1926年,公司收购了Efunda公司的计数装置业务,这标志着Hengstler正式进入工业计数和控制元件领域。此后,Hengstler不断推出创新产品,如20世纪50年代发布的革命性“计数系统400”,这是一种带有插件系统的塑料计数系统,不仅功能强大,而且价格实惠,极大地推动了公司在市场上的地位。
故事二:技术革新与全球化布局
进入20世纪后半叶,Hengstler继续加大技术研发投入,并在全球范围内扩展其业务。1962年,公司在英国成立了第一家海外子公司,随后几年内,在法国、比利时、加拿大、意大利和日本等地也相继设立了分支机构。这些举措不仅增强了Hengstler的国际影响力,还使其能够更好地服务全球客户。同时,公司还引入了先进的生产设备和技术,如塑料注塑成型机,实现了塑料部件的大批量生产,进一步提升了产品质量和生产效率。
故事三:编码器技术的突破
在编码器技术方面,Hengstler也取得了显著成就。公司不断推出新型编码器产品,如光电增量型编码器RI58-O/RI58-T,其分辨率高达10,000脉冲和40,000步,防护等级达到IP67,广泛应用于各种工业场合。此外,公司还开发了重载磁性绝对值型编码器AR62/63,该编码器具有极高的抗冲击和抗振动能力,适用于恶劣环境下的使用。这些产品的推出不仅丰富了Hengstler的产品线,还进一步巩固了其在编码器领域的领先地位。
故事四:被丹纳赫收购后的新发展
1995年,Hengstler被美国丹纳赫公司收购,成为其旗下的一员。这一收购为Hengstler带来了更多的资源和支持,推动了公司的进一步发展。在丹纳赫的支持下,Hengstler加大了对新技术和新产品的研发力度,不断推出具有创新性和竞争力的产品。同时,公司还加强了与国际市场的联系和合作,进一步提升了其国际竞争力。
故事五:持续创新与客户服务
多年来,Hengstler始终坚持创新和服务至上的理念。公司不断投入研发资金,引进先进技术和设备,提升产品质量和生产效率。同时,公司还注重客户服务,建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些努力不仅赢得了客户的信任和好评,还使Hengstler在电子行业中保持了良好的声誉和地位。如今,Hengstler已成为全球领先的工业计数和控制元件制造商之一,其产品广泛应用于自动化技术、风力发电机、商用车辆、售票机和医疗等领域。
随着市场需求的不断变化,DYMO公司不断推出新的产品线,以满足不同消费者的需求。除了传统的标签打印机外,DYMO公司还推出了便携式打印机、工业级打印机等多种类型的产品。这些产品不仅功能强大,而且设计精美,深受消费者的喜爱。通过产品线的多样化,DYMO公司进一步巩固了其在标签打印领域的领先地位。
Globaltech的创立可以追溯到21世纪初,当时创始人凭借在电源管理IC设计领域的深厚经验,决定创立一家专注于此领域的公司。公司初期聚焦于线性稳压器和开关稳压器等基础产品的研发,这些产品广泛应用于PC、通讯和消费类电子产品中。通过持续的技术创新和产品优化,Globaltech迅速在市场上站稳脚跟,赢得了多家知名电子制造商的青睐。
ETAL公司成立于XXXX年,由一群富有远见和热情的电子工程师创立。他们看到了电子技术在全球范围内的广泛应用和巨大潜力,决定投身于这一行业。起初,ETAL主要专注于电子元器件的研发和生产,通过不断的技术创新和产品优化,逐渐在市场上树立了良好的口碑。
近年来,随着科技的快速发展和电子行业的变革,EREM公司也面临着巨大的挑战。为了应对这些变革,EREM积极调整战略方向,加大研发投入,推出了一系列符合市场需求的新产品。同时,EREM还注重人才培养和团队建设,打造了一支高效、专业的团队,为公司的发展提供了有力保障。
EREM公司起源于1960年代的瑞士日内瓦,由一群热衷于精密工具制造的工程师创立。在当时,电子行业正逐渐兴起,对高精度工具的需求日益增长。EREM的创始人看到了这一市场机遇,决定专注于生产高精度镊子和钳子,以满足电子行业的需求。他们凭借精湛的工艺和不懈的努力,逐渐在行业内建立了良好的声誉。
@@MAX7132学习板电路图完整版 https://bbs.eeworld.com.cn/thread-50800-1-1.html@@ @@EP2C学习板原理图 https://bbs.eeworld.com.cn/thread-72861-1-4.html@@ @@xc ...… 查看全部问答∨ |
【转】电子设计竞赛经验汇总(11楼以后更新获奖团队的成功感言) 本帖最后由 paulhyde 于 2014-9-15 03:22 编辑 竞赛时应该注意的问题: 1、软件与硬件电路最好是同时做,不要前几天都在搞软件,等到最后才来焊板,到时如果出问题都没时间改了,我参加时就是遇到了这种情况。要么也可以在面包板实践下,有人可 ...… 查看全部问答∨ |
再好几个论坛发帖,没人鸟窝 首先说明一下问题 我用的是ad 08 在画一个BGA封装的FPGA板子,看到别人在管脚中间放置焊盘,我也试着做,但是放置好以后,无法布线,老是连不上线,也不知道是什么问题,搜了半天,也没结果,就问问大家,谢谢… 查看全部问答∨ |
|
各位, 我在6410上调试三星opengl es的例子。 1.1 和2.0的 exe文件都可以正常运行,但调试三星带的源码时,初始化全部成功,但一运行到glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);时串口就会输出如下错误信息: Exception \' ...… 查看全部问答∨ |
|
高级软件开发工程师/软件QA. 职位要求: 1、计算机或相关专业本科及以上学历; 2、必需精通C/C++编程; 3、熟悉嵌入式软件开发原则,设计模式及调试技巧; 4、掌握嵌入式操作系统(如Linux, WinCE)平台上的系统及应用程序开发; 5、3年以上嵌 ...… 查看全部问答∨ |
|
7.在有限的IO中扩展按键数量 前面我们讲到两种多按键的处理方法,仔细观察可以发现,这两种处理方法都是基于多个IO的,也就是说有多少个IO我们就能扩展出多少个按键。如果我只有6个可用的IO,那么能不能实现多于6个按键呢?答案是肯 ...… 查看全部问答∨ |
简单的多机间数据通信在我们的设计中很普遍,一般情况下数据传输距离很短,不会超过百十m,因此仅采用双绞线加RS232或RS485标准就可以有效传输。但有时多机之间的距离也会很远,如我们所设计的一个气象项目,就要求子站遍布在基站1km范围内。因此在 ...… 查看全部问答∨ |