作為業(yè)余愛好者,我們經(jīng)常需要為原型供電,檢查項目的電壓、電流、功率限制,測試新購買的組件。在這項工作中始終需要可變電源。但不幸的是,并非我們所有人都有工作臺/實驗室電源。如果買的話也很貴,如果需要攜帶的話會很笨重。我一直在尋找一種成本更低、便攜性和生產(chǎn)力高的可編程電源,用于為我的原型和測試組件供電。所以,我決定做一個。
特點:
可編程的
可充電的
便攜的
步進變量
電壓/電流/功率計
保護繼電器
可定制,小巧可愛
酷炫的 OLED 用戶界面
按鈕用戶控制和基于菜單的導航
固件可升級以獲得更多功能!
以及適用于低功率電子項目的最通用電源。
設(shè)備規(guī)格:
最大輸出直流負載電流:400 mA
電壓范圍:2.0 伏 - 12.0 伏
電壓步長:約 0.1 伏
最佳效率:75 %
電流測量精度:+/- 1 mA
電壓測量精度:+/- 0.02 伏
請注意,此設(shè)備是一個快速原型。通過使用高容量電池、附加電子設(shè)備和升級設(shè)計,可以實現(xiàn) 0-30 甚至負電源和更多輸出電流。
工作原則
設(shè)計本身是硬件密集型的。這里發(fā)生了很多事情。系統(tǒng)的粗略框圖如下所示:
電源是 USB 可充電的 3.7 V 鋰聚合物電池。首先使用 XL6009 DC-DC 升壓模塊,我們從 Li-Po 產(chǎn)生 15.6 伏的電壓。為了運行 MCU,我們還使用 7805 穩(wěn)壓器制作了 5 伏電壓。
Arduino UNO 克隆 Atmega328P 與 2 個基于中斷的用戶輸入開關(guān)連接,一個優(yōu)雅的 OLED 輸出顯示器。Rx/Tx/DTR 固件(草圖)通過 USB/串行從 PC 上傳端口。(模塊 1)
該項目的核心是基于MCP4131 數(shù)字電位器 (Digipot) + LM 358 OpAmp的步進電壓發(fā)生器。該電壓是 LM317 可調(diào)穩(wěn)壓器的控制電壓。(模塊 2)
Digipot 通過類似 Pseudo-SPI 的命令從 Arduino 控制。LM317 的設(shè)計方式是輸出引腳電壓始終比調(diào)整引腳電壓高 1.25 伏,前提是輸入引腳的電壓足夠高(此處為 15.6 伏)。(模塊 3)
階躍電壓被饋送到調(diào)整引腳,以根據(jù)用戶的需要從 Arduino 創(chuàng)建可變輸出。
ADC 測量與監(jiān)控和保護相關(guān)的所有電壓;電池電壓、升壓電壓、充電檢測電壓和輸出電壓通過分壓器網(wǎng)絡進行調(diào)節(jié),用于為 ADC 范圍供電,此處為 0-1.1 伏。我使用了 Arduino 的內(nèi)部參考,它創(chuàng)建了 1.1 伏的參考電壓。
對于電流檢測,輸出負載的返回(負載接地)與 1 歐姆電流檢測電阻串聯(lián)連接到系統(tǒng)接地。當電流流過外部負載時,該檢測電阻器中也會產(chǎn)生電壓降。該電壓通過 OP07 精密運算放大器放大并饋送到 ADC 引腳之一。
最后,對于電池充電,來自 USB 的 5 伏電壓與 4007 二極管和 5 歐姆限流電阻串聯(lián)到鋰聚合物電池。這是一種粗略的充電方法,不是最適合鋰電池充電的方法。
操作總結(jié):
MCP4131 數(shù)字電位器產(chǎn)生 0-5 伏特范圍內(nèi)的階躍電壓,步長約為 40mV(7 位 10K Digipot 有 129 階 5V/128 = 0.40 mV),然后由 LM358 放大 2.5 倍,給出0-12.5 伏控制電壓范圍,步長為 0.1 伏。這個放大的階躍電壓信號被饋送到 LM317 的調(diào)整引腳。LM317 產(chǎn)生 V_Step+1.25 伏的輸出電壓,提供給外部負載。外部負載的返回/接地通過 1 歐姆電流檢測電阻器連接到內(nèi)部接地。
假設(shè):x mA 電流流向外部負載,它將產(chǎn)生x1 歐姆電流檢測電阻上的 mV 壓降(歐姆定律 V=I*R)。這個小電壓信號被饋送到配置為 2.5X 增益的低偏移 (10uV) 運算放大器 OP07,這將產(chǎn)生2.5x毫伏輸出。Arduino ADC 配置有 1.1 伏的內(nèi)部基準電壓,因此可以以大約 1 mV (1100/1023) 的步長檢測 0 -1100 mV 的電壓。OP07 的輸出連接到 Arduino ADC 以進行電流感應。這就是電流限制為 400mA 的原因。可以通過改變 OP07 的增益來增加/減少它。類似地,可以通過改變 LM358 的升壓電壓和增益來改變輸出電壓范圍。其他電壓是使用電阻分壓器網(wǎng)絡衰減電壓以適應 ADC 范圍測量的。鎖存繼電器有 2 個線圈。通過向任何線圈施加瞬時電源,可以切換繼電器觸點。一旦切換,它就會保持在那里,因此線圈會立即斷電。
構(gòu)建項目
首先,我們從單個開關(guān)插座盒開始,并為放置電池、USB 充電端口、電源開關(guān)等進行必要的切割和對齊。
接下來,用銅帶和硬幣制作散熱器,用于 DC-DC 升壓模塊。
升壓模塊放置在插座盒內(nèi):
使用以上部分,制作了以下3個模塊:
Arduino + I/O + 控制模塊
步進電壓和可調(diào)穩(wěn)壓器模塊
電流感應模塊
最后,所有板之間的連接被連接和焊接。
使用熱膠作為填充物后,我們終于有了:
開發(fā)固件和操作程序
固件(Arduino Sketch)現(xiàn)在是 1.0.2 Beta。目前并非所有功能都可用。但啟用了控制電壓、連接/斷開繼電器、查看信息等最重要的功能。在void setup() 其中很少有初始化函數(shù)來預熱與不同外部硬件相關(guān)的 Arduino 引腳。
輸入:有 2 個基于中斷的輸入按鈕,用于增加/減少輸出電壓,訪問菜單。Arduino 引腳 2 和 3 上的 INT0 和 INT1 編碼為下降沿中斷。您將看到 2 個電容器與機械開關(guān)并聯(lián),用于去抖動。編寫代碼以在用戶按下這些開關(guān)通過繼電器打開/關(guān)閉輸出或增加/減少電壓(Beta)時觸發(fā)中斷。
輸出:1306 OLED 顯示輸出信息,從 ADC、內(nèi)部定時器(用于設(shè)備運行時間)和標志變量獲取數(shù)據(jù),以告知用戶輸出啟用/禁用狀態(tài)。基于 U8G 庫,OLED 將信息打印為文本和數(shù)字。我有使用圖形(模擬類型)表示的計劃。
SSD1306 的 5 個數(shù)字引腳(Waveshare 的 OLED)clk、din、cs、d/c、res 連接到 Arduino 10、9、11、13、12 引腳并進行相應編程。在主循環(huán)中,每次都會調(diào)用函數(shù)來更新 OLED 上的信息。
update_display()
Atmega328P 的內(nèi)部定時器 1 配置為每 1 秒定期觸發(fā)以跟蹤時間。
控制:MCP 4131 數(shù)字電位器是一種控制器,具有以下功能:使用引腳 6、7、8 作為 CS、Clk、數(shù)據(jù)引腳,數(shù)據(jù)通過適當?shù)?a href="http://www.1cnz.cn/tags/時鐘/" target="_blank">時鐘和延遲移出。這就像慢速軟 SPI。由于我已經(jīng)在其他地方用完了硬件 SPI 引腳,所以這是當時唯一的解決方案。
increment_digipot()decrement_digipot()
兩個數(shù)字引腳 4 和 5 用于控制自鎖繼電器。一個短的高脈沖被饋送到繼電器驅(qū)動晶體管以激勵 2 個線圈以翻轉(zhuǎn)繼電器。它既可以自動發(fā)生(在過載/短路期間),也可以由用戶手動發(fā)生。
ADC:主循環(huán)中的函數(shù)執(zhí)行 獲取 20 次平均電壓和電流信息并更新變量以獲得新信息,然后將其打印在顯示器上
calc_VI()analogRead
草圖寫在多個選項卡中,以組織與不同操作相關(guān)的不同功能的代碼。有 ADC、Digipot、、中斷、繼電器和定時器選項卡排列所有用戶定義的功能。我也會嘗試添加更多注釋來解釋所有功能,但您應該不會覺得難以理解,因為這些功能是基于執(zhí)行某些任務的多個 Arduino 功能。
Display_Fn
局限性
該設(shè)備有一些嚴重的限制:
電壓不能低于 2.0 V
電壓輸出階躍不連續(xù)
電流測量會為大電流產(chǎn)生接地偏移
ADC 測量具有低分辨率
在低壓大電流負載下效率是同類產(chǎn)品中最差的
非標準,稍不安全的鋰電池充電
結(jié)論
這種可編程電源將幫助我更有效地制作項目/原型。不使用萬用表測量電壓電流功率。
-
電源
+關(guān)注
關(guān)注
184文章
17735瀏覽量
250490 -
可編程
+關(guān)注
關(guān)注
2文章
865瀏覽量
39838 -
OLED顯示屏
+關(guān)注
關(guān)注
6文章
217瀏覽量
30700
發(fā)布評論請先 登錄
相關(guān)推薦
評論