国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Boost電路實(shí)戰(zhàn)詳解!(高效率同步整流,PID閉環(huán)追蹤)

這篇具有很好參考價(jià)值的文章主要介紹了Boost電路實(shí)戰(zhàn)詳解!(高效率同步整流,PID閉環(huán)追蹤)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


寄語

提示:若想實(shí)戰(zhàn)演練,請(qǐng)先熟悉文章操作流程哦,不然會(huì)有危險(xiǎn)??!
我建了一個(gè)群,分享我個(gè)人做項(xiàng)目的經(jīng)歷和資源,純個(gè)人愛好,一切免費(fèi),看自己空閑時(shí)間答疑,有想法的可以加QQ群280730348

大家好!鴿了兩個(gè)月的電路博主回歸啦,這段時(shí)間一直在忙研究生開學(xué)的事兒,也算是適應(yīng)了環(huán)境。加上最近到網(wǎng)上弄了一個(gè)boost電路的單子,正好趁這個(gè)機(jī)會(huì),給想要做Boost升壓電路的小伙伴們,一次實(shí)戰(zhàn)演練交流!

下面是注意事項(xiàng)

  • Boost電路在開始測(cè)試時(shí)建議接一個(gè)大電阻的輸出負(fù)載,原因在于輸出帶有電容,電容一直在儲(chǔ)能,給電容電壓一個(gè)輸出。博主實(shí)測(cè)過,Buck電路空載測(cè)試沒問題,但是Boost電路不要空載測(cè)試,實(shí)際電感充電時(shí)間會(huì)很小,容易擊穿濾波電容。
  • 板載一個(gè)啟動(dòng)按鍵,控制PID追蹤的啟動(dòng)和關(guān)閉,初始為關(guān)閉。按一下就能開啟,再按一下就會(huì)關(guān)閉。
  • PWM1和PWM2的接線一定要對(duì)應(yīng)好,由于是高級(jí)定時(shí)器一互補(bǔ)輸出,所以軟件內(nèi)部只需要給一個(gè)PWM值就能控制兩路輸出。PWM1和2接反會(huì)導(dǎo)致占空比反過來控制,比如本來20%的占空比對(duì)應(yīng)輸出15V,但是PWM1和2接反就會(huì)導(dǎo)致80%的占空比,輸出電壓會(huì)飆上去。
  • 先開控制器電源,再開主電路供電電壓,順序不能反。

什么是BOOST電路

Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸鳎琍ID閉環(huán)追蹤)
如上圖所示,這是最為基礎(chǔ)的Boost升壓拓?fù)?,包含六個(gè)器件,從左至右分別是:
直流電源、儲(chǔ)能電感、開關(guān)管、肖特基二極管、儲(chǔ)能電容負(fù)載

  1. 直流電源提供輸入電壓
  2. 儲(chǔ)能電感交換能量
  3. 開關(guān)管實(shí)現(xiàn)電路的開啟和斷開
  4. 肖特基二極管實(shí)現(xiàn)電路的被動(dòng)開關(guān)斷
  5. 儲(chǔ)能電容實(shí)現(xiàn)對(duì)電壓的儲(chǔ)能
  6. 負(fù)載,顧名思義,消耗能量

電路的核心在于儲(chǔ)能電感開關(guān)管,在小功率場合下,博主喜歡用Mos管作為開關(guān)器件。Mos管的特性就在于是電壓控制器件,拿常見的IRF3205Mos管來說,總共有三個(gè)管腳,分別是G、D、S。想要控制開關(guān)管很簡單,只需在GS端加上一定的電壓,就可以控制DS導(dǎo)通或者斷開,我們其實(shí)可以把Mos管看作一種高速的機(jī)械開關(guān)。

那我們來說一下電路的原理,如何實(shí)現(xiàn)電能的變化呢?關(guān)鍵點(diǎn)就在高速開關(guān)狀態(tài)下的電感儲(chǔ)能。電路總共存在著兩個(gè)工作狀態(tài),一個(gè)是開關(guān)管導(dǎo)通的工作狀態(tài),一個(gè)是開關(guān)管截至的工作狀態(tài)。

首先我們看第一種工作狀態(tài),開關(guān)管處于導(dǎo)通狀態(tài)。導(dǎo)通狀態(tài)時(shí),電流是怎么流通的呢?首先電流肯定會(huì)從輸入電源流入進(jìn)來,經(jīng)過儲(chǔ)能電感,此處我們注意,電流的流經(jīng)方向是從左至右。當(dāng)電流流經(jīng)到Mos管和肖特基二極管的交點(diǎn)時(shí),是不是就要考慮往哪個(gè)方向走了?那么很簡單,記住這一點(diǎn),電流總會(huì)往更容易流的地方跑。Mos管的特性就是導(dǎo)通電阻很小,相較于二極管而言,它對(duì)電流非常友好,所以在都可以走的前提下,電流會(huì)非常高興的往Mos管那塊跑。所以根據(jù)這個(gè)特性,電流流到了Mos管后,接下來就不會(huì)往負(fù)載那邊流了,而是回到了電壓輸入負(fù)極,這樣就完成了第一種工作狀態(tài)。這個(gè)時(shí)候咱們的輸出電壓等于多少?其實(shí)就等于儲(chǔ)能電容的電壓大小,而儲(chǔ)能電容電壓大小其實(shí)就是輸入電壓減去二極管的壓降電壓,因此我們就可以得知這種狀態(tài)下的輸出電壓。
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)

那么我們?cè)倏吹诙N工作狀態(tài),開關(guān)管處于截至狀態(tài)。開關(guān)管處于截至狀態(tài)時(shí),其實(shí)就相當(dāng)于開關(guān)斷開。這個(gè)時(shí)候電流沒路可走了呀,所以就只能往肖特基二極管的那個(gè)方向走了,那么電流的方向就是流經(jīng)電感再經(jīng)過肖特基二極管再流向負(fù)載再回到輸入電壓的負(fù)極了。這個(gè)時(shí)候,由于負(fù)載能夠消耗我們的電能了,所以咱們電路中的能量,就要全部往外提供了,怎么辦,就不能給電感充電了。這個(gè)時(shí)候,電感就生氣了,說不給我吃飯是吧,我給你對(duì)著干,于是在電感兩端,就產(chǎn)生了與電流方向相反的電動(dòng)勢(shì),也就是左負(fù)右正的反向電動(dòng)勢(shì)。為什么會(huì)產(chǎn)生反向電動(dòng)勢(shì)呢,其實(shí)跟電感本身的特性相關(guān),這個(gè)請(qǐng)自行查閱相關(guān)知識(shí)啦。我們知道,這個(gè)反向電動(dòng)勢(shì)其實(shí)跟第一種工作狀態(tài)下的充電時(shí)長有關(guān)系,充電的時(shí)間越長,反向電動(dòng)勢(shì)就越大。我們可以畫一畫電路圖,此時(shí)輸出的電壓等于啥子,就等于輸入電壓加上反向電動(dòng)勢(shì)再減去肖特基二極管的壓降。是不是就得到了比之前電壓更高的直流電壓了呢?
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)

好了明白了這兩種工作狀態(tài),我們從宏觀的角度來看,輸出電壓變高主要由什么來決定呢?答案是電感的反電動(dòng)勢(shì)的大小,而電感的反電動(dòng)勢(shì)大小與充電時(shí)長有關(guān)系,也就是說我們電感充電越久,第一種工作狀態(tài)越久,那么充電時(shí)長就會(huì)越久,電感的反電動(dòng)勢(shì)自然會(huì)越高,自然從宏觀角度來看輸出電壓就會(huì)越高。當(dāng)然電感不可能一直充電,boost電路也不可能把小電壓無限升高,這個(gè)過程跟很多因素有關(guān)。按照經(jīng)驗(yàn)來說,一般boost電路充電時(shí)間不要長于一個(gè)周期的90%,當(dāng)然也跟你的儲(chǔ)能電容有關(guān)系,假設(shè)你儲(chǔ)能電容只能扛100V,你占空比拉到90%的話,輸出電壓加到了200V,這個(gè)時(shí)候你可能就會(huì)體驗(yàn)到電容開花的效果哦。
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)
好了,那么簡單總結(jié)就是,我們單片機(jī)只需要輸出一個(gè)PWM,通過控制PWM的占空比,可以改變輸出電壓的大小。占空比越高,輸出電壓越高,占空比越低,輸出電壓越低。占空比與輸入電壓輸出電壓的關(guān)系是:D=(VO-VI)/VO,其中輸出電壓為VO,輸入電壓為VI,輸出電壓一般都會(huì)比輸入電壓要高,當(dāng)然肖特基二極管還是會(huì)有壓降的(為了嚴(yán)謹(jǐn)?。?/p>

BOOST同步升壓電路

我們來引入一個(gè)新的概念,叫做同步升壓。

萬事萬物都有其存在合理性,為什么要有這玩意兒的存在,原因無他,我們要把開關(guān)電源的優(yōu)勢(shì)體現(xiàn)出來。優(yōu)勢(shì)是啥,無非就是低損耗高效率唄。基本的boost拓?fù)浣Y(jié)構(gòu)顯而易見的缺點(diǎn)是什么?很明顯呀,那個(gè)肖特基二極管你看著他不礙眼么,反正我是瞅著他不咋順眼,二極管那是啥,被動(dòng)導(dǎo)通,抵抗能力杠杠強(qiáng),損耗也大。那我們換個(gè)思路,找個(gè)主動(dòng)的器件,不咋抵抗,不挺好么!

瞧,想主動(dòng),那我們可不可以把肖特基二極管,換成導(dǎo)通電阻超小的Mos管呢,答案是,當(dāng)然沒有問題。這樣下來,電路中就有兩個(gè)Mos管了,話不多說直接上圖:
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸鳎琍ID閉環(huán)追蹤)
為了電路安全著想,在同一瞬間,我們要保證兩個(gè)Mos管只有一個(gè)導(dǎo)通,他們兩個(gè)Mos管可以同時(shí)截至,但是不能同時(shí)導(dǎo)通,為什么呢?因?yàn)閮蓚€(gè)導(dǎo)通電阻都很小,電流去哪一路都沒問題,這個(gè)時(shí)候他們就會(huì)很糾結(jié),糾結(jié)的話就會(huì)拉幫結(jié)派,然后干架,這樣電流就會(huì)順利的引爆你的電路,給你干穿。

那其實(shí)只要讓他們工作狀態(tài)完全相反即可,我們可以利用芯片去實(shí)現(xiàn)。比如半橋驅(qū)動(dòng)芯片IR2104S,根據(jù)它的外圍電路,你只需要輸入一個(gè)PWM信號(hào),輸出就能得到LO和HO兩路輸出信號(hào),其中HO信號(hào)與輸入PWM信號(hào)相同,LO信號(hào)與輸入信號(hào)相反。

還有一種方式是直接通過軟件去實(shí)現(xiàn),拿STM32F103C8T6來講,其內(nèi)部的高級(jí)定時(shí)器存在著一個(gè)功能是互補(bǔ)輸出。比如TIM1的CH1為PA8,TIM1的CH1N為PB13,這兩個(gè)口只要設(shè)置好了,你只需要控制TIM1的CH1通道PWM輸出,就可以控制兩路相反的PWM輸出。我們今天的方案就拿第二種方式來弄!

設(shè)計(jì)要求

Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸鳎琍ID閉環(huán)追蹤)
由于博主已經(jīng)脫離了電力電子實(shí)驗(yàn)室,非常無奈,手頭上連個(gè)滑動(dòng)變阻器都沒有,別問,問就是沒錢。就只能做這種小的,能夠承受的,當(dāng)然根據(jù)博主之前設(shè)計(jì)的經(jīng)驗(yàn),我的這種拓?fù)浣Y(jié)構(gòu),散熱弄好了100w輕輕松松?,F(xiàn)在就當(dāng)給大伙兒打個(gè)樣,入入門~

設(shè)計(jì)方案

設(shè)計(jì)方案如下:主電路選用boost同步升壓拓?fù)?/mark>,驅(qū)動(dòng)電路選擇光耦驅(qū)動(dòng)。選用STM32F103C8T6作為此次電路的MCU控制單元,其中驅(qū)動(dòng)電路的輸入兩路PWM為MCU的高級(jí)定時(shí)器一輸出互補(bǔ)的PWM波,電壓檢測(cè)單元通過運(yùn)放采集輸出電壓并縮放10倍左右,送入單片機(jī)內(nèi)部進(jìn)行檢測(cè),當(dāng)單片機(jī)檢測(cè)到了電壓后經(jīng)過運(yùn)算顯示到OLED屏幕上。內(nèi)部采用PID算法對(duì)輸出電壓進(jìn)行跟蹤,若輸出電壓大于目標(biāo)電壓值則降低boost電路的占空比,若輸出電壓小于目標(biāo)值則提高boost電路的占空比。

這里插一句專業(yè)的,開關(guān)電源內(nèi)部的損耗大致可以分為:開關(guān)損耗導(dǎo)通損耗、附加損耗電阻損耗,其中開關(guān)損耗和導(dǎo)通損耗是典型的開關(guān)電源內(nèi)部最主要的兩個(gè)損耗源,控制這兩個(gè)損耗的典型方法是使功率開關(guān)導(dǎo)通期間的電壓降最小。采用同步整流技術(shù),將效率提高1%~6%;選取導(dǎo)通電阻更低、滿足要求的開關(guān)管;確保開關(guān)管工作在飽和狀態(tài),具有足夠驅(qū)動(dòng)能力;電感選用鐵硅鋁磁芯,降低鐵損。

Mos管選型:其實(shí)主要就是看DS可承受電壓,導(dǎo)通電阻和電流,我這里選的是IRF3205,導(dǎo)通電阻6.5mΩ左右,很不錯(cuò)。DS電壓55V左右,具體的話去看手冊(cè)吧,記得根據(jù)你輸出最大電壓選型,不要超過了DS電壓,最好是留一點(diǎn)閾值。
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)

儲(chǔ)能電感選型:打公式比較麻煩,我直接截圖
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)

儲(chǔ)能電容選型:無它,手熟而,我的經(jīng)驗(yàn)選型330uf,50V左右即可。

驅(qū)動(dòng)電路

它還是值得單獨(dú)拿出來講講的,我還是對(duì)光耦驅(qū)動(dòng)情有獨(dú)鐘,為什么呢?光耦可隔離呀,燒光耦還是燒我的單片機(jī),這個(gè)我還是分得清楚的。之前的IR2104存在的一個(gè)弊病就是,他不隔離,如果你芯片燒了很有可能就波及到IR2104了,所以用光耦隔離一下,可以有效降低危險(xiǎn)。

驅(qū)動(dòng)電路的話通過光耦驅(qū)動(dòng)芯片TLP250H進(jìn)行驅(qū)動(dòng)。別用TLP250,因?yàn)楣怦钜卜指哳l和低頻,我受過罪,整體驅(qū)動(dòng)電路采用自舉驅(qū)動(dòng)的原理。驅(qū)動(dòng)的PWM波通過單片機(jī)產(chǎn)生,單片機(jī)通過高級(jí)定時(shí)器一產(chǎn)生互補(bǔ)的PWM波,分別稱之為PWM1和PWM2。因?yàn)閱纹瑱C(jī)開關(guān)頻率有時(shí)候會(huì)受到外界的干擾,TLP250H這個(gè)光耦芯片也有一定的開關(guān)頻率限制,因此通過反相器74HC04產(chǎn)生反向的波形,以此來限制住開關(guān)的速度大小。輸出采取自舉驅(qū)動(dòng)原理,本質(zhì)上就是通過自舉二極管RS1M也可以用ss34和ss56,主要看可以承受的反向電壓,我是一勞永逸,RS1M可以承受反向電壓1KV,這個(gè)反向電壓跟你電路最大輸出有關(guān)系的和自舉電容2.2UF來實(shí)現(xiàn)對(duì)HO1開關(guān)的充電放電,從而使得電路圖中的Q2開關(guān)斷。此處請(qǐng)自行搜索自舉電路的驅(qū)動(dòng)原理

整體存在著兩種工作狀態(tài)

第一種狀態(tài)是PWM1為高電平,PWM2為低電平。這種情況下通過反相器在U27的光電二極管的陰極得到了PWM1的反向信號(hào)低電平,在U26的光電二極管的陰極得到了PWM2的反向信號(hào)高電平。因此在這一瞬間,由于U26光電二極管沒有產(chǎn)生電壓差,U27產(chǎn)生了電壓差,故U26光電二極管未導(dǎo)通,不能產(chǎn)生光電信號(hào),U27可以產(chǎn)生光電信號(hào),LO1吸收能量產(chǎn)生高電平,HO1未吸收能量產(chǎn)生低電平。因此在輸出端口處HO1驅(qū)動(dòng)的mos管閉合,LO1驅(qū)動(dòng)的mos管開啟。

第二種狀態(tài)與第一種完全相反,即HO1驅(qū)動(dòng)的mos管開啟,LO1驅(qū)動(dòng)的mos管關(guān)閉。
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)

電壓采樣電路

直流電壓采樣電路如下,通過運(yùn)放實(shí)現(xiàn)采集電壓的縮放。VOUT是我們檢測(cè)到的直流電壓,這個(gè)地方可以直接連接到主電路的輸出電壓口,假設(shè)輸出電壓是15V,通過R31和R32電阻分壓,在運(yùn)放的3號(hào)口能得到15V1/(10+1)的電壓也就是15/11v。根據(jù)運(yùn)放的虛短虛斷,2號(hào)口電壓也為15/11v。再通過R25和R23電阻分壓,在運(yùn)放的1號(hào)口得到15/1111/10=1.5v的電壓。再通過一個(gè)電壓跟隨器降低電壓阻抗,最終到輸出電壓口得到1,5V電壓。因此輸入15V電壓,可以輸出1.5V電壓。這個(gè)1.5V的電壓送入單片機(jī)內(nèi)部進(jìn)行檢測(cè),當(dāng)單片機(jī)檢測(cè)到1.5V以后,通過內(nèi)部乘以電壓系數(shù)就能夠得到正確的輸出電壓。此處電壓縮放比為10倍,通過改變R25和R24的大小,即可得到不同的縮放倍數(shù)。
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)

總體電路

Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸鳎琍ID閉環(huán)追蹤)
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)
Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)

代碼

代碼部分的話,我就講幾個(gè)比較關(guān)鍵的點(diǎn)兒吧

主電路代碼
注釋的比較詳細(xì)了,while循環(huán)里面其實(shí)就是對(duì)啟動(dòng)按鍵進(jìn)行一個(gè)掃描已經(jīng)OLED顯示屏顯示輸出電壓和目標(biāo)電壓,這個(gè)加VOUT+0.11的意思是其實(shí)是一種矯正,因?yàn)橥ㄟ^軟件仿真我看到追蹤的電壓一直在14.89附近,實(shí)際測(cè)得電壓又是15.02V,所以就懶得改了。其實(shí)只要改個(gè)電壓系數(shù)就好了,我圖省事兒大家不要學(xué)我哈。

//主電路代碼
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "show.h"
#include "oled.h"
#include "adc.h"
#include "key.h"
#include "main.h"
#include "pid.h"
//接線定義
/*
OLED屏幕:SDA->PA5   SCL->PA6
電壓檢測(cè):電壓->PB0  
啟動(dòng)關(guān)閉按鍵:PA11
boost輸出:PWM1->PA8,PWM2->PB13
*/ 

//定義參數(shù)
float V_OUT=0;   //檢測(cè)到的顯示輸出電壓
float now_v=0.0f;//檢測(cè)到的當(dāng)前輸出電壓
float target_v=15.00f;//追蹤的目標(biāo)值
u16 pwm=0;       //輸出的占空比
u8 work_mode=0;  //為0的時(shí)候PID不工作,為1的時(shí)候PID工作

int main(void)
{	
	u8 key;
	delay_init();	    	 //延時(shí)函數(shù)初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
	uart_init(115200);	     //串口初始化為115200
	Init_adc();              //初始化ADC
	KEY_Init();
	init_boost_PID(15.0);
	TIM2_Int_Init(9999,71);  //初始化定時(shí)器,每次執(zhí)行定時(shí)時(shí)間為10ms,執(zhí)行一次PID
	TIM3_Int_Init(999,71); 	 //初始化定時(shí)器,每次執(zhí)行定時(shí)時(shí)間為1ms,500ms執(zhí)行一次電壓平均
	BOOST_PWM_Init();	       //初始化boost電路輸出,開關(guān)頻率20KHz
    OLED_Init();			 //初始化OLED  
	OLED_Clear();            //清屏OLED
	start_view();
  while(1)
	{
		key=KEY_Scan(1);
		if(key==KEY0_PRES)work_mode=!work_mode;
        OLED_ShowNum(72,3,(u16)(V_OUT+0.11),2,16);            //顯示輸出直流電壓整數(shù)位
		OLED_ShowNum(96,3,(u16)((V_OUT+0.11)*100)%100,2,16);  //顯示輸出直流電壓小數(shù)位
		OLED_ShowNum(72,5,(u16)target_v,2,16);            //顯示輸出直流電壓整數(shù)位
		OLED_ShowNum(96,5,(u16)(target_v*100)%100,2,16);  //顯示輸出直流電壓小數(shù)位
	}
}


定時(shí)器代碼
定時(shí)器二的作用是執(zhí)行PID,每隔10ms執(zhí)行一次PID。work_mode這個(gè)參數(shù)是通過按鍵掃描來改變的,等于1就啟動(dòng)PID,=0就把占空比拉到一個(gè)定值,避免過壓。boost_pid是PID里面的一個(gè)函數(shù),就是進(jìn)行一個(gè)PID的運(yùn)算,這里為了看效果,PID的參數(shù)沒有調(diào)很大。

定時(shí)器三的作用是每隔1ms采集一次電壓數(shù)據(jù),累計(jì)500次以后取一個(gè)平均,這樣顯示的數(shù)據(jù)就會(huì)更加穩(wěn)定一點(diǎn)。V_xishu是電壓放大的倍數(shù),根據(jù)我們電路實(shí)際的縮放倍數(shù)來決定,我們?cè)谶@里由于縮放倍數(shù)是10,所以再main.h文件里面設(shè)定為10.0。

高級(jí)定時(shí)器一就是配置互補(bǔ)輸出PWM

#include "timer.h"
#include "usart.h"
#include "adc.h"
#include "main.h"
#include "pid.h"

/*boost同步整流電路配置*/
#define BOOST_TIMx TIM1
#define BOOST_Plus 5//初始化占空比為0.5%,高電平有效時(shí)的低電平占空比 
#define BOOST_ARR 3599//重裝載值3600
#define BOOST_PSC 0//分頻系數(shù)1
extern __IO uint16_t ADC_ConvertedValue[2];
float ADC_ConvertedValueLocal; 

void TIM2_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //時(shí)鐘使能

	TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值	 計(jì)數(shù)到5000為500ms
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  10Khz的計(jì)數(shù)頻率  
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位

	TIM_ITConfig(TIM2,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM2中斷
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占優(yōu)先級(jí)0級(jí)
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //從優(yōu)先級(jí)3級(jí)
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);  //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器

	TIM_Cmd(TIM2, ENABLE);  //使能TIMx外設(shè)
							 
}
void TIM2_IRQHandler(void)   //TIM2中斷
{
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發(fā)生與否:TIM 中斷源 
	{
		if(work_mode==1)
		{
		    now_v=(float)ADC_ConvertedValue[0]/4096*3.3;
		    pwm = boost_pid((now_v/3.3*4096),5,2600);
            set_pwm(TIM1,1,pwm,2600);		
		}
		else
		{
			pwm=500;
		    set_pwm(TIM1,1,pwm,1000);		
		}
		
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx的中斷待處理位:TIM 中斷源 
	}
}

void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //時(shí)鐘使能

	TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值	 計(jì)數(shù)到5000為500ms
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  10Khz的計(jì)數(shù)頻率  
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位

	TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中斷
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占優(yōu)先級(jí)0級(jí)
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //從優(yōu)先級(jí)3級(jí)
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);  //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器

	TIM_Cmd(TIM3, ENABLE);  //使能TIMx外設(shè)
							 
}
void TIM3_IRQHandler(void)   //TIM3中斷
{
	static float V_zong=0.0f;
	static u16 count=0;
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發(fā)生與否:TIM 中斷源 
	{
		count++;
		ADC_ConvertedValueLocal=(float)ADC_ConvertedValue[0]/4096*3.3f;
		V_zong+=ADC_ConvertedValueLocal;
		if(count>=500)       //500ms進(jìn)行一次計(jì)算
		{
			count=0;
			V_OUT=V_zong/500*V_xishu;
			V_zong=0;
		}
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中斷待處理位:TIM 中斷源 
	}
}

/*boost電路同步整流PWM函數(shù)PA8、PB13*/
void BOOST_PWM_Init(void)//boost電路輸出互補(bǔ)PWM波形(PA8、PB13)
{   
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_BDTRInitTypeDef TIM_BDTRInitStruct;
	TIM_OCInitTypeDef TIM_OCInitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE); //使能PORTA,B時(shí)鐘
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	//初始化GPIO,PA8
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//端口復(fù)用
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure); //PA8
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
	GPIO_Init(GPIOB,&GPIO_InitStructure);//PB13
		
	//初始化時(shí)具單元
	TIM_DeInit(BOOST_TIMx);
	
	TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct.TIM_Period=BOOST_ARR;
	TIM_TimeBaseInitStruct.TIM_Prescaler=BOOST_PSC;
	TIM_TimeBaseInit(BOOST_TIMx,&TIM_TimeBaseInitStruct);
	
	//將輸出通道2初始化為PWM模式1
	
	TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
	TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Enable;
	TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCNPolarity_High;
	TIM_OCInitStruct.TIM_OCIdleState=TIM_OCIdleState_Set;
	TIM_OCInitStruct.TIM_OCNIdleState=TIM_OCNIdleState_Reset;
	TIM_OCInitStruct.TIM_Pulse=BOOST_Plus;
	TIM_OC1Init(BOOST_TIMx,&TIM_OCInitStruct);
	//使能預(yù)裝載寄存器
	TIM_OC1PreloadConfig(BOOST_TIMx,TIM_OCPreload_Enable);
	
	//死區(qū)和剎車功能配置
	
	TIM_BDTRInitStruct.TIM_OSSIState=TIM_OSSIState_Disable;
	TIM_BDTRInitStruct.TIM_OSSRState=TIM_OSSRState_Disable;
	TIM_BDTRInitStruct.TIM_LOCKLevel=TIM_LOCKLevel_1;
	TIM_BDTRInitStruct.TIM_DeadTime=3; //40.92ns
	TIM_BDTRInitStruct.TIM_BreakPolarity=TIM_BreakPolarity_Low;
	TIM_BDTRInitStruct.TIM_Break=TIM_Break_Disable;
	TIM_BDTRInitStruct.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;
	TIM_BDTRConfig(BOOST_TIMx,&TIM_BDTRInitStruct);
	
	//使能自動(dòng)重裝載
	TIM_ARRPreloadConfig(BOOST_TIMx,ENABLE);
	
	//開啟定時(shí)器
	TIM_Cmd(BOOST_TIMx,ENABLE);
	
	//主輸出使能
	TIM_CtrlPWMOutputs(BOOST_TIMx,ENABLE);
}

/*選擇通道函數(shù)*/
void set_pwm(TIM_TypeDef* TIMx,u8 chx,u16 prec,u16 up)
{
	//判斷輸入?yún)?shù)是否正確
	if(chx<1||chx>4)
		return;
	if(prec>up)
		prec=up;
	//根據(jù)輸入的通道設(shè)置PWM占空比
	switch(chx)
	{
		case 1:TIM_SetCompare1(TIMx,prec);break;
		case 2:TIM_SetCompare2(TIMx,prec);break;     
		case 3:TIM_SetCompare3(TIMx,prec);break;
		case 4:TIM_SetCompare4(TIMx,prec);break;           
	}
}

PID代碼
帶有部分注釋,需要修改的其實(shí)就是init_boost_PID那個(gè)函數(shù),里面有一個(gè)pid1.sv,那個(gè)是我們要追蹤的目標(biāo)值,而boost_pid里面的Now,是我們采集到的輸出電壓值。

#include "pid.h"
#include "main.h"
PID_Struct pid1;


float boost_pid(float NOW,float SIGNLE_ADD_NUM_LIMIT,float SUM_OUTPUT_NUM_LIMIT)//SIGNLE_ADD_NUM_LIMIT是單次增加最大值 如100即為單次轉(zhuǎn)換輸出不能超過+-100
{
	//SUM_OUTPUT_NUM_LIMIT 是總輸出限位 如100 即總輸出不能超出+-100的范圍 防止長時(shí)間低于或高于 對(duì)于突變反應(yīng)不及時(shí)
	static float OUT=150;
	if(work_mode==0)OUT=500;
	pid1.Pv=NOW;
	pid1.Ek=pid1.Sv-pid1.Pv;
	pid1.Pout=pid1.Kp_P*(pid1.Ek-pid1.Ek_1);
	pid1.Iout=pid1.Kp_I*pid1.Ek*pid1.T/pid1.Ti;
	pid1.Dout=pid1.Kp_D*pid1.Td*(pid1.Ek-pid1.Ek_1-pid1.Ek_1+pid1.Ek_2)/pid1.T;
	pid1.OUT_Single=pid1.Pout+pid1.Iout+pid1.Dout;
	if(pid1.OUT_Single>SIGNLE_ADD_NUM_LIMIT)pid1.OUT_Single=SIGNLE_ADD_NUM_LIMIT;
	else if(pid1.OUT_Single<-SIGNLE_ADD_NUM_LIMIT)pid1.OUT_Single=-SIGNLE_ADD_NUM_LIMIT;
	OUT+=pid1.OUT_Single;
	if(OUT>SUM_OUTPUT_NUM_LIMIT)OUT=SUM_OUTPUT_NUM_LIMIT;
	//else if(OUT<-SUM_OUTPUT_NUM_LIMIT)OUT=-SUM_OUTPUT_NUM_LIMIT;
	else if(OUT<0)OUT=0;
	pid1.Ek_2=pid1.Ek_1;
	pid1.Ek_1=pid1.Ek;
	return OUT;
}





void init_boost_PID(float voltage_set)
{
	pid1.Kp_P=0;
	pid1.Kp_I=1;
	pid1.Kp_D=0;
	pid1.Sv=voltage_set*0.1/3.3*4096-14;
	pid1.T=1;//Ms
	pid1.Td=2.5;
	pid1.Ti=150;
	pid1.Pv=1000;
	pid1.Ek_2=0;
	pid1.Ek_1=0;
	pid1.Ek=0;
}

實(shí)物圖

Boost電路實(shí)戰(zhàn)詳解?。ǜ咝释秸?,PID閉環(huán)追蹤)
Boost電路實(shí)戰(zhàn)詳解!(高效率同步整流,PID閉環(huán)追蹤)


總結(jié)

測(cè)試結(jié)果
第一問完全滿足,第二問負(fù)載調(diào)整率接近為0,第三問變換器效率95%。稍后會(huì)把測(cè)試視頻上傳。

有任何疑問到評(píng)論區(qū)下方留言,我是很樂于回答問題的,記得點(diǎn)個(gè)關(guān)注點(diǎn)贊收藏,我這要求不過分吧哈哈哈哈。

所有資料如下:

鏈接:https://pan.baidu.com/s/1MNfkIqY_M__j8LUZjMNjTA
提取碼:yd15
–來自百度網(wǎng)盤超級(jí)會(huì)員V4的分享文章來源地址http://www.zghlxwxcb.cn/news/detail-438845.html

到了這里,關(guān)于Boost電路實(shí)戰(zhàn)詳解!(高效率同步整流,PID閉環(huán)追蹤)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 電腦辦公助手之桌面便簽,助力高效率辦公

    電腦辦公助手之桌面便簽,助力高效率辦公

    在現(xiàn)代辦公的快節(jié)奏中,大家有應(yīng)接不暇的工作,每天面對(duì)著復(fù)雜的工作任務(wù),總感覺時(shí)間不夠用,而且工作無厘頭。對(duì)于這種狀態(tài),大家可以選擇在電腦上安裝一款好用的辦公便簽軟件來輔助日常辦公。 敬業(yè)簽是一款專為辦公人士設(shè)計(jì)的桌面便簽軟件,是大家日常工作中常

    2024年02月07日
    瀏覽(25)
  • 42個(gè)網(wǎng)工高效率工具,我只告訴你(二)

    42個(gè)網(wǎng)工高效率工具,我只告訴你(二)

    晚上好,我是老楊。好用工具上期更新之后,不少小友催我更新下期,這不就來了? 今日文章閱讀福利:《42個(gè)好用工具下載包》 私信老楊,回復(fù)“工具42”,領(lǐng)取2022網(wǎng)工好用工具大全,同時(shí),還可以額外獲得進(jìn)入「全國網(wǎng)工交流群」的資格。 EtherApe依然免費(fèi),也可在

    2024年02月04日
    瀏覽(18)
  • cherry-pick等git 高效率命令

    cherry-pick等git 高效率命令

    使用 Git 作為代碼版本管理,早已是現(xiàn)在開發(fā)工程師必備的技能。可大多數(shù)工程師還是只會(huì)最基本的保存、拉取、推送,遇到一些commit管理的問題就束手無策,或者用一些不優(yōu)雅的方式解決。 本文分享我在開發(fā)工作中實(shí)踐過的實(shí)用命令。這些都能夠大大提高工作效率,還能解

    2024年02月03日
    瀏覽(17)
  • IDEA 28 個(gè)神仙常用設(shè)置,高效提升開發(fā)效率

    IDEA 28 個(gè)神仙常用設(shè)置,高效提升開發(fā)效率

    IDEA 作為Java開發(fā)工具的后起之秀,幾乎以碾壓之勢(shì)把其他對(duì)手甩在了身后,主要原因還是歸功于:好用;雖然有點(diǎn)重,但依舊瑕不掩瑜,內(nèi)置了非常多的功能,大大提高了日常的開發(fā)效率,下面匯總了常用的28個(gè)使用小技巧,學(xué)會(huì)之后,讓你的擼碼效率直接起飛... 注意:不同

    2024年02月04日
    瀏覽(27)
  • 【嵌入式開發(fā)學(xué)習(xí)】__分享一些高效率的“學(xué)習(xí)軟件”

    【嵌入式開發(fā)學(xué)習(xí)】__分享一些高效率的“學(xué)習(xí)軟件”

    目錄 前言 軟件分享 VSCode 代碼編輯器 ChatGPT 語言模型 Notion 筆記記錄 ?Microsoft To Do 日程記錄 zlibrary 圖書下載 結(jié)束語 (* ̄︶ ̄)創(chuàng)作不易!期待你們的?點(diǎn)贊、收藏和評(píng)論喔。 在工作學(xué)習(xí)中,我們會(huì)使用到很多的工具,好的工具可以起到事半功倍的效果。我對(duì)工具的要求一般是

    2024年02月06日
    瀏覽(26)
  • 高效Python-1提高數(shù)據(jù)處理效率的迫切需要

    高效Python-1提高數(shù)據(jù)處理效率的迫切需要

    本章包括 處理指數(shù)級(jí)增長的數(shù)據(jù)所面臨的挑戰(zhàn) 傳統(tǒng)計(jì)算架構(gòu)與最新計(jì)算架構(gòu)的比較 Python在現(xiàn)代數(shù)據(jù)分析中的作用和不足 提供高效Python計(jì)算解決方案的技術(shù) 我們一直在以極快的速度從各種來源收集海量數(shù)據(jù)。無論目前是否有使用價(jià)值,這些數(shù)據(jù)都會(huì)被收集起來。無論是否有

    2024年02月15日
    瀏覽(16)
  • 【 “高效學(xué)習(xí)法:如何提高學(xué)習(xí)效率并取得更好的成果“】

    一、學(xué)習(xí)方法分享 學(xué)習(xí)是人類進(jìn)步的基石,而學(xué)習(xí)方法則是成功的關(guān)鍵之一。下面分享幾種高效的學(xué)習(xí)方法。 認(rèn)真閱讀、筆記和思考 這是最基本的學(xué)習(xí)方法。在閱讀資料時(shí),不僅要注意到主要內(nèi)容,還要注意到細(xì)節(jié);在筆記中做總結(jié),可以幫助鞏固所學(xué)的內(nèi)容。同時(shí)也要慢

    2024年02月05日
    瀏覽(28)
  • PaddleX:一站式、全流程、高效率的飛槳AI套件

    PaddleX:一站式、全流程、高效率的飛槳AI套件

    隨著ChatGPT引領(lǐng)的AI破圈,各行各業(yè)掀起了AI落地的潮流,從智能客服、智能寫作、智能監(jiān)控,到智能醫(yī)療、智能家居、智能金融、智能農(nóng)業(yè), 誰能快速將AI與傳統(tǒng)業(yè)務(wù)相結(jié)合,誰就將成為企業(yè)數(shù)字化和智能化變革的優(yōu)勝者 。然而,將人工智能技術(shù)落地應(yīng)用面臨著諸多挑戰(zhàn),例

    2024年02月09日
    瀏覽(23)
  • 前端網(wǎng)頁國際化 translate.js,高效率翻譯,傻瓜式教學(xué)

    前端網(wǎng)頁國際化 translate.js,高效率翻譯,傻瓜式教學(xué)

    什么?你不信? ?那先簡單實(shí)驗(yàn)一下吧,首先我們隨便打開一個(gè)網(wǎng)站,然后F12——檢查——控制臺(tái),復(fù)制以下代碼,回車即可 選擇一個(gè)語種,就翻譯成功了 在網(wǎng)頁底部加上以下代碼 就像這樣 ? 默認(rèn)他會(huì)給我們加一個(gè)id為 translate? 的div盒子,我們可以把這個(gè)盒子放在我們需要

    2024年02月01日
    瀏覽(18)
  • AIGC技術(shù):人工智能生成內(nèi)容的創(chuàng)造性、高效率與未來

    AIGC技術(shù)是一種利用深度學(xué)習(xí)算法從大量數(shù)據(jù)中學(xué)習(xí)模式并生成高質(zhì)量文本、音頻、圖像和視頻的人工智能應(yīng)用。它已經(jīng)被廣泛應(yīng)用于內(nèi)容創(chuàng)作、視頻制作、游戲開發(fā)、媒體報(bào)道、語音助手等多個(gè)領(lǐng)域。AIGC技術(shù)具有提高效率、降低成本、創(chuàng)造性、提高品質(zhì)和滿足多樣性需求等優(yōu)勢(shì),并且隨著技術(shù)的不斷發(fā)展,未來將更加注重自我學(xué)習(xí)、多模態(tài)內(nèi)容生成、個(gè)性化內(nèi)容生成以及聯(lián)邦學(xué)習(xí)等方向。

    2023年05月23日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包