电子设计竞赛(三)-SPWM与PID
1 ?SPWM波調(diào)制技術
??逆變電路的控制方式主要是采用SPWM(正弦脈寬調(diào)制技術),IR2104控制開關管的通斷來實現(xiàn)正弦調(diào)制,SPWM的基本思路是將一個正弦波按等寬間距分成N等份,對于每一個波形以一個等面積的脈沖來對應,使脈沖的中點與相應正弦波部分的中點重合,如下圖所示,由于此脈沖序列的面積分布滿足正弦規(guī)率,根據(jù)面積等效原理,將這個脈沖序列輸出至負載時,將使負載得到相當接近正弦的輸出電壓和電流。
??由于采用該方式輸出的電壓波形很接近正弦波,所以電壓中的諧波成分較少,同時也可以提高功率因數(shù)。通過改變SPWM脈沖的寬度可以改變輸出電壓的幅值,調(diào)節(jié)電路的調(diào)制周期則可以改變輸出電壓的頻率,方便對負載進行控制。
1.1 ?單極性正弦脈寬調(diào)制
??單極性正弦脈寬調(diào)制是以一個寬度正弦規(guī)律變化的正弦脈沖序列對應交流輸出波形的正半周,再以一個寬度按正弦規(guī)率變換的負脈沖序列對應交流輸出波形的負半周,這兩個脈沖序列交替作用,控制開關器件產(chǎn)生近似于正弦波的輸出電壓波形。
??正弦脈寬調(diào)制的基本方法是將正弦波性的調(diào)制波與三角波形的載波進行比較,通過比較正弦波形各點的瞬時值確定該點對應的脈沖寬度。單極性正弦脈寬調(diào)制使用的三角波是單極性的,在正弦調(diào)制波為正半周時三角載波是正極性的;在正弦波為負半周時三角波載波為負極性。如下圖所示。
單相橋式逆變電路
1.2 ?雙極性正弦脈寬調(diào)制
??雙極性正弦脈寬調(diào)制是以一個寬度按正弦規(guī)率變化的正負雙向脈沖序列對應交流輸出波形的整個周期,通過正向脈沖與負向脈沖寬度的差產(chǎn)生出按正弦規(guī)率變換的正半周波和負半周波。
??雙極性正弦脈寬調(diào)制使用的三角波是雙極性的,其波形的形式如下圖,通過正弦調(diào)制波與三角波比較,當正弦調(diào)制波值大于三角波時,輸出正脈沖;而當正弦調(diào)制波的值小于三角載波時,輸出負脈沖。如此得到的脈沖序列是正負交替的雙向脈沖序列。
1.3 ?三相正弦脈寬調(diào)制
??三相正弦脈寬調(diào)制可以使用三個相角彼此相差120°的單相調(diào)制電路來合成,但是這樣會使調(diào)制電路結構比較復雜。較簡單的方法是采用一個雙極性的三角載波對三相正弦調(diào)制波進行調(diào)制,其調(diào)制的波形如下圖。
??調(diào)制過程中,雙極性三角載波為三個正弦調(diào)制波共用,分別進行比較后獲取脈寬調(diào)制信號,方式與雙極性正弦脈寬調(diào)制方法相同。從而得到三個雙向的脈沖序列,分別對應A、B、C三相,使用此三個脈沖序列控制逆變電路的A、B、C三相開關元件,可以將直流電壓逆變?yōu)檎也ǖ娜嘟涣鬏敵鲭妷骸?br />
三相正弦脈寬調(diào)制信號的產(chǎn)生
??三相脈寬調(diào)制波的三角載波只能是雙極性的,因為單極性三角載波需要根據(jù)正弦調(diào)制波的正、負半周更換載波的極性。采用雙極性正弦脈寬調(diào)制,H橋上同一相的上、下兩個橋臂導通與截止都是互補的,為防止上下兩個橋臂直通而造成的短路,需要在給一個橋臂施加關斷信號后延遲一段時間,從而在波形中引入了死區(qū)時間,死區(qū)將會給輸出的SPWM波形帶來高次諧波。
1.4 ?SPWM控制信號的生成
??早期的SPWM采用模擬控制方式來實現(xiàn),通過信號發(fā)生器產(chǎn)生所需的信號,由比較器進行信號之間的比較,隨著數(shù)字技術和微處理器在SPWM逆變技術中的應用,采用一定算法產(chǎn)生SPWM的數(shù)字控制方式越來越廣泛。
1.4.1 ?模擬控制方式
??波形比較法,其基本的方法是由正弦信號發(fā)生器件產(chǎn)生正弦調(diào)制波,由三角波信號發(fā)發(fā)生器產(chǎn)生的三角載波,將正弦調(diào)制波與三角載波比較,通過比較器的判斷而產(chǎn)生出對應的脈沖信號序列,對逆變電路進行控制從而得到所需的交流電壓。
1.4.2 ?數(shù)字控制方式
(1)等效面積法
??其原理就是按面積等效原理構成與正弦波等效的一系列等幅但寬度按正弦規(guī)律變化的矩形脈沖。等效面積法適用于單極性控制,算法中計算的是正弦波形到橫軸間的面積,這與模擬控制方式中的單極性正弦脈沖調(diào)制的方式一致。
(2)自然采樣法與規(guī)則采樣法
??自然采樣法在算法上仿真模擬控制方式的雙極性正弦脈沖調(diào)制,通過計算正弦調(diào)制波與三角載波的交點位置,確定調(diào)制的脈沖寬度。而規(guī)則采樣法是對自然采樣法的簡化,其幾何關系如下圖。
??規(guī)則采樣法適用于雙極性控制,因為算法中采用的三角載波是雙極性。等效面積法和規(guī)則采樣法都是數(shù)字控制的算法,可以由微處理器實時計算SPWM脈沖的寬度和位置,實現(xiàn)對逆變電路的控制,也可以事先計算好每個脈沖中心位置和脈沖寬度存入微處理器中,以查表的方式實現(xiàn)對逆變電路的控制。
??此外除了使用微處理器生成SPWM以外,目前還有專門產(chǎn)生SPWM波形的大規(guī)模集成芯片,有些微處理器也繼承有SPWM波形發(fā)生器,如STM32微處理器,其內(nèi)部有三相互補SPWM波形發(fā)生器,可以直接輸出6路SPWM波形信號。
1.5.SPWM軟件生成
利用單片機輸出PWM波,然后讓占空比正弦規(guī)律變化。
實現(xiàn)步驟可以簡單分為三步,以stm32為例:
(1)生成載波。比如要生成一個10KHZ的三角波,將計數(shù)器設置加減計數(shù)、周期設為1/10K就ok啦。這樣生成的三角波的幅值是多少呀,3.3V?其實在單片機里面都是數(shù)字信號,三角波最高點的時候可以用一個計數(shù)值來表示,比如8400,最低點是0。不用管他的電壓是多少。
(2)生成正弦波。這一步用軟件生成一個正弦表即可。比如將正弦波取200個點,即將一個正弦分割成200份,每個點代表一個幅值。用離散的數(shù)字量表達正弦模擬量。
(3)將正弦波和三角波進行比較。
a.什么時候進行比較。設置計數(shù)值達到比較值產(chǎn)生動作。
b.比較完之后,需要改變比較值,用于下一個周期進行比較(比較值可以理解為占空比),比較值查正弦表獲得,這樣就生成了占空比正弦規(guī)律變化的SPWM。
C.調(diào)制度m。m=正弦表最大值/三角波最大計數(shù)值。如正弦表最大值4200,三角波最大計數(shù)值8400,m=4200/8400=0.5,此時spwm最大占空比為50%,設置m=1,spwm最大占空比為100%。
? ? 例如我們要生成一個開環(huán)的三相spwm。單相逆變需生成兩組相差180度的spwm,三相即生成三組兩兩相差120度的spwm,且每組的spwm都是互補的。將生成的三組spwm分別加到1、2、3組橋臂,每組spwm互補防止了同一橋臂上下管同時導通會引起短路。
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;???????//復用推挽輸出??????????????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;?//計數(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模式1TIM_OCInitStructure.TIM_OutputState?=?TIM_OutputState_Enable;??//使能CHx的PWM輸出TIM_OCInitStructure.TIM_OutputNState?=?TIM_OutputNState_Enable;//互補輸出使能,使能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);//配置CH1TIM_OCInitStructure.TIM_Pulse?=?0;?????????????????????????TIM_OC2Init(TIM1,?&TIM_OCInitStructure);?//配置CH2TIM_OCInitStructure.TIM_Pulse?=?0;?????????????????????????TIM_OC3Init(TIM1,?&TIM_OCInitStructure);//配置CH3//死區(qū)時間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;?//設置死區(qū)時間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個搶先級、4個子優(yōu)先級????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(); }//定時器1中斷服務函數(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ù)模式,開啟互補通道,設置死區(qū)時間,死區(qū)時間是多少個時鐘計數(shù)周期,比如TIM1計數(shù)周期是72M,設置為72就是1000ns。spwm頻率設置為10k,然后TIM1每個通道的比較值達到時更新比較值。調(diào)制度m范圍為0~1,設為0.7。正弦調(diào)制波的頻率是自己設置的,方法是f=載波頻率/表中點數(shù),這里設置的是載波頻率10K,取250個點得到的正弦頻率就是40HZ,改變載波頻率為50*250就得到了50hz的正弦波輸出。正弦表可以用取點工具。
2 ?PID算法
??在連續(xù)時間控制系統(tǒng)中,PID控制器應用非常廣泛,其設計技術成熟,長期以來形成了典型的結構,參數(shù)整定方便,結構更改靈活。由于計算機程序的靈活性,數(shù)字PID控制比連續(xù)PID控制更為優(yōu)越。
2.1 ?PID控制系統(tǒng)簡介
??連續(xù)時間PID控制系統(tǒng)如下圖所示,D(s)完成PID控制規(guī)律,稱為PID控制器。PID控制器是一種線性控制器,用輸出量y(t)和給定量r(t)之間的誤差的時間函數(shù)e(t)=r(t)-y(t)的比例、積分和微分的線性組合構成控制量u(t),稱為比例、積分、微分控制,簡稱PID控制。
??PID控制組合了比例控制、積分控制和微分控制這三種基本控制規(guī)律,通過改變調(diào)節(jié)器參數(shù)來實現(xiàn)控制,其基本輸入輸出關系為:
2.2 ?PID參數(shù)控制效果分析
??PID控制的三基本參數(shù)為KP、KI、KD,分別對應比例,積分,微分三個模,經(jīng)實驗測試,可總結出這三項參數(shù)的實際控制作用為:
??比例調(diào)節(jié)參數(shù)(KP):按比例反映系統(tǒng)的偏差,系統(tǒng)一旦出現(xiàn)偏差,比例調(diào)節(jié)立即進行。比例調(diào)節(jié)是主要的控制部分,但過大的比例會使系統(tǒng)的穩(wěn)定性下降。增大KP,系統(tǒng)的反應變靈敏、速度加快、穩(wěn)態(tài)誤差減小,但振蕩次數(shù)也會加多、調(diào)節(jié)時間加長。
??積分調(diào)節(jié)參數(shù)(KI):消除系統(tǒng)靜態(tài)(穩(wěn)態(tài))誤差 ,提高系統(tǒng)的控制精度。積分調(diào)節(jié)會使系統(tǒng)的穩(wěn)定性下降,動態(tài)響應變慢,超調(diào)加大。積分控制一般不單獨作用,而是與P或者PD結合作用。
??微分調(diào)節(jié)參數(shù)(KD):反映系統(tǒng)偏差信號的變化率,可以預見偏差的變化趨勢,產(chǎn)生超前控制作用,使偏差在未形成前已被消除。因此,微分控制可以提高系統(tǒng)的動態(tài)跟蹤性能,減小超調(diào)量,但對噪聲干擾有放大作用,過強的微分調(diào)節(jié)會使系統(tǒng)劇烈震蕩,對抗干擾不利。
??常規(guī)的PID控制系統(tǒng)中,減少超調(diào)和提高控制精度難以兩全其美。主要是積分作用有缺陷造成的。如果減少積分作用,靜差不易消除,有擾動時,消除誤差速度變慢;而加強積分作用時又難以避免超調(diào),這也是常規(guī)PID控制中經(jīng)常遇到的難題。
2.3 通俗易懂的理解PID
??P就是比例的意思。它的作用最明顯,原理也最簡單。
??需要控制的量,比如水溫,有它現(xiàn)在的『當前值』,也有我們期望的『目標值』。當兩者差距不大時,就讓加熱器“輕輕地”加熱一下。要是因為某些原因,溫度降低了很多,就讓加熱器“稍稍用力”加熱一下。要是當前溫度比目標溫度低得多,就讓加熱器“開足馬力”加熱,盡快讓水溫到達目標附近。
??這就是P的作用,跟開關控制方法相比,是不是“溫文爾雅”了很多.實際寫程序時,就讓偏差(目標減去當前)與調(diào)節(jié)裝置的“調(diào)節(jié)力度”,建立一個一次函數(shù)的關系,就可以實現(xiàn)最基本的“比例”控制了~
??KP越大,調(diào)節(jié)作用越激進,KP調(diào)小會讓調(diào)節(jié)作用更保守。
??要是你正在制作一個平衡車,有了KP的作用,你會發(fā)現(xiàn),平衡車在平衡角度附近來回“狂抖”,比較難穩(wěn)住。如果已經(jīng)到了這一步——恭喜你!離成功只差一小步了~
??D的作用更好理解一些,所以先說說D,最后說i。
??剛才我們有了P的作用。你不難發(fā)現(xiàn),只有P好像不能讓平衡車站起來,水溫也控制得晃晃悠悠,好像整個系統(tǒng)不是特別穩(wěn)定,總是在“抖動”。
??你心里設想一個彈簧:現(xiàn)在在平衡位置上。拉它一下,然后松手。這時它會震蕩起來。因為阻力很小,它可能會震蕩很長時間,才會重新停在平衡位置。
??請想象一下:要是把上圖所示的系統(tǒng)浸沒在水里,同樣拉它一下 :這種情況下,重新停在平衡位置的時間就短得多。我們需要一個控制作用,讓被控制的物理量的“變化速度”趨于0,即類似于“阻尼”的作用。
??因為,當比較接近目標時,P的控制作用就比較小了。越接近目標,P的作用越溫柔。有很多內(nèi)在的或者外部的因素,使控制量發(fā)生小范圍的擺動。D的作用就是讓物理量的速度趨于0,只要什么時候,這個量具有了速度,D就向相反的方向用力,盡力剎住這個變化。kD參數(shù)越大,向速度相反方向剎車的力道就越強。
??如果是平衡小車,加上P和D兩種控制作用,如果參數(shù)調(diào)節(jié)合適,它應該可以站起來了~歡呼吧
??等等,PID三兄弟好想還有一位。看起來PD就可以讓物理量保持穩(wěn)定,那還要I干嘛?
??因為我們忽視了一種重要的情況:
??還是以熱水為例。假如有個人把我們的加熱裝置帶到了非常冷的地方,開始燒水了。需要燒到50℃。
??在P的作用下,水溫慢慢升高。直到升高到45℃時,他發(fā)現(xiàn)了一個不好的事情:天氣太冷,水散熱的速度,和P控制的加熱的速度相等了。這可怎么辦?
??P兄這樣想:我和目標已經(jīng)很近了,只需要輕輕加熱就可以了。
??D兄這樣想:加熱和散熱相等,溫度沒有波動,我好像不用調(diào)整什么。
??于是,水溫永遠地停留在45℃,永遠到不了50℃。
??作為一個人,根據(jù)常識,我們知道,應該進一步增加加熱的功率。可是增加多少該如何計算呢?
??前輩科學家們想到的方法是真的巧妙。設置一個積分量。只要偏差存在,就不斷地對偏差進行積分(累加),并反應在調(diào)節(jié)力度上。這樣一來,即使45℃和50℃相差不太大,但是隨著時間的推移,只要沒達到目標溫度,這個積分量就不斷增加。
??系統(tǒng)就會慢慢意識到:還沒有到達目標溫度,該增加功率啦!到了目標溫度后,假設溫度沒有波動,積分值就不會再變動。這時,加熱功率仍然等于散熱功率。但是,溫度是穩(wěn)穩(wěn)的50℃。
??Ki的值越大,積分時乘的系數(shù)就越大,積分效果越明顯。所以,I的作用就是,減小靜態(tài)情況下的誤差,讓受控物理量盡可能接近目標值。
??I在使用時還有個問題:需要設定積分限制。防止在剛開始加熱時,就把積分量積得太大,難以控制。
2.4 ?數(shù)字PID控制的實現(xiàn)
??數(shù)字PID控制是通過算法程序實現(xiàn)PID控制的。數(shù)字控制系統(tǒng)大多數(shù)是采樣數(shù)據(jù)控制系統(tǒng),進入系統(tǒng)的連續(xù)時間信號必須經(jīng)過采樣和量化后轉換為數(shù)字量,方能進行相應的計算和處理,不論是積分還是微分,只能用數(shù)值計算去逼近。當采樣周期相當短時,用求和代替積分,用差商代替微商,將描述連續(xù)時間PID算法的微分方程變?yōu)槊枋鲭x散時間PID算法的差分方程。數(shù)字PID控制通常有以下兩種實現(xiàn):
2.4.1 ?位置式PID控制算法
??此式是數(shù)字PID算法的非遞推形式,稱全量算法,其中uo為控制量基值(n=0時的控制量);un為第n個采樣時刻的控制量;Ts為采樣周期。算法中為實現(xiàn)求和,必須存儲系統(tǒng)偏差的全部值ei,得出的全量輸出un是控制量的絕對數(shù)值,這種控制量確定了執(zhí)行機構在控制系統(tǒng)中的位置(如閥門控制中,輸出對應閥門的位置),因此將這種算法稱為“位置算法”。
位置式PID控制算法實現(xiàn)框圖
2.4.2 ?增量式PID控制算法
??當執(zhí)行機構需要的不是控制量的絕對值,而是控制量的增量(例如驅動步進電動機)時,需要用PID的“增量算法”,其簡化示意圖如下圖所示。
??增量式PID算法的差分方程為
??此時已看不出P、I、D作用的直接關系,只能體現(xiàn)各次誤差量對控制作用的影響,但處理時只需要貯存最近的三個誤差采樣值en en-1 en-2 。
-END-
關于比賽的帖子,之前寫過很多篇:
「第一彈」電子設計大賽應該準備什么?
「第一篇」大學生電子設計競賽,等你來提問。
「第二篇」全國一等獎,經(jīng)驗帖。
「第三篇」電賽,這些你必須知道的比賽細節(jié),文末附上近十年電賽題目下載
「第四篇」電賽控制題可以準備一些什么?
「第五篇」全國電子設計競賽-電源題設計方案總結
「第六篇」對于電賽,我們應該看重什么?
電子設計競賽電源題(1)-電源題簡介
電子設計競賽電源題(2)-檢波與采樣
也有一些大神的經(jīng)驗貼,其實不乏國獎獲得者:
全國一等獎,他的學習之路。
從0開始,三個月,獲全國一等獎。
獎狀是怎么煉成的—我的電賽狂魔之旅
全國一等獎的獲得者,如今去當了人民教師。
也有一些關于比賽項目的文章:
參加智能車大賽還是電賽?在做電磁炮中我找到了答案
2019年電賽綜合測評題詳解
「權威發(fā)布」2019年電賽最全各類題目細節(jié)問題解答匯總
獎狀是怎么煉成的—我的電賽狂魔之旅
【大學生電子設計競賽分享經(jīng)驗貼】風力循跡小車
去年還做過幾期猜題的文章,貌似有點接近了,今年還可以繼續(xù)給大家猜猜。
「猜題第一篇」2019年大學生電子設計競賽
「重磅猜題之第二篇」2019年大學生電子設計競賽
?最 后???若覺得文章不錯,轉發(fā)分享,也是我們繼續(xù)更新的動力。5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機、等等!在公眾號內(nèi)回復「更多資源」,即可免費獲取,期待你的關注~長按識別圖中二維碼關注總結
以上是生活随笔為你收集整理的电子设计竞赛(三)-SPWM与PID的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猎天使魔女pc出招表是什么
- 下一篇: 连续 8 个月下滑,韩国 2 月半导体出