基于PIC16F877A控制boostbuckDCDC变换器_第1页
基于PIC16F877A控制boostbuckDCDC变换器_第2页
基于PIC16F877A控制boostbuckDCDC变换器_第3页
基于PIC16F877A控制boostbuckDCDC变换器_第4页
基于PIC16F877A控制boostbuckDCDC变换器_第5页
已阅读5页,还剩9页未读, 继续免费阅读

下载本文档

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

文档简介

1、. . . 输出电压可设置的升降压DC-DC变换器如下图,设计一个DC-DC变换电路:要求:1)当输入电压Ui 在14V16V变化时,输出电压Uo恒压输出,Uo稳态相对误差不超过2%,Uo可通过键盘设置为1020V间的任意电压,电压步进长度0.1V;2)要求用液晶屏显示输出电压和输出电流,电压显示精度到0.1V,电流显示精度到50mA;要求带4*4键盘,键盘定义如下:123del456自定义789自定义小数点0自定义ok3)输出负载电流I2围01A;4)试计算电源效率。<一>电路部分:设计原理:主电路boost-buck电路,驱动电路,控制电路(pic单片机控制)。原理概述:boo

2、st-buck电路利用开关管的开关,输出电压的平均值Uo=ton/(T-ton)×Ui=D/(1-D)*ui。D为占空比。用单片机输出PWM方波(经过驱动电路放大后)控制MOS管的开关,来调节输出电压。将输出电压送回PIC单片机模数转换模块,通过反馈调节PWM占空比调节电压,使输出稳定。利用差分运放电路,检测出输出电压与输出电流的关系。键盘输入设置电压。外接液晶屏显示输出电压和输出电流和输出电流。主电路:驱动电路:控制电路:液晶外围电路:键盘电路模块:用multisim仿真如下结果:设计小结:输出电流与输出电压的关系U=RI。在程序设计中,通过电压的输出在液晶屏上显示电流的输出。二程

3、序部分:输出pwm:#include<pic.h>unsigned int DRE;_CONFIG(0x2001);void PWM()PR2=39; /频率25KHz TRISC|=0x04; /RC2置为输入 CCP1CON=0X0c; /PWM输出 CCPR1L=0X01; /占空比25% T2CON=0X04; /开定时器TMR2,预分频1:1 TMR2IF=0; /清除TMR2中断标志位void main() while(1) PWM(); DRE=40; /高电平寄存器的值 CCPR1L=DRE/4; /装入高8位 CCP1CON<5>=(DRE/2)%2;

4、 /装入次低位 CCP1CON<4>=DRE%2; /装入最低位 while(TMR2IF=0); TRISC=0x00; AD转换:#include<pic.h>_CONFIG(FOSC_XT&WDTE_OFF&LVP_OFF);void AD() TRISA0=1; /RA1设置为模拟输入 ADCON1=0x00; /参考电压电源电压VDD AD转换周期Fosc/4 ADCON0=0x40; / void delayms(int xms) int i,j ; for(i=0;i<xms;i+) for(j=0;j<150;j+) ; vo

5、id main() unsigned int x,y,z,A,B,C; unsigned int Result,Result1,ADRES; while(1); delayms(5);/采样采样电压充电延时 GO=1; while(GO=1); Result=ADRES; x=(Result*5)/256; /取个位十分位百分位 y=(Result*50)/256)%10; z=(Result*500)/256)%10;Result1=Result/1.2-1.5; A=(Result*5)/256; /取个位十分位百分位 B=(Result*50)/256)%10; C= (Result*5

6、00)/256)%10;液晶屏与键盘:#include<pic.h>#define LCD_EN RC7#define LCD_RW RC6#define LCD_RS RC5unsigned int x,y,z,A,B,C;unsigned char dis0="voltage:"unsigned char dis1='0','1','2','3','4','5','6','7','8','9',

7、9;.'unsigned char dis2="current:"unsigned char dis3='0','1','2','3','4','5','6','7','8','9','.'unsigned char dis43, dis53; _CONFIG(FOSC_XT&WDTE_OFF&LVP_OFF);void delay (int xms) int i,j; for

8、(i=0;i<xms;i+) for(j=0;j<150;j+); void write_() unsigned char ; /声明写指令 LCD_RS=0; LCD_RW=0; LCD_EN=0; PORTD=; delay(5); LCD_EN=1; delay(5); LCD_EN=0;void write_date() unsigned char date; LCD_RS=1; LCD_RW=0; LCD_EN=0; PORTD=date; delay(5); LCD_EN=1; delay(5); LCD_EN=0; void init() TRISD=0x00; TR

9、ISC&=0x1f; write_(0x38); delay(5); write_(0x0c); delay(5); write_(0x06); delay(5); write_(0x01); delay(5); void display() unsigned char j; dis40=dis1x; dis41=dis110; dis42=dis1y; dis43=dis1z; write_(0xc8); for(j=0;j<=3;j+) write_date(dis5j); delay(1); unsigned char k; dis50=dis3A; dis51=dis31

10、0; dis52=dis3B; dis53=dis3C; write_(0xc8); for(k=0;k<=3;k+) write_date(dis4k); delay(1); void main() unsigned char i; init(); write_(0x80); /显示第1行 for(i=0;i<=8;i+) write_date(dis0i); delay(1); write_(0x80+0x40);/显示第2行 for(i=0;i<=8;i+) write_date(dis2i); delay(1); #include<pic.h>#inclu

11、de<pic.h>#define LCD_EN RC7#define LCD_RW RC6#define LCD_RS RC5unsigned int x,y,z,A,B,C;unsigned char dis0="voltage:"unsigned char dis1='0','1','2','3','4','5','6','7','8','9','.'unsigned char dis

12、2="current:"unsigned char dis3='0','1','2','3','4','5','6','7','8','9','.'unsigned char dis43, dis53; _CONFIG(FOSC_XT&WDTE_OFF&LVP_OFF);void delay (int xms) int i,j; for(i=0;i<xms;i+) for(j=0

13、;j<150;j+); void write_() unsigned char ; /声明写指令 LCD_RS=0; LCD_RW=0; LCD_EN=0; PORTD=; delay(5); LCD_EN=1; delay(5); LCD_EN=0;void write_date() unsigned char date; LCD_RS=1; LCD_RW=0; LCD_EN=0; PORTD=date; delay(5); LCD_EN=1; delay(5); LCD_EN=0; void init() TRISD=0x00; TRISC&=0x1f; write_(0x3

14、8); delay(5); write_(0x0c); delay(5); write_(0x06); delay(5); write_(0x01); delay(5); void display() unsigned char j; dis40=dis1x; dis41=dis110; dis42=dis1y; dis43=dis1z; write_(0xc8); for(j=0;j<=3;j+) write_date(dis5j); delay(1); unsigned char k; dis50=dis3A; dis51=dis310; dis52=dis3B; dis53=dis

15、3C; write_(0xc8); for(k=0;k<=3;k+) write_date(dis4k); delay(1); void main() unsigned char i; init(); write_(0x80); /显示第1行 for(i=0;i<=8;i+) write_date(dis0i); delay(1); write_(0x80+0x40);/显示第2行 for(i=0;i<=8;i+) write_date(dis2i); delay(1); #define KEYBOARD_PORT_DIR TRISB /键盘扫描方向端口#define KEY

16、BOARD_PORT PORTB /键盘扫描端口#define NO_KEY 0xFF /无按键_CONFIG(0x3FFF);unsigned char L,O;char scankeypad(); /获取4×4键盘值char getkeyvalue(); /获取某按键的值void delay(int xms)int i,j;for(i=0;i<xms;i+) for(j=0;j<150;j+);const char ccode162= 0xEE,1,0xED,2,0xEB,3,0xE7,'L', 0xDE,4,0xDD,5,0xDB,6, 0xD7,&

17、#39;+', 0xBE,7,0xBD,8, 0xBB,9, 0xB7,'-', 0x7E,'.',0x7D,0,0x7B,'*', 0x77,'O' ;char scankeypad() /获取4*4键盘扫描码char key4H=0,key4L=0,scancode=0;TRISD=0xF0; /低四位输出,高四位输入PORTD=0x00; /低四位输出0asm("nop");asm("nop"); /待输出信号稳定key4H=PORTD; /读取高四位key4H=key4H&a

18、mp;0xF0; /将低四位屏蔽if(key4H!=0xF0) /有按键按下delay(20);key4H=PORTD; /重读if(key4H!=0xF0)TRISD=0x0F;PORTD=0x00;asm("nop");asm("nop");key4L=PORTD; /读取高四位key4L=key4H&0x0F; /将高四位屏蔽if(key4L!=0x0F) /有按键按下scancode=key4H|key4L;/高四位与低四位组成键盘扫描码while(PORTD!=0x0F); /按键未松开等待return(scancode);return NO_KEY;char Getkeyvalue() /获取扫描码 char keyvalue=0,c=0; keyvalue=scankeypad(); if(keyvalue!=NO_KEY) while(keyvalue!=ccodec0) /比较描码与当前数组元素是否相等 c+; return(ccodec1);/返回序号对应值 return(NO_KEY);void main() int i

温馨提示

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

评论

0/150

提交评论