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

下载本文档

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

文档简介

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

2、以 IRF9530 芯片为开关,配以 BUCK 的外围电路实现 24V-8V 的降压与稳压。采用 LM328 比较电路实现电流和电压的检测,控制由 DC/DC 模块构成的并联供电系统均流与分流工作模式,通过比较器电路实现过流保护。同时进展 LCD1602 液晶同步显示、独立键盘输入控制。输入的值经过单片机处理程序来控制输出电压,且输出电压和电流可实时显示。关键词关键词:DC/DC 模块,BUCK,电流分流-. z目 录一、绪论 1二、设计的目标与根本要求 1一 、设计目标 1二 、根本要求 2三、系统设计 2一 、系统框图 2二 、硬件设计与方案选择 31、单片机选择 32、主电路选择 33、

3、驱动电路图 44、辅助电源 55、电流、电压采样 66、显示、按键 7(三)、软件设计 71、主程序 72、按键程序 83、液晶程序 94、采样程序 105、中断、PID 流程图 11四、调试过程 12一 、遇到的问题及解决方法 12二 、数据分析 13五、体会与展望 14参考文献 15附录 15附录 1整体电路图 15附录 2程序代码 16-. z一、绪论分布式直流开关电源系统取代传统的集中式直流开关电源系统已成为大功率电源系统的开展方向:1单台大功率电源容易受技术、本钱的限制;2单台直流开关电源故障会导致整个系统的故障,而分布式电源系统由假设干电源模块并联组成,*个电源模块故障不会导致整个

4、电源故障;3可根据实际负荷的变化,自动确定需要投入运行的模块数量或者解列退出的模块数量,对变负荷运行很有意义;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,使两个模块输出电流之和 IO =1.0A 且按 I1:I2=1:1 模式自动分配电流,调整负载电阻,保持输出电压 UO=8.00.4V,使两个模块输出电

6、流之和 IO =1.5A 且按 I1:I2= 1:2 模式自动分配电流,每个模块输出电流的相对误差绝对值不大于 5%。调整负载电阻,保持输出电压 UO=8.00.4V,使两个模块输出电流之和 IO =4.0A 且按 I1:I2=1:1 模式自动分配电-. z流,每个模块的输出电流的相对误差的绝对值不大于 2%。3调整负载电阻,保持输出电压 UO=8.00.4V,使负载电流 IO 在 1.53.5A 之间变化时,两个模块的输出电流可在0.52.0围按指定的比例自动分配,每个模块的输出电流相对误差的绝对值不大于 2%。 4具有负载短路保护及自动恢复功能,保护阈值电流为 4.5A调试时允许有0.2A

7、 的偏差 。在额定输出功率工作状态下,进一步提高供电系统效率。三、系统设计一 、系统框图图 3.1 系统框图系统说明:以单片机为核心处理元件,DC-DC 变换器为主电路。按键、显示便于人机交互。驱动电路将单片机和 DC-DC 变换器隔离,辅助电源给单片机和采样电路供电。单片机将电压电流通过采样电路,运放采样回来在部进展 A/D 处理,然后将数据输出液晶显示。在部进展算法调整。使整个系统稳定,并到达根本要求。整个系统设计如上图 3.1 所示。二 、硬件设计与方案选择1、单片机选择方案一:使用 89C51 单片机指令简单,易学易懂,外围电路简单,硬件设计方便,IO 口操作简单,无方向存放器,资源丰

8、富, ,价格廉价、容易购置,资料丰富容易查到,程序烧写简单,但要外接 A/D、D/A 芯片,来实现对整个供电系统的控制,需要占用较多的 I/O 接口,会使普通单片机承载过大的数据处理任务,功耗较大。方案二:使用 ATmega16,ATmega16外设特点:两个具有独立的预分频器和比较器功能的8位定时器/计数器,两个具有预分频器、比较功能和扑捉功能的16位定时器/计数器,具有独立预分频器的实时时钟计数器,两路8位 PWM,4路分辨率可编程(216位)的 PWM,输出比较调制器,8路10位 ADC,面向字节的两线接口 I2C 总线,两个可编程的串行 USART,可工作于主机/从机模式的 SPI 串

9、行接口,具有独立片振荡器的的可编程看门狗定时器,片模拟比较器。特殊的处理器特点:上电复位以及可编程的掉电检测,片经过标定的 RC 振荡器,片/片外中断源,6种睡眠模式,可以通过软件进展选择的时钟频率,通过熔丝位可以选择兼容模式,全局上拉制止功能。-. z结合前两个方案优点,经过方案比较与论证,最终确定使用方案二,因为ATmega16 速度快 自带 PWM ,自带 AD,而用 89C51 会使电路更加复杂与不稳定所以,用 ATmega16 单片机和其它控制器电路同实现整个系统的控制。2、主电路选择方案一:有一种型号为 LM2956 的降压开关电压调节器,能够输出 3A 的驱动电流,同时具有很好的

10、线性和负载调节特性,该器件部集成频率补偿和固定频率发生器,极简化了开关电源电路的设计。方案二:采用 SG3525 自带脉宽调制电源芯片来设计 DC-DC 降压转换电路,SG3525 简单可靠及使用方便灵活,输出驱动为推拉输出形式,增加了驱动能力;部含有欠压锁定电路,死区时间可调、软启动控制电路、PWM 锁存器,有过流保护功能,频率可调,同时能限制最大占空比。由此设计而成的电路易于实现脉宽调制,然而在真正使用时会发现,为得到要求的电压输出值,开关管 S 的参数选取相当不易。方案三:将经过隔离变压器,整流滤波后得到的 24VDC 通过 BUCK 降压电路进展DC-DC 转换,由 ATmega16

11、单片机产生 PWM 控制其占空比,从而得到要求的直流电压。此方案仅用一块控制芯片不但可以实现对 BUCK 电路的控制,而且可以结合 A/D 和D/A 对输出电压进展调整与显示。由于 ATmega16 单片机自带能够产生脉宽调制所需的 PWM 信号的端口,在实际制作中用起来比较方便。ATmega16 单片机自带 8 路 10位 A/D 转换。结合前两个方案优点,经过方案比较与论证,最终确定使用方案三如图 3.2,因为 ATmega16 单片机,自带 PWM 模块,可以输出 PWM 方波控制电路,节约芯片本钱,也可实现 AD 转换。用单片机和其它控制器电路同实现整个系统的控制。-. z3.2 主电

12、路图3、驱动电路图方案一:单片机输出 PWM,采用 IR2101 驱动 DC-DC 电路中的 IRF9530,控制输出电压。方案二:先采用光耦 TLP250 和单片机进展隔离,有效保护单片机,之后用IRF3205 去驱动 MOS 管 IRF9530,控制输出电压。结合两种方案的比照选择方案二如图 3.3,因为方案二中采用光耦,将单片机与主电路隔离,能够有效保护单片机,而且也能使正常使电路工作。图 3.3 驱动电路图4、辅助电源方案一:采用集成的三端稳压集成芯片,7815 和 7805 分别给光耦和运放,还有单片机供电,7815 含过流,过热,过载保护电路。方案二:采用 LM2575 开关稳压集

13、成芯片,它部集成了一个固定的振荡器,是一种高效的稳压芯片,大多数情况下无需加散热片。部有完善的保护电路,包括电流限制及热关断电路等。它可以根据用户要求选择输出电压,可输出3.3V,5V,12V,15V。然后再经过 7805 产生 5V 电压。结合两种方案的比照选择方案二如图 3.4,因为方案二中的 LM2575 的是可调节输出电压的芯片,方便调控,而且它部有电压基准比较,使输出的电压能够准确并稳定,比 7815 要准确,且性能好。-. z图 3.4 辅助电源电路图5、电流、电压采样采样模块是输出电压经过采样回来,形成一个负反响.经过单片机部 A/D 进展处理,然后使输出更加稳定和准确。电压采样

14、模块直接采用 LM358 运放如图 3.5,将输出的电压缩小一定倍数后,然后送给单片机处理判断。电流采样是经过 0.1 欧/4 瓦的采样电阻后,缩小一定倍数,然后经过一个差分电路,将电压值送入单片机进展处理如图 3.6。图 3.5 电压采样电路图图 3.6 电流采样电路图6、显示、按键显示局部采用字符型液晶 1602,能够同时显示 16*02 即 32 个字符。16 个引脚,3 个控制引脚,8 位双向数据端引脚。具有微功耗、体积小、显示容丰富、超薄轻巧的特点。用户可以对 EN、RW、RS 的数据进展编程,然后通过 D0D7 输出显示数据。其引脚功能图见下表 6.1表 6.1 1602 引脚功能

15、图按键局部采用四个独立的按键,分别控制占空比的加和减,对输出的电压和电流进展控制,使输出能够到达期望的要求,其按键功能表如表 6.2。表 6.2 按键功能表键名S1S2S3S4功能PWM1 加 0.2%PWM1 减 0.2%PWM2 加 0.2%PWM2 减 0.2%CPU 端口号PD0PD1PD2PD3(三)、软件设计1、主程序如图 3.7 为主程序流程图,一开场给系统各局部初始化,包括按键初始化,液晶初始化,PWM 初始化,AD 采样初始化,中断初始化,然后在进入大循环,在循环进展数据的显示,包括当前输入的占空比为多少,当前采样回来的数字量和实际的电压值为多少。还有按键程序,和 AD 采样

16、。同时每 10 毫秒进入定时器 0 中断进展调整。-. z图 3.7 主程序流程图2、按键程序按键程序流程图如图 3.8 所示。按键采用四个独立的按键,分别控制 PWM1,PWM2 的加和减,当有键按下时,扫描按键,然后进入判断。判断当前存放器对应的值是否大于了设定的上限值,如果没有则数值加 1,如果到达了则钳位在最大的上限值。然后返回数据。通过按键程序,可以控制占空比的调节。按键开始PD0是否按下?OCR1A+1OCR1B+1OCR1A265&OCR1B265?OCR1A=265OCR1B=265OCR1A-1OCR1B-1OCR1A240&OCR1B261|OCR1B251

17、?OCR1A=261OCR1B=251PD3是否按下?OCR1A-1OCR1B+1OCR1A260?OCR1A=250OCR1B=260结束YNYNYNNYYYYYNNNN-. z图 3.8 按键程序流程图3、液晶程序图 3.8 为 1602 液晶屏的程序框图,1602 由 3 个控制引脚,8 位双向数据端引脚控制显示的容和位置。因此,这局部程序主要有初始化函数,写命令函数和写数据函数组成。初始化函数主要对液晶屏的显示模式进展设定,写命令函数主要是对显示的位置和显示的方式进展设置,写数据函数是决定显示的容。开始写命令设置为写命令方式写入命令把命令送入PB口延时5毫秒EN置高,把命令写入寄存器延

18、时5毫秒EN置低结束写数据开始设置为写数据方式写入数据把数据送入PB口延时5毫秒EN置高,把数据写入寄存器延时5毫秒EN置低结束开始初始化设置为双行,5*7点阵延时5毫秒开显示,不显示光标延时5毫秒输入地址自加,屏幕不移动延时5毫秒清屏延时5毫秒结束 图 3.8 1602 程序流程图4、采样程序-. z如图 3.9 是采样程序流程图。一开场配置 AD 存放器,然后启动 AD 存放器,然后将采样回来的数据组合成 10 位的数据,然后采样 8 次,去头去尾后,对其求平均值。将数据处理后,给液晶显示。然后进展电压判断,是否小于要求的最小值,如果是的话进展钳位,然后是否小于设定的最大值,是的话,就是在

19、要求围,那就进展 PID算法的调整,进展电流的分流。如果大于最大值的话,就进展钳位。图 3.9 AD 采样程序流程图5、中断、PID 流程图如图 3.10 和 3.11 分别是中断流程图和 PID 算法程序流程图。定时器 0 中断定时 10毫秒溢出中断,在中断中进展 PID 调整,和电压反响调整。PID 算法是根据公式,对采样电阻采样回来的电压进展反响计算。根据对 P,I,D 三个参数的设置,然后结合算法公式,对输出的数据进展不断的调整,到达要求的值。图 3.10 定时器 0 中断 图 3.11 PID 算法流程图四、调试过程一 、遇到的问题及解决方法1 、在对电路板进展设计,做板子的时候,经

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

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

22、到达根本的要求。还有在对 PID 参数设置的时候,一开场没有头绪,随便调,后来看论坛和同学谈论,发现要一个一个参数的调,在经过屡次实验后,将 PID 参数调整好了,是指标到达了要求。二 、数据分析表 4.1 和表 4.2 是在电流 1:1 情况下,比例调节和 PI 调节的数据比照。表 4.1 负载为 8.9, 两模块电流按 1:1 分配比例反响I1AI2 AI总 AUoV给定值0.5051.08.0测量值0.5050.5151.0028.24绝对误差1%3%0.2%3%表 4.2 负载为 8.5, 两模块电流按 1:1 分配PI 反响I1AI2 AI总 AUoV给定值0.5051.08.0测量

23、值0.4940.5081.0078.08绝对误差1.2%1.7%0.7%1%表 4.3 和表 4.4 是在电流 1:2 情况下,比例调节和 PI 调节的数据比照。表 4.3 负载为 7.0,两模块电流按 1:2 分配情况比例反响I1AI2 AI总 AUoV给定值0.51.01.58.0测量值0.4620.9301.4977.71绝对误差7.6%7%0.2%3.6%表 4.4 负载为 5.9,两模块电流按 1:2 分配情况PI 反响I1AI2 AI总 AUoV给定值0.51.01.58.0-. z测量值0.5080.9811.5027.60绝对误差1.6%1.9%0.2%5%比照表 4.1 和表

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

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

26、子技术根底,第五版.:高等教育,2006.55 燕君.自动控制原理.大学,2021.1附 录附录 1整体电路图附录 2程序代码-. z/*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(void) TCCR0 = 0*00; /停顿定时器 TT0

27、= 0*64;/初始值,每 10 毫秒进一次中断 TIMSK = 0*01; /允许中断 SREG |= BIT(7); /允许全局中断/*外中断 0 函数*/void timer0_ovf_isr(void) TT0 = 0*64; pid1_calculating(); /PID 调整 OCR1A pid2_calculating(); /PID 调整 OCR1B _vol(); /电压反响/*PWM 设置输出*/void KPWM(void) PORTD|=BIT(4)|BIT(5); DDRD|=BIT(4)|BIT(5); TCCR1A = 0*A2; /两路 PWM,匹配清零 TC

28、CR1B = 0*11; /相位修正 PWM 模式,位数可调,预分频 1 ICR1 = 800; /此数为 16 位 PWM,16M 晶振,clk/(2*N*TOP),频率为 10K OCR1A = 255; /占空比 31.8% OCR1B = 255; /占空比 31.8%void main() KPWM(); /PWM 函数 LCD_init(); /1602 初始化函数 key_init(); /按键初始化函数 timer0_init(); /定时器 0 初始化 adcport_init(); /AD 端口初始化-. z while(1) Display_PWM(); /显示 PWM

29、函数press(); /按键函数display_AD0(); /显示 AD0 的模拟量和数字量 /*1602.h*/*ifndef _1602_H_*define _1602_H_*define uchar unsigned char*define uint unsigned intvoid delay(uint MS);void write_(uint );void write_dat(uint dat);void LCD_init();void Display_PWM();void calculate_AD0();*endif/*1602.c*/*include*include*inclu

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

31、址 delay(5); PORTA|=BIT(7); /EN=1 delay(5); PORTA&=BIT(7); /EN=0-. z/*1602 写数据*/void write_dat(uint dat) PORTA|=BIT(5); /RS=1 PORTA&=BIT(6); /RW=0 PORTB=dat; /送数据 delay(5); PORTA|=BIT(7); /EN=1 delay(5); PORTA&=BIT(7); /EN=0 /*1602 初始化*/void LCD_init() DDRA=0*FF; DDRB=0*FF; delay(5); writ

32、e_(0*38); /设 8 位数据线,双行,5*7 点阵 delay(5); write_(0*0c); /开显示,不显示光标 delay(5); write_(0*06); /输入地址自加,屏幕不移动 delay(5); write_(0*01); /清屏 delay(5);/*显示 PWM 占空比*/void Display_PWM() uchar i; uint shi,ge,*iaoshu,beichu; uint shi1,ge1,*iaoshu1; shi=OCR1A/100; /将 OCR1A 百位拆分 ge=OCR1A/10%10; /将 OCR1A 十位拆分 *iaoshu

33、=OCR1A%10; /将 OCR1A 个位拆分 beichu=ICR1/10; /将 ICR1 变为两位数 shi1=OCR1B/100; /将 OCR1B 百位拆分 ge1=OCR1B/10%10; /将 OCR1B 十位拆分 *iaoshu1=OCR1B%10; /将 OCR1B 个位拆分 write_(0*80); for(i=0;tabi!=0;i+) write_dat(tabi);-. z write_(0*84); write_dat(shi*100+ge*10+*iaoshu)*100/beichu/100+0*30); /显示十位 write_dat(shi*100+ge*

34、10+*iaoshu)*100/beichu/10%10+0*30); /显示个位 write_dat(.); write_dat(shi*100+ge*10+*iaoshu)*100/beichu%10+0*30); /显示小数点 write_dat(%); write_(0*8a); write_dat(shi1*100+ge1*10+*iaoshu1)*100/beichu/100+0*30); /显示十位 write_dat(shi1*100+ge1*10+*iaoshu1)*100/beichu/10%10+0*30); /显示个位 write_dat(.); write_dat(s

35、hi1*100+ge1*10+*iaoshu1)*100/beichu%10+0*30); /显示小数点 write_dat(%);/*AD.H*/*ifndef _AD_H_*define _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)

36、;void display_AD0();*endif/*AD.C*/*include*include*include1602.h*define uchar unsigned 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);-. z PORTA&=BIT(2);/*ADC0 初始化*/voi

37、d ADC0INIT(void) ADMU*=0*40; /AREF 基准压,结果右对齐,通道为 ADC0 ADCSRA=0*87; /使能 ADC,单次转换,预分频为 128 ADCSRA|=(1ADSC); /启动首次转换 while(!(ADCSRA&(1ADIF); /等待转换完毕 ADCSRA|=(1ADIF); /去除 ADIF 位/*ADC1 初始化*/void ADC1INIT(void) ADMU*=0*41; /AREF 基准压,结果右对齐,通道为 ADC1 ADCSRA=0*87; /使能 ADC,单次转换,预分频为 128 ADCSRA|=(1ADSC); /启

38、动首次转换 while(!(ADCSRA&(1ADIF); /等待转完毕循环 ADCSRA|=(1ADIF); /去除 ADIF 位/*ADC2 初始化*/void ADC2INIT(void) ADMU*=0*42; /AREF 基准压,结果右对齐,通道为 ADC2 ADCSRA=0*87; /使能 ADC,单次转换,预分频为 128 ADCSRA|=(1ADSC); /启动首次转换 while(!(ADCSRA&(1ADIF); /等待转完毕循环 ADCSRA|=(1ADIF); /去除 ADIF 位/*获取 ADC 的采样值*/int get_ADCdata(void)

39、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;-. zunsigned char i;float sum=0;for(i=1;i7;i+) /从第 2 次到第 6 次数据sum=sum+ai;v=sum/6;return v;/*获取 ADC0 采样 8 次的平均值*/float get_ADC0data(void)unsigned char i=

40、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 buf8=0;for(i=0;i8;i+)ADC1INIT(); /AD 初始化一次bufi=get_ADCdata(); /将数据放入数组v=get_ave(buf);return v;/*获取 ADC2 采样 8 次的平均值*/

41、float get_ADC2data(void)unsigned char i=0;float v;int buf8=0;for(i=0;i8;i+)-. zADC2INIT(); /AD 初始化一次 bufi=get_ADCdata(); /将数据放入数组v=get_ave(buf);return v;/*将数据拆分送显示*/void display_AD0() int a,b; uchar s6,k6; uchar i,j,m; a=get_ADC0data()*REF/1024*1000; /将数据转化为十进制 b=get_ADC0data(); /数字量 s0=a/1000+0; s1

42、=.; 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_(0*C0); for(i=0;i6;i+) write_dat(si); write_(0*C7); for(j=0;j=360) /实际电压值大于 8.4V OCR1A=265; /钳位到 8.4V-. zOCR1B=265; if(get_ADC2data()=310) /实际电压值小于 7.6V OCR1A=240; /钳位到 7.6V

43、OCR1B=240; /*KEY.H*/*ifndef _KEY_H_*define _KEY_H_void key_init();void press();uchar key();*endif/*KEY.C*/*include*include*include1602.h*define uchar unsigned char*define uint unsigned intuint count_pwm=255;uint count_pwm1=255;/*按键初始化函数*/void key_init() DDRD&=BIT(0); /独立键盘接口置高电平 PORTD|=BIT(0); D

44、DRD&=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&=0*0f; if(m=0*0e) -. z count_pwm=OCR1A; /读取当前 PWM 值 count_pwm+=1; count_pwm=O

45、CR1B; /读取当前 PWM 值 count_pwm+=1; delay(1); /按键消抖 while(PIND=0*0e); OCR1A=count_pwm; /OCR1A 赋新值 OCR1B=count_pwm; /OCR1B 赋新值 if(OCR1A=265&OCR1B=265) OCR1A=265;OCR1B=265; if(m=0*0d) count_pwm=OCR1A; /读取当前 PWM 值 count_pwm-=1; count_pwm=OCR1B; /读取当前 PWM 值 count_pwm-=1; delay(1); /按键消抖 while(PIND=0*0d); OCR1A=count_pwm; /OCR1A 赋新值 OCR1B=count_pwm; /OCR1B 赋新值 if(OCR1A=240&OCR1B=261|OCR1B=251) OCR1A=261;-. zOCR1B=251; if(m=0*07) count_pwm=OCR1A; /读取当前 PWM 值 count_pwm-=1; count_pwm1=OCR1B; /读取当前 PWM 值 count_pwm1+=

温馨提示

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

评论

0/150

提交评论