数字式开关电源的PID控制.docx
- 文档编号:18379066
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:30
- 大小:19.79KB
数字式开关电源的PID控制.docx
《数字式开关电源的PID控制.docx》由会员分享,可在线阅读,更多相关《数字式开关电源的PID控制.docx(30页珍藏版)》请在冰点文库上搜索。
数字式开关电源的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,0x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字式 开关电源 PID 控制