PIC单片机的可编程电源的设计
给出一种新型的基于PIC单片机的可编程电源的设计,并从系统的硬件和软件两方面对这种设计作了分析。该电源能提供随时间变化的电压和电流输出,可以通过电源面板或PC机方便地对电源各输出参数进行编程。
关键词 PIC16F874 开关电源 PWM 可编程 NCP1200
引言
随着各种电器和仪表设备的日渐丰富,对电源应用的灵活性提出了更高的要求。设计一款使用灵活、方便且价格相对便宜的通用电源,正越来越成为市场所需。现代单片机正朝着处理速度越来越快,外设资源越来越丰富,价格越来越便宜的方向发展,将单片机融入电源的设计中可以极大地提升电源的性能和灵活性。本文介绍了一种单片机加PWM芯片的开关电源设计方法,既可以保留PWM芯片带来的稳定工作性能,又可以利用单片机的控制能力提供各种人机交互和通信接口。笔者设计的电源作为通用电源使用,可以提供灵活可编程的电压电流输出,另外还可以设置成铅酸电池充电器的模式,具有广阔的应用前景。
1 系统功能
通过对电源的编程,可以方便地实现图1所示的电压输出波形。其中,V1、V2、T1、T2、dv、dt都是可以通过编程来设定的。电压值的输出范围为0~16 V,最大输出电流为10 A。输出电压精度为0.1 V,电流精度为10 mA。电流的设定值指的是允许输出的最大电流,也可以被编程为与输出电压一样的波形。
图1 编程输出电压波形
另外,电源也可以工作在铅酸电池充电器的模式(简称“LBC模式”)。根据铅酸电池的特性,当电源工作在LBC模式时,电源首先将输出较大的充电电压和电流V1/I1,至少维持10 s;当充电电流降到小于设定值I2时,电源输出较小的充电电压和电流V2/I2。如果到了设定时间T1,充电电流还未降到I2以下,这时电源输出也会降为V2/I2。当输出电流再次大于I2时,电源将再次输出V1/I1充电。其中,V2设定值必须小于14 V。若设置为大于14 V,电源会自动将其设成14 V。I2的值必须大于1/8I1,否则将被自动设成1/8I1。LBC模式如图2所示。
图2 LBC模式
用户可以通过3种方式对电源进行输出设定:
① 通过电源面板上按键编程。通过按键对输出电压、电流限流值、时间等量进行设定。
② 通过PC机串口编程。通过将PC机的串口RS232与电源串口相连,再运行PC机上一串口通信的软件对电源进行编程。
③ 电源间相互编程。通过将两台电源的串口相连,操作其中一台电源面板上的按键来对另一台进行编程。操作的一台电源叫做“主电源”,被编程的电源叫做“从电源”。在这种编程方式中,只能将从电源的参数设置为与主电源完全一致,而不能对各个参数进行单独设定。一台电源只能提供100 W的功率。这种方式可以应用在需要较大功率的场合,可将两台或多台具有相同设置的电源输出并联来方便地实现功率扩展。
2 工作原理
用单片机来控制开关电源,总的来说可以分为两种: 第一种是单片机通过输出PWM或DA给电源电路提供一个基准电压,单片机本身不介入电源的反馈中(本设计所采用的就是这种方式);第二种为通过单片机输出的PWM信号直接控制开关管工作,取代PWM芯片,但这种方式对单片机的要求较高,需要具有相当高的时钟频率才能满足对输出PWM频率和分辨率的要求。
系统按模块来分可以分成两大模块: 电源模块和单片机控制模块。电源模块是以PWM芯片为核心的AC—DC变换器,PWM芯片采用安森美半导体的电流型PWM控制器NCP1200作为控制芯片。单片机控制模块采用美国微芯公司的PIC16F874作为微控制器,主要实现电流电压信号的采样、显示、按键输入、串口通信以及为电源模块提供电压电流参考等功能。两个模块的关系可以用图3来说明。
图3 工作原理
图3中,电网电压经整流滤波后供给高频变换电路,由高频变换电路产生输出。单片机输出两路PWM信号,给电源模块提供输出电压的参考值和电流的限流值,电源模块按照单片机提供的参考值输出电压和限定最大电流。虽然单片机采样输出电压和电流进行显示,但这里单片机并不参与系统的反馈,反馈通过电源模块来实现(在后面的部分中会详细讲到)。
3 硬件设计
3.1 电源模块电路
NCP1200是安森美半导体公司(ON Semiconductor)推出的一款电流型PWM控制器。其应用电路只需要使用很少的外围元件,使设计更加紧凑。另外,芯片内集成输出短路的保护电路,使成本可以进一步降低。
图4是以NCP1200为控制芯片的电源电路的结构。从图中可以看到,电源模块中有两种反馈类型。第一种是输出电压反馈,输出电压采样值VSS和单片机提供的设定值进行比较,通过光耦来控制NCP1200芯片FB脚的电压,调整DRV脚输出PWM的脉宽来控制场效应管的导通和关断时间,从而达到调整输出电压值的目的。另一路反馈是电流限流反馈,当采样到的输出电流值ISS超过单片机提供的最大限流值IPWM后,比较器输出正电压使得光耦最大导通,将FB脚电压拉低,使得NCP1200输出PWM脉宽减小,从而达到限流的目的。当输出电流小于单片机提供的限流值时,限流反馈不起作用。
图4 电源模块电路结构
图中的辅助电源提供+12 V的电压,另经三端稳压器件KA7805(图中未画出)产生+5 V的电压,给比较器和单片机控制模块提供电源。
3.2 单片机控制电路
PIC16F874是美国微芯科技公司(Microchip Technology)的一款8位单片机,内置4K×14位的Flash、128字节的RAM和64字节的EEPROM。另外,它具有丰富的外设资源,其内置1个UART模块可供串口通信用,2个CCP模块可以产生2路独立、10位分辨率的PWM信号,8路10位的A/D转换通道。另外,PIC系列单片机的每个I/O能提供25 mA的驱动电流,对于LED的接口电路可以省掉外加晶体管的驱动电路。
单片机控制模块结构框图如图5所示。
图5 单片机控制模块结构框图
单片机控制系统的主要接口电路:
① 按键接口电路。采用暂触式开关输入,使用电阻电容去抖。
② 数码管及LED显示电路。数码管显示电压、电流、时间等信息。LED指示当前显示的参数种类。PIC单片机的I/O能够直接驱动数码管和LED。按键输入和显示接口电路如图6所示。
图6 按键输入和显示接口电路
③ A/D采样和PWM输出电路。A/D负责采样输出电压电流并送到数码管显示。当前电流电压设定值通过由单片机内部的CCP模块产生的两路PWM信号来给电源模块提供一个参考值。单片机内部的CCP模块可以设置成PWM输出模式,通过写周期寄存器和脉宽寄存器的值就可由硬件产生不同频率和占空比的PWM波形。
④ 串口通信接口电路。串口通信接口电路采用MAX232芯片作为RS232收发器。
4 软件设计
4.1 软件流程
软件用C语言编写,使用HighTech公司为PIC系列单片机提供的PICC编译器。系统上电时,单片机读出非易失性存储器(EEPROM)中上次设置参数,进行电流电压输出。在软件设计中,采用多个任务的概念,可以模拟一个简单的操作系统进行任务的调度。由定时器产生一个5 ms的中断,在中断程序中激活各个任务的标志。如显示任务主要负责A/D采样、数码管与LED的刷新,可每5 ms执行一次。键盘处理任务负责按键的扫描、软件去抖、键盘命令的解释和扫行,可每10 ms执行一次。PWM输出任务负责按照设定的值进行PWM的输出,可以每50 ms执行一次。如果有PC机或其他电源通过串口编程,单片机将在UART中断中接收编程数据,接收完改写EEPROM中设置并强行复位。如果接收到通过按键的编程,则在按键处理中修改EEPROM的设置并复位。程序主流程则扫描各个任务是否到时间执行。是,则执行该任务;否则,跳过该任务。主程序流程如图7所示。
图7 主程序流程
4.2 串口编程软件
在PC机上设计了软件来实现PC机与单片机的通信。通过该软件可以方便地实现对电源电流电压输出、定时等参数的设定。只要将电源上的RS232口与PC机串口相连,就可实现通信。
利用Visual Basic中的Mscomm控件进行串口通信软件的设计(这里仅作简要的介绍)。PC端数据接收通过Oncomm事件来实现,当接收缓冲区的数据达到rthreshold属性设定值时,就会触发Oncomm事件,在中断程序中读出接收缓冲区中的数据,将收到的字符型数据转换成字符串后便送到各个文本框显示。数据发送时,首先读出文本框内字符串,再将其转换成字符型数据,最后通过单击“发送”按钮,将数据送到发送缓冲区中,从而将数据从串口发送出去。
结语
采用单片机控制,克服了开关电源单一输出的缺点,能够提供灵活的电压输出。通过功率联合扩展的功能,可以满足不同功率场合的要求。电源也可以被当成铅酸电池充电器来使用,能自动调整充电电流和电压,应用场合非常广泛。