毕业设计(论文)-反激式通用型电动自行车充电电源软件设计.doc_第1页
毕业设计(论文)-反激式通用型电动自行车充电电源软件设计.doc_第2页
毕业设计(论文)-反激式通用型电动自行车充电电源软件设计.doc_第3页
毕业设计(论文)-反激式通用型电动自行车充电电源软件设计.doc_第4页
毕业设计(论文)-反激式通用型电动自行车充电电源软件设计.doc_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计(论文)题目:反激式通用型电动自行车充电电源软件设计院 (系): 电子信息工程学院 专 业: 电气工程及其自动化 班 级: 050411 学 生: 雷强 学 号: 050411109 指导教师: 王青岳 2009年 6月摘要反激式通用型电动自行车充电电源软件设计摘 要本课题为了解决24V、36V、48V的铅酸电池、镍镉电池、镍氢电池的充电快速、可靠性,设计了一种基于PWM的反激式通用型电动自行车充电电源。它以AT89S51为核心,介绍了充电电源的工作原理、硬件体系结构设计、讨论硬件部分的组成、以及它是如何实现对电池数据的采集和两种充电模式的实现。详细讨论了系统的硬件构成后,在软件设计方面利用软件控制PWM占空比实现对硬件的精确控制,同时对软件抗干扰做了进一步的研究,使硬件更加快速、可靠。由于采用了高分辨率的A/D转换电路,保证了充电电源在浮充控制阶段有很高的精度。对于蓄电池的快速充电和延长其寿命有很大意义。关键词:单片机 ;A/D转换;PWM;浮充电压IAbstractFlyback charging general-purpose electric bicycle power software designAbstractIn order to resolve this issue 24V, 36V, 48V lead-acid batteries, nickel-cadmium batteries, nickel metal hydride rechargeable batteries fast, reliability, design of a PWM-based flyback charging general-purpose power supply for electric bikes. AT89S51 it as the core, introduced the principle of charging power supply, hardware architecture design, hardware part of the discussion, as well as how to achieve it is the collection of data on the battery charge mode and the realization of the two. Discussed in detail the system hardware, the software design in the use of software-controlled PWM duty cycle to achieve the precise control of hardware, software, anti-jamming at the same time to do further studies in order to enable the hardware faster and reliable. As a result of the high-resolution A / D conversion circuit, to ensure that the charging phase of the power control in the float has a high accuracy. For fast charging batteries and extend the very meaning of life.Key Words: Single chip microcomputer;A/D conversion;PWM;Float chargingII目录目 录摘 要IAbstractII1绪论11.1电池的发展及其意义11.1.1电池的特性11.1.2电池的充电方法21.2课题的背景41.3本次设计的要求和主要任务42硬件简介52.1系统结构52.2硬件电路介绍62.2.1主充电电路部分62.2.2键盘电路62.3单片机的选取73反激式通用型电动自行车充电电源软件设计103.1主程序设计103.1.1软件框图:103.1.2主流程图113.2子程序设计123.2.1键盘扫描子程序123.2.2 AD转换程序163.2.3 LCD显示223.2.4 温度采集273.2.5充电子程序363.2.6充电参数初始化配置子程序433.2.7故障判断子程序473.3软件抗干扰484 系统调试505 总结52参考文献53致谢54毕业设计(论文)知识产权声明55毕业设计(论文)独创性声明56附录1 主程序57附录2 外文原文及翻译73II绪论1绪论1.1电池的发展及其意义1.1.1电池的特性a.铅酸电池 铅酸蓄电池经过百余年的发展与完善以其成本低、电压高、原材料丰富、制造工艺简单而获得了最广泛的应用。而自70年代末,VRLA(阀控式免维护铅酸蓄电池)电池在许多工业发达国家发展迅速。如日本1980年生产的小型VRLA电池为1800万只,而到1990年已达1.1亿只,年平均增长率达43%。90年代后,摩托车蓄电池已转向VRLA,而大型的固定用VRLA也很快发展起来。1985年起,我国也拥有了一批工厂进行小批量VRLA电池的生产,而如今生产VRLA的工厂已不下200家,据估算,我国年需固定型蓄电池约35-40万KVAh,今已全部换成VRLA,其型号则从1Ah到3000Ah都齐备。VRLA具有较高的安全性和密封性,由于其正常运行时不存在对电解液的检测,以及调酸加水等传统的定期维护步骤,因而也被人们称为免维护蓄电池。其独特的气体再化合系统,能将产生的气体再化合成水;在蓄电池大充电、大放电而其内部的气压上升到超越正常水平时,安全阀会释放过量的气体后然后自动重新密封,在电池使用过程中不会产生气涨现象;安全阀和专用过滤器可防止蓄电池爆炸,确保正常使用时安全可靠。VRLA寿命较长,一般正常运行具有10年以上的浮充使用寿命。 b.镍镉镍氢电池 密封镍镉电池效率高、循环寿命长、能量密度大、体积小、重量轻、结构紧凑,并且不需要维护,因此在工业和消费产品中得到了广泛应用。随着技术的发展,人们对电源的要求越来越高。70年代中期,研制成功了功率大、重量轻、寿命长、成本低的镍氢电池,并且于1978年成功地将这种电池应用在导航卫星上,镍氢电池与同体积镍镉电池相比,容量可提高一倍,而且没有重金属镉带来的污染问题。它的工作电压与镍镉电池完全相同,工作寿命也大体相当,但它具有良好的过充电和过放电性能。近年来,镍氢电池受到世界各国的重视,各种新技术层出不穷。镍氢电池刚问世时,要使用高压容器储存氢气,后来人们采用金属氢化物来储存氢气,从而制成了低压甚至常压镍氢电池。1992年,日本三洋公司每月可生产200万只镍氢电池。目前国内已有20多个单位研制生产镍氢电池,国产镍氢电池的综合性能已经达到国际先进水平。55西安工业大学毕业设计(论文)1.1.2电池的充电方法电池充电通常要完成两个任务,首先是尽可能快地使电池恢复额定容量,另一是使用小电流充电,补充电池因自放电而损失的能量,以维持电池的额定容量。解决这两个问题的方法就是初期用大电流恒流充电以满足充电的快速性;在充电末期以小且精确的电流进行浮充以满足充电的可靠性。(1)密封铅酸蓄电池的充电方法:1)恒流充电:在充电过程中,铅酸电池负极板上的硫酸铅逐渐析出铅,正极板上的硫酸铅逐渐生成二氧化铅。当正负极板上的硫酸铅完全生成铅和二氧化铅后,电池开始发生过充电反应,产生氢气和氧气。这样,在非密封电池中,电解液中的水将逐渐减少。在密封铅酸蓄电池中,只有当充电速率小于,才能使氢气和氧气100%重新化合为水,但为了保证充电的快速性,在充电初期应进行大电流充电。当电池电压上升到过充电压时,继续大电流过充将有导致电池失水,而过充电开始的时间与充电的速率有关。当充电速率大于时,电池容量恢复到额定容量的以前,即开始发生过充电反应。故恒流阶段到此应结束,立刻转入恒压限流阶段。2)恒压阶段:恒压期间若电流3小时保持一定的数值范围不变则转入浮充阶段。3)浮充阶段:电池充足电后,维持电容容量的最佳方法就是在电池组两端加入恒定的电压。浮充电压下,充入的电流应能补充电池因自放电而失去的能量。浮充电压不能过高,以免因严重的过充电而缩短电池寿命。采用适当的浮充电压,密封铅酸蓄电池的寿命可达年以上。实践证明,实际的浮充电压与规定的浮充电压相差时,免维护蓄电池的寿命将缩短一半。铅酸电池的电压具有负温度系数,其单格值为。在环境温度为时工作很理想的普通(无温度补偿)充电器,当环境温度降到时,电池就不能充足电,当环境温度上升到时,电池将因严重的过充电而缩短寿命。因此,为了保证在很宽的温度范围内,都能使电池刚好充足电,充电器的各种转换电压必须随电池电压的温度系数而变。如图1.1所示。西安工业大学毕业设计(论文)图1.1 特性变化图(2)镍氢/镍镉电池的充电方法:电池的充电过程通常可分为预充电、快速充电、补足充电、涓流充电四个阶段。1)预充电阶段:对长期不用的或新电池充电时,一开始就采用快速充电,会影响电池的寿命。因此,这种电池应先用小电流充电,使其满足一定的充电条件,这个阶段称为预充电。2)快速充电阶段:快速充电就是用大电流充电,迅速恢复电池电能。快速充电速率一般在0.1C以上,快速充时间由电池容量和充电速率决定。快速充电分恒流充电和脉冲充电两种,恒流充电就是以恒定电流对电流充电,脉冲充电则是首先用脉冲电流对电池充电。然后让电池放电,如此循环。电池脉冲的幅值很大、宽度很窄。通常放电脉冲的幅值为充电脉冲的3倍左右。虽然放电脉冲的幅值与电池容量有关,但是,与充电电流幅值的比值保持不变,脉冲充电时,充电电流波形如图1.2所示。图1.2 脉冲充电电流波形充电过程中,镍镉电池中的氢氧化镍还原为氢氧化亚镍,氢氧化镉还原为镉。在这个过程中产生的气泡,聚集在极板两边,这样就会减小极板的有效面积,使极板的内阻增大。由于极板的有效面积变小,充入全部电量所需的时间增加。加入放电脉冲后,气泡离开极板并与负极板上的氧复合。这个去极化过程减小了电池的内部压力、温度和内阻。同时,充入电池的大部分电荷都转换为化学能,而不会转变为气体和热量。充放电脉冲宽度的选择应能保证极板恢复原来的晶体结构,从而消除记忆效应。采用放电去极化措施后,可以提高充电效率并且允许大电流快速充电。3)补足充电阶段:采用某些快速充电法时,快速充电终止后,电池并未充足电。为了保证充入100%的电量,还应加入补足充电过程。补足充电速率一般不超过0.3C。在补足充电过程中,温度会继续上升,当温度超过规定的极限时,充电器转入涓流充电状态。西安工业大学毕业设计(论文)4)涓流充电阶段:存放时,镍镉电池的电量将按C/30到C/50的放电速率减小,为了补偿电池因自放电而损失的电量,补足充电结束后,充电器应自动转入涓流电过程。涓流充电也称为维护充电。根据电池的自放电特性,涓流充电速率一般都很低。只要电池接在充电器上并且充电器接通电源,在维护充电状态下,充电器将以某一充电速率给电池补充电荷,这样可使电池总处于充足电状态。涓流充电器的主要问题是充电速度太慢,例如,容量为1Ah的电池,采用C/10充电速率时,充电时间要10h以上。此外,电池采用低充电速率反复充电时,还会产生枝晶。大部分涓流充电器中,都没有任何电压或温度反馈控制,因而不能保证电池充足电后,立即关断充电器。1.2课题的背景随着蓄电池在生产、生活领域的大量应用,对各种规格、类型的蓄电池充电电源要求日益增高。如何解决蓄电池充电的快速性及可靠性的矛盾成为充电技术研究的重要方面。本题目设计一种通用型电动车蓄电池充电器,具有功率因素高,充电速度快,充电安全可靠等优点,对于开关电源在充电领域应用有重要意义。1.3本次设计的要求和主要任务要求:a.AC输入电压:220V10%,电源频率:4763Hz 输出电压:24V、36、48V 充电对象:铅酸电池、镍镉电池、镍氢电池b.电压显示、电量充满提示、电池损坏提示c.短路、过充、过流保护,具有温度补偿功能主要任务:本次设计主要完成控制系统控制模块软件的设计。在熟悉硬件电路及接口技术的基础上,通过软件编程实现其控制任务。主要的子程序包括:电压、电流、温度采集子程序设计;键盘扫描子程序设计;LCD显示部分子程序设计;利用单片机进行PWM控制的软件实现;针对不同电池规格的自动充电控制方法的程序实现,且要通过调试。硬件简介2硬件简介2.1系统结构为了便于硬件实现,在设计过程中分为众多的模块,分别加以设计,并注意强弱电的相互隔离,以及各高频部分之间的相互屏蔽。 图2.1 系统框图西安工业大学毕业设计(论文)2.2硬件电路介绍2.2.1主充电电路部分图2.2.1主充电电路图主充电电路为了实现上图中模块1和模块9的功能,其主电路由buck电路构成,如图所示其主要作用是通过高频开关、续流二极管、电感、电容的组合来达到调压稳压的目的。2.2.2键盘电路此充电器是对24V,36V,48V三档电池进行充电,对不同规格,不同容量的电池进行键盘输入,本设计的解决方法是采用一个3*4键盘进行电池种类选择。图2.2.2键盘电路设计选择过程中,先选择电池电压规格,然后再输入电池容量。例如:当输入的电池规格为24V,容量为45AH时,即应先按“2”键即给P1.5和P1.2同时置0,后再按“4”键即给P1.4和P1.1同时置0,即后按“ENTER”键即给P1.3和P1.0同时置0,后输入45AH,先按“4”键即给P1.4和P1.1同时置0后,再按“5”键即将P1.5和P1.1同时置0,后按“ENTER”键。这样就完成了电池规格和容量的设定。如果在选择过程中出现错误就按“ESC”键即同时置P1.3和P1.1为0 后重新输入。2.3单片机的选取AT89S51具有2个16位的定时、计数器,并且具有4K存储器,功能强大,故这里选择这一芯片。芯片如下图:西安工业大学毕业设计(论文)图2.3 .1AT89S51(1) 功能特性简述:AT89S51是美国ATMEL公司生产的的低能耗,高性能的CMOS8位单片机。片内含有4K字节FLASH闪速存储器,126字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器以及时钟电路。同时AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口以及中断操作系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作一直到下一个硬件复位。(2) 系统连线: 图2.3.2系统连线图西安工业大学毕业设计(论文)(3) 如何实现PWM占空比调节:PWM(Pulse Width Modulation)即脉宽调制功能是通过调整一个脉冲中的占空比大小,改变脉冲信号输出的有效值。在实际应用系统中,通过PWM可以实现对开关型执行机构近似模拟量的控制。本设计中PWM功能是利用AT89S51中的一个定时器来控制输出脉冲,由软件编程来实现。一般来说,在快速充电的过程中,器PWM频率应该由外围设计电路决定,总的来说频率越高电源的利用效率越高。在本电路中,用软件编程来实现。(4)看门狗定时器(WDT):WDT是为了解决CPU程序运行时可能进入混乱或死循环二设置。它由一个14bit计数器和看门狗复位SFR(WDTRST)构成。外部复位时,WDT默认为关闭状态,要打开WDT用户必须按顺序将01EH和0E1H写到WDTRST寄存器(SFR地址为0A6H),当启动了WDR,它会随着晶体振荡器在每个机器周期开始计数,除硬件复位或WDT溢出复位外没哟普其他的办法关闭WDT,当WDT溢出,将使RST引脚输出高电平的复位脉冲。打开WDT需按顺序写01EH和0E0H到WDTRST寄存器,当WDT打开后,需在一定得时候避免WDT溢出。14位WDT计数器计数达到16383(3FFFH),WDT将溢出并使器件复位。WDT计数器既不可读也不可写,当WDT溢出时,通常将使RST引脚输出高电平复位脉冲。复位脉冲持续时间为98*Tosc,而Tosc=1/Fosc(晶体振荡频率)。为使WDT工作最优化,必须在核实的程序代码时间段周期的复位WDT防止WDT溢出。掉电使其,晶体振荡停止。掉电模式下,用户不能再复位WDT。有两种方式可以退出掉电模式:硬件复位或通过外部中断。为保证WDT在退出掉电模式时极端情况不溢出,最好在掉电模式前复位WDT。在进入空闲模式前,WDT打开时,WDT是否继续计数有SFR种的AUXR的WDIDLE位来决定,在IDLE期间默认状态是继续计数。为防止AT89S51从空闲模式中复位,用花应周期性的设置计数器,重新进入空闲模式。当位WDIDLE被置位,在空闲模式中WDT将停止计数,直到从空间(IDLE)模式中退出重新计数。反激式通用型电动自行充电电源软件设计3反激式通用型电动自行车充电电源软件设计3.1主程序设计3.1.1软件框图:CPU电池管理模块PWM控制模块LCD显示模块键盘模块采样模块充电阶段识别模块图3.1.1 软件框图各模块功能:采样模块:该模块负责电压、电流、温度信号的采集与AD转换。键盘模块:该模块为3*4键盘的键值管理,其键盘包括0-9的数字键、取消键以及确定键。LCD显示模块:当功能键按下时,该模块显示输入的状态信息,否则,显示当前的充电状态。充电阶段识别模块:该模块根据不同种类的电池的电压、电流的采样值进行充电阶段的分析与识别,确定当前的充电阶段。PWM控制模块:该模块负责Buck电路的占空比调节,可以利用软件先将占空比分为若干档,再根据采样信号的分析决定占空比档位的选定。电池管理模块该模块负责电池状态的判断,当电池电量充满、电池损坏以及温升过高时,该模块生成电池状态的判断,并转至相应的控制方式。西安工业大学毕业设计(论文)3.1.2主流程图主程序主要完成系统的初始化、I/O接口控制,以及对各子程序的调用。其流程图如图所示。图3.1.2 主流程图初始化负责对接口等的初始化;键盘扫描用3*4矩阵键盘实现,09这10个键进行数值的输入,剩下的2个键一个是确定键另一个是取消键;充电参数初始化配置负责充电参数的配置,根据键盘输入的电池规格(铅酸/镍镉)、电池电压(24-48V)、电池容量(24Ah-48Ah)信息来确定充电时所需的常量参数;AD采集负责对电压电流的采集与转换,通过ADC0832实现;温度采集通过18b20实现;故障判断程序对电池的电压,电流,温度值进行判断,通过采样回来的值判断是否满足电池的规定值;显示程序是通过1602液晶显示实现,显示电压,电流,温度等的值; 充电程序负责对电池的充电。3.2子程序设计3.2.1键盘扫描子程序图3.2.1键盘扫描程序流程图 单片机系统中,多在CPU空闲时,调用键盘扫描子程序,查询键盘情况,若有按键则进行相应处理。扫描键盘子程序有以下几个步骤:(1) 判断有无键按下:令所有行线为“0”,查列线为“0”则表示有键按下;(2) 若有键按下,用软件延时20ms的方法消抖。(3) 扫描键盘,得按键参数,即行列值。(4) 计算键值。(5) 判断闭合键是否释放。(6) 返回。键盘扫描程序如下:#include #include /*函数申明*/void delay_ms(unsigned char m);unsigned char key_scan(void);/*变量申明*/unsigned char data any_key; /指示是否有键按下unsigned char data key_number; /按键键值键盘扫描子程序入口参数:无返回值:键值(number)*/unsigned char key_scan(void) unsigned char data key_code; /存放键杩 unsigned char data key_value=13; /存放键值/=(1)首先判断是的确有键按下还是扰动= delay_ms(20); /延时20ms any_key=P1; /任意键按下标志, any_key=any_key&0x07; /有键按下后any_key!=0x07/=(2)当有键按下后进入键盘扫描= if(any_key!=0x07) /确认的确是有键按下delay_ms(20); /去除按下键时的抖动/- P1=0xf7; /P1.3=0,扫描第一列 key_code=P1;switch(key_code) /查键码 case 0x7e:/0#键键码key_value=0x0;break;case 0x7d:/1#键键码key_value=0x01;break;case 0x7b:/2#键键码key_value=0x02;break;/-P1=0xef; /P1.4=0,扫描第二列 key_code=P1;switch(key_code) /查键码 case 0xee:/3#键键码key_value=0x03; break; case 0xed:/4#键键码key_value=0x04;break;case 0xeb:/5#键键码key_value=0x05;break;/-P1=0xdf; /P1.5=0,扫描第三列 key_code=P1; switch(key_code) /查键码case 0xde: /6#键键码key_value=0x06;break;case 0xdd:/7#键键码key_value=0x07;break;case 0xdb:/8#键键码key_value=0x08;break;/-P1=0xbf; /P1.6=0,扫描第四列 key_code=P1;switch(key_code) /查键码case 0xbe:/9#键键码key_value=0x09;break;case 0xbd:/a#键键码key_value=0x0a;break;case 0xbb:/b#键键码key_value=0x0b;break;/-/=(3)接着判断按键是否松开= key_code=P1; key_code=key_code&0x07;while(key_code!=0x07)/如果按键没有松开,等待按键松开 key_code=P1; key_code=key_code&0x07; delay_ms(20); /松开按键时去除抖动 else /否则是扰动,并无键按下 key_value=13; /无健健值返回 /=(4)确认按键松开后,返回键值,键扫程序结束return(key_value);/延时函数void delay_ms(unsigned char m)unsigned char i,j,k;for(i=0;im;i+) for(j=0;j4;j+) for(k=0;k100;k+) ; 3.2.2 AD转换程序AD转换这一器件选用美国国家半导体公司生产的一种8位分辨率,双通道A/D转换芯片ADC0832。 1. ADC0832具有的特点:l 8位分辨率;l 双通道A/D转换l 输入输出电平与TTL/CMOS相兼容l 5V电源供电时输入电压在05V之间l 工作频率在250KHZ,转换时间为32uSl 一般功耗仅为15mW;l 8P,14PDIP(双列直插),PICC多种封装;l 商用级芯片温宽为0-+70,工业级芯片温度为-40-+85;2. 芯片接口说明:* CS_ 片选使能,低电平芯片使能;* CHO 模拟输入通道0,或作为IN+/-使用。* CH1 模拟输入通道1,或作为IN+/-使用.* GND 芯片参考0电位(地)。* DI 数据信号输入,选择通道控制。* D0 数据信号输出,转换数据输出。* CLK 芯片时钟输入。* Vcc/REF 电源输入及参考电压输入(复用)。 图 (1) ADC0832与AT89S51原理图ADC0832为8位分辨率转换芯片,其最高分辨率高达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在05V之间。芯片转换时间仅为32uS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性强。独立的芯片使能输入,使多器件挂接和处理器控制变得更加方便。通过DI数据输入端,可以轻易的实现通道功能的选择。正常情况下ADC0832与单片机的接口为4条数据线,分别是CS,CLK,DO,DI.但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO,DI并联在一根数据上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。当要进行AD转换时,须将CS使能端置为低电平知道转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI输入通道功能选择的数据信号。在第一个时钟脉冲的下沉之前DI端必须是高电平,表示启动信号。在第2,3个脉冲下沉之前DI端应输入2位数据用于选择通道功能,其功能项见表一。如表一所示,当2位数据为“1”,“0”时,只对CH0进行单通道转换。当2位数据为“1”“1”时,只对CHI进行单通道转换。当2位数据为“0”,“0”时,将CHO作为正输入端IN+,CHI作为负输入端IN-进行输入。当2位数据为“0”,“1”时,将CHO作为负输入端IN-,CHI作为正输入端IN+进行输入。到第三个脉冲下沉之后的DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第四个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATAO,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从11个字节的下沉输出DATA0.随后输出8位数据。到第19个脉冲时数据输出完成,也标志一次AD转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。详细的时序说明见表二.表2作为单通道模拟信号输入时ADC0832的输入电压是05V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-的输入时,可是将电压值设定在某一个较大的范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。流程图如下:图3.2.2 AD转换流程图程序如下:#include sbit ADC_CS =P33;sbit ADC_CLK=P32;sbit ADC_DO =P37;sbit ADC_DI =P36;/*/void Delay(unsigned char x) unsigned char i; for(i=0;ix;i+); /延时,脉冲一位持续的时间unsigned char ReadADC(void) /把模拟电压值转换成8位二进制数并返回 unsigned char i,ch; ch=0; ADC_CS=0; ADC_DO=0;/片选,DO为高阻态 for(i=0;i10;i+) ; ADC_CLK=0; Delay(2); ADC_DI=1; ADC_CLK=1; Delay(2); /第一个脉冲,起始位 ADC_CLK=0; Delay(2); ADC_DI=1; ADC_CLK=1; Delay(2); /第二个脉冲,DI=1表示双通道单极性输入 ADC_CLK=0; Delay(2); ADC_DI=1; ADC_CLK=1; Delay(2); /第三个脉冲,DI=1表示选择通道1(CH2) ADC_DI=0; ADC_DO=1;/DI转为高阻态,DO脱离高阻态为输出数据作准备 ADC_CLK=1; Delay(2); ADC_CLK=0; Delay(2);/经实验,这里加一个脉冲AD便能正确读出数据, /不加的话读出的数据少一位(最低位d0读不出)for (i=0; i8; i+) ADC_CLK=1; Delay(2); ADC_CLK=0; Delay(2); ch=(ch1)|ADC_DO;/在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数 ADC_CS=1;/取消片选,一个转换周期结束 return(ch);/把转换结果返回3.2.3 LCD显示设计中要求对电池的伏值和容量进行显示,故采用LCD1602A以满足要求。显示容量为16*2个字符;芯片工作电压:4.55V;工作电流:2.0mA;模块最佳工作电压:5.0V;字符尺寸:2.95*4.35(WXH)mm.。1.控制器接口时序说明:(1)读操作时序:(2)写操作时序:2. 1602A 与CPU连线图3流程图图3.2.3液晶显示程序流程图4.程序#include #define LCM_Data P1#define Busy 0x80 /用于检测LCM状态字中的Busy标识sbitLCM_RW P20; /定义引脚sbitLCM_RS P21;sbitLCM_E P22;void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);void Delay400Ms(void);unsigned char code csdn = csdn;unsigned char code net = ;void main(void)LCMInit(); /LCM初始化Delay5Ms(); /延时片刻(可不要)DisplayListChar(0, 5, csdn);DisplayListChar(1, 0, net);ReadDataLCM();/测试用句无意义while(1);/写数据void WriteDataLCM(unsigned char WDLCM)ReadStatusLCM(); /检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; /若晶振速度太高可以在这后加小的延时LCM_E = 0; /延时LCM_E = 1;/写指令void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC为0时忽略忙检测if (BuysC) ReadStatusLCM(); /根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0; LCM_E = 0;LCM_E = 0;LCM_E = 1; /读数据unsigned char ReadDataLCM(void)LCM_RS = 1; LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);/读状态unsigned char ReadStatusLCM(void)LCM_Data = 0xFF; LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & Busy); /检测忙信号return(LCM_Data);void LCMInit(void) /LCM初始化LCM_Data = 0;WriteCommandLCM(0x38,0); /三次显示模式设置,不检测忙信号Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,1); /显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); /关闭显示WriteCommandLCM(0x01,1); /显示清屏WriteCommandLCM(0x06,1); / 显示光标移动设置WriteCommandLCM(0x0C,1); / 显示开及光标设置/按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1if (Y) X |= 0x40; /当要显示第二行时地址码 0x40;X |= 0x80; / 算出指令码WriteCommandLCM(X, 0); /这里不检测忙信号,发送地址码WriteDataLCM(DData);/按指定位置显示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1while (DDataListLength0x20) /若到达字串尾则退出if (X = 0xF) /X坐标应小于0xFDisplayOneChar(X, Y, DDataListLength); /显示单个字符ListLength+;X+;/5ms延时void Delay5Ms(void)unsigned int TempCyc = 5552;while(TempCyc-);3.2.4 温度采集在设计中,需要随时的对电池和CPU进行温度测量,在这里我们采用18b20数字温度计对温度进行采集。 18b20数字温度计提供9位温度读数,指示器件的温度。信息通过18b20送入或送出,因此从中央处理器到18b20仅需要连接一根线。读,写和完成温度变换所需的电源可以由数据线本身提供,而不需要外部电源。 为了使18b20能完成准确的温度转换,当温度发生变化时,I/O线上必须提供足够的功率。因为18b20的工作电

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论