基于AVR VUSB技術(shù)的數(shù)控直流穩(wěn)壓電源設(shè)計(jì)
圖3 電壓電流放大電路。
1.3 VUSB接口
VUSB是用普通的通用AVR單片機(jī),配以較高頻率的晶振(12MHz或16MHz),模擬產(chǎn)生USB所需信號(hào),從而模擬出標(biāo)準(zhǔn)的USB HID設(shè)備(鼠標(biāo)、鍵盤、簡(jiǎn)單通信)的解決方案,構(gòu)成一個(gè)低成本的USB設(shè)備。USB共有4根線,2根5V電源,兩根差分信號(hào)線D+、D-.由于是低速設(shè)備,D-必須要有1.5kΩ的上拉電阻。
VUSB接口電路如圖4所示,單片機(jī)的PD1和PD2通過(guò)68Ω的限流電阻分別接入標(biāo)準(zhǔn)USB接口的D-、D+.
需要注意的是D+必須接上單片機(jī)的外部中斷0管腳,在此為了簡(jiǎn)化連接直接將PD2(INT0)接入作為其中的一根信號(hào)線使用。由于USB信號(hào)線的電壓最大為3.6V,所以在D-和D+上分別并接了一個(gè)3.6V的穩(wěn)壓二極管。
圖4 VUSB接口電路。
2 系統(tǒng)軟件設(shè)計(jì)
軟件設(shè)計(jì)包括下位機(jī)和上位機(jī)2部分。下位機(jī)主要負(fù)責(zé)接收上位機(jī)的設(shè)置電壓值,并經(jīng)過(guò)轉(zhuǎn)換后輸入到MAX522,從而輸出設(shè)置電壓。上位機(jī)則通過(guò)VUSB與下位機(jī)連接,并通過(guò)模擬的USB協(xié)議向下位機(jī)寫入數(shù)據(jù)。
2.1 下位機(jī)軟件
下位機(jī)軟件流程圖如圖5所示。其中設(shè)備初始化包括單片機(jī)端口初始化、DAC初始化及VUSB端口初始化。在初始化之后,程序進(jìn)入主循環(huán),在其中加入了USB輪詢函數(shù)usbPoll(),用來(lái)偵測(cè)USB事件。一旦偵測(cè)到上位機(jī)有USB通信請(qǐng)求時(shí),usbdrv就會(huì)調(diào)用usbFunctionSetup()函數(shù)來(lái)處理請(qǐng)求。在此請(qǐng)求函數(shù)中接收上位機(jī)傳來(lái)的數(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語(yǔ)言編寫并有詳細(xì)的注釋。開(kāi)發(fā)平臺(tái)為WinAVR.GCC項(xiàng)目文件夾中需包含驅(qū)動(dòng)文件(usbdrv文件夾),并對(duì)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í)會(huì)自動(dòng)調(diào)用usbFunctionSetup(uchar data[8]),在函數(shù)內(nèi)把全局指針*usbMsgPtr指向所要發(fā)送的數(shù)據(jù)首地址,然后返回(函數(shù)返回值)所發(fā)送數(shù)據(jù)的長(zhǎng)度就可以了。由于采用的是命令包方式傳輸數(shù)據(jù),每次只能接收4個(gè)字節(jié)的有效數(shù)據(jù),存儲(chǔ)在data[2]~data[4]中。
評(píng)論