幾乎所有嵌入式應(yīng)用中使用的一個(gè)共同特性是ADC模塊(模數(shù)轉(zhuǎn)換器)。這些模數(shù)轉(zhuǎn)換器可以從溫度傳感器、傾斜傳感器、電流傳感器、柔性傳感器等模擬傳感器讀取電壓。因此,在本教程中,我們將學(xué)習(xí)如何在MSP430G2中使用ADC使用Energia IDE讀取模擬電壓。我們將一個(gè)小電位計(jì)連接到MSP板,并向模擬引腳提供變化的電壓,讀取電壓并將其顯示在串行監(jiān)視器上。
了解 ADC 模塊:
相信我,連接和編程 MSP430G2 以讀取模擬電壓幾乎不需要 10 分鐘。但是,讓我們花一些時(shí)間來了解MSP板中的ADC模塊,以便我們能夠在所有即將推出的項(xiàng)目中有效地使用它。
微控制器是一種數(shù)字設(shè)備,這意味著它只能理解1和0。但在現(xiàn)實(shí)世界中,幾乎所有東西,如溫度、濕度、風(fēng)速等,本質(zhì)上都是模擬的。為了與這些模擬變化進(jìn)行交互,微控制器使用稱為ADC的模塊。有許多不同類型的ADC模塊可用,我們的MSP中使用的模塊是SAR 8通道10位ADC。
逐次逼近 (SAR) ADC:SAR ADC在比較器和一些邏輯對話的幫助下工作。這種類型的ADC使用基準(zhǔn)電壓(可變的),并使用比較器將輸入電壓與基準(zhǔn)電壓進(jìn)行比較,并從最高有效位(MSB)中保存差值(數(shù)字輸出)。比較的速度取決于MSP運(yùn)行的時(shí)鐘頻率(Fosc)。
10 位分辨率:該ADC是一款8通道10位ADC。這里術(shù)語 8 通道意味著有 8 個(gè) ADC 引腳,我們可以使用這些引腳測量模擬電壓。術(shù)語10位意味著ADC的分辨率。10 位表示 2 的 10 次方 (210) 即 1024。這是我們的ADC的樣本步進(jìn)數(shù),因此我們的ADC值范圍將從0到1023。該值將根據(jù)每步電壓值從 0 增加到 1023,可以使用以下公式計(jì)算
注意:默認(rèn)情況下,在Energia中,參考電壓將設(shè)置為Vcc(~3v),您可以使用analogReference()選項(xiàng)改變參考電壓。
電路圖:
在之前的教程中,我們已經(jīng)學(xué)習(xí)了如何將LCD與MSP430G2接口,現(xiàn)在我們只需向MSP430添加一個(gè)電位計(jì),為其提供可變電壓并在LCD上顯示電壓值。如果您不知道LCD的接口,請回退到上面的鏈接并通讀它,因?yàn)槲覍⑻^信息以避免悔改。該項(xiàng)目的完整電路圖如下。
如您所見,這里使用了兩個(gè)電位計(jì),一個(gè)用于設(shè)置LCD的對比度,另一個(gè)用于為電路板提供可變電壓。在該電位器中,電位計(jì)的一端連接到Vcc,另一端連接到接地。中心引腳(藍(lán)線)連接到引腳P1.7。該引腳P1.7將提供0V (地)至3.5V (Vcc)的可變電壓。因此,我們必須對引腳P1.7進(jìn)行編程以讀取此可變電壓并將其顯示在LCD上。
在 Energia 中,我們需要知道引腳 P1.7 屬于哪個(gè)模擬通道?這可以通過參考下圖找到
您可以在右側(cè)看到P1.7引腳,該引腳屬于A7(通道7)。同樣,我們也可以找到其他引腳的相應(yīng)通道號。您可以使用從 A0 到 A7 的任何引腳來讀取模擬電壓,我選擇了 A7。
針對 ADC 對 MSP430 進(jìn)行編程:
對MSP430 進(jìn)行編程以讀取模擬電壓非常簡單。在此程序中,將讀取值的模擬值并使用該值計(jì)算電壓,然后在LCD屏幕上顯示兩者。完整的程序可以在此頁面的底部找到,下面我將以片段形式解釋該程序,以幫助您更好地理解。
我們首先定義LCD引腳。這些定義了 LCD 引腳連接到 MSP430 的哪個(gè)引腳。您可以參考您的連接以確保引腳分別連接
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7
接下來,我們包括LCD顯示器的頭文件。這將調(diào)用包含有關(guān) MSP 應(yīng)如何與 LCD 通信的代碼的庫。默認(rèn)情況下,此庫將安裝在Energia IDE中,因此您無需費(fèi)心添加它。還要確保使用我們上面剛剛定義的引腳名稱調(diào)用函數(shù)液晶。
#include //This librarey is insatlled by default along with IDE LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); //Let the librarey know how we have connected the LCD
在我們的 setup() 函數(shù)中,我們只會給出一條介紹消息以顯示在 LCD 屏幕上。我沒有深入,因?yàn)槲覀円呀?jīng)學(xué)會了如何將LCD與MSP430G2一起使用。
lcd.begin(16, 2); //We are using a 16*2 LCD display
lcd.setCursor (0,0); //Place the cursor at 1st row 1st column
lcd.print("MSP430G2553"); //Display a intro message
lcd.setCursor(0, 1); // set the cursor to 1st column 2nd row
lcd.print("-CircuitDigest"); //Display a intro message
最后,在我們的無限循環(huán)()函數(shù)中,我們開始讀取提供給A7引腳的電壓。正如我們已經(jīng)討論過的,微控制器是一個(gè)數(shù)字設(shè)備,它不能直接讀取電壓電平。使用SAR技術(shù),電壓電平從0映射到1024。這些值稱為 ADC 值,要獲取此 ADC 值,只需使用以下行
int val = analogRead(A7); // read the ADC value from pin A7
這里函數(shù)analogRead()用于讀取引腳的模擬值,我們在它里面指定了 A7,因?yàn)槲覀円褜⒖勺冸妷哼B接到引腳 P1.7。最后,我們將此值保存在名為“val”的變量中。此變量的類型是整數(shù),因?yàn)槲覀冎粫@取要存儲在此變量中的 0 到 1024 之間的值。
下一步是根據(jù)ADC值計(jì)算電壓值。為此,我們有以下公式
Voltage = (ADC Value / ADC Resolution) * Reference Voltage
在我們的例子中,我們已經(jīng)知道微控制器的ADC分辨率是1024。ADC 值也在上一行中找到,并存儲了名為 val 的變量。基準(zhǔn)電壓等于微控制器的工作電壓。當(dāng) MSP430 板通過 USB 電纜供電時(shí),工作電壓為3.6V。您還可以使用Vcc上的萬用表和電路板上的接地引腳來測量工作電壓。所以上面的公式適合我們的情況,如下所示
float voltage = (float(val)/1024) * 3.6; //formulae to convert the ADC value to voltage
您可能會對線浮點(diǎn)數(shù) (val) 感到困惑。這用于將變量 “val” 從 int 數(shù)據(jù)類型轉(zhuǎn)換為 “float” 數(shù)據(jù)類型。這種轉(zhuǎn)換是必需的,因?yàn)橹挥挟?dāng)我們在浮點(diǎn)數(shù)中得到 val/1024 的結(jié)果時(shí),我們才能將其乘以 3.6。如果以整數(shù)形式接收值,則始終為 0,結(jié)果也將為零。一旦我們計(jì)算了ADC值和電壓,剩下的就是在LCD屏幕上顯示結(jié)果,這可以使用以下行來完成
lcd.setCursor(0, 0); // set the cursor to column 0, line 0
lcd.print("ADC Val:");
lcd.print(val); //Display ADC value
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print("Voltage:");
lcd.print(voltage); //Display voltage
在這里,我們在第一行顯示了ADC的值,在第二行顯示了電壓的值。最后,我們延遲 100 磨秒并清除 LCD 屏幕。這是每 100 密耳將更新的值。
測試您的結(jié)果!
最后,我們歸結(jié)為有趣的部分,即測試我們的程序并使用它。只需按照電路圖所示進(jìn)行連接即可。我使用小型面包板進(jìn)行連接,并使用跳線將面包板連接到 MSP430。連接完成后,我的如下所示。
然后通過 Energia IDE 將下面給出的程序上傳到 MSP430 板。您應(yīng)該能夠在LCD上看到介紹文字,如果不使用電位計(jì)調(diào)整LCD的對比度,直到看到清晰的文字。另外,請嘗試按下重置按鈕。如果一切按預(yù)期工作,那么您應(yīng)該能夠看到以下屏幕。
現(xiàn)在改變電位計(jì),您還應(yīng)該看到LCD中顯示的電壓發(fā)生變化。讓我們驗(yàn)證一下是否正確測量了電壓 為此,請使用萬用表測量 POT 中心和地面上的電壓。萬用表上顯示的電壓應(yīng)接近LCD上顯示的值,如下圖所示。
就是這樣,我們已經(jīng)學(xué)會了如何使用MSP430板的ADC測量模擬電壓?,F(xiàn)在,我們可以將許多模擬傳感器與我們的電路板連接,以讀取實(shí)時(shí)參數(shù)。
/*
* Reading Analog Voltage with MSP430 using Energia
*/
#define RS 2
#define EN 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7
#include //This librarey is insatlled by default along with IDE
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); //Let the librarey know how we have connected the LCD
void setup() {
lcd.begin(16, 2); //We are using a 16*2 LCD display
lcd.setCursor (0,0); //Place the cursor at 1st row 1st column
lcd.print("MSP430G2553"); //Display a intro message
lcd.setCursor(0, 1); // set the cursor to 1st column 2nd row
lcd.print("-CircuitDigest"); //Display a intro message
delay(2000); //Wait for display to show info
lcd.clear(); //Then clean it
}
void loop() {
int val = analogRead(A7); // read the ADC value from pin A7
Voltage = (ADC Value / ADC Resolution) * Reference Voltage
float voltage = (float(val)/1024) * 3.6; //formulae to convert the ADC value to voltage
lcd.setCursor(0, 0); // set the cursor to column 0, line 0
lcd.print("ADC Val:");
lcd.print(val); //Display ADC value
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print("Voltage:");
lcd.print(voltage); //Display voltage
}
-
adc
+關(guān)注
關(guān)注
98文章
6396瀏覽量
543806 -
IDE
+關(guān)注
關(guān)注
0文章
334瀏覽量
46614 -
模擬電壓
+關(guān)注
關(guān)注
6文章
64瀏覽量
18278 -
MSP430G2
+關(guān)注
關(guān)注
1文章
18瀏覽量
12873
發(fā)布評論請先 登錄
相關(guān)推薦
評論