开篇:润墨网以专业的文秘视角,为您筛选了一篇航模用2S、3S锂电池进行“空中低压告警器”的设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘 要 现代航模技术水平迅速发展,需要操作员时刻直观的了解航模电池的剩余量,以保证能够完成复各种杂的动作,并保证飞行安全。操作员在操纵航模飞行时,由于受飞行高度、速度、距离等因素的限制,无法用肉眼辨别航模电流的剩余量,只能凭经验来进行操控。但是,航模的飞行时间受到当地温度、湿度风速等诸多因素的影响,单凭经验往往不能对电池剩余时时行掌控,从而在比赛中时而发生由于电池过量放电出现动作完成质量差,电池鼓涨的问题,影响了航模性能的发挥。针对上述情况,本文提出了航模用2s、3s锂电池来进行“空中低电压告警器” 的设计思路。
关键词 放电特性;电路;程序;设计
中图分类号 V32 文献标识码A 文章编号 1674-6708(2013)107-0167-02
通过对世界航模竞赛的情况研究来看,近些年来国际航模运动技术水平有了较大的提高 ,各国的差距在逐渐缩小,竞争十分激烈。航模比赛内容呈现出了科目多样化,复杂化的特点,这就要解决航模供电问题,其中主要的问题是操作员如何直观了解航模电池剩余量。针对这一特点,结合目前技术现状,我们提出了用2S、3S锂电池来设计航模“空中低压告警器”,以解决航模电池低电压告警的问题,来满足航模飞行的安全和任务的圆满完成。
1 系统总体电路设计
在设计电路前,让我们了解一下锂电池的放电特性。锂电池有一个对测量电量很有用的特性,就是在放电的时候,电池电压会随着电量的流失而逐渐降低,并且有相当大的斜率,这就为我们测量电池电压提供了一种很好的方法。。
在电路的设计中,控制舵机应用到了伺服控制技术。舵机的控制一般需要一个20 ms左右的时基脉冲,该脉冲的高电平部分一般为1-21ms范围内的角度控制脉冲部分。对应的关系是这样的:
1.0ms-----------45度;
2.5ms-----------90度;
2.0ms-----------135度;
空中低压告警器的总体电路包括供电电路、控制电路、采样调理电路和驱动电路四部分组成。
1.1 供电电路的设计
供电电路主要是为单片机提供电源,其主要部件是集成稳压器7805。这是一个输出正5V直流的稳压电源电路。IC采用集成稳压器7805,C1、C2分别为输入和输出端滤波电容,C3为磁片电容。可以同时滤除电源中的低频和高频成分,提高输出电压的品质。当输出电流较大是,780应配上散热板。稳压二极管D1串接在7805稳压器2脚与地之间,可使输出电压U0得到一定的提高,输出电压U0为7805稳压器输出电压与稳压二极管D1稳压值之和。图中RV1是一个可调电阻,它的输出端REF为单片机AD变换提供基准电压。
1.2 控制系统电路的设计
控制系统主要完成对采样电路采集的电压进行运算、分析、判断,将得到的电压与实际预设的电压值时行比较而输出信号使驱动电路进行及时的告警与显示。最主要的部件就是单片机,在这个设计中,我们使用的是AVR单片机。
1.3 采样调理电路设计
采样调理电路是整个电路的关键,选择用两个减法运算器来实现对电池的采集过程。
1.4 驱动电路设计
驱动电路分为两部分:一是蜂鸣器,二是舵机。两者的功能是通过音响和动作实现了整个电路的最终告警,提醒操作人员及时的了解并更换航模电池。
2 软件部分设计
2.1 设备初始化部分
本设计所涉及的端口有三个模数转换输入端口和一个报警输出端口。该程序段如下:
“/***********************
端口初始化函数:
***********************/
void portInit(void)
{
PORTB=0x00;
DDRB|=10|11;
DDRB=~13|14|15;
} ”
1)模数转换模块初始化
这部分程序是直接利用avrlib库函数来编写,该程序段如下:
“
//default value
#define ADC_PRESCALEADC_PRESCALE_DIV64
//!Initializes the A/D converter.
///Turns ADC on and prepares it for use.
Void a2dInit(void); ”
2)定时器初始化
定时器初始化的目的,是为系统提供合适的舵机控制信号。对舵机进行控制,需要提供特定格式的控制信号。该信号的格式是周期为20ms,高电平宽度在1~2ms间变化的脉冲信号。
定时器初始化程序段如下:
“
//TIMER0 initializeprescale:1024
//WGM:Fast PWM (TOP=OCR0)
//desired value: 20mSec
//actual value:19.947mSec(0.3%)
Void timer0_init(void)
{
TCCROB=0X00;//stop
OCROA=0XBB;
OCROB=9;
TCNTO=0X45;//set count
TCCROA= 2 3;
TCCROB= 0XOD;//start timer
} ”
2.2 电池电压测量部分
由于测量值可能由于偶然性外部条件的影响(如电磁干扰、湿度突变、电源扰动等),会有较大的误差而导致报警器误动作,所以要采用软件滤波来处理采样值。滤波函数的具体代码如下:
“
//**********************************************
//函数功能:滤波
//入口参数:AD_CH(通道选择)
//出口参数:num_buf=16次采用平均值输出,返回
**********************************************/
Ui6 get 10bitAD(u08 AD_CH)
{
U08 i=0;
U08 max_id,nin_id,max_value,min_value,tep_id=0;
U32 ret=0;
//循环测量NUM_BUF次,并求平均
For(i=0;i
{
Buf_AD[i]=a2dConvert10bit(AD_CH);
Ret += Buf_AD[i]
}
Ret =0X03ff(ret>>4);//求平均
// 去掉最大、最小值,再求平均
max_id=min_id=0;
max_value=min_value=0;
for(i=0;i
{
if(buf_AD[i] ret)
{
if(buf_AD[i]-ret> max_value)
{
max_value= buf_AD[i]-ret;
max_id=I;
}
}
}
else
{
if(ret-buf_AD[i] > max_value)
{
min_value= ret- buf_AD[i];
min_id=i;
}
else tmp_id=I;
}
}
ret=0;
for(i=0;i
{
if((i!= min_id)(i!= min_id)) ret += buf_AD[i];
else ret += buf_AD[tmp_id];
}
ret=0x03ff(ret>>4);// 求平均
return (u16)(ret);
}
2.3报警事件处理部分
电池报警事件处理程序如下:
“ //以ADC1端口电压为基准比较电压
MIN_VOLT=get10bitAD(ADC_CH_ADC1);
//对0、1、2号电池电压进行检测
//若电压低于MIN_VOLT则报警
batVo1t[0]= get10bitAD(ADC_CH_ADC0);
batVo1t[1]= get10bitAD(ADC_CH_ADC2);
batVo1t[2]= get10bitAD(ADC_CH_ADC3);
if((batVo1t[0]< MIN_VOLT)||
(batVo1t[1]< MIN_VOLT)||
(batVo1t[1]< MIN_VOLT))
{
//报警动作
PORTB|=(1
OCROB=18;
}
else
{
PORTB=~(1
} ”
参考文献
[1]周建新,马潮,耿德根.AVR单片机C语言编程及开发.北京:清华大学出版社,2005,3:25-41.
[2]曹岩. Visio 2007应用教程.化学工业出版社,2009,07.
[3]李天松,敖发良.一种PIC单片机实现的PPM调制器.桂林电子工业学院学报,2002,3:6-8.