资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
/*开关电源的数字化控制 */*所用拓扑为 Buck,单片机 msp430*/*PID 算法实现开关电源的恒流、恒压、恒功率功能*/*糖 coffeeuestc*/*Part 1*/#include #include LCD12864.h#include #include #include #include #include void main( 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);else if(Mode=1)/恒流模式DisplaySetI();Delay(100);ADC();Delay(100);else/恒功率模式DisplaySetP();Delay(100);ADC();Delay(100);/*Part 2 Headfile*/*Part 2.1LCD12864 Headfile*/#ifndef _LCD12864#define _LCD12864#define LCD_CSBIT0#define LCD_SID BIT2#define LCD_CLK BIT4#define LCD_ENP3DIR#define LCD_CTRLP3OUT#define LCD_CS_Set_highLCD_CTRL |= LCD_CS#define LCD_CS_Set_lowLCD_CTRL &= LCD_CS#define LCD_SID_Set_highLCD_CTRL |= LCD_SID#define LCD_SID_Set_lowLCD_CTRL &= LCD_SID#define LCD_CLK_Set_highLCD_CTRL |= LCD_CLK#define LCD_CLK_Set_lowLCD_CTRL &= LCD_CLK#define LCD_delay 1void Write_Data(unsigned char byte ,unsigned char reffer);void Send_Byte(unsigned char byte);void ClearLCD(void);void Put_Array(unsigned char *data , unsigned char length ,unsigned char address);/*延时*/void Delay(unsigned char time)/主时钟 1 微秒延时unsigned int i;i=0x08*time;for(; i; i-);/*/函数名称:Initial_LCD(void)/函数功能:启动初始化*/void Initial_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(unsigned char byte,unsigned char reffer)*函数功能:发送指令或数据reffer数据1指令0*输入变量: unsigned char byteunsigned char byte*/void Write_Data(unsigned char byte ,unsigned char reffer)unsigned char temp,stemp;temp = byte;LCD_CS_Set_high;LCD_CLK_Set_low;if(reffer=1)Send_Byte(0xFA);elseSend_Byte(0xF8);/发送第一个字节stemp = (temp & 0xF0);Send_Byte(stemp);stemp =temp 4;Send_Byte(stemp);LCD_CS_Set_low;/*函数名称:Send_Byte(unsigned char byte)*函数功能:发送一字节数据*输入变量:unsigned char byte*/void Send_Byte(unsigned char byte)unsigned chartemp,i;temp = byte;for(i=0;i8;i+)/send 8 timesif (temp&0x80)/send the highestLCD_SID_Set_high;elseLCD_SID_Set_low;temp = (temp1);LCD_CLK_Set_low;LCD_CLK_Set_high;Delay(LCD_delay);/*函数名称: Put_Array ( unsigned char data, unsigned char length,unsigned char address )*函数功能:在 LCD 上显示一个数组*输入变量: unsigned char dataunsigned char lengthunsigned char address*/void Put_Array(unsigned char *data , unsigned char length ,unsigned char address)if(address!=0)Write_Data(address,0);for (unsigned char i=0;ilength;i+)Write_Data(datai,1);/*函数名称:ClearLCD(void)*函数功能:清屏*/void ClearLCD(void)Write_Data(0x01,0);/*函数名称:Set_cursor*功能描述:设置光标的位置为 CurY 行,CurX 列*输入 :CurX=position(0:7)CurY=line(0:3)*/void Set_cursor(unsigned char CurY , unsigned charCurX)switch(CurY)case 0:Write_Data(0x80+CurX,0);break;/ 写入第一行 CurX 列的地址case 1:Write_Data(0x90+CurX,0);break;/ 写入第二行 CurX 列的地址case 2:Write_Data(0x88+CurX,0);break;/ 写入第三行 CurX 列的地址case 3:Write_Data(0x98+CurX,0);break;/ 写入第四行 CurX 列的地址default: break;/*函数名称:PutInt(unsigned int num)*函数功能:显示十进制数*/void PutInt(unsigned int num)unsigned int snum;unsigned char temp12=0, temp112 =0;unsigned char i = 0,n = 0 ;snum = num;if(snum =0 )temp0 = 0;i+ ;while(num!=0)tempi = num%10+0x30;num = num/10;i+ ;n = i;for(i=0;in; i+)temp1i= tempn-1-i;Put_Array(temp1,n,0);void PutDig(unsigned char num)unsigned char snum;snum = num + 0x30;Write_Data(snum,1);/* 函数名称:PutcLCD()* 功能描述:LCD 写 char* 输入:LCD_Char*/void PutcLCD( unsigned char LCD_Char )Write_Data(LCD_Char,1);/* 函数名称:PutsLCD()* 功能描述:LCD 写入 RAM 字符串* 输入:字符指针Str*/void PutsLCD(const char *Str)int Str_Temp;Str_Temp=*Str;/ Str_Temp 所赋的值是 Str 所指向的字符while(Str_Temp!=0x00)/ 字符串还没有结束Write_Data(Str_Temp,1);Str+;Str_Temp=*Str;/*函数名:ClrRam(void)函数功能:清整个 GDRAM 空间*/void ClrRam()unsigned char x,y ;for(y=0;y64;y+)for(x=0;x16;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*/void ShowAll(unsigned char *pPicture)unsigned char i,j,k;Write_Data(0x36,0);for(i=0;i2;i+)/分上下两屏写for(j=0;j32;j+)/行Write_Data(0x80+j,0); /写 X 坐标第几行上写if(i=0)/写 Y 坐标,判断哪一屏Write_Data(0x80,0);elseWrite_Data(0x88,0);for(k=0;k16;k+)/写一整行数据16 个字节,合八个字符Write_Data(*pPicture+,1);/Write_Data(0x36,0);#endif/*Part 2.2Table Headfile*/extern unsigned char img=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,0x00,0x00,0x00,0x00,0x7F,0xF0,0x0C,0x1C,0x1E,0x0C,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x0C,0x0E,0x3C,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x0C,0x07,0x78,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x18,0x03,0xF0,0x04,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x18,0x03,0xE0,0x04,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x08,0x0F,0xF8,0x04,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFE,0x0C,0x3F,0x3E,0x08,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFE,0x07,0xFC,0x07,0xF0,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x03,0xE0,0x00,0xA0,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x80,0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xC0,0x00,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xF8,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFC,0x00,0x00,0x3F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xDD,0xC6,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xD6,0xDC,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xB9,0xBD,0xBF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7B,0xCD,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF7,0xEE,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;/*Part 2.3GUI Headfile*/#ifndef _GUI#define _GUI/*开机界面*/void init_lcd()Initial_LCD();Set_cursor(0,4);PutsLCD(SwPower);Set_cursor(1,4);PutsLCD(糖 coffee);Set_cursor(2,4);PutsLCD(糖 coffee);Set_cursor(3,4);PutsLCD(糖 coffee);ShowAll(img);while(P1IN&0x1f)=0x1f);/*Initial_LCD();Set_cursor(0,0);PutsLCD(Set I:01.00 A);Set_cursor(1,0);PutsLCD(Out U:V);Set_cursor(2,0);PutsLCD(Out I:A);Set_cursor(3,0);PutsLCD(Out P:W);*/*恒流源界面*/void GUI_CC()Initial_LCD();Set_cursor(0,0);PutsLCD(Set I:01.00 A);Set_cursor(1,0);PutsLCD(Out U:V);Set_cursor(2,0);PutsLCD(Out I:A);Set_cursor(3,0);PutsLCD(Out P:W);/*恒压源界面*/void GUI_CU()Initial_LCD();Set_cursor(0,0);PutsLCD(Set U:01.00 V);Set_cursor(1,0);PutsLCD(Out U:V);Set_cursor(2,0);PutsLCD(Out I:A);Set_cursor(3,0);PutsLCD(Out P:W);/*恒功率界面*/void GUI_CP()Initial_LCD();Set_cursor(0,0);PutsLCD(Set P:01.00 W);Set_cursor(1,0);PutsLCD(Out U:V);Set_cursor(2,0);PutsLCD(Out I:A);Set_cursor(3,0);PutsLCD(Out P:W);#endif/*Part 2.4deal Headfile*/#ifndef _deal#define _dealunsigned int Us = 10;/设置时扩大 10 倍,默认unsigned int Is = 10;/设置时扩大 10 倍,默认unsigned int Ps = 10;/设置时扩大 10 倍,默认float Kru = 0.25;/分压系数 5/20float Kri = 1.3;/放大系数约 0.05*25unsigned int Uo6;unsigned int Io6;long unsigned int Umem;unsigned int Uout;long unsigned int Imem;unsigned int Iout;unsigned int Pout;signed int iError,lastError,iIncpid;float Kp = 0.05;float Ki = 0.01;unsigned int PWM = 50;unsigned char Mode = 0;/*求数组的平均数*/unsigned int mean(unsigned int a)unsigned int dat = 0;unsigned int max = a0;unsigned int min = a0;for(unsigned int j = 0; j 6; j+)if(max aj) min = aj;for (unsigned int i = 0; i 2;return dat;/*显示输出电压*/void displayU()unsigned char iU,fU;iU = Uout/100;fU = Uout%100;Set_cursor(1,3);PutcLCD(0);PutDig(iU/10);PutcLCD(.);PutDig(iU%10);PutDig(fU/10);/PutDig(fU%10);/*显示输出电流*/void displayI()unsigned char iI,fI;iI = Iout/100;fI = Iout%100;Set_cursor(2,3);PutcLCD(0);PutDig(iI/10);PutcLCD(.);PutDig(iI%10);PutDig(fI/10);/PutDig(fI%10);/*显示输出功率*/void displayP()unsigned char iP,fP;iP = Pout/100;fP = Pout%100;Set_cursor(3,3);PutDig(iP/10);PutDig(iP%10);PutcLCD(.);PutDig(fP/10);PutDig(fP%10);/*处理电压 PWM*/void deal_U()if(UoutUs*100+25)|(Uout+25100*Us)/精度 25mViError = Us*100- Uout;/当前误差iIncpid = (signed int)(Kp*iError + Ki*lastError);PWM = PWM + iIncpid;if(PWM380)PWM = 380;TBCCR2 = PWM;/*处理电流 PWM*/void deal_I()if(IoutIs*100+5)|(IoutIs*100+15)/精度iError = Is*100- Iout;iIncpid = (signed int)(Kp*iError + Ki*lastError);PWM = PWM + iIncpid;if(PWM380)PWM = 380;TBCCR2 = PWM;/*处理功率 PWM*/void deal_P()if(PoutPs*10+3)|(10*PsPout+2)/输出功率大于设定功率iError = Ps*10- Pout;iIncpid = (signed int)(Kp*iError + Ki*lastError);PWM = PWM + iIncpid;if(PWM380)PWM = 380;TBCCR2 = PWM;/*计算输出电压电流功率*/void ADC()static unsigned int index = 0;Uoindex = ADC12MEM0;Ioindex = ADC12MEM1;index+;if(index = 6)Umem = mean(Uo);Imem = mean(Io);Uout = (unsigned int)(2500*4.1*Umem/4096);/放大 1000 倍显示Iout = (unsigned int)(2500*Imem/(4096*1.3);/放大 1000 倍显示Pout = (unsigned int)(Uout/100.0)*(Iout/100.0);/放大 100 倍显示displayU();displayI();displayP();if(Mode=0)deal_U();else if(Mode=1)deal_I();elsedeal_P();index = 0;#endif/*Part 2.5独立键盘 Headfile*/#ifndef _IndependentKey#define _IndependentKey#define KeyDIRP1DIR#define KeyIN (P1IN&0x1f)#define IncBIT0#define DecBIT1#define MODBIT2#define ADDBIT3#define PLUBIT4/*显示设置电压*/void DisplaySetU()unsigned char iUs,fUs;iUs = Us/10; fUs = Us%10;Set_cursor(0,3);PutDig(iUs/10);PutDig(iUs%10);PutcLCD(.);PutDig(fUs);/*显示设置电流*/void DisplaySetI()unsigned char iIs,fIs;iIs = Is/10; fIs = Is%10;Set_cursor(0,3);PutcLCD(0);PutDig(iIs);PutcLCD(.);PutDig(fIs);/*显示设置功率*/void DisplaySetP()unsigned char iPs,fPs;iPs = Ps/10; fPs = Ps%10;Set_cursor(0,3);PutDig(iPs/10);PutDig(iPs%10);PutcLCD(.);PutDig(fPs);/*键盘初始化*/void initKey()KeyDIR &= (Inc + Dec + MOD + ADD + PLU);/*键盘检测*/void KeyScan()if(KeyIN != 0x1f)Delay(100);if(KeyIN != 0x1f)unsigned char KeyTemp = KeyIN;while(KeyIN != 0x1f); /等待按键松开switch(KeyTemp)case 0x1e:if(Mode=0)Us+=1;else if(Mode=1) Is+=1;else Ps+=5;break;/+case 0x1d:if(Mode=0)Us-=1;else if(Mode=1) Is-=1;else Ps-=5;break;/-case 0x1b:Mode+;if(Mode2)Mode=0;if(Mode=0) Us = 10;GUI_CU();else if(Mode=1) Is = 10;GUI_CC();else Ps = 10; GUI_CP();break;/modcase 0x17:if(Mode=0)Us+=5;else if(Mode=1) Is+=2;else Ps+=10;break;/+case 0x0f:if(Mode=0)Us-=5;else if(Mode=1) Is-=2;else Ps-=10;break;/-#endif/*Part 2.6init Headfile*/#ifndef _init#define _init/*初始化时钟*/void init_clk()FLL_CTL0 |= XCAP18PF;/ Set load capacitanceFLL_CTL1 &= XT2OFF;/ Turn on XT2doIFG1 &= OFIFG;/ Clear oscillator fault flagfor (unsigned int i = 1000; i; i-);while (IFG1 & OFIFG);/ Test osc fault flagFLL_CTL1 = SELS;/ Select SMCLK source as XT2CLK/*初始化 AD,计算输出*/void init_ADC12()P6SEL = 0x03;/ Enable A/D channel inputsADC12CTL0 = ADC12ON + MSC + SHT0_8 + REFON + REF2_5V;/Turn on ADC12,set samplingtimeADC12CTL1 = SHP + ADC12SSEL_1 + CONSEQ_1;/ Use sampling timer 序列单次ADC12MCTL0 = INCH_0 + SREF_1;ADC12MCTL1 = INCH_1 + SREF_1 + EOS;ADC12CTL0 |= ENC;/*初始化 TA,采样周期*/void init_TA()TACTL = TASSEL_2 + TACLR;/ sMCLK, clear TARCCTL0 = CCIE;/ CCR0 interrupt enabledCCR0 = 800;TACTL |= MC_1;/ Start Timer_A in UP mode/*初始化 TB,驱动信号*/void init_TB()TBCTL |= TBSSEL_2+ TBCLR + MC_1 + ID_0;/ SCLK, Clear TarTBCCR0 = 400;/ PWM = 20KTBCCTL2 = OUTMOD_7;TBCCR2 = 200;/ CCR2 PWM duty cycleP2DIR |= BIT3;/ P2.3 outputP2SEL |= BIT3;/ P2.3 TA1 otion#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A (void)ADC12CTL0 |= ADC12SC;#endif
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号