数字式开关电源的PID控制.docx

上传人:b****6 文档编号:7789822 上传时间:2023-01-26 格式:DOCX 页数:25 大小:20.02KB
下载 相关 举报
数字式开关电源的PID控制.docx_第1页
第1页 / 共25页
数字式开关电源的PID控制.docx_第2页
第2页 / 共25页
数字式开关电源的PID控制.docx_第3页
第3页 / 共25页
数字式开关电源的PID控制.docx_第4页
第4页 / 共25页
数字式开关电源的PID控制.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

数字式开关电源的PID控制.docx

《数字式开关电源的PID控制.docx》由会员分享,可在线阅读,更多相关《数字式开关电源的PID控制.docx(25页珍藏版)》请在冰豆网上搜索。

数字式开关电源的PID控制.docx

数字式开关电源的PID控制

/********开关电源的数字化控制******/

/********所用拓扑为Buck,单片机msp430**********/

/*****PID算法实现开关电源的恒流、恒压、恒功率功能******/

/*********糖coffee@uestc************/

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

Part1Main.C

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

#include

#include"LCD12864.h"

#include"table.h"

#include"GUI.h"

#include"deal.h"

#include"IndependentKey.h"

#include"init.h"

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

init_clk();

init_lcd();

GUI_CU();

init_ADC12();

init_TA();

init_TB();

initKey();

_EINT();

while

(1)

{

KeyScan();

if(Mode==0)//恒压模式

{

DisplaySetU();

Delay(100);

ADC();

Delay(100);

}

elseif(Mode==1)//恒流模式

{

DisplaySetI();

Delay(100);

ADC();

Delay(100);

}

else//恒功率模式

{

DisplaySetP();

Delay(100);

ADC();

Delay(100);

}

}

}

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

Part2Headfile

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

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

Part2.1LCD12864Headfile

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

#ifndef__LCD12864

#define__LCD12864

#defineLCD_CSBIT0

#defineLCD_SIDBIT2

#defineLCD_CLKBIT4

#defineLCD_ENP3DIR

#defineLCD_CTRLP3OUT

#defineLCD_CS_Set_highLCD_CTRL|=LCD_CS

#defineLCD_CS_Set_lowLCD_CTRL&=~LCD_CS

#defineLCD_SID_Set_highLCD_CTRL|=LCD_SID

#defineLCD_SID_Set_lowLCD_CTRL&=~LCD_SID

#defineLCD_CLK_Set_highLCD_CTRL|=LCD_CLK

#defineLCD_CLK_Set_lowLCD_CTRL&=~LCD_CLK

#defineLCD_delay1

voidWrite_Data(unsignedcharbyte,unsignedcharreffer);

voidSend_Byte(unsignedcharbyte);

voidClearLCD(void);

voidPut_Array(unsignedchar*data,unsignedcharlength,unsignedcharaddress);

/*************延时**********************/

voidDelay(unsignedchartime)//主时钟1微秒延时

{

unsignedinti;

i=0x08*time;

for(;i;i--);

}

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

//函数名称:

Initial_LCD(void)

//函数功能:

启动初始化

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

voidInitial_LCD(void)

{

LCD_EN|=LCD_CS+LCD_SID+LCD_CLK;

Write_Data(0x30,0);//基本指令集

Delay(LCD_delay);

Write_Data(0x30,0);

Write_Data(0x0C,0);

Delay(LCD_delay);

Write_Data(0x01,0);//清屏

Delay(LCD_delay);

Write_Data(0x06,0);

Delay(LCD_delay);

}

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

*函数名称:

Write_Data(unsignedcharbyte,unsignedcharreffer)

*函数功能:

发送指令或数据

reffer数据1

指令0

*输入变量:

unsignedcharbyte

unsignedcharbyte

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

voidWrite_Data(unsignedcharbyte,unsignedcharreffer)

{

unsignedchartemp,stemp;

temp=byte;

LCD_CS_Set_high;

LCD_CLK_Set_low;

if(reffer==1)

Send_Byte(0xFA);

else

Send_Byte(0xF8);//发送第一个字节

stemp=(temp&0xF0);

Send_Byte(stemp);

stemp=temp<<4;

Send_Byte(stemp);

LCD_CS_Set_low;

}

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

*函数名称:

Send_Byte(unsignedcharbyte)

*函数功能:

发送一字节数据

*输入变量:

unsignedcharbyte

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

voidSend_Byte(unsignedcharbyte)

{

unsignedchartemp,i;

temp=byte;

for(i=0;i<8;i++)//send8times

{

if(temp&0x80)//sendthehighest

LCD_SID_Set_high;

else

LCD_SID_Set_low;

temp=(temp<<1);

LCD_CLK_Set_low;

LCD_CLK_Set_high;

Delay(LCD_delay);

}

}

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

*函数名称:

Put_Array(unsignedchardata,unsignedcharlength,unsignedcharaddress)

*函数功能:

在LCD上显示一个数组

*输入变量:

unsignedchardata

unsignedcharlength

unsignedcharaddress

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

voidPut_Array(unsignedchar*data,unsignedcharlength,unsignedcharaddress)

{

if(address!

=0)

{

Write_Data(address,0);

}

for(unsignedchari=0;i

{

Write_Data(data[i],1);

}

}

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

*函数名称:

ClearLCD(void)

*函数功能:

清屏

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

voidClearLCD(void)

{

Write_Data(0x01,0);

}

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

*函数名称:

Set_cursor

*功能描述:

设置光标的位置为CurY行,CurX列

*输 入:

CurX=position(0:

7)CurY=line(0:

3)

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

voidSet_cursor(unsignedcharCurY,unsignedcharCurX)

{

switch(CurY)

{

case0:

Write_Data(0x80+CurX,0);

break;//写入第一行CurX列的地址

case1:

Write_Data(0x90+CurX,0);

break;//写入第二行CurX列的地址

case2:

Write_Data(0x88+CurX,0);

break;//写入第三行CurX列的地址

case3:

Write_Data(0x98+CurX,0);

break;//写入第四行CurX列的地址

default:

break;

}

}

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

*函数名称:

PutInt(unsignedintnum)

*函数功能:

显示十进制数

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

voidPutInt(unsignedintnum)

{

unsignedintsnum;

unsignedchartemp[12]={0},temp1[12]={0};

unsignedchari=0,n=0;

snum=num;

if(snum==0)

{

temp[0]='0';

i++;

}

while(num!

=0)

{

temp[i]=num%10+0x30;

num=num/10;

i++;

}

n=i;

for(i=0;i

temp1[i]=temp[n-1-i];

Put_Array(temp1,n,0);

}

voidPutDig(unsignedcharnum)

{

unsignedcharsnum;

snum=num+0x30;

Write_Data(snum,1);;

}

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

**函数名称:

PutcLCD()

**功能描述:

LCD写char

**输 入:

LCD_Char

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

voidPutcLCD(unsignedcharLCD_Char)

{

Write_Data(LCD_Char,1);

}

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

**函数名称:

PutsLCD()

**功能描述:

LCD写入RAM字符串

**输 入:

字符指针 Str

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

voidPutsLCD(constchar*Str)

{

intStr_Temp;

Str_Temp=*Str;//Str_Temp所赋的值是Str所指向的字符

while(Str_Temp!

=0x00)//字符串还没有结束

{

Write_Data(Str_Temp,1);

Str++;

Str_Temp=*Str;

}

}

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

函数名:

ClrRam(void)

函数功能:

清整个GDRAM空间

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

voidClrRam()

{

unsignedcharx,y;

for(y=0;y<64;y++)

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

{

Write_Data(0x34,0);

Write_Data(y+0x80,0);

//行地址

Write_Data(x+0x80,0);

//列地址

Write_Data(0x30,0);

Write_Data(0x00,1);

Write_Data(0x00,1);

}

}

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

函数名:

ShowAll

函数说明:

显示一幅128*64的图画

传入参数:

图形指针*img

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

voidShowAll(unsignedchar*pPicture)

{

unsignedchari,j,k;

Write_Data(0x36,0);

for(i=0;i<2;i++)//分上下两屏写

{

for(j=0;j<32;j++)//行

{

Write_Data(0x80+j,0);//写X坐标(第几行上写)

if(i==0)//写Y坐标,判断哪一屏

Write_Data(0x80,0);

else

Write_Data(0x88,0);

for(k=0;k<16;k++)//写一整行数据(16个字节,合八个字符)

Write_Data(*pPicture++,1);

}

}

//Write_Data(0x36,0);

}

#endif

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

Part2.2TableHeadfile

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

externunsignedcharimg[]={

0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x07,0xFE,0x7F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x0F,0xFF,0x7F,0xFE,0xDF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x1F,0xFF,0x7F,0xFF,0xBF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x3F,0xFB,0xFF,0xF9,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x7F,0xFB,0xFF,0xFF,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x01,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x03,0xFF,0xFE,0x00,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x03,0xFF,0xF8,0x00,0x00,0x1F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x07,0xFF,0xF0,0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x0F,0x7F,0xC0,0x00,0x00,0x03,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x0F,0xF7,0x80,0x00,0x00,0x01,0xF5,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x1F,0xFB,0x00,0x00,0x00,0x00,0xE3,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x1F,0xFF,0x03,0xF8,0x07,0xF8,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x3F,0xFE,0x0F,0xFE,0x1F,0xFC,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x3F,0xFC,0x1C,0x0F,0x7C,0x0C,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x3F,0xFC,0x1C,0x03,0xF0,0x06,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x7F,0xF8,0x08,0x01,0xE0,0x0E,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x7F,0xF8,0x08,0x07,0xF0,0x0E,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x7F,0xF0,0x08,0x0F,0x38,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x7F,0xF0,0x0C,0x1E,0x1E,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xFF,0xF0,0x04,0x7C,0x0E,0x1C,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xFF,0xF0,0x05,0xF8,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xFF,0xE3,0xBF,0x9C,0xFF,0xEF,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xFF,0xE3,0xBB,0x6D,0xFF,0xFF,0x87,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xEF,0xE3,0xBE,0x6F,0xF3,0xBB,0x87,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xF0,0xE3,0xBE,0xFF,0xFB,0xB8,0x07,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xFE,0xE3,0xFB,0xFC,0x7B,0x9F,0x87,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xFF,0xE1,0xF3,0x1D,0xF3,0x9F,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xFF,0xE0,0x07,0xF8,0x07,0x0C,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0xFF,0xF0,0x06,0xF8,0x0F,0x18,0x0F,0xFF,0x00,0x00,0x00,0x00,0x0

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

当前位置:首页 > 求职职场 > 简历

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

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