步驟1:基本原理
Wikipedia對該原理進行了很好的解釋,但是這里有一個快速指南:
升壓轉換器可快速打開和關閉開關。 (我的設計以65kHz運行。)
開關閉合時(第一幅圖),它在輸入電源兩端連接一個電感,而二極管則阻止任何電流從輸出側回流。
電感器充電。 (盡管在輸入端短接一根線圈的線圈似乎會浪費很多功率,但電感器實際上會將能量存儲在其內核中。)
當開關斷開時,電感器會抵抗任何變化電流(并且將其短接在電源上意味著它有很多電流通過)。由于輸出側的電阻比開關高得多,因此電感器必須提高其電壓以保持電流流動。 (通過改變電壓來阻止電流變化是電感器的神奇特性。)
輸出電容器從電感器和更高電壓的電源中充電。
當開關再次接通時,電容器將以較高的電壓充電并為負載供電,直到下一個周期。由于電源僅在時間的一部分上施加到輸出側,因此輸出電壓上始終會出現紋波。
如果開關在每個周期中導通時間相對較長(其占空比較高),則電感器會存儲更多能量,從而在開關斷開時會產生更高的輸出電壓。通過控制占空比,可以調整電壓。
就原理而言,您如何將其變成真實的電路?
第2步:選擇關鍵組件
為獲得準確值,我整理了一個Google電子表格模板,該模板可通過TI進行計算指南。下面,我嘗試總結閱讀文檔并四處搜索后收集的經驗法則。
電感器
電感器是電路中最重要的部分。
它的標題值是它的電感,以亨利為單位。電子表格將幫助您計算正確的值。我建議將計算值設為1.5-2倍,以便有一定的余量。
您還需要簽出:
額定電流,該電流必須足以處理電感中的峰值電流(由電子表格計算)。
形狀:之所以選擇環形線圈,是因為它們應該具有較低的EMF干擾。我讀過的一位消息人士說,如果您不擔心干擾,則線軸電感器是最好的選擇。
核心材料是您想要的一種適合功率電感器的材料。我去買了一個作為功率電感器銷售的環形線圈。我相信它具有鐵氧體磁芯。
我使用了這個150uH電感器。
開關
這是電路中第二重要的部分,以及我第一次犯錯的地方。 MOSFET是一個不錯的選擇,因為它很容易用微控制器驅動。您需要注意以下幾點:
Rds(on)這很關鍵,它是開關打開時的電阻。我的第一次嘗試是因為這里的值太高而使人sc目結舌。 《10mOhm是理想的。如果該值太高,則電感器將無法吸收足夠的電流,從而浪費了開關中的功率。
Vgs(th)值,這是您必須施加到晶體管柵極以使其導通的電壓。如果您使用的是5V微控制器,則該電壓必須為1-2V。
Vds(max),這是晶體管可以處理的最大電壓,用于輸出電壓加上一些安全裕度。
Ids(max),即開關可以處理的最大電流。根據電子表格,該值必須大于峰值電流。
我使用了此開關。
電容器
電子表格應計算電路中電容器的最小值。我發現,為音頻放大器供電時,我需要的輸出容量要比指定的容量大得多。
輸出級的電容器需要具有低ESR值才能提高效率。
我選擇了一個大的ESR低的電解電容器,然后與22uF陶瓷電容器并聯,希望進一步過濾輸出。
在輸入端,我使用了相同的設置。
二極管
二極管非常簡單,只需肖特基二極管即可,它可以處理平均電流并且正向電壓低(450mV似乎是極限。非異國情調的部分)。
微控制器
我之所以選擇ATTiny84A,是因為它可用通孔包裝提供,它的體積不太大,并且AVR GCC工具鏈還不錯。我遵循Lady Ada的本教程來啟動并運行該工具鏈,并使用AVR Eclipse開發了代碼。我需要對硬件進行相當精確的控制,以使PWM以65kHz的頻率運行,因此使用更抽象的Arduino IDE可能會比較困難。
步驟3:
這是我想到的電路。
本質上,微控制器(后面的代碼。..)使用其PWM輸出來控制開關。
它通過反饋電位計使用其ADC監視輸出電壓。
如果電壓降至目標以下,則會增加PWM的占空比,從而增加電感器中的電流,從而增加輸出電壓。
如果電壓超過目標值,則會降低占空比。
可以通過調節電位器來調節電壓。
輸出上的440歐姆電阻可確保轉換器上始終有一些負載。我通過反復試驗發現了這一價值。如果我沒有從中汲取足夠的負載,我的5V輸入電源將關閉。您也許可以克服更大的阻力。不過,加載輸出至關重要。空載時,轉換器將變得不穩定,電感器將輸出非常大的電壓。
與大電容器并聯的小電容器是濾波電容器。大型電解槽具有較高的電阻,因此,將一個小的陶瓷或聚合物蓋并聯放置有助于應對瞬態尖峰。
ADC輸入上的0.1uF電容只是一個濾波器。
為照片質量差而致歉!我很興奮,它能起作用,所以在拍好照片之前將其密封在項目中。
步驟4:單片機代碼
我已經將工作代碼放入了在Github上。它由幾個部分組成:
這些#defines和const聲明進行編譯時計算,因此代碼只需要執行簡單的uint8_t比較,而不需要浮點數,這在微控制器中是不可行的。使用const會鼓勵編譯器在編譯時進行計算,并將結果類型強制為uint8_t。
#define PWM_FREQ 62500
#define PWM_RESOLUTION(F_CPU/PWM_FREQ)
#定義MIN_DUTY_CYCLE 0.40
#定義MAX_DUTY_CYCLE 0.80
常量#define DIVIDER_RATIO 30.0
#define DESIRED_ADC_IN_V(DESIRED_VOUT/DIVIDER_RATIO) const uint8_t DESIRED_ADC_RESULT = 255 * DESIRED_ADC_IN_V/VREF;
這些定義了一些有用的實用程序宏,因此
#define DUTY_CYCLE_REG OCR0B
#define ADC_ENABLE()(ADCSRA | = _BV(ADEN))
#define ADC_START_CONVERSION()(ADCSRA | = _BV(ADSC) ))
主要功能有一個初始設置階段,在該階段它將打開我們需要的各種外圍設備:
i nt main(void){
/*將A7設置為輸出。 (需要PWM。)*/
DDRA | = _BV(DD7);
PORTA = 0;
/*讓輸入功率穩定。.. */
_delay_ms(500);
/*
*將Timer0配置為快速PWM。它將
*-在每個周期開始時打開輸出引腳
*-當值達到DUTY_CYCLE_REG
時將其關閉*-達到OCR0A
時將其包裝為0 */
TCCR0A = _BV(COM0B1)| _BV(WGM01)| _BV(WGM00);
OCR0A = PWM_RESOLUTION;
/*從40%的占空比開始,然后逐漸上升以避免涌入。 */
DUTY_CYCLE_REG =(uint8_t)(PWM_RESOLUTION * 0.40);
/*將Timer0時鐘源設置為主振蕩器。這將啟用計時器。 */
TCCR0B = _BV(CS00)| _BV(WGM02);
/*
*打開ADC,
*-使用內部參考電壓
*-將ADC0配置為我們的電源
*-左調整結果,
*-禁用引腳上的數字輸入緩沖器
*-啟用ADC。
*/
ADMUX =/* REF = */_BV(REFS1)|/* INPUT = */0;
ADCSRA | =/* PRESCALER = 16 = 2 ^ */4;
ADCSRB | =/*左調整*/_BV(ADLAR);
DDRA&= ?_BV(DD0);
DIDR0 | = _BV(ADC0D);
ADC_ENABLE();
_delay_ms(1);
然后,它簡單地循環讀取電位計的模擬值并將其與目標值進行比較:
而(1){
/*等待Timer0溢出。.. */
loop_until_bit_is_set(TIFR0 ,TOV0);
/*我們的OFF周期結束時,應該是峰值電壓。.. */
TIFR0 | = _BV(TOV0);/*清除標志。 */
/*檢查輸出電壓。 */
ADC_START_CONVERSION();
loop_until_bit_is_clear(ADCSRA,ADSC);
uint8_t adc_result = ADCH;
如果(adc_result DUTY_CYCLE_REG }
否則,如果(adc_result》 DESIRED_ADC_RESULT &&
DUTY_CYCLE_REG》 MIN_PWM_LEVEL){
DUTY_CYCLE_REG--;
}
}
}
-
微控制器
+關注
關注
48文章
7496瀏覽量
151086 -
升壓轉換器
+關注
關注
2文章
653瀏覽量
34869
發布評論請先 登錄
相關推薦
評論