电动车电池检测系统嵌入式论文.docx

上传人:b****2 文档编号:23301302 上传时间:2023-05-16 格式:DOCX 页数:13 大小:145.42KB
下载 相关 举报
电动车电池检测系统嵌入式论文.docx_第1页
第1页 / 共13页
电动车电池检测系统嵌入式论文.docx_第2页
第2页 / 共13页
电动车电池检测系统嵌入式论文.docx_第3页
第3页 / 共13页
电动车电池检测系统嵌入式论文.docx_第4页
第4页 / 共13页
电动车电池检测系统嵌入式论文.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

电动车电池检测系统嵌入式论文.docx

《电动车电池检测系统嵌入式论文.docx》由会员分享,可在线阅读,更多相关《电动车电池检测系统嵌入式论文.docx(13页珍藏版)》请在冰豆网上搜索。

电动车电池检测系统嵌入式论文.docx

电动车电池检测系统嵌入式论文

 

嵌入式系统论文

 

题目:

电动车智能电池快速检测系统

 

 

目录

1引言1

2系统模块设计1

2.1STM32基本外围电路设计1

2.2电量指示电路3

2.3电源电路设计4

2.4报警电路4

2.5电池检测电路5

2.6LCD显示模块电路设计5

2.7复位电路和时钟电路6

3程序设计7

1引言

铅酸蓄电池用填满海绵状铅的铅板作负极,填满二氧化铅的铅板作正极,并用1.28%的稀硫酸作电解质。

在充电时,电能转化为化学能,放电时化学能又转化为电能。

电池在放电时,金属铅是负极,发生氧化反应,被氧化为硫酸铅;二氧化铅是正极,发生还原反应,被还原为硫酸铅。

电池在用直流电充电时,两极分别生成铅和二氧化铅。

移去电源后,它又恢复到放电前的状态,组成化学电池。

铅蓄电池是能反复充电、放电的电池,叫做二次电池。

它的电压是2V,通常把三个铅蓄电池串联起来使用,电压是6V。

汽车上用的是6个[2]铅蓄电池串联成12V的电池组。

铅蓄电池在使用一段时间后要补充蒸馏水,使电解质保持含有22~28%的稀硫酸。

电动车采用铅酸蓄电池是从生产难度、成本、可靠性等多方面考虑的结果。

铅酸蓄电池其基本特点是使用期间不用加酸加水维护,电池为密封结构,不会漏酸,也不会排酸雾,电池盖子上设有单向排气阀(也叫安全阀),它作用是当电池内部气体量超过一定值(通常用气压值表示),即当电池内部气压升高到一定值时,排气阀自动打开,排出气体,然后自动关阀,防止空气进入电池内部。

阀控铅酸蓄电池与汽车等用的普通铅酸蓄电池相比有二个主要特点:

一是密封;二是干态。

密封是指基本无酸雾排出。

一般情况下阀控铅酸蓄电池在运行(充放电)过程中是“零排放”,只有在充电后期蓄电池内的气体压力超过安全阀的开放压力时才为有少量的氢和氧混合气体排放,此时有过滤材料滤去了带出的少量酸雾。

干态是指阀控铅酸蓄电池没有自由流动的电解液,可以任何方向放置,不怕颠簸、碰撞,即使外壳破裂也不会有酸漏出。

铅酸蓄电池在使用过程中,只是不断将化学能转换成电能,又将电能转换成化学能,反复循环,对外部环境是“零排放”,不会对环境造成污染。

2系统模块设计

2.1STM32基本外围电路设计

该设计采用意法半导体公司最新推出的基于ARMCortex™-M0的32位RISC内核微处理器STM32芯片,该芯片具有超低的成本、极低的功耗、丰富的片内外设和方便灵活的开发手段将成为众多微处理器系列中一颗耀眼的新星。

如图1所示,为STM32微处理器的最小工作电路。

如图所示,BOOT0引脚用于STM32F030R8T6微处理器启动模式的设置,当BOOT0接高电平时,启动方式为从内部FLASH启动。

该控制系统使用8.0MHz的外部晶振作为系统时钟,STM32微处理器内部集成锁相环,通过软件设置锁相环倍频数为6,就可以得到系统的最高工作时钟72Mhz。

图中的32.768MHz的外部晶振的作用是通过分频,为STM32微处理器内部集成的RTC实时时钟提供一个精确地1秒钟计时。

图1STM32最小系统

 

图2系统硬件框图

 

电动车电池智能检测电路先判断此时电池的状态然后经过ADC转换电路传到STM32单片机内。

输出电路有报警电路和显示电路。

2.2电量指示电路

电量指示电路如图3所示。

电量指示电路由5个发光二极管组成他们的亮与灭分别代表了蓄电池的电量消耗程度。

其中D1、D2、D3、D4、D5分别代表了蓄电池的剩余电量为100%、80%、60%、40%、20%。

图3电量指示电路

2.3电源电路设计

图4电源电路

该系统直接采用电动车的电瓶作为电源,因为电动车电瓶的电压均高于系统的工作电压(5V),所以我们通过利用稳压芯片L7805CV使得到稳定的5V直流电压,用以为该系统提供工作电压。

图中的C10/C11两个电容用作滤波功能,以使得到稳定的5V直流电压。

2.4报警电路

报警电路如图5所示。

D1、D2、D3是3个发光2极管,和NPN三极管、蜂鸣器组成报警电路。

当电池电量低于一定量时,系统经过单片机处理后,发送信号使蜂鸣器得电,蜂鸣器发出响声提示电动车欠压需要充电。

 

图5报警电路

2.5电池检测电路

电池检测电路如图6所示。

他是由待测蓄电池组和电阻组成,其中pc0表示电池组串联后经过电阻的电压,pc1表示电池组1经过电阻的电压,pc2表示电池组2经过电阻的电压,pc3表示电池组3经过电阻的电压。

后把这些电压信号输入单片机中进行处理。

图6电池检测电路

2.6LCD显示模块电路设计

图7所示为LCD显示模块电路原理图设计。

图7LCD显示模块电路原理图

2.7复位电路和时钟电路

图8复位电路

图9时钟电路

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;

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1