MSP430F449的數(shù)字電位器分壓功能設(shè)計
MSP430單片機(jī)具有豐富的外圍模塊,如MSP430F449就包含8組I/O端口、精密模擬比較器、硬件乘法器、串行通信可軟件選擇UART/SPI模式等。在實際的應(yīng)用中,USART接口具有極佳的通用性,出于擴(kuò)展接口的目的,往往通過軟件模擬SPI,以獲得更多的SPI接口。本文就是通過軟件模擬實現(xiàn)了SPI通信,來驅(qū)動和控制數(shù)字電位器的。數(shù)字電化器也稱為數(shù)控電位器,是一種用數(shù)字信號控制阻值改變的器件。數(shù)字電位器與機(jī)械式電位器相比,具有可程控改變阻值、耐震動、噪聲小、壽命長、抗環(huán)境污染等優(yōu)點,因而在自動控制、智能儀器儀表、消費類電子產(chǎn)品等許多領(lǐng)域得到成功應(yīng)用。
1 SPI概述
串行外圍設(shè)備接口SPI(Scrial Pcriphcral Intcrfacc)總線技術(shù)是一種同步串行接口,其硬件功能很強(qiáng),所以與SPI有關(guān)的軟件相當(dāng)簡單,使CPU有更多的時間處理其他事務(wù)。SPI總線上可以連接多個可作為主機(jī)的MCU,裝有SPI接口的輸出設(shè)備、輸入設(shè)備(如液晶驅(qū)動)以及A/D轉(zhuǎn)換等外設(shè),也可以簡單連接到單個TTL移位寄存器的芯片??偩€上允許連接多個設(shè)備,但在任一瞬間只允許一個設(shè)備作為主機(jī)。串行模塊工作在SPI模式,通過4線(SOMI、SIMO、SCK及STE)或者3線(SOMI、SIMO、SCK)同外界通信:
SOMI——串行數(shù)據(jù)輸入(從出主入)。
SIMO——串行數(shù)據(jù)輸出(主出從入)。
SCK——串行移位時鐘。
STE——從機(jī)模式發(fā)送/接收允許控制信號。
數(shù)據(jù)的傳輸由SCK決定,數(shù)據(jù)可以在SCK的上升沿或者下降沿輸出。因為SPI接口定義具有很大的靈活性,因此導(dǎo)致各個廠商帶有SPI接口的芯片在工作時序上并不一致,所以使用時要注意芯片SPI接口工作時序的差別。
2 數(shù)字電位器構(gòu)成及應(yīng)用說明
本文用到的是MCP4251數(shù)字電位器,該電位器是雙電阻網(wǎng)絡(luò)的,MCP4251器件框圖如圖1所示。
利用該器件可以構(gòu)造一些線性的函數(shù),這些函數(shù)可以用抽頭和接線端B之間的電阻來表示。數(shù)學(xué)模型為:
該器件支持SPI串行協(xié)議。該SPI以從模式工作,最多使用4個引腳。這些引腳是CS(片選)、SCK(串行時鐘)、SDI(串行數(shù)據(jù)輸入)、SDO(串行數(shù)據(jù)輸出)。圖2給出了典型的SPI接口。
MCP4251的SPI模塊支持兩種標(biāo)準(zhǔn)的SPI模式,分別是模式00和11。SPI模式由SCK引腳的狀態(tài)決定。在模式00下,SCK空閑狀態(tài)=低電平,數(shù)據(jù)在SCK的上升沿從SDI引腳傳入,在SCK的下降沿從SDO引腳傳出。在模式11下,SCK空閑狀態(tài)=高電平,數(shù)據(jù)在SCK的上升沿從SDI引腳傳入,在SCK的下降沿從SDO引腳傳出。圖3給出了兩種模式下的SPI波形。
在每種模式下,都有4個可能的命令。8位命令(遞增抽頭和遞減抽頭命令)中包含命令字節(jié),而16位命令(讀數(shù)據(jù)和寫數(shù)據(jù)命令)中包含命令字節(jié)和數(shù)據(jù)字節(jié)。命令字節(jié)中包含兩個數(shù)據(jù)位。圖4給出了通用SPI命令格式。
3 MSP430軟件模擬SPI串口的實現(xiàn)
本文采用MSP430F449單片機(jī)的I/O口模擬SPI通信,選用SCK下降沿輸出、上升沿輸入的SPI三線接口類型。定義單片機(jī)MSP430F449的P3.4端口為輸出MOSI,P3.5端口為時鐘信號SCK,P3.7端口為片選輸入CS,P4.0端口為輸入MISO。在P3.5下降沿時,輸出數(shù)據(jù)data的高位,然后把P3.5的電壓拉高,data中的數(shù)據(jù)依次右移1位,再將P3.5的電平拉低,再次輸出data的高位,實際這時輸出的是原來data中的次高位,data如此重復(fù)有移8次就完成了1個寧符的輸出。實現(xiàn)該功能的代碼如下:
同理,把P3.5的輸出電平拉高,制造時鐘的上升沿,檢測輸入引腳P4.0的電平,將其記入data中,再將P3.5的輸出電平拉低,這時就接收好1個字符位了,然后將data接收到的字符位右移1位,準(zhǔn)備繼續(xù)接收字符下一位,如此重復(fù)8次后就收到1個完整的字符,代碼如下:
如果是選用SCK下降沿輸入、上升滑輸出的SPI接口類型,只需要把上面接收和發(fā)送程序中SCK的上升沿和下降沿交換即可滿足時序要求。模擬串口通信的代碼簡單,靈活性強(qiáng),可以在具體的SPI讀寫程序中實現(xiàn)其硬件接口的功能。1個SPI的時鐘周期就是執(zhí)行上述模擬串口指令所需要的時間,因此其串口速率主要由系統(tǒng)時鐘來決定,提高系統(tǒng)時鐘頻率能夠進(jìn)一步提高SPI串口的傳輸速率。
4 MSP430模擬SPI驅(qū)動數(shù)字電位器實例
圖5為芯片與單片機(jī)連接的引腳連接圖。片選CS在低電平時有效。按照時序圖和引腳連接圖,首先需要定義MSP430F449的I/O端口,P3.4為MOSI,P3.5為SCK,P3.7為CS,P4.0為MISO。
由于使用MSP430F449的I/O模擬串口通信,沒有使用中斷函數(shù),只需要調(diào)用一個子函數(shù)就能實現(xiàn)其功能,因此在操作上相比硬件而言更加簡單。下面給出了寫數(shù)據(jù)命令和遞增命令的子函數(shù)。
在主程序中進(jìn)行初始化及調(diào)用兩個子函數(shù):
此程序通過MSP430開發(fā)工具IAR Embedded Workbench編譯、運行,并下載程序運行。由于此程序是控制電阻網(wǎng)絡(luò)1的,通過萬用表來測電阻網(wǎng)絡(luò)1的抽頭和B端之間的電阻變化情況,可以看到電阻呈增長變化。由此可以看出程序是可執(zhí)行的,而且達(dá)到了預(yù)期的效果。然后在兩端加上電壓,可以發(fā)現(xiàn)所分的電壓也呈現(xiàn)增長趨勢,實現(xiàn)了良好的分壓功能。表1為電壓表顯示的部分讀數(shù)。
結(jié)語
本文描述了MSP430F449單片機(jī)模擬SPI通信接口的實現(xiàn),并用模擬SPI接口與電位器之間實現(xiàn)了很好的通信,給出了在IAR編譯環(huán)境下編寫的控制程序,控制電位器抽頭的移動規(guī)律。實驗表明系統(tǒng)能夠很好地實現(xiàn)電位器的分壓功能。利用數(shù)字電位器可以模擬一些線性函數(shù)的變化趨勢,建立數(shù)學(xué)模型來模擬現(xiàn)實生活中的一些物理量的變化情況。此外該功能函數(shù)的結(jié)構(gòu)簡單,可靠性高,該方法同樣適用于其他類型單片機(jī)。