电池快速检测系统嵌入式论文.docx
- 文档编号:3543556
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:11
- 大小:106.03KB
电池快速检测系统嵌入式论文.docx
《电池快速检测系统嵌入式论文.docx》由会员分享,可在线阅读,更多相关《电池快速检测系统嵌入式论文.docx(11页珍藏版)》请在冰豆网上搜索。
电池快速检测系统嵌入式论文
嵌入式系统期末论文
题目:
智能电池快速检测系统
目录
1引言1
2系统模块设计1
2.1电量指示电路2
2.2报警电路3
2.3电池检测电路4
2.4复位电路和时钟电路4
3程序设计5
1引言
铅酸蓄电池组是许多交通工具的动力源或应急电源,因此电池组的性能将直接关系到交通工具的正常运行。
为了提高蓄电池的使用寿命,保证其可靠运行,需要经常对蓄电池参数进行严格测量,以确保蓄电池组处于最佳的工作状况。
以往,蓄电池参数的测量都是人工完成的。
人工测量速度慢,测量精度不高,而且有害气体影响人体健康。
为减少工人的劳动强度,保障测量人员身体健康,提高测量速度和测量精度,对蓄电池参数进行自动测量显得尤为重要。
电动车采用铅酸蓄电池是从生产难度、成本、可靠性等多方面考虑的结果。
铅酸蓄电池其基本特点是使用期间不用加酸加水维护,电池为密封结构,不会漏酸,也不会排酸雾,电池盖子上设有单向排气阀(也叫安全阀),它作用是当电池内部气体量超过一定值(通常用气压值表示),即当电池内部气压升高到一定值时,排气阀自动打开,排出气体,然后自动关阀,防止空气进入电池内部。
阀控铅酸蓄电池与汽车等用的普通铅酸蓄电池相比有二个主要特点:
一是密封;二是干态。
铅酸蓄电池在使用过程中,只是不断将化学能转换成电能,又将电能转换成化学能,反复循环,对外部环境是“零排放”,不会对环境造成污染。
2系统模块设计
智能电池检测系统从功能模块上看来包括电量指示电路,报警电路,电池检测电路,复位电路和时钟电路以及STM32辅助部分等几部分组成。
图1系统硬件框图
图2系统程序框图
测取电池电量的方法有多种;
1测取电池电压,铅酸电池会随着电量的减少降低电压其电压降低的曲线可近似看成直线,该方法测量设备简单对设备损害小,但误差较大。
2测量电池内阻,随着电池电量的降低点吃的内阻同样会逐渐增加且电池内阻与电池电量相关性比较大,所以该方法精度较高,但数据测取电路复杂,需要在电池两端施加交流信号在检测电池两端信号变化情况计算电池内阻,该系统在实际运行过程中会受电池本身电路影响。
3测量电池电液密度,电池电液密度是最接近电池电量的指标,但电液密度的测量太复杂,所以不采取。
由于电车电池在放电过程一般电流较小,电池电量的变化过程是一个缓慢的过程不需要太高的精确度所以采用直接测量电池电压法测量电池电量。
2.1电量指示电路
电量指示电路如图3所示。
电量指示电路由5个发光二极管组成他们的亮与灭分别代表了蓄电池的电量消耗程度。
其中D1、D2、D3、D4、D5分别代表了蓄电池的剩余电量为100%、80%、60%、40%、20%。
图3电量指示电路
2.2报警电路
报警电路如图4所示。
D1、D2、D3是3个发光2极管,和NPN三极管、蜂鸣器组成报警电路。
当电池电量低于一定量时,系统经过单片机STM32处理后,发送信号使蜂鸣器得电,蜂鸣器发出响声提示电动车欠压需要充电。
图4报警电路
2.3电池检测电路
电车电池大多为多块12V铅酸电池串联本设计3块36V为测量目标。
电池的输出电压范围10.5*3~13.5*3,STM32单片机模块输入电压为0~3.3v。
测量总电压是电池是测取点的分压比例为15:
1,测量单块电池电压时测取点的分压比例为13:
3;所以总电压电阻为150k和10k串联,单块为130k和30k电阻串联。
图5电池检测电路
2.4复位电路和时钟电路
图6时钟控制电路
图7复位电路
3程序设计
LED引脚配置PA0-PA7
staticvoidGPIOA_Config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OD_PP;//输出模式通用推挽GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIOA->ODR|=0x00FF;//关闭LED
}
蜂鸣器2kpwm输出
staticvoidTIM_Mode_Config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
TIM_OCInitTypeDefTIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//模式复用推挽
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period=999;//周期为1000
TIM_TimeBaseStructure.TIM_Prescaler=35;//36分频
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse=499;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OC1Init(TIM3,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,DISABLE);
}
ADC1配置
staticvoidADC1_Mode_Config(void)
{
ADC_InitTypeDefADC_InitStructure;
GPIO_InitTypeDefCPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_AHBPeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
CPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
CPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
CPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&CPIO_InitStructure);
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
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_InitStructure.ADC_NbrOfChannel=1;
ADC_Init(ADC1,&ADC_InitStructure);
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
//ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_55Cycles5);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
获取对应通道数据
staticu16GET_ADC_No_value(u16No)
{
u16i=1;
//No的值为10,11,12,13;
ADC_RegularChannelConfig(ADC1,No,1,ADC_SampleTime_55Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!
ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
returnADC_GetConversionValue(ADC1);
}
主函数
intmain(void)
{
u16power1,power2,power3,power;
SystemInit();
GPIOA_Config();
TIM_Mode_Config();
ADC1_Mode_Config();
while
(1)
{
power=GET_ADC_No_value(10);
power1=GET_ADC_No_value(11);
power2=GET_ADC_No_value(12);
power3=GET_ADC_No_value(13);
if(power1<(u16)(32/16*4096/3.3)|power>(u16)(44/16*4096/3.3))
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIOA->ODR&=0xFFDF;
};
if(power2<(u16)(32/16*4096/3.3)|power>(u16)(44/16*4096/3.3))
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIOA->ODR&=0xFFbF;
};
if(power3<(u16)(32/16*4096/3.3)|power>(u16)(44/16*4096/3.3))
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIOA->ODR&=0xFF7F;
};
if(power>=(u16)(36/16*4096/3.3))
GPIOA->ODR&=0xFFE0;
elseif(power>=(u16)(35.1/16*4096/3.3))
GPIOA->ODR&=0xFFE1;
elseif(power>=(u16)(34.2/16*4096/3.3))
GPIOA->ODR&=0xFFE3;
elseif(power>=(u16)(33.3/16*4096/3.3))
GPIOA->ODR&=0xFFE7;
elseif(power>=(u16)(32.4/16*4096/3.3))
GPIOA->ODR&=0xFFEF;
elseif(power<=(u16)(31.5/16*4096/3.3))
GPIOA->ODR&=0xFFFF;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电池 快速 检测 系统 嵌入式 论文