電子設(shè)計(jì)競(jìng)賽(三)-SPWM與PID
1 SPWM波調(diào)制技術(shù)
??逆變電路的控制方式主要是采用SPWM(正弦脈寬調(diào)制技術(shù)),IR2104控制開(kāi)關(guān)管的通斷來(lái)實(shí)現(xiàn)正弦調(diào)制,SPWM的基本思路是將一個(gè)正弦波按等寬間距分成N等份,對(duì)于每一個(gè)波形以一個(gè)等面積的脈沖來(lái)對(duì)應(yīng),使脈沖的中點(diǎn)與相應(yīng)正弦波部分的中點(diǎn)重合,如下圖所示,由于此脈沖序列的面積分布滿足正弦規(guī)率,根據(jù)面積等效原理,將這個(gè)脈沖序列輸出至負(fù)載時(shí),將使負(fù)載得到相當(dāng)接近正弦的輸出電壓和電流。
??由于采用該方式輸出的電壓波形很接近正弦波,所以電壓中的諧波成分較少,同時(shí)也可以提高功率因數(shù)。通過(guò)改變SPWM脈沖的寬度可以改變輸出電壓的幅值,調(diào)節(jié)電路的調(diào)制周期則可以改變輸出電壓的頻率,方便對(duì)負(fù)載進(jìn)行控制。
1.1 單極性正弦脈寬調(diào)制
??單極性正弦脈寬調(diào)制是以一個(gè)寬度正弦規(guī)律變化的正弦脈沖序列對(duì)應(yīng)交流輸出波形的正半周,再以一個(gè)寬度按正弦規(guī)率變換的負(fù)脈沖序列對(duì)應(yīng)交流輸出波形的負(fù)半周,這兩個(gè)脈沖序列交替作用,控制開(kāi)關(guān)器件產(chǎn)生近似于正弦波的輸出電壓波形。
??正弦脈寬調(diào)制的基本方法是將正弦波性的調(diào)制波與三角波形的載波進(jìn)行比較,通過(guò)比較正弦波形各點(diǎn)的瞬時(shí)值確定該點(diǎn)對(duì)應(yīng)的脈沖寬度。單極性正弦脈寬調(diào)制使用的三角波是單極性的,在正弦調(diào)制波為正半周時(shí)三角載波是正極性的;在正弦波為負(fù)半周時(shí)三角波載波為負(fù)極性。如下圖所示。
1.2 雙極性正弦脈寬調(diào)制
??雙極性正弦脈寬調(diào)制是以一個(gè)寬度按正弦規(guī)率變化的正負(fù)雙向脈沖序列對(duì)應(yīng)交流輸出波形的整個(gè)周期,通過(guò)正向脈沖與負(fù)向脈沖寬度的差產(chǎn)生出按正弦規(guī)率變換的正半周波和負(fù)半周波。
??雙極性正弦脈寬調(diào)制使用的三角波是雙極性的,其波形的形式如下圖,通過(guò)正弦調(diào)制波與三角波比較,當(dāng)正弦調(diào)制波值大于三角波時(shí),輸出正脈沖;而當(dāng)正弦調(diào)制波的值小于三角載波時(shí),輸出負(fù)脈沖。如此得到的脈沖序列是正負(fù)交替的雙向脈沖序列。
1.3 三相正弦脈寬調(diào)制
??三相正弦脈寬調(diào)制可以使用三個(gè)相角彼此相差120°的單相調(diào)制電路來(lái)合成,但是這樣會(huì)使調(diào)制電路結(jié)構(gòu)比較復(fù)雜。較簡(jiǎn)單的方法是采用一個(gè)雙極性的三角載波對(duì)三相正弦調(diào)制波進(jìn)行調(diào)制,其調(diào)制的波形如下圖。
??調(diào)制過(guò)程中,雙極性三角載波為三個(gè)正弦調(diào)制波共用,分別進(jìn)行比較后獲取脈寬調(diào)制信號(hào),方式與雙極性正弦脈寬調(diào)制方法相同。從而得到三個(gè)雙向的脈沖序列,分別對(duì)應(yīng)A、B、C三相,使用此三個(gè)脈沖序列控制逆變電路的A、B、C三相開(kāi)關(guān)元件,可以將直流電壓逆變?yōu)檎也ǖ娜嘟涣鬏敵鲭妷骸?br>
?? 三相脈寬調(diào)制波的三角載波只能是雙極性的,因?yàn)閱螛O性三角載波需要根據(jù)正弦調(diào)制波的正、負(fù)半周更換載波的極性。采用雙極性正弦脈寬調(diào)制,H橋上同一相的上、下兩個(gè)橋臂導(dǎo)通與截止都是互補(bǔ)的,為防止上下兩個(gè)橋臂直通而造成的短路,需要在給一個(gè)橋臂施加關(guān)斷信號(hào)后延遲一段時(shí)間,從而在波形中引入了死區(qū)時(shí)間,死區(qū)將會(huì)給輸出的SPWM波形帶來(lái)高次諧波。
1.4 SPWM控制信號(hào)的生成
??早期的SPWM采用模擬控制方式來(lái)實(shí)現(xiàn),通過(guò)信號(hào)發(fā)生器產(chǎn)生所需的信號(hào),由比較器進(jìn)行信號(hào)之間的比較,隨著數(shù)字技術(shù)和微處理器在SPWM逆變技術(shù)中的應(yīng)用,采用一定算法產(chǎn)生SPWM的數(shù)字控制方式越來(lái)越廣泛。
1.4.1 模擬控制方式
??波形比較法,其基本的方法是由正弦信號(hào)發(fā)生器件產(chǎn)生正弦調(diào)制波,由三角波信號(hào)發(fā)發(fā)生器產(chǎn)生的三角載波,將正弦調(diào)制波與三角載波比較,通過(guò)比較器的判斷而產(chǎn)生出對(duì)應(yīng)的脈沖信號(hào)序列,對(duì)逆變電路進(jìn)行控制從而得到所需的交流電壓。
1.4.2 數(shù)字控制方式
(1)等效面積法
??其原理就是按面積等效原理構(gòu)成與正弦波等效的一系列等幅但寬度按正弦規(guī)律變化的矩形脈沖。等效面積法適用于單極性控制,算法中計(jì)算的是正弦波形到橫軸間的面積,這與模擬控制方式中的單極性正弦脈沖調(diào)制的方式一致。
(2)自然采樣法與規(guī)則采樣法
??自然采樣法在算法上仿真模擬控制方式的雙極性正弦脈沖調(diào)制,通過(guò)計(jì)算正弦調(diào)制波與三角載波的交點(diǎn)位置,確定調(diào)制的脈沖寬度。而規(guī)則采樣法是對(duì)自然采樣法的簡(jiǎn)化,其幾何關(guān)系如下圖。
??規(guī)則采樣法適用于雙極性控制,因?yàn)樗惴ㄖ胁捎玫娜禽d波是雙極性。等效面積法和規(guī)則采樣法都是數(shù)字控制的算法,可以由微處理器實(shí)時(shí)計(jì)算SPWM脈沖的寬度和位置,實(shí)現(xiàn)對(duì)逆變電路的控制,也可以事先計(jì)算好每個(gè)脈沖中心位置和脈沖寬度存入微處理器中,以查表的方式實(shí)現(xiàn)對(duì)逆變電路的控制。
??此外除了使用微處理器生成SPWM以外, 目前還有專門產(chǎn)生SPWM波形的大規(guī)模集成芯片,有些微處理器也繼承有SPWM波形發(fā)生器,如STM32微處理器,其內(nèi)部有三相互補(bǔ)SPWM波形發(fā)生器,可以直接輸出6路SPWM波形信號(hào)。
1.5.SPWM軟件生成
利用單片機(jī)輸出PWM波,然后讓占空比正弦規(guī)律變化。
實(shí)現(xiàn)步驟可以簡(jiǎn)單分為三步,以stm32為例:
(1)生成載波。比如要生成一個(gè)10KHZ的三角波,將計(jì)數(shù)器設(shè)置加減計(jì)數(shù)、周期設(shè)為1/10K就ok啦。這樣生成的三角波的幅值是多少呀,3.3V?其實(shí)在單片機(jī)里面都是數(shù)字信號(hào),三角波最高點(diǎn)的時(shí)候可以用一個(gè)計(jì)數(shù)值來(lái)表示,比如8400,最低點(diǎn)是0。不用管他的電壓是多少。
(2)生成正弦波。這一步用軟件生成一個(gè)正弦表即可。比如將正弦波取200個(gè)點(diǎn),即將一個(gè)正弦分割成200份,每個(gè)點(diǎn)代表一個(gè)幅值。用離散的數(shù)字量表達(dá)正弦模擬量。
(3)將正弦波和三角波進(jìn)行比較。
a.什么時(shí)候進(jìn)行比較。設(shè)置計(jì)數(shù)值達(dá)到比較值產(chǎn)生動(dòng)作。
b.比較完之后,需要改變比較值,用于下一個(gè)周期進(jìn)行比較(比較值可以理解為占空比),比較值查正弦表獲得,這樣就生成了占空比正弦規(guī)律變化的SPWM。
C.調(diào)制度m。m=正弦表最大值/三角波最大計(jì)數(shù)值。如正弦表最大值4200,三角波最大計(jì)數(shù)值8400,m=4200/8400=0.5,此時(shí)spwm最大占空比為50%,設(shè)置m=1,spwm最大占空比為100%。
例如我們要生成一個(gè)開(kāi)環(huán)的三相spwm。單相逆變需生成兩組相差180度的spwm,三相即生成三組兩兩相差120度的spwm,且每組的spwm都是互補(bǔ)的。將生成的三組spwm分別加到1、2、3組橋臂,每組spwm互補(bǔ)防止了同一橋臂上下管同時(shí)導(dǎo)通會(huì)引起短路。
int const talab[250]=
{
100 , 102 , 108 , 116 , 126 , 140 , 154 , 172 , 194 , 216 ,
242 , 270 , 300 , 334 , 370 , 408 , 448 , 490 , 536 , 582 ,
632 , 684 , 738 , 794 , 854 , 914 , 976 ,1040 ,1108 ,1176 ,
1246 ,1320 ,1394 ,1470 ,1548 ,1626 ,1708 ,1790 ,1874 ,1960 ,
2046 ,2136 ,2224 ,2316 ,2408 ,2502 ,2596 ,2690 ,2786 ,2884 ,
2982 ,3080 ,3180 ,3280 ,3382 ,3482 ,3584 ,3686 ,3788 ,3892 ,
3994 ,4096 ,4200 ,4304 ,4406 ,4508 ,4612 ,4714 ,4816 ,4918 ,
5018 ,5120 ,5220 ,5320 ,5418 ,5516 ,5614 ,5710 ,5804 ,5898 ,
5992 ,6084 ,6176 ,6264 ,6354 ,6440 ,6526 ,6610 ,6692 ,6774 ,
6852 ,6930 ,7006 ,7080 ,7154 ,7224 ,7292 ,7360 ,7424 ,7486 ,
7546 ,7606 ,7662 ,7716 ,7768 ,7818 ,7864 ,7910 ,7952 ,7992 ,
8030 ,8066 ,8100 ,8130 ,8158 ,8184 ,8206 ,8228 ,8246 ,8260 ,
8274 ,8284 ,8292 ,8298 ,8300 ,8300 ,8298 ,8292 ,8284 ,8274 ,
8260 ,8246 ,8228 ,8206 ,8184 ,8158 ,8130 ,8100 ,8066 ,8030 ,
7992 ,7952 ,7910 ,7864 ,7818 ,7768 ,7716 ,7662 ,7606 ,7546 ,
7486 ,7424 ,7360 ,7292 ,7224 ,7154 ,7080 ,7006 ,6930 ,6852 ,
6774 ,6692 ,6610 ,6526 ,6440 ,6354 ,6264 ,6176 ,6084 ,5992 ,
5898 ,5804 ,5710 ,5614 ,5516 ,5418 ,5320 ,5220 ,5120 ,5018 ,
4918 ,4816 ,4714 ,4612 ,4508 ,4406 ,4304 ,4200 ,4096 ,3994 ,
3892 ,3788 ,3686 ,3584 ,3482 ,3382 ,3280 ,3180 ,3080 ,2982 ,
2884 ,2786 ,2690 ,2596 ,2502 ,2408 ,2316 ,2224 ,2136 ,2046 ,
1960 ,1874 ,1790 ,1708 ,1626 ,1548 ,1470 ,1394 ,1320 ,1246 ,
1176 ,1108 ,1040 , 976 , 914 , 854 , 794 , 738 , 684 , 632 ,
582 , 536 , 490 , 448 , 408 , 370 , 334 , 300 , 270 , 242 ,
216 , 194 , 172 , 154 , 140 , 126 , 116 , 108 , 102 , 100
};
uint16_t Counter_sine1 = 0; //A相
uint16_t Counter_sine2 = 83; //滯后A相120度
uint16_t Counter_sine3 = 166;//超前A相120度
/*TIM1GPIO初始化CH1--A8 CH2--A9 CH3--A10
CH1N-B13 CH2N-B14 CH3N-B15
*/
void TIM1_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13| GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
#define CKTIM ((u32)72000000uL) //主頻
#define PWM_PRSC ((u8)0) //TIM1分頻系數(shù)
#define PWM_FREQ ((u16) 10000) //PWM頻率(Hz)
#define PWM_PERIOD ((u16) (CKTIM / (u32)(2 * PWM_FREQ *(PWM_PRSC+1))))
#define MODULAT (float)0.7 //調(diào)制度
void TIM1_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM1_BDTRInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseStructure.TIM_Period = PWM_PERIOD; //計(jì)數(shù)周期
TIM_TimeBaseStructure.TIM_Prescaler = PWM_PRSC;//分頻系數(shù)
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置為PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能CHx的PWM輸出
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;//互補(bǔ)輸出使能,使能CHxN的PWM輸出
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);//配置CH1
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OC2Init(TIM1, &TIM_OCInitStructure); //配置CH2
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OC3Init(TIM1, &TIM_OCInitStructure);//配置CH3
//死區(qū)時(shí)間
TIM1_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
TIM1_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
TIM1_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
TIM1_BDTRInitStructure.TIM_DeadTime = 360; //設(shè)置死區(qū)時(shí)間
TIM1_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
TIM1_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
TIM1_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
TIM_BDTRConfig(TIM1, &TIM1_BDTRInitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //4個(gè)搶先級(jí)、4個(gè)子優(yōu)先級(jí)
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM1,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3,ENABLE); //使能中斷
TIM_CtrlPWMOutputs(TIM1, ENABLE); //PWM輸出使能
TIM_Cmd(TIM1, ENABLE); //使能TIM1
}
void TIM1_PWM_Init(void)
{
TIM1_GPIO_Config();
TIM1_Mode_Config();
}
//定時(shí)器1中斷服務(wù)函數(shù)
void TIM1_CC_IRQHandler(void)
{
if(Counter_sine1>=250) { Counter_sine1 = 0; }
if(Counter_sine2>=250) { Counter_sine2 = 0; }
if(Counter_sine3>=250) { Counter_sine3 = 0; }
if (TIM_GetITStatus(TIM1, TIM_IT_CC1)!=RESET)
{
TIM_SetCompare1(TIM1,(uint32_t)(talab[Counter_sine1])*MODULAT); //A相
Counter_sine1++;
TIM_ClearITPendingBit(TIM1 , TIM_IT_CC1);
}
if (TIM_GetITStatus(TIM1, TIM_IT_CC2) !=RESET)
{
TIM_SetCompare2(TIM1,((uint32_t)talab[Counter_sine2])*MODULAT); //B相
Counter_sine2++;
TIM_ClearITPendingBit(TIM1 , TIM_IT_CC2);
}
if (TIM_GetITStatus(TIM1, TIM_IT_CC3) !=RESET)
{
TIM_SetCompare3(TIM1,(uint32_t)(talab[Counter_sine3])*MODULAT); //C相
Counter_sine3++;
TIM_ClearITPendingBit(TIM1 , TIM_IT_CC3);
}
}
TIM1設(shè)置為中央計(jì)數(shù)模式,開(kāi)啟互補(bǔ)通道,設(shè)置死區(qū)時(shí)間,死區(qū)時(shí)間是多少個(gè)時(shí)鐘計(jì)數(shù)周期,比如TIM1計(jì)數(shù)周期是72M,設(shè)置為72就是1000ns。spwm頻率設(shè)置為10k,然后TIM1每個(gè)通道的比較值達(dá)到時(shí)更新比較值。調(diào)制度m范圍為0~1,設(shè)為0.7。正弦調(diào)制波的頻率是自己設(shè)置的,方法是f=載波頻率/表中點(diǎn)數(shù),這里設(shè)置的是載波頻率10K,取250個(gè)點(diǎn)得到的正弦頻率就是40HZ,改變載波頻率為50*250就得到了50hz的正弦波輸出。正弦表可以用取點(diǎn)工具。
2 PID算法
??在連續(xù)時(shí)間控制系統(tǒng)中,PID控制器應(yīng)用非常廣泛,其設(shè)計(jì)技術(shù)成熟,長(zhǎng)期以來(lái)形成了典型的結(jié)構(gòu),參數(shù)整定方便,結(jié)構(gòu)更改靈活。由于計(jì)算機(jī)程序的靈活性,數(shù)字PID控制比連續(xù)PID控制更為優(yōu)越。
2.1 PID控制系統(tǒng)簡(jiǎn)介
??連續(xù)時(shí)間PID控制系統(tǒng)如下圖所示,D(s)完成PID控制規(guī)律,稱為PID控制器。PID控制器是一種線性控制器,用輸出量y(t)和給定量r(t)之間的誤差的時(shí)間函數(shù)e(t)=r(t)-y(t)的比例、積分和微分的線性組合構(gòu)成控制量u(t),稱為比例、積分、微分控制,簡(jiǎn)稱PID控制。
??PID控制組合了比例控制、積分控制和微分控制這三種基本控制規(guī)律,通過(guò)改變調(diào)節(jié)器參數(shù)來(lái)實(shí)現(xiàn)控制,其基本輸入輸出關(guān)系為:
2.2 PID參數(shù)控制效果分析
??PID控制的三基本參數(shù)為KP、KI、KD,分別對(duì)應(yīng)比例,積分,微分三個(gè)模,經(jīng)實(shí)驗(yàn)測(cè)試,可總結(jié)出這三項(xiàng)參數(shù)的實(shí)際控制作用為:
??比例調(diào)節(jié)參數(shù)(KP):按比例反映系統(tǒng)的偏差,系統(tǒng)一旦出現(xiàn)偏差,比例調(diào)節(jié)立即進(jìn)行。比例調(diào)節(jié)是主要的控制部分,但過(guò)大的比例會(huì)使系統(tǒng)的穩(wěn)定性下降。增大KP,系統(tǒng)的反應(yīng)變靈敏、速度加快、穩(wěn)態(tài)誤差減小,但振蕩次數(shù)也會(huì)加多、調(diào)節(jié)時(shí)間加長(zhǎng)。
??積分調(diào)節(jié)參數(shù)(KI):消除系統(tǒng)靜態(tài)(穩(wěn)態(tài))誤差 ,提高系統(tǒng)的控制精度。積分調(diào)節(jié)會(huì)使系統(tǒng)的穩(wěn)定性下降,動(dòng)態(tài)響應(yīng)變慢,超調(diào)加大。積分控制一般不單獨(dú)作用,而是與P或者PD結(jié)合作用。
??微分調(diào)節(jié)參數(shù)(KD):反映系統(tǒng)偏差信號(hào)的變化率,可以預(yù)見(jiàn)偏差的變化趨勢(shì),產(chǎn)生超前控制作用,使偏差在未形成前已被消除。因此,微分控制可以提高系統(tǒng)的動(dòng)態(tài)跟蹤性能,減小超調(diào)量,但對(duì)噪聲干擾有放大作用,過(guò)強(qiáng)的微分調(diào)節(jié)會(huì)使系統(tǒng)劇烈震蕩,對(duì)抗干擾不利。
??常規(guī)的PID控制系統(tǒng)中,減少超調(diào)和提高控制精度難以兩全其美。主要是積分作用有缺陷造成的。如果減少積分作用,靜差不易消除,有擾動(dòng)時(shí),消除誤差速度變慢;而加強(qiáng)積分作用時(shí)又難以避免超調(diào),這也是常規(guī)PID控制中經(jīng)常遇到的難題。
2.3 通俗易懂的理解PID
??P就是比例的意思。它的作用最明顯,原理也最簡(jiǎn)單。
??需要控制的量,比如水溫,有它現(xiàn)在的『當(dāng)前值』,也有我們期望的『目標(biāo)值』。當(dāng)兩者差距不大時(shí),就讓加熱器“輕輕地”加熱一下。要是因?yàn)槟承┰?,溫度降低了很多,就讓加熱器“稍稍用力”加熱一下。要是?dāng)前溫度比目標(biāo)溫度低得多,就讓加熱器“開(kāi)足馬力”加熱,盡快讓水溫到達(dá)目標(biāo)附近。
??這就是P的作用,跟開(kāi)關(guān)控制方法相比,是不是“溫文爾雅”了很多.實(shí)際寫程序時(shí),就讓偏差(目標(biāo)減去當(dāng)前)與調(diào)節(jié)裝置的“調(diào)節(jié)力度”,建立一個(gè)一次函數(shù)的關(guān)系,就可以實(shí)現(xiàn)最基本的“比例”控制了~
??KP越大,調(diào)節(jié)作用越激進(jìn),KP調(diào)小會(huì)讓調(diào)節(jié)作用更保守。
??要是你正在制作一個(gè)平衡車,有了KP的作用,你會(huì)發(fā)現(xiàn),平衡車在平衡角度附近來(lái)回“狂抖”,比較難穩(wěn)住。如果已經(jīng)到了這一步——恭喜你!離成功只差一小步了~
??D的作用更好理解一些,所以先說(shuō)說(shuō)D,最后說(shuō)i。
??剛才我們有了P的作用。你不難發(fā)現(xiàn),只有P好像不能讓平衡車站起來(lái),水溫也控制得晃晃悠悠,好像整個(gè)系統(tǒng)不是特別穩(wěn)定,總是在“抖動(dòng)”。
??請(qǐng)想象一下:要是把上圖所示的系統(tǒng)浸沒(méi)在水里,同樣拉它一下 :這種情況下,重新停在平衡位置的時(shí)間就短得多。我們需要一個(gè)控制作用,讓被控制的物理量的“變化速度”趨于0,即類似于“阻尼”的作用。
??因?yàn)?,?dāng)比較接近目標(biāo)時(shí),P的控制作用就比較小了。越接近目標(biāo),P的作用越溫柔。有很多內(nèi)在的或者外部的因素,使控制量發(fā)生小范圍的擺動(dòng)。D的作用就是讓物理量的速度趨于0,只要什么時(shí)候,這個(gè)量具有了速度,D就向相反的方向用力,盡力剎住這個(gè)變化。kD參數(shù)越大,向速度相反方向剎車的力道就越強(qiáng)。
??如果是平衡小車,加上P和D兩種控制作用,如果參數(shù)調(diào)節(jié)合適,它應(yīng)該可以站起來(lái)了~歡呼吧
??等等,PID三兄弟好想還有一位??雌饋?lái)PD就可以讓物理量保持穩(wěn)定,那還要I干嘛?
??因?yàn)槲覀兒鲆暳艘环N重要的情況:
??還是以熱水為例。假如有個(gè)人把我們的加熱裝置帶到了非常冷的地方,開(kāi)始燒水了。需要燒到50℃。
??在P的作用下,水溫慢慢升高。直到升高到45℃時(shí),他發(fā)現(xiàn)了一個(gè)不好的事情:天氣太冷,水散熱的速度,和P控制的加熱的速度相等了。這可怎么辦?
??P兄這樣想:我和目標(biāo)已經(jīng)很近了,只需要輕輕加熱就可以了。
??D兄這樣想:加熱和散熱相等,溫度沒(méi)有波動(dòng),我好像不用調(diào)整什么。
??于是,水溫永遠(yuǎn)地停留在45℃,永遠(yuǎn)到不了50℃。
??作為一個(gè)人,根據(jù)常識(shí),我們知道,應(yīng)該進(jìn)一步增加加熱的功率。可是增加多少該如何計(jì)算呢?
??前輩科學(xué)家們想到的方法是真的巧妙。設(shè)置一個(gè)積分量。只要偏差存在,就不斷地對(duì)偏差進(jìn)行積分(累加),并反應(yīng)在調(diào)節(jié)力度上。這樣一來(lái),即使45℃和50℃相差不太大,但是隨著時(shí)間的推移,只要沒(méi)達(dá)到目標(biāo)溫度,這個(gè)積分量就不斷增加。
??系統(tǒng)就會(huì)慢慢意識(shí)到:還沒(méi)有到達(dá)目標(biāo)溫度,該增加功率啦!到了目標(biāo)溫度后,假設(shè)溫度沒(méi)有波動(dòng),積分值就不會(huì)再變動(dòng)。這時(shí),加熱功率仍然等于散熱功率。但是,溫度是穩(wěn)穩(wěn)的50℃。
??Ki的值越大,積分時(shí)乘的系數(shù)就越大,積分效果越明顯。所以,I的作用就是,減小靜態(tài)情況下的誤差,讓受控物理量盡可能接近目標(biāo)值。
??I在使用時(shí)還有個(gè)問(wèn)題:需要設(shè)定積分限制。防止在剛開(kāi)始加熱時(shí),就把積分量積得太大,難以控制。
2.4 數(shù)字PID控制的實(shí)現(xiàn)
??數(shù)字PID控制是通過(guò)算法程序?qū)崿F(xiàn)PID控制的。數(shù)字控制系統(tǒng)大多數(shù)是采樣數(shù)據(jù)控制系統(tǒng),進(jìn)入系統(tǒng)的連續(xù)時(shí)間信號(hào)必須經(jīng)過(guò)采樣和量化后轉(zhuǎn)換為數(shù)字量,方能進(jìn)行相應(yīng)的計(jì)算和處理,不論是積分還是微分,只能用數(shù)值計(jì)算去逼近。當(dāng)采樣周期相當(dāng)短時(shí),用求和代替積分,用差商代替微商,將描述連續(xù)時(shí)間PID算法的微分方程變?yōu)槊枋鲭x散時(shí)間PID算法的差分方程。數(shù)字PID控制通常有以下兩種實(shí)現(xiàn):
2.4.1 位置式PID控制算法
??此式是數(shù)字PID算法的非遞推形式,稱全量算法,其中uo為控制量基值(n=0時(shí)的控制量);un為第n個(gè)采樣時(shí)刻的控制量;Ts為采樣周期。算法中為實(shí)現(xiàn)求和,必須存儲(chǔ)系統(tǒng)偏差的全部值ei,得出的全量輸出un是控制量的絕對(duì)數(shù)值,這種控制量確定了執(zhí)行機(jī)構(gòu)在控制系統(tǒng)中的位置(如閥門控制中,輸出對(duì)應(yīng)閥門的位置),因此將這種算法稱為“位置算法”。
2.4.2 增量式PID控制算法
??當(dāng)執(zhí)行機(jī)構(gòu)需要的不是控制量的絕對(duì)值,而是控制量的增量(例如驅(qū)動(dòng)步進(jìn)電動(dòng)機(jī))時(shí),需要用PID的“增量算法”,其簡(jiǎn)化示意圖如下圖所示。
??增量式PID算法的差分方程為
??此時(shí)已看不出P、I、D作用的直接關(guān)系,只能體現(xiàn)各次誤差量對(duì)控制作用的影響,但處理時(shí)只需要貯存最近的三個(gè)誤差采樣值en en-1 en-2 。
「第一彈」電子設(shè)計(jì)大賽應(yīng)該準(zhǔn)備什么?
「第一篇」大學(xué)生電子設(shè)計(jì)競(jìng)賽,等你來(lái)提問(wèn)。
「第二篇」全國(guó)一等獎(jiǎng),經(jīng)驗(yàn)帖。
「第三篇」電賽,這些你必須知道的比賽細(xì)節(jié),文末附上近十年電賽題目下載
「第四篇」電賽控制題可以準(zhǔn)備一些什么?
「第五篇」全國(guó)電子設(shè)計(jì)競(jìng)賽-電源題設(shè)計(jì)方案總結(jié)
「第六篇」對(duì)于電賽,我們應(yīng)該看重什么?
電子設(shè)計(jì)競(jìng)賽電源題(1)-電源題簡(jiǎn)介
電子設(shè)計(jì)競(jìng)賽電源題(2)-檢波與采樣
全國(guó)一等獎(jiǎng),他的學(xué)習(xí)之路。
從0開(kāi)始,三個(gè)月,獲全國(guó)一等獎(jiǎng)。
獎(jiǎng)狀是怎么煉成的—我的電賽狂魔之旅
全國(guó)一等獎(jiǎng)的獲得者,如今去當(dāng)了人民教師。
【大學(xué)生電子設(shè)計(jì)競(jìng)賽分享經(jīng)驗(yàn)貼】風(fēng)力循跡小車
「重磅猜題之第二篇」2019年大學(xué)生電子設(shè)計(jì)競(jìng)賽
最 后 若覺(jué)得文章不錯(cuò),轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動(dòng)力。 5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機(jī)、等等! 在公眾號(hào)內(nèi)回復(fù)「 更多資源 」,即可免費(fèi)獲取,期待你的關(guān)注~ 長(zhǎng)按識(shí)別圖中二維碼關(guān)注
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!