1. <big id="fytn0"><span id="fytn0"><ol id="fytn0"></ol></span></big>

        <track id="fytn0"></track>
        <table id="fytn0"><option id="fytn0"></option></table>
        <pre id="fytn0"></pre>
        硬件工程師煉成之路
        認證:優質創作者
        所在專題目錄 查看專題
        開關電源環路學習筆記3:系統框圖
        開關電源環路學習筆記4:兩種誤差放大器的傳遞函數
        開關電源環路學習筆記5:脈沖調制級傳遞函數
        開關電源環路學習筆記6:開關變換器傳遞函數Gvd(s)推導過程
        開關電源環路學習筆記7:BUCK電源環路仿真實驗驗證
        開關電源環路學習筆記8:如何快速看出零點和極點
        作者動態 更多
        運放12:運放的穩定性仿真
        2023-11-10 09:05
        運放11:運放穩定性評估舉例
        2023-11-09 10:19
        DCDC芯片改造為恒流源
        2023-09-25 09:55
        TTL轉RS232電路
        2023-09-21 11:26
        TTL轉RS485電路
        2023-09-20 09:39

        開關電源環路學習筆記7:BUCK電源環路仿真實驗驗證

        前面花了三節內容,把Buck各個級的傳遞函數給推導出來了,只需要把它們相乘,就可以得到環路的開環傳遞函數了。

        上期回顧:開關變換器傳遞函數Gvd(s)推導過程

        那有沒有辦法驗證它們是否正確呢?這一節就來干這個事情。 

        驗證方法

        我打算使用LTspice進行仿真驗證,方法是這樣的:

        1、搭好電路

        使用分立器件搭建一個Buck電路,設定好輸入電壓,選定好電感,電阻,電容等器件。

        2、根據公式直接畫波特圖

        根據前面推導的公式,我們可以直接列出這個電路的開環傳遞函數的表達式,有了表達式,我們就可以直接根據表達式畫出波特圖。

        3、測試得到波特圖

        我們直接仿真前面搭建的buck電路,從FB輸入小信號,就跟我們現實中測試波特圖一樣,測量出環路的波特圖。

        4、對比

        如果根據公式得到的波特圖和測試出的波特圖一樣的話,就說明我們先前推出的公式是沒問題的,即完成了驗證。

        下面開始驗證 

        搭建buck電路

        我們根據buck的系統框圖,搭建電路如下:

        鋸齒波RAMP使用電壓源產生,鋸齒波與放大和補償后的信號做比較就能得到PWM了。周期為10us,即開關頻率為100Khz,也就是說我這個buck的開關頻率固定為100Khz。

        類似于我們常用的buck芯片,Vfb設定為0.8V,我搭建電路的時候,是想輸出3.3V電壓的,所以設定R3=10K,R2=31.25K,根據分壓,可以計算得到輸出電壓:Vout=0.8*(1+R2/R3)=3.3V

        R5=100K,C2=2.2nF的取值我比較隨意,只是隨便試了幾個值,看輸出電壓能夠正常輸出我想要的值就沒有再改了,兄弟們也可以自己去試試別的值看看。

        圖中除了電阻、電容、電感之外,還用到了PMOS管Si4403,高速比較器LT1720,放大器AD8031,這幾個器件選型也并沒有特別的挑選。不過需要注意,比較器不要用放大器替代,速度會不夠,無法正確的產生PWM信號。

        我們運行下,輸出波形如下圖:

        可以看到,輸出在3ms之后穩定在3.3V,跟我們的設定值是一致的,說明這個搭建的電路算是正常跑起來了。

        不過,也許會覺得剛上電的時候輸出電壓會飆到8V有問題,這個其實因為我們對初始狀態并沒有額外的處理。另外一方面,我們測量環路,只測量穩定狀態時的,因此,我們只需要測上電3ms后的環路就行,也不影響我們的目的。

        電路已經搭起來了,那就進入第2步——根據公式得到波特圖。

        根據公式直接畫波特圖

        反饋級和誤差放大級的傳遞函數表達式如下:

        代入到前面構建的電路中就可以求得采樣和放大補償級的傳遞函數如下圖:

        由前面章節 “開關電源環路學習筆記5:”可知,傳遞函數表達式如下:

        我構建的電路的鋸齒波幅值為12V,即VM=12,所以調制級傳遞函數表達式為:

        再根據上一節“開關電源環路學習筆記6:開關變換器傳遞函數Gvd(s)推導過程”可知,開關級的傳遞函數Gvd表達式如下:

        這里面L為電感,C為輸出濾波電容,Vi為輸入電壓,R為負載。代入到我們構建的BUCK電路,那么就是L為L1=33uH,C為C1=100uF,R為R1=1Ω,即Gvd表達式為:

         好了,我們現在4個級的傳遞函數已經求出來了,我們把它們全部乘起來就是開環傳遞函數了。

        有了表達式,我們就可以直接畫出開環傳遞函數的波特圖了,這里我們可以直接使用LTspice就能達到目的,具體方法我專門寫了個小文章介紹,見下面鏈接。

        我們使用LTspice直接畫出上面開環傳遞函數的表達式對應的波特圖,需要代入電路圖中的各個參數值(L1=33uH,C1=100uF,C2=2.2nF,R1=1Ω,R2=31.25K,R5=100K)。

        最終波特圖如下圖:

        從圖中可以看到,穿越頻率是5.56Khz

        以上就是先計算出開環傳遞函數的公式,然后根據公式直接畫圖得到的波特圖。寫的比較啰嗦,主要是希望想親自試一下的同學,能照著步驟很快能搞出結果來。

        公式法已經有了,下面使用測試的方法來得到波特圖。

        測試得到波特圖

        使用LTspice測試得到波特圖有點費勁,我在這里卡了很久,這也是我最近一段時間沒有更新的原因之一,不過最終也總算是在一位網友的幫助下解決了我的問題。

        為了讓兄弟們不至于在這一步卡住,我盡量說得清楚一些。

        測試得到波特圖的原理,其實就跟我們現實工作中拿儀器測試環路一樣。

        通過給環路注入正弦波小信號,然后測量輸出信號,輸出信號與輸入信號幅度的比值就是環路的增益,兩者之間的相位差異就是環路的相移。

        注意,小信號的頻率是變化的,因為我們的波特圖,描述的就是在不同頻率下,環路的增益和相移的關系。所以我們需要測量很多的頻點,分別測量每一個頻點對應的增益和相移,然后將它們連成線,就構成了波特圖。如果正弦波小信號只有一個頻率,那么只能得到一個點。

        這是不是有點類似AD采樣?如果我們想得到非常平滑的曲線,那么就需要采樣更多的點,那么也就意味著更高的采樣率。

        使用LTspice也是一樣,如果參數設置不合理,可能會造成仿真時間特別的長,這一點需要特別注意,我后面也會詳細介紹。

        以上就是現實工作中通過測試的方法得到波特圖的原理。

        下面進入正題:LTspice如何通過測試方法,得到前面構建的Buck電路的波特圖呢?

        首先,在Vout與上面的分壓電阻之間加一個電壓源,用于注入正弦波小信號。注意,里面的頻率是一個變量freq,因為我們要測很多頻率點,幅度是20mV,不能太大,太大會影響電路正常工作。

        電路圖如下圖所示:

        如果細心的話會發現,我還加了一個0.01Ω的電阻R4,之所以加這個,就是我踩的一個坑。如果沒有R4,那么網絡a就和網絡out是一個網絡,后面執行的時候就一直有問題,所以這個R4僅僅起一個隔離的作用,不讓同一個網絡被取了兩次名字。

        右面的spice命令加了很多,看著有點費勁,其實也不難,意思大致是這樣的:

          .meas Aavg avgV(a)-----測量a點電壓平均值Aavg
          .meas Bavg avgV(b) -----測量b點電壓平均值Bavg
          .meas Are avg(V(a)-Aavg)*cos(360*time*Freq) -----測量a點交流電壓實部平均值Are
          .meas Aim avg-(V(a)-Aavg)*sin(360*time*Freq) -----測量a點交流電壓虛部平均值Aim
          .meas Bre avg (V(b)-Bavg)*cos(360*time*Freq) -----測量b點交流電壓實部平均值Bre
          .meas Bim avg-(V(b)-Bavg)*sin(360*time*Freq) -----測量b點交流電壓虛部平均值Bim
          .meas GainMagparam 20*log10(hypot(Are,Aim)/hypot(Bre,Bim)) -----測量增益
          .meas GainPhiparam mod(atan2(Aim,Are)-atan2(Bim,Bre)+180,360)-180-----測量相位

          如果不懂也沒關系,只需要將電路上面的2個測量點命名為a和b,然后將這一段spice命令粘上即可。

          Freq是頻率,是一個變量,因為會測量很多頻率點。

            .param t0=3m-----設置參數t0=3ms
            .tran 0 {t0+20/freq} {t0}-----運行t0=3ms后開始測試,測試20個周期
            .step oct paramFreq 1K 10K 4-----測量頻率范圍為1K~10Khz,每倍頻程測量4個點

            t0是系統開始運行到達到穩定狀態所需要的時間長度。前面我們運行的時候,已經知道了3ms后系統達到穩定,所以我們這里設置為3ms。注意,不同的系統達到穩定的時間是不同的,要根據實際情況來。不過也需要注意,設置太長會造成仿真時間太長。

            頻率測量范圍我選定的是1K~10K,之所以是這個范圍,是因為我已經提前知道了穿越頻率是5K左右,所以沒有把頻程設置很大,因為設太大會造成仿真時間比較長。當然,兄弟們可以自己改一改試一試。

            仿真運行

            一切準備就緒,我們運行一下,基于當前的設置,我計時了一下,運行時間大概是3分鐘(不同電腦配置可能不同)。

            運行過程中,我們可以在窗口左下方看到仿真進度,左下角可以看到Run:1/15;

            15表示的是會測量15個頻點,1表是正在測量第一個頻點。

             運行結束之后,波形窗口看不到任何波形,因為還需要操作下面幾步:

            1、在波形窗口點擊鼠標右鍵,選擇“View”菜單下面的“SPICE Error Log”

            2、在彈出的log窗口里面,點擊鼠標右鍵,選擇“Plot .step’ed .meas data”,在彈出的窗口選擇“是”

            3、在彈出的窗口中點擊鼠標右鍵,選擇“View”菜單下面的“Visible Traces”

            4、在彈出的窗口里面選擇“gain”,就可以生成波特圖了

            生成的波特圖如下:

            以上就是采用測試的方法得到波特圖的全過程了,有點繁瑣,我也是折騰了比較久,感興趣的同學可以自己玩一玩,相關源文件我文末會分享出來。

            至此,公式直接畫出的波特圖和測試法得到的波特圖都已經出來了,我們下面對比看看它們的差別。

            波特圖對比

             可以看到,二者波形基本一樣,驗證了我們開篇的目的:我們推導的傳遞函數是正確的。

            小結:

            本節內容就寫到這里了,主要是使用LTspice進行仿真驗證前面推導的公式,不過這個仿真相對于以前來說還是比較復雜的,需要折騰一下。

            聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
            覺得內容不錯的朋友,別忘了一鍵三連哦!
            贊 9
            收藏 20
            關注 575
            成為作者 賺取收益
            全部留言
            0/200
            • dy-RRWDlsRB 2023-12-22 07:40
              感謝分享
              回復
            • 靈光一閃 2023-08-23 10:44
              請問仿真文件能分享下嗎,想自己仿著試試
              回復
            • Mr_TC 2023-06-26 14:15
              講的非常好,謝謝! 能詳細講一下怎么看懂伯德圖嗎?
              回復
            • dy-fstcICj3 2023-03-27 21:01
              感謝分享
              回復
            欧美大片免费AA级动作片,久久精品国产99精品亚洲,亚洲色大成WWW亚洲女子,俄罗斯雏妓的BBB孩交
              1. <big id="fytn0"><span id="fytn0"><ol id="fytn0"></ol></span></big>

                  <track id="fytn0"></track>
                  <table id="fytn0"><option id="fytn0"></option></table>
                  <pre id="fytn0"></pre>