基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx

上传人:b****8 文档编号:22304016 上传时间:2023-02-03 格式:DOCX 页数:19 大小:154.65KB
下载 相关 举报
基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx_第1页
第1页 / 共19页
基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx_第2页
第2页 / 共19页
基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx_第3页
第3页 / 共19页
基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx_第4页
第4页 / 共19页
基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx

《基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

基于PIC16F877A控制boostbuckDCDC变换器Word格式文档下载.docx

D为占空比。

用单片机输出PWM方波(经过驱动电路放大后)控制MOS管的开关,来调节输出电压。

将输出电压送回PIC单片机模数转换模块,通过反馈调节PWM占空比调节电压,使输出稳定。

利用差分运放电路,检测出输出电压与输出电流的关系。

键盘输入设置电压。

外接液晶屏显示输出电压和输出电流和输出电流。

主电路:

驱动电路:

控制电路:

液晶外围电路:

键盘电路模块:

用multisim仿真如下结果:

设计小结:

输出电流与输出电压的关系U=RI。

在程序设计中,通过电压的输出在液晶屏上显示电流的输出。

〈二〉程序部分:

输出pwm:

#include<

pic.h>

unsignedintDRE;

__CONFIG(0x2001);

voidPWM()

{

PR2=39;

//频率25KHz

TRISC|=0x04;

//RC2置为输入

CCP1CON=0X0c;

//PWM输出

CCPR1L=0X01;

//占空比25%

T2CON=0X04;

//开定时器TMR2,预分频1:

TMR2IF=0;

//清除TMR2中断标志位

}

voidmain()

while

(1)

{

PWM();

DRE=40;

//高电平寄存器的值

CCPR1L=DRE/4;

//装入高8位

CCP1CON<

5>

=(DRE/2)%2;

//装入次低位

4>

=DRE%2;

//装入最低位

while(TMR2IF==0);

TRISC=0x00;

}

}

AD转换:

__CONFIG(FOSC_XT&

WDTE_OFF&

LVP_OFF);

voidAD()

TRISA0=1;

//RA1设置为模拟输入

ADCON1=0x00;

//参考电压电源电压VDDAD转换周期Fosc/4

ADCON0=0x40;

//

voiddelayms(intxms)

inti,j;

for(i=0;

i<

xms;

i++)

for(j=0;

j<

150;

j++);

}

voidmain()

unsignedintx,y,z,A,B,C;

unsignedintResult,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*500)/256)%10;

液晶屏与键盘:

#defineLCD_ENRC7

#defineLCD_RWRC6

#defineLCD_RSRC5

unsignedintx,y,z,A,B,C;

unsignedchardis0[]="

voltage:

"

;

unsignedchardis1[]={'

0'

'

1'

2'

3'

4'

5'

6'

7'

8'

9'

.'

};

unsignedchardis2[]="

current:

unsignedchardis3[]={'

unsignedchardis4[3],dis5[3];

__CONFIG(FOSC_XT&

voiddelay(intxms)

inti,j;

j++);

voidwrite_com()

{

unsignedcharcom;

//声明写指令

LCD_RS=0;

LCD_RW=0;

LCD_EN=0;

PORTD=com;

delay(5);

LCD_EN=1;

voidwrite_date()

unsignedchardate;

LCD_RS=1;

PORTD=date;

voidinit()

{TRISD=0x00;

TRISC&

=0x1f;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

voiddisplay()

unsignedcharj;

dis4[0]=dis1[x];

dis4[1]=dis1[10];

dis4[2]=dis1[y];

dis4[3]=dis1[z];

write_com(0xc8);

=3;

j++)

write_date(dis5[j]);

delay

(1);

unsignedchark;

dis5[0]=dis3[A];

dis5[1]=dis3[10];

dis5[2]=dis3[B];

dis5[3]=dis3[C];

for(k=0;

k<

k++)

write_date(dis4[k]);

unsignedchari;

init();

write_com(0x80);

//显示第1行

=8;

write_date(dis0[i]);

write_com(0x80+0x40);

//显示第2行

write_date(dis2[i]);

}#defineKEYBOARD_PORT_DIRTRISB//键盘扫描方向端口

#defineKEYBOARD_PORTPORTB//键盘扫描端口

#defineNO_KEY0xFF//无按键

__CONFIG(0x3FFF);

unsignedcharL,O;

charscankeypad();

//获取4×

4键盘值

chargetkeyvalue();

//获取某按键的值

voiddelay(intxms)

constcharccode[16][2]=

{0xEE,1},{0xED,2},{0xEB,3},{0xE7,'

L'

},

{0xDE,4},{0xDD,5},{0xDB,6},{0xD7,'

+'

{0xBE,7},{0xBD,8},{0xBB,9},{0xB7,'

-'

{0x7E,'

},{0x7D,0},{0x7B,'

*'

},{0x77,'

O'

};

charscankeypad()//获取4*4键盘扫描码

charkey4H=0,key4L=0,scancode=0;

TRISD=0xF0;

//低四位输出,高四位输入

PORTD=0x00;

//低四位输出0

asm("

nop"

);

//待输出信号稳定

key4H=PORTD;

//读取高四位

key4H=key4H&

0xF0;

//将低四位屏蔽

if(key4H!

=0xF0)//有按键按下

delay(20);

key4H=PORTD;

//重读

if(key4H!

=0xF0)

{

TRISD=0x0F;

PORTD=0x00;

asm("

key4L=PORTD;

key4L=key4H&

0x0F;

//将高四位屏蔽

if(key4L!

=0x0F)//有按键按下

{

scancode=key4H|key4L;

//高四位与低四位组成键盘扫描码

while(PORTD!

=0x0F);

//按键未松开等待

return(scancode);

}

}

returnNO_KEY;

charGetkeyvalue()//获取扫描码

{charkeyvalue=0,c=0;

keyvalue=scankeypad();

if(keyvalue!

=NO_KEY)

while(keyvalue!

=ccode[c][0])

{//比较描码与当前数组元素是否相等

c++;

return(ccode[c][1]);

//返回序号对应值

return(NO_KEY);

inti=0,Num[2]={0,0},Numindex=0;

while

(1)

i=Getkeyvalue();

//获得键值

if(i!

=NO_KEY)//有按键

if(i>

=0&

&

=9)

Num[2]=Numindex*10+i;

//新数值

else

switch(i)

case'

:

Num[0]=0;

Num[1]=0;

Numindex=0;

break;

default:

电源输出效率:

(注:

可编辑下载,若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1