开关电源模块并联供电系统设计_第1页
开关电源模块并联供电系统设计_第2页
开关电源模块并联供电系统设计_第3页
开关电源模块并联供电系统设计_第4页
开关电源模块并联供电系统设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、选修课设计(论文)题 目开关电源模块并联供电系统设计专 业电子信息工程班 级111 112班姓 名邓逸博 孙浙飞 汪超指导教师王章权所在学院信息学院完成时间:2014年5月开关电源模块并联供电系统设计电子信息工程专业 邓逸博 孙浙飞 汪超摘 要:本设计设计制作的是开关电源模块并联供电系统, 能够广泛应用在小功率 及各种电子设备领域,能够输出 8V定压,功率可达到16W并根据要求对两路电流 进行按比例分配。本系统由DC/DC莫块,均流、分流模块,保护电路组成。DC/DC莫块以IRF9530芯片为开关,配以BUCK勺外围电路实现24V-8V的降压与稳压。采用 LM328比较电路实现电流和电压的检测

2、, 控制由DC/DC模块构成的并联供电系统均流 与分流工作模式,通过比较器电路实现过流保护。同时进行LCD1602液晶同步显示、独立键盘输入控制。 输入的值经过单片机处理程序来控制输出电压, 且输出电压和电 流可实时显示。关键词:DC/DC模块,BUCK电流分流一、绪论 1二、设计的目标与基本要求 1(一)、设计目标 1(二)、基本要求 1三、系统设计 2(一)、系统框图 2(二)硬件设计与方案选择 21、单片机选择 22、主电路选择 33、驱动电路图 44、辅助电源 45、电流、电压采样 56、显示、按键 5(三)、软件设计 51、主程序 52、按键程序 63、液晶程序 64、米样程序 75

3、、中断、PID流程图 8四、调试过程 8(一)、遇到的问题及解决办法 8(二)、数据分析 9五、体会与展望 10参考文献 10附录 10附录1 .整体电路图 10附录2 .程序代码 10一、绪论 分布式直流开关电源系统取代传统的集中式直流开关电源系统已成为大功率电 源系统的发展方向: (1)单台大功率电源容易受技术、成本的限制; (2)单台直流开 关电源故障会导致整个系统的故障,而分布式电源系统由若干电源模块并联组成,某 个电源模块故障不会导致整个电源故障; (3)可根据实际负荷的变化,自动确定需要 投入运行的模块数量或者解列退出的模块数量,对变负荷运行很有意义;(4)由于多个电源模块并联运行

4、,使每个电源模块承受的电应力较小,具有较高的运行效率,且 具有较好的动态和静态特性。分布式电源系统需要解决的主要问题是实现多个并联运 行的模块输出相同的功率。随着通信电源技术的高速发展,电力电子设备与人们的工 作、生活的关系日益密切,而通信电子设备都离不开可靠的电源。进入 20世纪 80 年 代,计算机电源全面实现了开关电源化,率先完成计算机的电源换代;进入 20 世纪 90 年代,开关电源相继进入各种电子、电气设备领域,程控交换机、通信、电力检测 设备电源、控制设备电源等都已广泛使用了开关电源,更促进了开关电源技术的迅速 发展。二、设计的目标与基本要求(一)、设计目标设计并制作一个由两个额定

5、输出功率均为16W的8V DC/DC模块构成的并联供电系统(见图 2.1 )图 2.1 两路 buck 电路并联供电(二)、基本要求(1)调整负载电阻至额定输出功率工作状态,供电系统的直流输出电压UO=8.00.4V。在额定输出功率工作状态下,供电系统的效率不低于60%。(2)调整负载电阻,保持输出电压UO=8.00.4V,使两个模块输出电流之和10 =1.0A 且按 I1:I2=1:1 模式自动分配电流,调整负载电阻,保持输出电压UO=8.00.4V,使两个模块输出电流之和 IO =1.5A 且按 I1:I2= 1:2 模式自动分配电流,每个模块输 出电流的相对误差绝对值不大于 5%。调整负

6、载电阻,保持输出电压 UO=8.0 0.4V, 使两个模块输出电流之和 IO =4.0A 且按 I1:I2=1:1 模式自动分配电流,每个模块的 输出电流的相对误差的绝对值不大于 2%(3)调整负载电阻,保持输出电压 UO=8.0 0.4V,使负载电流10在1.53.5A之间 变化时,两个模块的输出电流可在(0.52.0 )范围内按指定的比例自动分配,每个 模块的输出电流相对误差的绝对值不大于 2%(4)具有负载短路保护及自动恢复功能,保护阈值电流为4.5A (调试时允许有土 0.2A 的偏差)。在额定输出功率工作状态下,进一步提高供电系统效率。三、系统设计(一)、系统框图图3.1系统框图系统

7、说明:以单片机为核心处理元件,DC-DC变换器为主电路。按键、显示便于 人机交互。驱动电路将单片机和 DC-DC变换器隔离,辅助电源给单片机和采样电路供 电。单片机将电压电流通过采样电路,运放采样回来在内部进行A/D处理,然后将数据输出液晶显示。在内部进行算法调整。使整个系统稳定,并达到基本要求。整个系 统设计如上图3.1所示。(二八硬件设计与方案选择1、单片机选择方案一:使用89C51单片机指令简单,易学易懂,外围电路简单,硬件设计方便, I0 口操作简单,无方向寄存器,资源丰富,价格便宜、容易购买,资料丰富容易查 到,程序烧写简单,但要外接 A/D、D/A芯片,来实现对整个供电系统的控制,

8、需要 占用较多的I/O接口,会使普通单片机承载过大的数据处理任务,功耗较大。方案二:使用ATmega16 ATmegal6卜设特点:两个具有独立的预分频器和比较器 功能的8位定时器/计数器,两个具有预分频器、比较功能和扑捉功能的16位定时器/计数器,具有独立预分频器的实时时钟计数器, 两路8位 PWM4路分辨率可编程(216 位)的PWMt出比较调制器,8路 10位 ADC面向字节的两线接口 IA2C总线,两个可 编程的串行USART可工作于主机/从机模式的SPI串行接口,具有独立片内振荡器的 的可编程看门狗定时器,片内模拟比较器。特殊的处理器特点:上电复位以及可编程 的掉电检测,片内经过标定

9、的 RC振荡器,片内/片外中断源,6种睡眠模式,可以通 过软件进行选择的时钟频率,通过熔丝位可以选择兼容模式,全局上拉禁止功能。结合前两个方案优点,经过方案比较与论证,最终确定使用方案二,因为 ATmega16 速度快 自带PWM自带AD而用89C51会使电路更加复杂与不稳定所以,用ATmega16 单片机和其它控制器电路同实现整个系统的控制。2、主电路选择方案一:有一种型号为LM2956的降压开关电压调节器,能够输出3A的驱动电流, 同时具有很好的线性和负载调节特性,该器件内部集成频率补偿和固定频率发生器, 极大地简化了开关电源电路的设计。方案二:采用SG3525自带脉宽调制电源芯片来设计

10、DC-DC降压转换电路,SG3525 简单可靠及使用方便灵活,输出驱动为推拉输出形式,增加了驱动能力;内部含有欠 压锁定电路,死区时间可调、软启动控制电路、PWN锁存器,有过流保护功能,频率可 调,同时能限制最大占空比。由此设计而成的电路易于实现脉宽调制,然而在真正使 用时会发现,为得到要求的电压输出值,开关管 S的参数选取相当不易。方案三:将经过隔离变压器,整流滤波后得到的24VDC通过BUCK!压电路进行DC-DC转换,由ATmega16单片机产生PWM控制其占空比,从而得到要求的直流电压。 此方案仅用一块控制芯片不但可以实现对 BUCK电路的控制,而且可以结合A/D和D/A 对输出电压进

11、行调整与显示。由于ATmega16单片机自带能够产生脉宽调制所需的 PWM 信号的端口,在实际制作中用起来比较方便。ATmega16单片机自带8路10位A/D转换。结合前两个方案优点,经过方案比较与论证,最终确定使用方案三如图 3.2,因 为ATmega16单片机,自带PWM模块,可以输出PW方波控制电路,节约芯片成本, 也可实现AD转换。用单片机和其它控制器电路同实现整个系统的控制。3.2主电路图3、驱动电路图方案一:单片机输出 PWM采用IR2101驱动DC-DC电路中的IRF9530,控制输出 电压。方案二:先采用光耦TLP250和单片机进行隔离,有效保护单片机,之后用IRF3205 去

12、驱动M0管IRF9530,控制输出电压。结合两种方案的对比选择方案二如图 3.3,因为方案二中采用光耦,将单片机与 主电路隔离,能够有效保护单片机,而且也能使正常使电路工作。图3.3驱动电路图4、辅助电源方案一:采用集成的三端稳压集成芯片,7815和7805分别给光耦和运放,还有单片机供电,7815内含过流,过热,过载保护电路。方案二:采用LM257研关稳压集成芯片,它内部集成了一个固定的振荡器,是 一种高效的稳压芯片,大多数情况下无需加散热片。内部有完善的保护电路,包括电 流限制及热关断电路等。它可以根据用户要求选择输出电压,可输出3.3V,5V, 12V,15V。然后再经过7805产生5V

13、电压。结合两种方案的对比选择方案二如图 3.4,因为方案二中的LM2575的是可调节输 出电压的芯片,方便调控,而且它内部有电压基准比较,使输出的电压能够准确并稳 定,比7815要精确,且性能好。图3.4辅助电源电路图5、电流、电压采样采样模块是输出电压经过采样回来,形成一个负反馈经过单片机内部A/D进行 处理,然后使输出更加稳定和准确。电压采样模块直接采用LM358运放如图3.5,将输出的电压缩小一定倍数后,然后送给单片机处理判断。电流采样是经过0.1欧/4瓦的采样电阻后,缩小一定倍数,然后经过一个差分电路,将电压值送入单片机进行 处理如图3.6。图3.5电压采样电路图图3.6电流采样电路图

14、6、显示、按键显示部分采用字符型液晶1602,能够同时显示16x02即32个字符。16个引脚,3个 控制引脚,8位双向数据端引脚。具有微功耗、体积小、显示内容丰富、超薄轻巧的 特点。用户可以对EN RW RS的数据进行编程,然后通过 D0D7输出显示数据。其 引脚功能图见下表6.1表6.1 1602引脚功能图按键部分采用四个独立的按键,分别控制占空比的加和减,对输出的电压和电流进行 控制,使输出能够达到期望的要求,其按键功能表如表6.2 o表6.2按键功能表键名S1S2S3S4功能PWM加 0.2%PWM减 0.2%PWM加 0.2%PWM减 0.2%CPU端 口号PD0PD1PD2PD3(三

15、)、软件设计1、主程序如图3.7为主程序流程图,一开始给系统各部分初始化,包括按键初始化,液晶初始 化,PWM初始化,AD采样初始化,中断初始化,然后在进入大循环,在循环内进行数 据的显示,包括当前输入的占空比为多少,当前采样回来的数字量和实际的电压值为 多少。还有按键程序,和 AD采样。同时每10毫秒进入定时器0中断进行调整。图3.7主程序流程图2、按键程序按键程序流程图如图3.8所示。按键采用四个独立的按键,分别控制PWM1 PWM2勺加和减,当有键按下时,扫描按键,然后进入判断。判断当前寄存器对应的值是否大 于了设定的上限值,如果没有则数值加 1,如果达到了则钳位在最大的上限值。然后 返

16、回数据。通过按键程序,可以控制占空比的调节。按键开始YPD0是否按下?PD1是否按下?YfPD2是否按下?NPD3是否按下?结束OCR1A+1OCR1A265&O 丫 旨OCR1A=265OCR1B+1CR1B265? /?IFOCR1B=265NN0CR1A-10CR1B-1OCR1A+1OCR1B-1OCR1A-1OCR1B+1丫卜CR1AV240&OCR1B261|OC R1B260?OCR1A=261OCR1B=251图3.8按键程序流程图3、液晶程序图3.8为1602液晶屏的程序框图,1602由3个控制引脚,8位双向数据端引脚控制 显示的内容和位置。因此,这部分程序主要有初始化函数,

17、写命令函数和写数据函数 组成。初始化函数主要对液晶屏的显示模式进行设定,写命令函数主要是对显示的位 置和显示的方式进行设置,写数据函数是决定显示的内容。写命令写数据初始化开始开始图3.8 1602程序流程图4、米样程序如图3.9是采样程序流程图。一开始配置 AD寄存器,然后启动AD寄存器,然后将采 样回来的数据组合成10位的数据,然后采样8次,去头去尾后,对其求平均值。将 数据处理后,给液晶显示。然后进行电压判断,是否小于要求的最小值,如果是的话 进行钳位,然后是否小于设定的最大值,是的话,就是在要求范围内,那就进行 PID 算法的调整,进行电流的分流。如果大于最大值的话,就进行钳位。图 3.

18、9 AD 采样程序流程图5、中断、 PID 流程图如图 3.10 和 3.11 分别是中断流程图和 PID 算法程序流程图。定时器 0 中断定时 10 毫秒溢出中断,在中断中进行 PID 调整,和电压反馈调整。 PID 算法是根据公式,对 采样电阻采样回来的电压进行反馈计算。根据对 P,I,D 三个参数的设置,然后结合算 法公式,对输出的数据进行不断的调整,达到要求的值。图 3.10 定时器 0 中断 图 3.11 PID 算法流程图四、调试过程(一)、遇到的问题及解决办法(1)、在对电路板进行设计,做板子的时候,经过封塑机出来后的板子,然后用腐蚀 剂进行腐蚀,得到了一块单面板,当我们把器件焊

19、上去的时候发现,跟我们预期的反 了一下,所有的器件都反了一下,这样子,整个电路就不能用了。经过我们的讨论和 思考,我们认为是我们在打印出油印纸的时候没有将它镜像,使整块板子就是按照反 面的印了出来,经过我们镜像后,发现和我们所需要的板子是一样的了,所有的元器 件都能按照原来的位置进行装配。而且板子也能正常工作。(2)、在整个电路都做出来以后,进行模块调试的时候发现方波的波形并不是很好, 有一点的曲线,经过老师上课的讲解指导了是,栅极旁边的电阻阻值太大,因为有分 布电容,所有会充放电,使波形不是很理想。经过计算后选取了一个合适的阻值,使 波形能够达到电路的要求。还有在整体调试的时候,发现上面一路

20、的测试点,一直是 0,下面一路一直是 1A 左右,经过主电路排查后,发现没有问题,然后对测试点进行 排查,发现测试点的夹子松掉了, 使电流都往下去了。 将夹子焊好后, 电路正常工作。(3)、在进行程序调试的时候,一直在使用内部的 1M 晶振,所以一直精度上不去, 调节都是很粗的调节,电流一直达不到指标。还有液晶刷新很慢,按键要按很久才能 用。后来查阅了资料,发现在烧写程序的时候要勾上熔丝位,如果使用的是8M以上的外部晶振的话,那就要把熔丝位全部勾上。这样才是在使用外部的16M晶振。将熔丝位勾上后,调节程序后,发现精度大大的提升了。能够达到基本的要求。还有在对 PID参数设置的时候,一开始没有头

21、绪,随便调,后来看论坛和同学谈论,发现要一 个一个参数的调,在经过多次实验后,将 PID参数调整好了,是指标达到了要求。(二)、数据分析表4.1和表4.2是在电流1:1情况下,比例调节和PI调节的数据对比表4.1负载为8.9 Q ,两模块电流按1:1分配(比例反馈)I1 (A)I2 (A)I 总(A)Uo (V)给定值0.50. 51.08.0测量值0.5050.5151.0028.24绝对误差1%3%0.2%3%表4.2负载为8.5 Q ,两模块电流按1:1分配(PI反馈)I1 (A)I2 (A)I 总(A)Uo (V)给定值0.50. 51.08.0测量值0.4940.5081.0078.

22、08绝对误差1.2%1.7%0.7%1%表4.3和表4.4是在电流1:2情况下,比例调节和PI调节的数据对比表4.3负载为7.0 Q,两模块电流按1:2分配情况(比例反馈)I1 (A)I2 (A)I 总(A)Uo (V)给定值0.51.01.58.0测量值0.4620.9301.4977.71绝对误差7.6%7%0.2%3.6%表4.4负载为5.9 Q,两模块电流按1:2分配情况(PI反馈)I1 (A)I2 (A)I 总(A)Uo (V)给定值0.51.01.58.0测量值0.5080.9811.5027.60绝对误差1.6%1.9%0.2%5%对比表4.1和表4.2可以看出,同样是1: 1的

23、电流分配情况下,比例调节的误差在5沖内,达到了基本的要求,但是在PI调节下,可以看出误差精度已经达到了2%勺要求。对比表 4.3 和表 4.4 可以看出,同样是 1:2 的电流分配情况下,比例调节的误差已经 超出了 5%的要求,而在 PI 调节下精度达到了 2%以内。 对比着两组数据,可以看出了在 PI 的调节下精度大大的提升,说明了 PID 算法在控 制方面的优势,使整个系统更加完善。五、体会与展望 通过这次选修课的学习,学到了专业知识方面的一些知识。整个学习的过程是很 重要的。由于这个学期在学习电力电子这门课,而课题又正好和电力电子相关知 识有关,所以对于这次的课程,通过对整个系统的设计,

24、测试,调整。更好的了解了 电力电子和开关电源相关的知识,也更深入的学习到了一些课堂上无法学习到的东 西。将课堂的理论知识和实践想结合,将学习到的东西更加印象深刻,不用去死记硬 背,能够灵活运用。 对于编写程序, 整体的逻辑性还要加强。 流程图要写好再写程序。 对于展望,希望能够在以后的学习中把硬件方面学的更好,能够把不足给弥补。在程 序方面多学习一下别人的算法。学的更好,希望一次比一次有进步。参考文献1 程汉湘,武小梅电力电子技术第二版 . 科学出版社2 谭浩强.C程序设计.第三版,北京:清华大学出版社,2008.11 .3 童诗白,华成英 . 模拟电子技术,第四版北京:高等教育出版社, 20

25、06.5 4 阎石.数字电子技术基础,第五版 . 北京:高等教育出版社, 2006.5 .5 蒋燕君 . 自动控制原理 . 重庆大学出版社 ,2008.1附录附录 1.整体电路图附录 2.程序代码main.c*#include #include#include1602.h #includekey.h#includead.h #includepid.h#define uchar unsigned char#define uint unsigned int#pragma interrupt_handler timer0_ovf_isr:10定时器 0 中断 */void timer0_init(v

26、oid)TCCR0 = 0x00; /TCNT0 = 0x64;TIMSK = 0x01; /SREG |= BIT(7); /停止定时器/ 初始值,每 10毫秒进一次中断 允许中断允许全局中断外中断 0 函数 */void timer0_ovf_isr(void)TCNT0 = 0x64;pid1_calculating(); /PID pid2_calculating(); /PID com_vol(); /调整 OCR1A调整 OCR1B 电压反馈设置输出 */void KPWM(void)PORTD|=BIT(4)|BIT(5); DDRD|=BIT(4)|BIT(5);TCCR1A

27、= 0xA2; / TCCR1B = 0x11; / ICR1 = 800; / OCR1A = 255; OCR1B = 255; void main() KPWM();LCD_init(); key_init(); timer0_init(); adcport_init();while(1)Display_PWM(); press(); / display_AD0(); /两路pwm匹配清零相位修正PW模式,位数可调,预分频1 此数为占空比占空比16 位 PWM 16M晶振,clk/(2*N*TOP),频率为 10K31.8%31.8%/PWM/1602/AD/函数初始化函数 按键初始化函

28、数 定时器 0 初始化 端口初始化显示PWI函数按键函数显示ADO的模拟量和数字量1602.h#ifndef _1602_H_#define _1602_H_#define uchar unsigned char#define uint unsigned int void delay(uint MS); void write_com(uint com); void write_dat(uint dat);void LCD_init();void Display_PWM();void calculate_AD0(); #endif1602.c*#include #include #include

29、1602.h #define uchar unsigned char#define uint unsigned int/* 显示固定数组 PWM:*/const uchar tab=PWM:;延时函数 */void delay(uint MS) /uint i,j;for(i=0;iMS;i+)for(j=0;j2282;j+); /2282约为IMS的延时函数是在16MHz晶振下为MS毫秒写地址void write_com(uint com)PORTA&=BIT(5); /RS=0 PORTA&=BIT(6); /RW=0 PORTB=com; / 送地址 delay(5);PORTA|=B

30、IT(7); /EN=1 delay(5);PORTA&=BIT(7); /EN=0写数据void write_dat(uint dat)PORTA|=BIT(5);/RS=1PORTA&=BIT(6); /RW=0 PORTB=dat;/送数据delay(5);/*1602 初始化 void LCD_init()DDRA=0XFF; DDRB=0xFF; delay(5);*/write_com(0X38);delay(5);/write_com(0X0c);delay(5);/write_com(0X06);delay(5);/write_com(0X01);delay(5);*显示 pw

31、m占空void Display_PWM()uchar i;/比 */uint shi,ge,xiaoshu,beichu;uint shi1,ge1,xiaoshu1;shi=0CR1A/100;/ge=0CR1A/10%10;/xiaoshu=0CR1A%10;/beichu=ICR1/10;/shi1=0CR1B/100;/ge1=0CR1B/10%10;/xiaoshu1=0CR1B%10;write_com(0x80);for(i=0;tabi!=0;i+)write_dat(tabi);write_com(0x84);/PORTA|=BIT(7); /EN=1 delay(5);PO

32、RTA&=BIT(7); /EN=0设 8 位数据线 , 双行 ,5*7 点阵 开显示, 不显示光标 输入地址自加 , 屏幕不移动 清屏将0CR1百位拆分将0CR1十位拆分将0CR1个位拆分将 ICR1 变为两位数将0CR1百位拆分将0CR1十位拆分将0CR1个位拆分write_dat(shi*100+ge*10+xiaoshu)*100/beichu/100+0x30); /write_dat(shi*100+ge*10+xiaoshu)*100/beichu/10%10+0x30); /write_dat(.);write_dat(shi*100+ge*10+xiaoshu)*100/be

33、ichu%10+0x30); / write_dat(%);显示十位显示个位显示小数点write_com(0x8a);write_dat(shi1*100+ge1*10+xiaoshu1)*100/beichu/100+0x30); /显示十位write_dat(shi1*100+ge1*10+xiaoshu1)*100/beichu/10%10+0x30); /显示个位write_dat(.);write_dat(shi1*100+ge1*10+xiaoshu1)*100/beichu%10+0x30); /显示小数点write_dat(%);*AD.H#ifndef _AD_H_ #def

34、ine _AD_H_ void adcport_init(); void ADC0INIT(void); void ADC1INIT(void); void ADC2INIT(void); int get_ADCdata(void); float get_ave(int a8); float get_ADC0data(void); float get_ADC1data(void); float get_ADC2data(void); void display_AD0();#endif*AD.C#include#include #include1602.h#define uchar unsign

35、ed char#define uint unsigned int / 参考电压#define REF 5.12/*ADC端口初始化 */void adcport_init()DDRA&=BIT(0);PORTA&=BIT(0);DDRA&=BIT(1);PORTA&=BIT(1);DDRA&=BIT(2);PORTA&=BIT(2);/* *ADC0初始化/AREF/基准压,结果右对齐,通道为 ADC0使能ADC单次转换,预分频为128void ADC0INIT(void)ADMUX=0x40;ADCSRA=0x87;ADCSRA|=(1ADSC); / 启动首次转换 while(!(ADCS

36、RA&(1ADIF); / 等待转换结束 ADCSRA|=(1ADIF); /清除 ADIF 位/*初始化void ADC1INIT(void)ADMUX=0x41;/AREFADCSRA=0x87;/ADCSRA|=(1ADSC); / while(!(ADCSRA&(1ADIF); /ADCSRA|=(1ADIF); /基准压,结果右对齐,通道为 ADC1 使能ADC单次转换,预分频为128 启动首次转换 等待转结束循环清除ADIF位/*ADC2初始化void ADC2INIT(void)基准压,结果右对齐,通道为 ADC2 使能ADC单次转换,预分频为128 启动首次转换 等待转结束循环

37、清除ADIF位ADMUX=0x42;/AREFADCSRA=0x87;/ADCSRA|=(1ADSC); / while(!(ADCSRA&(1ADIF); / ADCSRA|=(1ADIF); /*获取ADC勺米样值*int get_ADCdata(void)int a,b;a=b=0;b=ADCL;/读高位后数据更新a=ADCH;/再读取ADCH数据a=(a8);/右对齐,左移八位a=(a|b);/组成 10位二进制数据return a;*去头去尾,获取平均值 *float get_ave(int a8) float v;unsigned char i;float sum=0;for(i=

38、1;i7;i+) / 从第 2 次到第 6 次数据 sum=sum+ai; v=sum/6;return v;*获取 ADC(采样 8次的平均值*float get_ADC0data(void) unsigned char i=0; float v;int buf8=0; for(i=0;i8;i+)ADC0INIT();/AD初始化一次bufi=get_ADCdata(); /将数据放入数组 v=get_ave(buf);return v;*获取 ADC1采样 8次的平均值*float get_ADC1data(void) unsigned char i=0; float v;int buf

39、8=0; for(i=0;i8;i+)ADC1INIT();/AD初始化一次bufi=get_ADCdata(); /将数据放入数组 v=get_ave(buf);return v;*获取 ADC踩样 8次的平均值* float get_ADC2data(void)unsigned char i=0; float v;int buf8=0;for(i=0;i8;i+)初始化一次将数据放入数组ADC2INIT();/ADbufi=get_ADCdata();/ v=get_ave(buf); return v;/* 将数据拆分送显示 */ void display_AD0()int a,b;uc

40、har s6,k6;uchar i,j,m;将数据转化为十进制数字量/a=get_ADC0data()*REF/1024*1000;b=get_ADC0data();s0=a/1000+0; s1=.; s2=a%1000/100+0; s3=a%100/10+0; s4=a%10+0; s5=V;k0=D;k1=:;k2=b/1000+0; k3=b%1000/100+0; k4=b%100/10+0;k5=b%10+0;write_com(0xC0);for(i=0;i6;i+)write_dat(si);write_com(0xC7); for(j=0;j=360)OCR1A=265;O

41、CR1B=265;if(get_ADC2data()=310)OCR1A=240;/实际电压值大于 8.4V钳位到 8.4V实际电压值小于 7.6V钳位到 7.6VOCR1B=240;/* KEY.H *#ifndef _KEY_H_#define _KEY_H_void key_init();void press();uchar key();#endifKEY.C#include #include #include1602.h #define uchar unsigned char#define uint unsigned int uint count_pwm=255;uint count_

42、pwm1=255;/* 按键初始化函数void key_init()DDRD&=BIT(0); /PORTD|=BIT(0);DDRD&=BIT(1); /PORTD|=BIT(1);DDRD&=BIT(2); /PORTD|=BIT(2);DDRD&=BIT(3); /PORTD|=BIT(3);DDRD&=BIT(7); /PORTD|=BIT(7);独立键盘接口置高电平 独立键盘接口置高电平 独立键盘接口置高电平 独立键盘接口置高电平 独立键盘接口置高电平按键函数void press()uchar m;m=PIND; m&=0x0f;if(m=0X0e)count_pwm=OCR1A;

43、/读取当前 PWM值count_pwm+=1;count_pwm=OCR1B; / 读取当前 PWMfi count_pwm+=1;delay(1); / 按键消抖 while(PIND=0x0e);OCR1A=count_pwm; /OCR1A 赋新值OCR1B=count_pwm; /OCR1B 赋新值if(OCR1A=265&OCR1B=265)OCR1A=265;OCR1B=265;if(m=0X0d)count_pwm=OCR1A; /读取当前 PWMScount_pwm-=1;count_pwm=OCR1B; / 读取当前 PW值 count_pwm-=1;delay(1); / 按键消抖 while(PIND=0x0d);OCR1A=count_pwm; /OCR1A 赋新值OCR1B=count_pwm; /OCR1B 赋新值if(OCR1A=240&OCR1B=261|OCR1B=251)OCR1A=261;OCR1B=251;if(m=0X07)count_pwm=OCR1A; /读取当前 PWMScount_pwm-=1;count_pwm仁OCR1B; / 读取当前 PWM值 count_pwm1+=1;delay(1); / 按键消抖 while(PIND=0x07);OCR1A=cou

温馨提示

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

评论

0/150

提交评论