搜索
您的当前位置:首页单片机控制的直流斩波器设计

单片机控制的直流斩波器设计

来源:智榕旅游
郑州大学本科毕业论文

本 科 毕 业 设 计(论文)

题目 单片机控制的直流斩波器

院 系

专业名称 电子信息工程 年级班级 学生姓名 指导教师

年 月 日

- 1 -

郑州大学本科毕业论文

摘要

传统开关电源是模数结合的硬件为主的控制方式,其控制精度、响应速度等都由电路拓扑结构和器件本身的参数决定,很难进一步提升其性能。随着微处理器处理技术的日趋成熟,开关电源的软硬件结合的控制技术得到了广泛的关注,它呈现出纯硬件控制方式无法比拟的优点。 本论文以单片机为控制核心对开关电源进行了可编程控制的设计。首先介绍了开关电源数控技术的研究现状及趋势;对整个系统的硬件电路进行了各模块的设计及对应器件的选型;在此基础上,对软件部分实现过程进行了详细阐述。

【关键词】单片机,开关电源

- 1 -

郑州大学本科毕业论文

Abstract

Conventional switching power supply is combined with

hardware-based module control mode, the control accuracy, response speed by the circuit topology and device parameters of the decision itself, it is difficult to further improve its performance. With the

microprocessor processing technology matures, switching power supply control software and hardware combination technology has been

widespread concern, it presents a pure hardware control mode can not match advantage.

In this thesis, the core of the microcontroller for the control of switching power supply for the programmable control of the attempt. First introduced the technique of switching power supply CNC status and trends; on the whole system has briefly introduces the hardware design and partial implementation of the software process described in detail.

Key words: microcontroller, switching power supply

- 2 -

郑州大学本科毕业论文

目录

目录 ...................................................... 3 第一章 前言 ............................................... 5 1.选题目的和意义 ............................................ 5 2.国内外综述 ................................................ 5 第二章 系统硬件设计 ...................................... 1 2.1 系统原理 ................................................ 1 2.2 硬件的选取 .............................................. 2 2.3 半桥输出的PWM波产生电路 ................................ 3 2.4 A/D采样及调理电路 ....................................... 4

2.41电压采样电路 .......................................... 4 2.42 电流采样调理电路 ..................................... 5 2.5 矩阵键盘电路 ............................................ 5 2.6 液晶LCD显示电路 ........................................ 7

2.61 液晶1602显示器介绍 .................................. 7 2.62 本系统中1602的应用 .................................... 8 第三章 系统软件设计 ....................................... 1 3.1 软件设计总体思路 ........................................ 2 3.2 系统主程序模块 .......................................... 2

3.21 始初化模块 ........................................... 3 3.22 PWM波发生模块 ........................................ 3 3.23 A/D转换模块 .......................................... 7 3.24 PID算法处理模块 ..................................... 11 3.25 LCD液晶显示模块 ..................................... 13

- 3 -

郑州大学本科毕业论文

3.26 按键处理模块 ........................................ 14 3.3 中断服务程序模块 ....................................... 15

3.31 中断程序原理及框图 .................................. 15 3.32 数字滤波算法 ........................................ 16 第四章 结 论 ........................................... 18 致 谢 ................................................... 20 参考文献 ................................................. 21 附录 ..................................................... 23 目录?

- 4 -

郑州大学本科毕业论文

前 言

1.选题目的和意义

直流斩波电路(DC Chopper)的功能是将直流电变为另一固定电压或可调电压的直流电。也称为直接直流-直流变换器(DC/DC Converter)。直流斩波电路包括六种基本斩波电路升降压斩波电路应用最为广泛。路包括六种基本斩波电路升降压斩波电路应用最为广泛。直流斩波器能起调压的作用,所以可以做开关电源用。

开关电源作为电力电子领域的一个重要分支,随着电力电子技术的高速发展而被广泛应用于以电子计算机为主的各种终端设备和通信设备中,是当今电子信息产业飞速发展不可缺少的一种电源方式。采用传统控制方式的开关电源,其控制精度、响应速度等都由电路拓扑和器件本身的参数决定,如果想进一步提高开关电源的性能,就只能选用参数更优的器件,或者对原有电路进行大范围的改动,这对电源产品的研发、生产都会带来很多麻烦,也制约了开关电源性能的提升。同时,由于模拟信号在传递过程中可能会出现信号失真、畸变以及受到外界电磁干扰,造成开关电源工作状态不稳定。所以,采用传统控制方式的开关电源在性能上的提升相当有限。

随着数字处理技术的日趋成熟,开关电源的可编程数控技术得到了快速的发展和广泛的关注。与硬件控制方式相比,数字控制技术具有其无法

比拟的优势。

2. 国内外综述

开关电源的发展方向是高频、高可靠、低耗、低噪声、抗干扰和模块化。由于开关电源轻、小、薄的关键技术是高频化,因此国外各大开关电

- 5 -

郑州大学本科毕业论文

源制造商都致力于同步开发新型高智能化的元器件,特别是改善二次整流器件的损耗,并在功率铁氧体(Mn?Zn)材料上加大科技创新,以提高在高频率和较大磁通密度(Bs)下获得高的磁性能,而电容器的小型化也是一项关键技术。SMT技术的应用使得开关电源取得了长足的进展,在电路板两面布置元器件,以确保开关电源的轻、小、薄。开关电源的高频化就必然对传统的PWM开关技术进行创新,实现ZVS、ZCS的软开关技术已成为开关电源的主流技术,并大幅提高了开关电源的工作效率。对于高可靠性指标,美国的开关电源生产商通过降低运行电流,降低结温等措施以减少器件的应力,使得产品的可靠性大大提高。

目前,开关电源以小型、轻量和高效率的特点被广泛应用于以电子计算机为主导的各种终端设备、通信设备等几乎所有的电子设备,是当今电子信息产业飞速发展不可缺少的一种电源方式。目前市场上出售的开关电源中采用双极性晶体管制成的100kHz、用MOS-FET制成的500kHz电源,虽已实用化,但其频率有待进一步提高。要提高开关频率,就要减少开关损耗,而要减少开关损耗,就需要有高速开关元器件。然而,开关速度提高后,会受电路中分布电感和电容或二极管中存储电荷的影响而产生浪涌或噪声。这样,不仅会影响周围电子设备,还会大大降低电源本身的可靠性。其中,为防止随开关启-闭所发生的电压浪涌,可采用R-C或L-C缓冲器,而对由二极管存储电荷所致的电流浪涌可采用非晶态等磁芯制成的磁缓冲器。不过,对1MHz以上的高频,要采用谐振电路,以使开关上的电压或通过开关的电流呈正弦波,这样既可减少开关损耗,同时也可控制浪涌的发生。这种开关方式称为谐振式开关。目前对这种开关电源的研究很活跃,因为采用这种方式不需要大幅度提高开关速度就可以在理论上把开关损耗降到零,而且噪声也小,可望成为开关电源高频化的一种主要方式。当前,世界上许多国家都在致力于数兆Hz的变换器的实用

- 6 -

郑州大学本科毕业论文

化研究。

3. 本论文的任务及工作

- 7 -

郑州大学本科毕业论文

第二章 系统硬件设计

本章将对硬件部分的设计进行详细介绍,其中包括以单片机为核心

最小系统的搭建以及外围电路的设计和优化,并对一些在设计中遇到的问题进行分析和解决。

2.1 系统原理

本次制作的是36V、3A的开关电源,要求能够对输出的电压进行恒定的控制,使整个系统具有很好的稳定性。可以通过键盘的输入值对开关电源在20V-36V的输出控制,而对其进行恒压的控制是根据设置的电压值与采集到的电压值的偏差进行比较,由单片机来完成PID算法处理得到电压的偏差信号,再根据偏差信号的大小改变单片机ECCP模块所产生两路推挽的PWM波的占空比,从而改变半控桥电路中两个MOS管通断时间的大小,从而起到稳压的作用。同时外加LED显示模块,对实时的电压电流起到了检测和显示的作用。系统的硬件框图如图2-1所示。

- 1 -

郑州大学本科毕业论文

图2-1 系统硬件框图

实际的硬件系统中,通过抗干扰电路来减少外界干扰如果没有该部分输入电路就会有干扰对输出有很大的影响,整流滤波电路使输入和输出的波形更接近理想化,这样可以减少误差。如果没有该部分加大了误差有可能使结果和理想状态下有很大的出入。

单片机模块输出两路推挽的PWM波,通过高速光耦隔离并且进行电平的转换,再通过以IR2113为核心的驱动电路将PWM波供给开关电源的半桥控制的逆变电路。从开关电源输出端电压经分压后采集回单片机模块进行A/D转换,通过LCD液晶显示采样回来的电压值。通过软件的控制使电压稳定在某一值,具体的电压值由按键模块确定。

2.2 硬件的选取

本设计采用的是Microchip公司的高性能8位单片机—PIC18F4520,并且

使用C语言进行程序的编写,同时在MPLAB IDE 集成开发环境中程序的编译和调试对整个系统进行描述和设计。

本设计所使用的PIC18F4520单片机是采用10位A/D及纳瓦技术的

- 2 -

郑州大学本科毕业论文

40脚的增强型闪存单片机,如图2-2所示。

21-2 PIC18F4520 DPIP封装的引脚图

此单片机具有高性能的RISC(Reduced Instruction Set Computer)结构CPU,有较宽的工作电压范围:2.0-5.5V,同时驱动能力强,驱动电流高达25mA,还具有超低的功耗,多级的中断。由单片机来完成PID算法处理得到电压的偏差信号,再根据偏差信号的大小改变单片机ECCP模块所产生两路推挽的PWM波的占空比,从而改变半控桥电路中两个MOS管通断时间的大小,从而起到稳压的作用。

在本设计中主要使用的是单片机的ECCP模块(增强型捕捉/比较/PWM模块),10位输出的A/D转换模块,同时加上外围的键盘输入模块,以及LCD显示模块。

2.3 半桥输出的PWM波产生电路

由于原先在选择单片机时选择的是PIC18F4520,其内部本身就具有ECCP模块,所以只需要单片机的最小系统就可以实现两路推挽的PWM波的输出,无需外加其他电路。

- 3 -

郑州大学本科毕业论文 2.4 A/D采样及调理电路 本系统主要对输出的电压以及电流进行采样,通过分压或者信号调理电路进行整形和放大送至A/D转换器,由于PIC单片机本身就内置有A/D转换模块,所以不必外扩展A/D转换器,使得整个系统的硬件电路变得更为简捷。 VCC5V22pFC23Y1C24JT22pF1AnJian2Volt3Amp4E5678910VCC5V111213141516PWMO17UT1CONT_OUT18D019D120R2310KU3MCLR/VPP/RE3RB7/KBI3/PGDRA0/AN0RB6/KBI2/PGCRA1/AN1RB5/KBI1/PGMRA2/AN2/Vref-RB4/KBI0/AN11RA3/AN3/Vref+RB3/AN9/CCP2RA4/TOCK1/C1OUTRB2/INT2/AN8RA5/AN4/SS/RB1/INT1/AN10RE0/RD/AN5RB0/INT0/AN12RE1/WR/AN6VDDRE2/CS/AN7VssVDDRD7/PSP7/P1DVSSRD6/PSP6/P1COSC1/CLKI/RA7RD5/PSP5/P1BOSC2/CLKO/RA6RD4/PSP4RC0/T1OSO/T13CKIRC7/RX/DTRC1/T1OSI/CCP2RC6/TX/CKRC2/CCP1/P1ARC5/SDORC3/SCK/SCLRC4/SDI/SDARD0/PSP0RD3/PSP3RD1/PSP1RD2/PSP2PIC18F45204039383736353433323130292827262524232221VCC5VVoutRWPWMOUT2RSVoltR31100kR3210kD3D2 图2-3 PIC18F4520各管脚电路图 图2-4 电压分压采样电路 2342.41电压采样电路 单片机的A/D转换器所能接受的输入转换电压为0-5V,而从开关电源的输出端所输出的电压在24V-36V之间,要将其转换成相应的数量值就必须将输出端的电压进行降压处理,故采用了分压电路,将输出电压的值降到2-4V之间,考虑到电阻的功耗问题,两个分压电阻不宜太小,同时考虑到电阻的阻值越大越容易受干扰,阻值又不宜取太大,因此,我们最终选定100k和10k这两个电阻分压以便单片机的A/D转换器进行模数的转34- 4 -

郑州大学本科毕业论文 换。具体的分压电路较为简单,如图2-4所示。 2.42 电流采样调理电路 本系统采用康铜丝[6]进行电流的采样。用康铜丝是考虑到功率损耗的问题,是因为康铜丝的阻值很小,一般在0.01Ω左右,电流流经康铜丝后的电压很小,最大值不会超过50mV,信号比较微弱。因此,在进行采样的时候,我们需要将此电压信号放大到PIC单片机的A/D模块能够接受的0-5V之间的范围。本系统根据实际的需要将该电压进行大约100倍的放大,这一模块的电路图如2-5所示。直接用提供的公式计算, 当U1=U2=Uf时, 满足输出Uo=-(U1+U2),当然如果要求说满足一个确定的关系式时,可以通过改变两个电阻与Rf的比值得到所需要的比例关系。从运算放大器输出的电压Vout=[1+(R31+R33)/R32]×Vcurrent,放大倍数由(R31+R33)/R32决定。 VCC5VAR1R311kCurrentR321kR33100kAmpOPAMP 图2-5 电流采样信号调理电路 2.5 矩阵键盘电路 通过键盘的输入值对开关电源在20V-36V的输出控制,而对其进行恒压的控制是根据设置的电压值与采集到的电压值的偏差进行比较。 如图2-6所示为3×3的矩阵式键盘,这一键盘的电路设计是采用电阻分压式设计,配合A/D转换器一查表得方式做按键的判断,所以只要使345TitlSizeBDatFile- 5 -

郑州大学本科毕业论文 用一个具有A/D功能的输入口即可完成对3×3的矩阵式键盘的扫描操作,图中的AnJian 端口与图2-3的AN0相连接,为A/D功能的输入口。 此外,一般的按键所用开关都是机械弹性开关,由于机械触点的弹性作用,按键开关在闭合时不会马上稳定地连接,在断开时也不会马上完全的断开,在闭合和断开的瞬间均有一连串的抖动,所以一般在程序中会加按键的去抖动的部分。按键按下的电压信号波形图如图2-7所示,从图中可以看出按键按下和松开的时候都存在着抖动。抖动时间的长短因按键的机械特性不同而有所不同,一般为5ms~10ms。 如果不处理键抖动,则有可能引起一次按键被误读成多次,所以为了确保能够正确地读到按键,必须去除键抖动,确保在按键的稳定闭合和稳定断开的时候来判断按键状态,判断后再做处理。 AnJianAmpVCC5VCBR2720kS1K1S4K4S7k7R2810kS2K2S5K5S8K8R2920kS3K3S6K6S9K9R30K30kR2410kR254.7kR262.2k 图2-6 3×3矩阵式键盘 A 在本系统的按键去抖动设计中,主要是判断按键是否抬起。如果此法Title效果不是很好,那就可以采用延时再判断的方法,如前所述,机械按键的SizeNumberRevisionB抖动时间一般在10ms-20ms之间。在程序中首先A/D采样进来的电压值与延时10ms4Date:7-May-2010 Sheet of File:C:\\Documents and Settings\\Administrator\\Drawn B桌面\\毕业设计y:.ddb后的电压值进行比较,若相等,则说明按键已经确定按下,按56- 6 -

郑州大学本科毕业论文

键的抖动已经消除。假若不相等,则按键不确定已经按下,需要重新再扫描。实验证明,本系统中只需要采用判断按键是否抬起的方法已经可以很好的去抖动满足要求了。

按键松开按键按下前抖动稳定闭合后抖动

图1-7 按键抖动

2.6 液晶LCD显示电路

2.61 液晶1602显示器介绍

液晶显示器以其微功耗、体积小、显示内容丰富以及超薄轻的诸多优点,在各类仪表和低功耗系统中得到广泛的应用[7-8]。

根据显示内容可以分为字符型液晶,图形液晶。根据显示容量又可分为单行16字,2行16字,两20字等等。

本系统中采用的是一款应用相当广泛,功能精简但完全可以满足要求的1602液晶模块。它是16字×2行的字符型液晶模块,是一种通用模块,与数码管相比该模块主要有如下优点:

1)位数多,可显示32位,而32个数码管体积相当庞大了。 2)显示内容丰富,可显示所有数字和大、小写字母。

3)程序简单,如果用数码管动态显示,会占用很多时间来刷新显示,而1602

自动完成此功能。

1602采用标准的16脚接口,各管脚功能如表2-1所示。

管脚序号

名称

功能

- 7 -

郑州大学本科毕业论文

1 2 3 4

VSS VDD VEE RS

电源地端 电源+5V端

液晶显示器对比度调整端

寄存器选择,高选数据寄存器、低选指令寄存器

5 6 7~14 15、16

R/W E D0~D7 LED+、LED-

读写信号,高为读、低为写 使能端,高电平跳变为低电平时有效 双向数据口 调节液晶背光

表2-1 1602各管脚及其功能

2.62 本系统中1602的应用

根据系统设计的实际需要,液晶模块主要是显示设定电压值,AD采集得到的时间电压值,电流值。1602的各管脚和单片机各端口的连接如图2-8所示,实物图如图2-9所示。液晶显示器1602的D0-D3分别与PIC18F4520的RD0-RD3相连接,使能端E则与单片机的Vref+端相连,RS端与RD4连接,R/W端则与RD6相连,具体可以把图2-3与图2-8这两幅图联合起来看。15、16脚是用来调节背光,达到即使黑暗的地方也能看清液晶屏上显示的字符,但它有损于液晶屏的寿命。

- 8 -

AnJianR2720KS1K1S4R254.7KR262.2KK4S7k7R2810KS2K2S5K5S8K8VCC5VR2920KR30K30KR2410KS3K3S6郑州大学本科毕业论文 ERWRSVCC5V 图2-8 1602与单片机引脚连接图 VCC5VK6S9D3D2D1D0K916151413121110BG GNDBG VCCERWRSVOVCCGNDDB7DB6DB5DB4DB3DB2DB1DB0987654321TitleU4LCD1602SizeBDate:File:NumberRevision1-May-2010 Sheet of D:\\PROGRAM FILES\\EXAMPLES\\BACKDrawn BUP~11.DDBy:456- 9 - LCD 1602郑州大学本科毕业论文

第三章 系统软件设计

单片机传统的开发语言是汇编语言,因为汇编语言是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。

作为一种结构化的程序设计语言,C语言的特点就是可以使你尽量少地对硬件进行操作,具有很强的功能性、结构性和可移植性,因此常常被优选作为单片机系统的编程语言。用C编写程序比汇编更符合人们的思考习惯,开发者可以摆脱与硬件无必要的接触,更专心的考虑功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。C语言具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,将功能模块化,由不同的模块完成不同的功能,这样可使整个应用系统程序结构清晰,易于调试和维护。不同的功能模块,分别指定相应的入口参数和出口参数,对于一些要重复调用的程序一般把其编成函数,这样可以减少程序代码的长度,又便于整个程序的管理,还可增强可读性和移植性。

综上,C语言具有很强的功能性和结构性,可以缩短单片机控制系统的开发周期,而且易于调试和维护,已经成为目前单片机语言中最流行的编程语言。本程序设计正是将每一功能模块化,一个一个模块进行C语言的编写,再一块一块调试,从整个设计下来的结果看,用C语言编写程序达到了很好的效果。

本设计使用单片机对开关电源进行数字的控制,代替原来的PWM控制芯片KA7500[9]。原先的KA7500所实现的功能是对输出的电压以及电流进

- 1 -

郑州大学本科毕业论文

行反馈采样,通过误差放大器之后对输出的PWM波的占空比进行相应的调节,起到了稳压恒流的作用。改用PIC18F4520后,采取双通道A/D采样,分别为电压采样和电流的采样,转换为相应之后进行PID(Proportional Integral Differential)算法,同样起到了稳压恒流的作用。同时外围增设键盘和LCD显示电路,对输出的电压和电流有实时的控制和监测。 本章将对整个软件部分的设计思路及其具体实现进行阐述。

3.1 软件设计总体思路

本系统的软件主要有主程序模块、中断服务程序模块组成。其中,主程序模块主要完成系统的初始化模块、PWM波发生模块、ADC信号采集模块以及PID算法处理模块、键盘以及LCD显示模块。中断服务程序主要完成TMR0定时10ms和A/D模块的数据采集滤波处理功能。

3.2 系统主程序模块

主程序模块的程序框图如图3-1所示。

- 2 -

郑州大学本科毕业论文

图3-1 主程序框图

3.21 始初化模块

主程序中的初始化模块主要完成系统全局变量的初始化、ECCP模块的初始化、A/D转化的初始化、LCD显示的初始化、TMR0定时器的初始化和CPU中断系统的初始化。初始化模块的程序框图如图3-2所示。ECCP模块的初始化将设置有两路互补推挽输出的PWM波,A/D转化初始化将A/D模块初始化为10位的A/D转换,TMR0初始化完成每10ms采样一次电压及电流值。

图3-2 初始化模块框图

3.22 PWM波发生模块

在PIC18F4520 中,CCP1模块为带有增强的PWM功能的标准CCP模块[10]。这些增强的功能包括提供2路或4路输出通道、用户可选的极性(高电平有效或低电平有效)、死区控制以及自动关闭和重启。因此,增强型PWM 模式提供了更多的PWM 输出选项以适应范围更广的控制应用。

图3-3所示为PWM操作的简化框图。所有的控制寄存器都是双重缓冲

- 3 -

郑州大学本科毕业论文

的,并且在一个新的PWM周期的开始时刻(Timer2复位时的周期边界)被装载以防止在任何输出上出现毛刺。但PWM延迟寄存器PWM1CON例外,该寄存器在占空比边界或周期边界(选择两者中首先出现的那个)被装载。由于缓冲,模块将不会立即启动,而要等到分配的定时器复位为止。这意味着增强型PWM 波形并不完全与标准的PWM 波形吻合,而是偏移一个完整的指令周期(4TOSC)[11]。

图3-3 增强型PWM模式工作原理示意图

每个增强型CCP模块至多有4路PWM 输出,这取决于选定的操作模式。这些输出,P1A至P1D,与PORTC和PORTD上的I/O引脚复用。输出是否有效取决于选定的CCP操作模式。因此,若想要单片机工作于半桥输出的增强型的PWM模式,必须按照以下几个步骤:

(1) 通过分别设置CCP1CON寄存器的P1M1:P1M0 和CCP1M3:CCP1M0 位可配置模块的输出模式和极性。如图3-4所示为CCP1CON寄存器各配置位。

- 4 -

郑州大学本科毕业论文

图3-4 CCP1CON寄存器配置位

由于本设计中为两路互补推挽的PWM波输出,所以设置P1M1:P1M0=10,即半桥输出:P1A和P1B为带死区控制的调制输出;P1C和P1D被指定为端口引脚。同时设置CCP1M3:CCP1M0=1100,使P1A和P1B都为高电平有效。 (2) 使P1A和P1B都为输出模式,即配置TRISC和TRISD的相应引脚为0。 (3) 设置PWM波的周期。PWM 周期可以通过写PR2寄存器来指定。用以下公式来计算PWM周期。

PWM周期=[(PR2)+1]×4×TOSC×(TMR2预分频值)

根据本系统所需PWM波的实际情况,原先的PWM控制芯片所产生的PWM波的频率要求为25kHz,即周期为4×10-5s。而单片机外部的振荡器为16MHz,TOSC=1/16×106s,经计算的PR2=159。

(4) 设置PWM波的占空比。通过写CCPR1L寄存器和CCP1CON<5:4>位来指定PWM占空比。最高分辨率可达10位。CCPR1L包含占空比的高8位,而CCP1CON<5:4>包含低2位。由CCPR1L:CCP1CON<5:4> 表示完整的10位值。计算占空比的公式如下:

PWM占空比=(CCPR1L:CCP1CON<5:4>)×TOSC×(TMR2预分频值) 可以在任何时候写入CCPR1L和CCP1CON<5:4>,但是在PR2和TMR2发生匹配(即周期结束)前占空比值不会被锁存到CCPR1H中。在PWM模式中,CCPR1H 是只读寄存器。CCPR1H寄存器和一个2位的内部锁存器用于给PWM占空比提供双重缓冲。这种双重缓冲结构非常重要,可以避免在PWM工作过程中产生毛刺。

同样根据本系统所需PWM波的实际情况,PWM的占空比在25%左右。

- 5 -

郑州大学本科毕业论文

所以需要配置CCPR1L和CCP1CON<5:4>,经计算得CCPR1L=0X28,同时CCP1CON<5:4>=00。

(5) 设置死区延时。在半桥输出模式下,两个引脚用作输出端来驱动推挽式负载。PWM 输出信号在P1A引脚上输出,而互补的PWM输出信号在P1B引脚上输出。如图3-5所示。

图3-5 半桥PWM波输出波形示意图

在半桥应用中,模块在所有时间以PWM频率的调制信号驱动电源开

关,关闭电源开关通常比打开它需要更多的时间。如果上方的电源和下方的电源开关同时切换(一个打开,另一个关闭),两个开关可能会在一段很短的时间内都处于打开状态,直到一个开关完全关闭为止。在这很短的间隔内,很大的电流(直通电流)可能流过两个电源开关,从而导致半桥供电电源短路。为了避免在切换期间流过这种潜在的破坏性直通电流,一般延迟打开其中的一个开关等待另一个开关完全关闭。在半桥输出模式下,可编程的死区延迟可用来避免直通电流破坏构成半桥的电子开关。该延迟在信号从非有效状态到有效状态转换时发生。PWM1CON 寄存器(如图3-6所示)中的PDC6:PDC0位根据单片机指令周期设置延迟时间(TCY或4个

- 6 -

郑州大学本科毕业论文

TOSC)。

[13]

图3-6 PWM1CON寄存器

其中bit6-bit0为PWM延迟计数位,延迟时间为PWM信号变为有效的预计时间和实际时间之差,其单位为FOSC/4(4×TOSC)周期[14]。

根据本设计的情况,设定延时时间为占空比时间的5%,即5×10-7s,故对PWM1CON 寄存器赋值为0x84。

3.23 A/D转换模块

在本系统中需要对电压和电流进行相应的A/D转换,硬件电路的设计已经在前一章进行了较为详细的描述,在此不再赘述。这一小节主要介绍PIC单片机中的A/D转换的原理以及在本实验中所需要用到A/D转换功能的程序设计。

PIC单片机中的A/D转换模块[15]如图3-7所示。

可用软件选择模拟参考电压为器件的正电源电压和负电源电压(VDD和VSS)或RA3/AN3/VREF+引脚和RA2/AN2/VREF-/CVREF引脚上的电平。A/D转换器具有可在休眠模式下工作的特性。要使A/D转换器在休眠状态下工作,A/D转换时钟必须来自于A/D 模块内部的RC振荡器。

采样保持电路[16]的输出是转换器的输入,转换器采用逐次逼近法得到转换结果。器件复位操作将强制所有寄存器进入复位状态,这将迫使A/D模块关闭并中止正在进行的转换。可以将每个与A/D转换器相关的端口引脚配置为模拟输入或数字I/O。ADRESH和ADRESL寄存器保存A/D转换的结果。当 A/D转换完成之后,转换结果被装入ADRESH:ADRESL寄存器对,GO/DONE位(ADCON0寄存器)被清零且A/D中断标志位ADIF被置1。上电复位时,ADRESH:ADRESL寄存器中的值保持不变。上电复位后,ADRESH:ADRESL

- 7 -

郑州大学本科毕业论文

寄存器中的值不确定。在根据需要配置好A/D模块之后,必须在转换开始之前对选定的通道进行采样。必须将模拟输入通道相应的TRIS位选择为输入。采集时间一结束,即可启动A/D转换。可将采集时间编程设定在GO/DONE位置1和实际转换启动之间。

图3-7 10位A/D转换器模块原理框图

在执行A/D转换时应该遵循以下步骤: 1.配置A/D模块[17]:

(1)通过ADCON0寄存器选择输入通道。ADCON0寄存器各配置位如图3-8所示 。 其中bit7-bit6为未用位,bit5-bit2为模拟通道选择位,从0000-1100分别代表AN0-AN12,这13个通道。bit1为A/D转换状态位,1表示转换正在进行,0表示空闲。bit0为A/D转换使能位,1表示使能,0表示禁止。

- 8 -

郑州大学本科毕业论文

图3-8 ADCON0寄存器各配置位

(2)通过ADCON1寄存器配置模拟引脚、参考电压和数字I/O口。ADCON1寄存器各配置位如图3-9所示。其中bit7-bit6为未用位,bit5-bit4为参考电压配置位,在本次设计中将其配置位00,使得参考电压在0-5V之间。bit3-bit0为A/D端口配置控制位,如表3-1所示。

图3-9 ADCON1寄存器各配置位

表3-1 A/D端口配置控制位

由于AN0为按键采集,AN1为电压采集,AN2为电流采集,所以ADCON1寄存器的bit3-bit0设置为1100。

(3)通过配置ADCON2从而设置A/D转换的采集时间。每当GO/DONE位置1,用户就可利用ADCON2寄存器选择采集时间。该寄存器还提供了自动设定采集时间的选项。可以使用ACQT2:ACQT0 位(ADCON2<5:3>)设置采集时间,采集时间的范围是2到20 个TAD。当GO/DONE位置1时,A/D模块继续对输入进行采样,采样时间为所选择的采集时间,然后自动启动转换。由

- 9 -

郑州大学本科毕业论文

于采集时间已被编程,因此在选择通道和GO/DONE 位置1之间无需另外等待一个采集时间。

若ACQT2:ACQT0=000,则表示选择手动采集。当GO/DONE位置1时,采样停止并启动转换。用户有责任确保在选定所需要的输入通道和GO/DONE位置1之间经过了所需要的采集时间。此选项也是ACQT2:ACQT0位的默认复位状态,并且与不提供可编程采集时间的器件兼容。

在这两种情况下,当转换完成时,GO/DONE位被清零、ADIF 标志位被置1且A/D 再次开始对当前选定的通道进行采样。如果采集时间已经被编程,那么将不会有任何指示显示采集时间何时结束,转换何时开始。ADCON2寄存器各配置位如图2-10所示。

图3-10 ADCON2寄存器各配置位

bit5-bit3为A/D采集时间选择位,在本设计中将这3位设置成010,为4TAD(每位A/D转换时间被定义为TAD)。而每完成一次10位A/D转换需要11个TAD。图3-11显示了GO置位为1,bit5-bit3位被设置为010,且在转换开始之前选择4TAD采集时间后A/D转换器的工作状态。

在转换期间将GO/DONE位清零将中止当前的A/D转换。不会用尚未完成的A/D转换结果来更新A/D结果寄存器对。这意味着ADRESH:ADRESL寄存器将仍然保持上一次的转换结果(或上一次写入ADRESH:ADRESL寄存器的值)。在A/D转换完成或中止以后,需要等待2个TAD才能开始下一次采集。等待时间一到,将自动开始对选定通道进行采集。

- 10 -

郑州大学本科毕业论文

图3-11 A/D转换周期TAD(ACQT<2:0>=010.TACQ=4TAD)

2.配置A/D中断:

(1)清零ADIF位

(2)将ADIE位置1 (3)将GIE位置1

3.等待所需要的采集时间。

4.启动转换:将ADCON0寄存器中的GO/DONE为置1。

5.等待A/D转换完成,在本设计中是以中断的形式来判断转换是否完成。

6.读取A/D结果寄存器(ADRESH:ADRESL)。 7.再次进行A/D转换。

3.24 PID算法处理模块

1.PID算法原理简介

[18]

典型PID控制的传递函数如式(1)所示:

G(s)XO(s)1Kp(1Tds) (1) Xi(s)Tis式中:Kp为比例系数;Ti为积分常数;Td为微分常数。

简单说来,PID控制器各校正环节的作用如下:

比例环节(Proportiona1):及时成比例地反映控制系统的偏差信号,

- 11 -

郑州大学本科毕业论文

偏差一旦产生,控制器立即产生控制作用,以减少偏差。

积分环节(Integra1):主要用于消除静差,提高系统的无差度。积分作用强弱取决于积分时间常数Ti,Ti越大,积分作用越弱,反之则越强。

微分环节(Differentia1):能反映偏差信号的变化趋势(变化速率),并能在偏差信号值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。

若令

KpTiKi,KpTdKd,则式(1)可以改写为: KiKds (2) sG(s)Kp将式(2)经过拉氏变换,并考虑初始值,即可求得时域内理想的模拟PID控制算式,如下:

u(t)Kpe(t)Kie(t)dtKdde(t)u0dt (3)

由于单片机根据采样时刻的偏差值计算控制量[19],因此式(3)中的积分和微分项不能直接使用,需要做离散化处理。按照模拟PID控制算法的算式(3),现以一系列的采样时刻点代表连续的时间,以和式代替积分,以增量代替微分,则可得到离散化的PID表达式为:

unKpenKiejKd(enen1)u0 (4)

j1n式中:j为采样序号,j=0,1,2…n;un第n次采样时刻的控制器输出值;en为第n次采样时刻输入的偏差值;en-1为第n-1次采样时刻输入的偏差值。

数字PID控制分为位置式PID控制算法和增量式PID控制算法,式(4)所示便是位置式PID算式。

由式(4)可得控制器第n-1次的输出量un-1为:

un1Kpen1KiejKd(en1en2)u0 (5)

j1n1- 12 -

郑州大学本科毕业论文

所以,增量式PID控制算式如下所示:

uunun1Kp(enen1)KienKd(en2en1en2) (6)

2.本系统的PID算法程序框图

在开关电源结构中,开关电源是通过修改PWM波占空比改变逆变桥中COOLMOSFET的通断时间,从而控制输出电压的大小。当输出电压超过给定值时,减小PWM波占空比,减小COOLMOSFET开通时间,降低输出电压;反之,当输出电压小于给定值时,则增加PWM波占空比,增加COOLMOSFET开通时间,使输出电压升高。可见,在控制器进行调节的时候我们所关心的是此次PWM波的占空比需要改变的量,即每次输出控制量的增量。因此,本系统使用增量式PID控制算法。程序框图如图3-12所示。

图3-12 PID算法程序框图

3.25 LCD液晶显示模块

本设计中的LCD现实这一块相对清晰,主要进行的是对LCD的读写操作。但是在编写程序的过程中主要的是将读写的时序有很好的理解。如图

- 13 -

郑州大学本科毕业论文

2-13和如图2-14分别为显示了1602的读和写的操作。

3.26 按键处理模块

通过按键实现设定电压的增减,如按一下增加键(键1),则设定电压值加一伏,但是如果设定电压值大于或是等于36V时,则不在增加;同理,按一下减少键(键2),则设定电压值减一伏,但是如果设定电压值小于或是等于24V时,设定值将不在减少而是保存原值不变。

图3-13 LCD1602读操作时序图

图3-14 LCD1602写操作时序图

注:tsp1和tsp2的最小值一般在30-40ns之间;tHD1和tHD2最小值一般在10ns;

tPW的最小值为150ns;tC的最小值为400ns;tF的最大值一般为25ns;tR

- 14 -

郑州大学本科毕业论文

的最大值一般为25ns;tD的最大值一般为100ns。

此模块采用AD采集的方式来识别按键的按键模块,每个按键对应于不同的电压,因此每个按键对应于不同的AD值,从而通过判断AD值的大小范围就可以判定出按键的值,而此按键模块只需一个AD采集口就够了,大大的减少了IO口的占用情况。

各个按键按下所得到的AD值如下:

Key1 2.5V 0x200 Key2 2.0V 0x199 Key3 1.67V 0x156

Key4 2.882V 0x24E Key5 2.24V 0x1CA Key6 1.795V 0x16F

Key7 3.11V 0x27C Key8 2.37V 0x1E5 Key9 1.916V 0x188

3.3 中断服务程序模块

3.31 中断程序原理及框图

此系统的中断服务程序采取两级中断,主要是TMR0定时/计数器产生10ms定时的溢出中断,主要完成定时10ms对A/D模块的数字量读取和重新开始新的A/D转换,每当ADCBuffer缓冲区的内容满时,对所有采集到的数据进行数字滤波从而读取正确的A/D转换后的电压数字量传给主程序的电压变换模块从而交于PID算法处理模块进行处理。在此分析电压中断服务子程序。程序的框图如图3-15所示。

- 15 -

郑州大学本科毕业论文

图3-15 电压中断服务程序框图

3.32 数字滤波算法

数字PID控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。而测量信号中总是存在一些干扰、噪声或者畸变,这些因素都影响上述控制算法的精度,从而使整个控制系统的性能下降。因此,利用数字滤波技术能够有效地对偏差信号(测量信号)中的干扰、噪声进行滤波或者对其畸变进行动态补偿,从而提高数字PID控制算式的精度,改进控制系统的性能。

本系统中软件中采用TMR0定时10ms,每10ms定时的时间到就将A/D转换的结果读出来,存储在定义的unsigned char ADCBuffer[5]缓冲区中。当缓冲区满时,将缓冲区的内容进行排序,抑制掉最大值和最小值,只取中间的值作为转换的结果。

这部分数字滤波的具体实现方法如下:

//采用数字滤波算法,用排序法完成

- 16 -

郑州大学本科毕业论文

for(i=0;ifor(j=i;jif(ADCBuffer[i]temp=ADCBuffer[i]; ADCBuffer[i]=ADCBuffer[j]; ADCBuffer[j]=temp; } } }

//获取滤波后的AD转换值,将该值载入ADCValue中

ADCValue=ADCBuffer[sizeof(ADCBuffer)/2];

- 17 -

郑州大学本科毕业论文

第四章 结 论

此毕业设计主要完成的任务是对开关电源进行数字的控制即程序的编写。其实从硬件电路的角度讲难度并不是很大,因为主要就是电压和电流的采集,然后进行A/D的转换,再调节PWM波的占空比。原理相对简单,但是要做成功其实并不是一件容易的事情,主要碰到的问题有不同电压情况下PWM波的占空比是不一样的。要想通过进行电压的设定以及将电压稳定在设定的状态需要对PWM波的占空比有比较精确的定量认识。在这个情况下面,需要极其耐心地对每个电压所对应的PWM波的占空比做一个较为详细的记录,以便进行软件程序的编写。

在开关电源中,相对模拟系统而言,数字系统[22]具有设计周期短,易实现模块化管理,能够消除因分立元件引起的不稳定和电磁干扰等优点。因此,近年来数字控制在开关电源中得到迅速的发展。随着芯片技术的不断发展,特别是单片机技术的发展,各种在模拟电路中难以实现的现代控制方法也开始应用于开关电源的控制中,使得模拟控制向数字控制转变。

相信随着数字技术的不断发展和电子技术的不断发展,单片机的数

字控制将会越来越受到关注,也会越来越广泛地被运用到高效率、高功率因素的开关电源中。

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

- 18 -

郑州大学本科毕业论文

随着科技的发展,单片机已不是一个陌生的名词,它的出现是近代计算机技术发展史上的一个重要里程碑,因为单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。单片机单芯片的微小体积和低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化工具。

本文所涉及的是市场占有率最高的是MCS—51系列,因为世界上很多知名的IC生产厂家都生产51兼容的芯片。到目前为止,MCS—51单片机已有数百个品种,还在不断推出功能更强的新产品。

- 19 -

郑州大学本科毕业论文

致 谢

经过三个多月的时间,毕业设计按照预期完成了,由于本人的知识水平有限,论文和设计中有遗漏和缺陷的地方恳请指正。

我要感谢河南理工大学,感谢电气系对我四年的培养,让我学到了许许多多的知识,感谢各位老师在这四年里对我的关怀与照顾,在此致以我深深的谢意。

感谢我的导师给了我莫大的帮助,在她悉心的指导和严格的要求下,作品和论文顺利完成了。论文从选题和最终完成,凝结着导师的辛勤的汗水,她不辞劳苦的教导、严谨的作风使我终生受益。在此毕业设计完成之际,谨向导师和所有帮助过我的老师致以崇高的敬意和衷心的感谢。

还有感谢家人、朋友还有宿舍里所有的室友,是他们给我创造了良好的学习氛围,在学习和生活中给了我支持和帮助。在以后的学习生活中我会时时敦促自己更加努力,不辜负师长、亲人、朋友对我的期望

毕业设计是综合运用所学知识的一次能力锻炼。在设计过程中,不但要汲取新的知识而且对以前所学的知识也要融会贯通。此次的毕业设计不但增强了自己的动手能力,而且也使我学会了如何用所学的知识解决实际问题。同时它也使我认识到同学之间相互讨论,相互学习的重要性,让我在以后的工作中更加注重一个团队的合作精神。

最后,感谢在百忙之中抽出时间参加论文评阅和课题答辩的各位老师,在此致以最衷心的感谢!

- 20 -

郑州大学本科毕业论文

参考文献

[1] 王小波.直流开关电源的数字控制设计及应用[M]. 电子工业出版社,2005.1-3

[2] 常敏慧,申功迈等.开关电源应用、设计与维修[M]. 科学技术文献出版社,2007.55-57

[3] 何希才. 实用开关电源数字控制技术[M]. 电子工业出版社,2002.169-175

[4] 高飞, 田玉冬. 36V/2A稳压开关电源的设计[J]. 上海电机学院学报,2007,10(2): 94-97

[5] 林 雯. 浅谈开关电源的技术发展趋势[J]. 通信电源技术,2008,25(6):79-80

[6] 孔锋封. 开关电源单片机外围元器件选择与检测[M]. 北京: 中国电力出版社, 2009.1-3

[7] 刘松又. 高频开关电源的数字化控制电路的设计[J]. 湖南大学学报, 2003(6): 97

[8] 雷媛媛,吴胜益. 试论开关电源技术的发展[J]. 通信电源技术,2008,25(4):75-77

[9] 胡玮,康永. 基于单片机控制的双路输出数字开关电源的研制[J]. 上海电机学院学报,2008,10(2): 65-67

[10] 刘鹿生.电力电子的高频数字控制[J].电力电子,2005(1):53—55 [11] 马彦霞,李俊. 等型变换器的闭环控制性能分析与仿真[J]. 中原工学院学报,2004(4):36—39

[12] 汪超. 基于高性能单片机的功率直流开关电源的设计[J]. 湖南工程学院学报,2003(6): 97

- 21 -

郑州大学本科毕业论文

[13] 王增福,李翅等. 软开关电源原理与应用[M]. 北京: 电子工业出版社, 2009.1-3: 200

[14] 孙著. 新型PID控制在开关电源中的应用[J]. 电力电子技术, 2009,43(2): 73-75

[15] 姜少飞等.基于DSP的数字PID控制在开关电源中的应用[J]. 漳州师范学院学报, 2009(3): 53-55

[16] 魏旭光, 陈建锋. 开关电源时变模型的新型PID算法[J]. 通信电源技术, 2009, 26(4):28-30

[17] 刘文军, 罗玉峰. 开关电源模糊控制PID的设计和MATLAB仿真研究[J]. 通信电源技术,2007,25(4):23-26

[18] 席俊国. 一种新型的PID参数自整定策略[J]. 电力电子技术, 2008,23(3):83-85

- 22 -

123456LQ1C222nfC401UFC51uFR113MD1N4934D3400V22KMUR1560R4Q2TRANS1R212KC700114131211109C68068ufNCHOVSSVBLinVSSDNCHinVCCVDDCOMNCLOU1IR2113+C916MR6150K220uf/250VR8+Fuse1152AR3100KD2T240074C8100uf/50vC1RT022uF/250VC322nfL11TO1NDGNDV7CC1654321SPP20N60C310KR701R5150K220uF/250VR9+C10VCC5V+15VC100U147R21Q3138R30S20L200001uF8142TRANSCT8D810KFR10747uF/50V+400VC15R29T2S20L20100C16C18+CR110PWMOUT3KP1AC111u/25vD11N581947Q2C14SPP20N60C3Q48550D7FR107R3647P1BR24D9FR157R35005CurrentQ54L285501R2361100R2822nFD6U6R1650022nFD5Vout4R11VCC1R191KD41N4744IR2113R2223Q1D9SPP20N60C3FR157855047R34680C19+C20+C21+220EL8171413P1B12CONT_In11P1A10+15V98NCHOVSSVBLinVSSDNCHinVCCVDDCOMNCLO765+4473+15V2GNDR2011000uF1000uF1000uF1000uFR4575KD9LEDVCC5V附录

VCC5VEL817VoutVCC5VVCC5V2+15V郑州大学本科毕业论文

VCC5VVCC5VD3D2D1D0Y1C13JT22pFD3D2RWPWMOUT2RSERWRSVCC5V16151413121110A987654321DB7DB6DB5DB4DB3DB2DB1DB0PIC18F4520BG GNDBG VCCERWRSVOCVCGNDU41234LCD 1602电路原理图

- 23 -

C17CONT_InR2510KU3R271K1kCurrentR321kVoltR2610KAR1R31R33100kAmpOPAMPAnJianVoltAmpER3810KR3947KR4022KVCC5V22pFC1212345678910VCC5V111213141516PWMO1U7T1CONT_1O8UTD019D120MCLR/VPP/RE3RB7/KBI3/PGDRA0/AN0RB6/KBI2/PGCRA1/AN1RB5/KBI1/PGMRA2/AN2/Vref-RB4/KBI0/AN11RA3/AN3/Vref+RB3/AN9/CCP2RA4/TOCK1/C1OUTRB2/INT2/AN8RA5/AN4/SS/RB1/INT1/AN10RE0/RD/AN5RB0/INT0/AN12RE1/WR/AN6VDDRE2/CS/AN7VssVDDRD7/PSP7/P1DVSSRD6/PSP6/P1COSC1/CLKI/RA7RD5/PSP5/P1BOSC2/CLKO/RA6RD4/PSP4RC0/T1OSO/T13CKIRC7/RX/DTRC1/T1OSI/CCP2RC6/TX/CKRC2/CCP1/P1ARC5/SDORC3/SCK/SCLRC4/SDI/SDARD0/PSP0RD3/PSP3RD1/PSP1RD2/PSP24039383736353433323130292827262524232221LCD1602R212PWMOUT3KQ68550+15V

1U7R17500U278L051R3710KC22104VINVOUTGND3+4VCC5VR1323220100uF/50VC23C24104BAnJianR4120KS1K1S4K4S7k7R4210KS2K2S5K5S8K8R4320KS3K3S6K6S9K9R4430KBRT14CONT_OU3KQ585501U8R185004R1523220EL817ATitleSizeBDate:File:5NumberRevision10-May-2010SheetofC:\\DocumentsandSettings\\Administrator\\D桌raw面n\\B毕y业:设计ddb6 郑州大学本科毕业论文

程序代码

//******RD5口与P1A口复用了,所以RD5口改为了RD6口,而AD采集有三路,故将LCD的AN2改为AN3了

//从而AN0为按键检测,AN1电压检测,AN2电流检测 P1A(RD5),P1B(RC2)为PWM半桥输出

//LCD(RD0,RD1,RD2,RD3,RD4,RD6,RA3),三路输出控制(RD5,RC2,RC3)

#include #include #include

//************************PID

************************************* struct PID{

unsigned int Setpoint; //Set Volt value unsigned int LastOut; //上次输出值 float Pgain; float Dgain; float Igain;

unsigned int PositivePIDLimit; //Max PWM unsigned int NegativePIDLimit; //Min PWM int Last_error; //上次差值 int Last_derror; //上次偏差的偏差 int Last_dderror; //积分求和

- 24 -

郑州大学本科毕业论文

}Volt_PID;

#define LCD_DATA LATD //PORTD低四位传输数据 #define RS PORTDbits.RD4

#define RW PORTDbits.RD6 //RD5口为P1A占空比输出,改为RD6输出

#define LCD_E PORTAbits.RA3 //RA3使能信号,数字信号

void TMR0_ISR(void); //定时中断函数

int AD_Get(char Tongdao); //获得AD 1 AN0;5 AN1;9 AN2 void Keyprocess(void); //键盘处理

void Initial_Lcd(void); //初始化

void Lcd_Cmd_Write(void); //写命令 信号的控制 void Lcd_Data_Write(void); //写数据 信号的控制 void Write_Cmd(unsigned char lcd_cmd); //写命令 void Write_Data(unsigned char lcd_data); //写数据 void Timecontrol(void); //定时时间处理

void PWM_Initial(void); //普通PWM的初始化 void ECCPWM_Initial(void); //增强型PWM的初始化

float Kp=0.05; float Kd=1; float Ki=1;

- 25 -

郑州大学本科毕业论文

int Flag=0; //10mS计数,处理标志位 int count=0;

unsigned int KeyAD_Value=0; //按键AD值 unsigned int VoltAD_Value=0; unsigned int CurrentAD_Value=0; unsigned int Key=0; //键号 unsigned int Volt_Get=0; //反馈电压值 unsigned int Volt_Set=30;

unsigned int Current_Get=0; //反馈电流AD电压值 unsigned int Volt_Value=0;

unsigned int Current_Value=0; //反馈电流实际值 unsigned

char

Displaybuffer[16]={'S','e','t','V','

','G','e','t','V',' ',' ','A','m','p',' ',' '}; //第一行的数据 0x80

unsigned char Displaybuffer1[16]={' ',' ',' ','V',' ',' ',' ','.',' ','V',' ',' ',' ','.',' ','A'}; //第二行的数据 0xC0

//*************************LCD***********************************************

void Initial_Lcd(void) {

LCD_DATA=0b00000011; Lcd_Cmd_Write();

- 26 -

郑州大学本科毕业论文

Delay10KTCYx(16);

LCD_DATA=0b00000011; Lcd_Cmd_Write(); Delay10KTCYx(16);

LCD_DATA=0b00000011; Lcd_Cmd_Write(); Delay10KTCYx(16);

Write_Cmd(0x28); //两行4BIT,5*7 Delay100TCYx(16);

Write_Cmd(0x0f); //open lcd Delay100TCYx(16);

Write_Cmd(0x06); //open cursor Delay100TCYx(16);

Write_Cmd(0x01); //flash cursor Delay100TCYx(16);

Write_Cmd(0x80) ; //set start place Delay100TCYx(16); }

//***********************

************************************** void Write_Cmd(unsigned char lcd_cmd)

- 27 -

郑州大学本科毕业论文

{

unsigned char cmd_tmp; //先高四位,后低四位 cmd_tmp=(lcd_cmd&0xf0)>>4; LCD_DATA=(LCD_DATA&0xf0)|cmd_tmp; Lcd_Cmd_Write();

cmd_tmp=(lcd_cmd&0x0f);

LCD_DATA=(LCD_DATA&0xf0)|cmd_tmp; Lcd_Cmd_Write(); Delay100TCYx(16); }

//***********************

*************************************** void Write_Data(unsigned char lcd_data) {

unsigned char data_tmp; data_tmp=(lcd_data&0xf0)>>4; LCD_DATA=(LCD_DATA&0xf0)|data_tmp; Lcd_Data_Write();

data_tmp=(lcd_data&0x0f);

LCD_DATA=(LCD_DATA&0xf0)|data_tmp; Lcd_Data_Write(); Delay100TCYx(16);

- 28 -

郑州大学本科毕业论文

}

//***********************写命令的设置*********************** void Lcd_Cmd_Write(void) {

RS=0; //写命令 Nop();

RW=0; //写状态 Nop();

LCD_E=1; //下降沿 Nop(); Nop(); LCD_E=0; }

//**********************写数据的设置************************ void Lcd_Data_Write(void) {

RS=1; //写数据 Nop();

RW=0; //写状态 Nop();

LCD_E=1; //下降沿 Nop(); Nop();

- 29 -

郑州大学本科毕业论文

LCD_E=0; }

//***************Timer0 初始化 中断初始化10ms**************************************

void Timer0_Initial(void) { T0CONbits.TMR0ON = 0; //关定时器

T0CON = 0x11; //000100001 选择内部FOSC/4=4M 分频=1M16位 下降沿 TMR0H = 0xD8; //1us*10000 = 10ms TMR0L = 0xEF;

RCONbits.IPEN = 1; //使能中断优先级 INTCON = 0xE0; //允许TMR0中断 INTCON2 = 0x04; //TMRO 高优先级

T0CONbits.TMR0ON = 1; //使能TMRO

}

//********************************AD初

************************************ int AD_Get(char Tongdao) {

int AD_temp;

- 30 -

在4

郑州大学本科毕业论文

ADCON1 = 0x0C; //AN0,按键采集 ,AN1电压采集,AN2电流采集,其他全部为数字口,右对齐

ADCON0 = Tongdao; //选择通道AN0,使能AD转换 0x01

//选择通道AN1,使能AD转换 0x05 //选择通道AN2,使能AD转换 0x09

ADCON2 = 0x80; //转换速度fosc/2 间隔时间0ATD 手动启动

Delay10TCYx(10); // Delay for 50TCY ConvertADC(); // Start conversion while(BusyADC()); // Wait for completion AD_temp = ReadADC(); // Read result CloseADC(); // Disable A/D converter Nop();Nop(); return AD_temp; }

//******************************

************************************* //键1为电压设定加,键2为电压设定减 void Keyprocess(void) {

KeyAD_Value = AD_Get(1); //通过电路分压可知各键的电压值 while(AD_Get(1)>0x100); //等待按键抬起,按键去抖动 if(KeyAD_Value>0x270) //Key1 2.5V 0x200

Key=7;

- 31 -

郑州大学本科毕业论文

else if(KeyAD_Value>0x240) //Key2 2.0V 0x199 Key=4;

else if(KeyAD_Value>0x1f0) //Key3 1.67V 0x156 {

Key=1;

if(Volt_Set>=36) { Volt_Set=36; } else

Volt_Set++;

}

else if(KeyAD_Value>0x1cf) //Key4 2.882V 0x24E Key=8;

else if(KeyAD_Value>0x1b0) //Key5 2.24V 0x1CA Key=5;

else if(KeyAD_Value>0x18f) //Key6 1.795V 0x16F {

Key=2;

if(Volt_Set<=20) { Volt_Set=20; } else

Volt_Set--;

- 32 -

郑州大学本科毕业论文

}

else if(KeyAD_Value>0x17f) //Key7 3.11V 0x27C Key=9;

else if(KeyAD_Value>0x160) //Key8 2.37V 0x1E5 Key=6;

else if(KeyAD_Value>0x140) //Key9 1.916V 0x188 Key=3; }

//********************************PWM_Initial*************************

void PWM_Initial(void) { }

//*******************************ECCPWM_Initial****************

CCP1CON = 0x0f; //CCP1设为PWM模式 CCP2CON = 0x0f; //CCP2设为PWM模式 T2CON = 0x01; //1:4预分频 T2CONbits.TMR2ON = 1; //使能T2 PR2 = 99;

CCPR1L = 50; //PWM1占空比为50% CCPR2L = 0;

//PWM2占空比为0

TRISCbits.TRISC2=0; //设置PORTC为输出 TRISCbits.TRISC1=0;

- 33 -

郑州大学本科毕业论文

*********

void ECCPWM_Initial(void) {

CCP1CON=0x8C; //P1A和P1B为调制推挽式半桥输出;PWM工作方式,且占空比的低//2位为00;P1A为高电平有效,P1B为高低电平有效 TRISCbits.TRISC2=0; //RC2置输出方向 P1A 上桥臂 TRISDbits.TRISD5=0; //RD5置输出方向 P1B 下桥臂 T2CON=0x00; //TMR2预分频为1:1

PR2=159; //PWM波的频率为25KHz.,周期为40微秒 (PR2+1)*4*分频比/16000000

CCPR1L=0x28; //PWM波占空比为25% 占空比的高八位 640*25%=160=0xA0 0010 1000 00

PWM1CON=0x84; //死区延时1微秒 4*4/16000000=1us T2CONbits.TMR2ON=1; //TMR2开始工作 }

void Volt_Current_AD(void) {

CurrentAD_Value=AD_Get(9); CurrentAD_Value=CurrentAD_Value&0x03ff;

Current_Get=(unsigned int)(CurrentAD_Value*50/1024); VoltAD_Value=AD_Get(5);

VoltAD_Value=VoltAD_Value&0x03ff;

Volt_Get=(unsigned int)(VoltAD_Value*50/1024); //取回的电

压值

- 34 -

郑州大学本科毕业论文

Current_Value=Current_Get; //电流折算回实际值 Displaybuffer1[11] = Current_Value/100 + 0x30; Displaybuffer1[12] = (Current_Value%100)/10 + 0x30; Displaybuffer1[14] = Current_Value%10 + 0x30; Delay10TCYx(10);

Volt_Value=Volt_Get*16; //电压分压比为16:1,折算回去输

出电压值

Displaybuffer1[5] = Volt_Value/100 + 0x30; Displaybuffer1[6] = (Volt_Value%100)/10 + 0x30; Displaybuffer1[8] = Volt_Value%10 + 0x30; Delay10TCYx(10);

}

unsigned int PID_Control(void) {

int error,derror,dderror; int Delta;

unsigned int OutDuty1; Volt_PID.Dgain = Kd; Volt_PID.Igain = Ki; Volt_PID.Pgain = Kp;

Volt_PID.Setpoint = Volt_Set*10; error = Volt_Value-Volt_PID.Setpoint;

- 35 -

郑州大学本科毕业论文

derror = error - Volt_PID.Last_error; dderror = derror - Volt_PID.Last_derror;

Delta =(int) (Volt_PID.Pgain*error + Volt_PID.Igain*derror + Volt_PID.Dgain*dderror);

OutDuty1 = Volt_PID.LastOut + Delta; if(OutDuty1 > Volt_PID.PositivePIDLimit) { OutDuty1 = Volt_PID.PositivePIDLimit; }

if(OutDuty1 < Volt_PID.NegativePIDLimit) {

OutDuty1 = Volt_PID.NegativePIDLimit; }

Volt_PID.Last_error = error; Volt_PID.Last_derror = derror; Volt_PID.Last_dderror = dderror; Volt_PID.LastOut = OutDuty1; return OutDuty1; }

unsigned char CCPR1L_Value(unsigned char PT) {

unsigned int P_temp; unsigned char result; P_temp=640*PT;

P_temp=(unsigned int)(P_temp/100.0); P_temp=P_temp>>2;

- 36 -

郑州大学本科毕业论文

result=P_temp;

return result;

}

//定时器高优先级中断入口函数声明

#pragma code high_interrupt_vector = 0x0008 void high_interrupt_vector(void) {

_asm goto TMR0_ISR _endasm

}

#pragma code

//*****************

******************************************** void main(void) { int i;

TRISD = 0; //PORTD 输出 RS RW控制线 PORTD = 0;

TRISAbits.TRISA0 = 1; //电压采集输入口 TRISAbits.TRISA1 = 1; //电流采集输入口

TRISAbits.TRISA3=0; // PORTA3 输出 使能信号线

LCD_E=0;

LCD_DATA = 0x00; // LCD DB[4:7] & RS & R/W --> Low

Initial_Lcd(); //LCD初始化

- 37 -

郑州大学本科毕业论文

ECCPWM_Initial(); //普通PWM初始化 Nop(); Nop();

Timer0_Initial(); //定时器初始化

Volt_PID.PositivePIDLimit=0x93; //最大、最

小占空比

Volt_PID.NegativePIDLimit=0x0c; Volt_PID.LastOut=0x30; Volt_PID.Last_error=0; Volt_PID.Last_derror=0; Volt_PID.Last_dderror=0; while(1) {

Keyprocess(); //按键识别

Displaybuffer1[1] = Volt_Set/10 + 0x30; Displaybuffer1[2] = Volt_Set%10 + 0x30; Write_Cmd(0x80) ; //第一行起始地址

Delay100TCYx(16);

for(i=0;i<16;i++) {

Write_Data(Displaybuffer[i]); Delay100TCYx(16); }

Write_Cmd(0xC0) ; //第二行起始地址

Delay100TCYx(16); //按键显示函数

- 38 -

郑州大学本科毕业论文

for(i=0;i<16;i++)

{ Write_Data(Displaybuffer1[i]); Delay100TCYx(16); }

if(Flag == 1) {

Volt_Current_AD(); //电压、电流采集显示 //CCPR1L=PID_Control(); //10% CCPR1L=CCPR1L_Value(85); Flag = 0; }

}

}

//*******************

*************************************** #pragma interrupt TMR0_ISR void TMR0_ISR(void) {

Flag = 1;

INTCONbits.TMR0IF = 0; //清中断标志 TMR0H = 0xD8; //1us*10000 = 10ms TMR0L = 0xEF; //赋初值

- 39 -

郑州大学本科毕业论文

}

- 40 -

郑州大学本科毕业论文

i

郑州大学本科毕业论文

1

因篇幅问题不能全部显示,请点此查看更多更全内容

Top