【導(dǎo)讀】數(shù)控直流穩(wěn)壓電源是電子技術(shù)中常用的設(shè)備之一,目前所使用的大多是通過旋鈕開關(guān)調(diào)節(jié)電壓值,調(diào)節(jié)精度不高,而且經(jīng)常出現(xiàn)跳變,使用起來極不方便。本數(shù)控直流穩(wěn)壓電源通過上位機(jī)設(shè)置輸入到DAC的數(shù)字量,輸出步進(jìn)可調(diào)的電壓。上位機(jī)與下位機(jī)通過軟件模擬的USB進(jìn)行通信。
傳統(tǒng)的單片機(jī)與計(jì)算機(jī)進(jìn)行USB通信,需要使用專用的接口芯片進(jìn)行USB 協(xié)議轉(zhuǎn)換,如CP2101、FT232、CH342、PDIUSBD12、SL811等。像CP2101、FT232這樣的芯片使用起來雖然簡單,但是功能比較單一;而PDIUSBD12、SL811功能較強(qiáng),但是使用復(fù)雜。并且這些專用芯片的價(jià)格都相對較高,增加了系統(tǒng)的成本。而VUSB簡單易用,成本低廉,只需要一個(gè)普通的低成本AVR單片機(jī)以及很少的幾個(gè)外部元件,就可以組成一個(gè)USB系統(tǒng)。
1 系統(tǒng)硬件設(shè)計(jì)
系統(tǒng)組成框架如圖1所示,主要由8路串行輸入DACMAX522、穩(wěn)壓輸出電路、VUSB接口電路、信號調(diào)理電路、單片機(jī)Atmega8及其他外圍元件組成,可以輸出0~12V的電壓,步進(jìn)精度為0.1V,電流可達(dá)2A.同時(shí)可以通過上位機(jī)設(shè)置輸出的電壓值。
圖1:數(shù)控直流穩(wěn)壓源組成
1.1 模數(shù)轉(zhuǎn)換
D/A 轉(zhuǎn)換主要是利用MAX522 芯片來實(shí)現(xiàn)的。
MAX522芯片內(nèi)有2路8位電壓緩沖輸出D/A 轉(zhuǎn)換器(DAC A和DAC B),8腳節(jié)省封裝和DIP封裝,DAC A端緩沖器工作電流可達(dá)5mA,DAC B端緩沖器工作電流可達(dá)500μA,MAX522工作在單向電壓+2.7V~+5.5V.
MAX522具有3線串行接口,可直接與SPITM、QSPITM,MicrowireTM 兼容。它有一個(gè)16位輸入移位寄存器,包含8位DAC輸入數(shù)據(jù)和8位DAC選擇和關(guān)斷控制。在/CS的正邊沿?cái)?shù)據(jù)能夠存入到DAC寄存器。
模數(shù)轉(zhuǎn)換模塊電路如圖2所示。單片機(jī)的PB0端口接串行數(shù)據(jù)輸入口DIN、PB1接片選信號、PB2端口接時(shí)鐘信號SCLK.選擇DAC A作為輸出,輸出和參考電壓輸入端分別接上一個(gè)0.1μF的電容,提高電路輸出穩(wěn)定性。芯片的VDD與參考電壓端均由5.12V穩(wěn)壓電路提供。
圖2:模數(shù)轉(zhuǎn)換及穩(wěn)壓電路
LM336集成電路是精密的5V穩(wěn)壓器,其工作相當(dāng)于一個(gè)低溫度系數(shù)的、動(dòng)態(tài)電阻為0.2Ω的5V齊納二極管,其中微調(diào)端(G)可以使基準(zhǔn)電壓和溫度系數(shù)得到微調(diào)。通過調(diào)節(jié)可調(diào)電阻調(diào)節(jié)LM336的輸出電壓為5.12V.所以MAX522輸出電壓的分辨率為5.12/256=0.02V,也就是說MAX522數(shù)字輸入量每增加1,電壓就增加0.02V.由于電源輸出電壓范圍為0~12V,步進(jìn)精度為0.1V,則最大輸入數(shù)據(jù)為120(二進(jìn)制值為11110000),此時(shí)MAX522輸出值為2.4V.即MAX522的輸出電壓在0~2.4V變化。
1.2 電壓電流放大
由于MAX522輸出的電壓范圍為0~2.4V,而要求的電壓輸出范圍為0~12V,所以需要將MAX522輸出放大5倍。同時(shí),為了提高電源的驅(qū)動(dòng)能力,在放大電路后面加入了一個(gè)射極輸出器。
電壓電流放大電路如圖3所示。主要包括2個(gè)μA741高增益運(yùn)算放大器組成的放大部分及三極管ZTX453組成的射極輸出部分。第一級μA741AN 為負(fù)反饋緩沖電路,用以減小輸出電阻并使放大頻率頻寬增大。第二級μA741ANA構(gòu)成電壓正向比例放大電路。放大后的電壓信號接入射極輸出器ZTX453,放大輸出信號的電流。注意,此部分電路發(fā)熱量比較大,需要再擴(kuò)接散熱片進(jìn)行散熱。
圖3:電壓電流放大電路
1.3 VUSB接口
VUSB是用普通的通用AVR單片機(jī),配以較高頻率的晶振(12MHz或16MHz),模擬產(chǎn)生USB所需信號,從而模擬出標(biāo)準(zhǔn)的USB HID設(shè)備(鼠標(biāo)、鍵盤、簡單通信)的解決方案,構(gòu)成一個(gè)低成本的USB設(shè)備。USB共有4根線,2根5V電源,兩根差分信號線D+、D-.由于是低速設(shè)備,D-必須要有1.5kΩ的上拉電阻。
VUSB接口電路如圖4所示,單片機(jī)的PD1和PD2通過68Ω的限流電阻分別接入標(biāo)準(zhǔn)USB接口的D-、D+。
需要注意的是D+必須接上單片機(jī)的外部中斷0管腳,在此為了簡化連接直接將PD2(INT0)接入作為其中的一根信號線使用。由于USB信號線的電壓最大為3.6V,所以在D-和D+上分別并接了一個(gè)3.6V的穩(wěn)壓二極管。
圖4 :VUSB接口電路
[member]
[page]
2 系統(tǒng)軟件設(shè)計(jì)
軟件設(shè)計(jì)包括下位機(jī)和上位機(jī)2部分。下位機(jī)主要負(fù)責(zé)接收上位機(jī)的設(shè)置電壓值,并經(jīng)過轉(zhuǎn)換后輸入到MAX522,從而輸出設(shè)置電壓。上位機(jī)則通過VUSB與下位機(jī)連接,并通過模擬的USB協(xié)議向下位機(jī)寫入數(shù)據(jù)。
2.1 下位機(jī)軟件
下位機(jī)軟件流程圖如圖5所示。其中設(shè)備初始化包括單片機(jī)端口初始化、DAC初始化及VUSB端口初始化。在初始化之后,程序進(jìn)入主循環(huán),在其中加入了USB輪詢函數(shù)usbPoll(),用來偵測USB事件。一旦偵測到上位機(jī)有USB通信請求時(shí),usbdrv就會調(diào)用usbFunctionSetup()函數(shù)來處理請求。在此請求函數(shù)中接收上位機(jī)傳來的數(shù)據(jù)并將此數(shù)據(jù)轉(zhuǎn)換后寫入MAX522數(shù)據(jù)端口,啟動(dòng)DAC輸出電壓。
圖5:下位機(jī)軟件流程
設(shè)計(jì)中需注意以下幾點(diǎn):
1)單片機(jī)方面的VUSB 底層驅(qū)動(dòng)函數(shù)使用AVRUSB,最新版本的AVR-USB為C語言編寫并有詳細(xì)的注釋。開發(fā)平臺為WinAVR.GCC項(xiàng)目文件夾中需包含驅(qū)動(dòng)文件(usbdrv文件夾),并對usbconfig.h中的部分宏定義做一些修改。
#define USB_CFG_IOPORTNAME D//這個(gè)接口連接USB總線。當(dāng)配置為"D"時(shí),寄存器PORTD,PIND and DDRD將有效。
#define USB_CFG_DMINUS_BIT 1//位配置,是在USB_CFG_IOPORT 中連接USB D-的線??梢耘渲脼榻涌诘娜魏挝?。
#define USB_CFG_DPLUS_BIT 2//位配置,是在USB_CFG_IOPORT 中連接USB D+的線。也可以連接到任意口,但是注意D+一定要連接都中斷口INT0。
2)單片機(jī)在接收到讀取數(shù)據(jù)命令時(shí)會自動(dòng)調(diào)用usbFunctionSetup(uchar data[8]),在函數(shù)內(nèi)把全局指針*usbMsgPtr指向所要發(fā)送的數(shù)據(jù)首地址,然后返回(函數(shù)返回值)所發(fā)送數(shù)據(jù)的長度就可以了。由于采用的是命令包方式傳輸數(shù)據(jù),每次只能接收4個(gè)字節(jié)的有效數(shù)據(jù),存儲在data[2]~data[4]中。
3)初始化時(shí)需要將MAX522的輸出置為關(guān)閉狀態(tài)。
寫入MAX522時(shí)首先寫入8位控制字,然后寫入8位DAC數(shù)據(jù)。
2.2 上位機(jī)軟件
上位機(jī)用C# 語言進(jìn)行編寫,驅(qū)動(dòng)采用一款名為LibUsbDotNet的開源USB上位機(jī)驅(qū)動(dòng)庫文件。此驅(qū)動(dòng)庫文件還提供了供。NET平臺調(diào)用的USB接口函數(shù)。使用時(shí)需包含相應(yīng)的動(dòng)態(tài)鏈接庫文件。
上位機(jī)軟件主要包括顯示設(shè)備連接狀態(tài)、寫入電壓值及讀取當(dāng)前電壓值等功能。上位機(jī)軟件流程圖如圖6所示。
圖6:上位機(jī)軟件流程
只有在總線請求為用戶自定義類型(Vendor)時(shí)單片機(jī)才會調(diào)用usbFunctionSetup(uchar data[8])這個(gè)函數(shù),所以傳輸數(shù)據(jù)是通過發(fā)送用戶自定義類型的Setup數(shù)據(jù)包來實(shí)現(xiàn)的。讀數(shù)據(jù)時(shí)設(shè)置此數(shù)據(jù)包為IN,同時(shí)寫入需要讀取的字節(jié)數(shù)。寫入數(shù)據(jù)時(shí)設(shè)置數(shù)據(jù)包為OUT,4字節(jié)的有效數(shù)據(jù)則包含在所建立的8字節(jié)Setup數(shù)據(jù)包的data[2]~data[4]之中。
3 實(shí)驗(yàn)驗(yàn)證與分析
本數(shù)控直流穩(wěn)壓電源在使用之前需進(jìn)行校零。在初始狀態(tài)下,調(diào)節(jié)集成運(yùn)放μA741的外接調(diào)零電阻使集成運(yùn)放輸出為0,調(diào)節(jié)射極輸出器偏置電阻R13使輸出電壓為0。
在輸出最大的情況下,調(diào)節(jié)輸出集成運(yùn)放的比例放大電阻R14,使得輸出電壓為12V。
校零之后將上位機(jī)設(shè)置電壓值與實(shí)際輸出電壓進(jìn)行對比實(shí)驗(yàn),實(shí)驗(yàn)數(shù)據(jù)如表1所示。
表1:電壓輸出對比實(shí)驗(yàn)結(jié)果
所設(shè)計(jì)電壓源實(shí)際輸出值與設(shè)定值偏差較小,能夠滿足0~12V連續(xù)可調(diào)輸出,步進(jìn)值為0.1V的使用要求。
4 結(jié)論
設(shè)計(jì)了一種以單片機(jī)為主,基于VUSB技術(shù)進(jìn)行數(shù)據(jù)傳輸控制的數(shù)控直流穩(wěn)壓電源。輸出電壓值由單片機(jī)控制,步進(jìn)調(diào)節(jié)方便,輸出穩(wěn)定。既可以作為單獨(dú)的電源使用,也可以嵌入到其他需要步進(jìn)電壓模塊的測試系統(tǒng)之中。