本示例是NetDIY智能主控板上的第二個應用程序。html
本示例經過AM1001模塊採集溫溼度數據,並經過模擬量輸出。工具
智能主控板照片以下。
url
AM1001模塊如圖所示:spa
該AD通道可採集的電壓範圍是0~3.3V(全部採集通道的總電路不要超過20mA),注意不要超出該範圍,以避免對芯片形成永久的損害(具體指標能夠參見STM32F207相關數據手冊)。調試
傳感器採用四線方式,5V供電,並提供了一些以供計算的標準參數。對溼度採集來講,相應管腳直接輸出0~3V的電壓值,而後直接查表就能夠很容易計算出溼度值來。而溫度採集卻不一樣,輸出的電壓範圍大概是0~0.8V,變化很是小,而且不能經過這個電壓值,直接查表獲取溫度值,而是間接計算出電阻值,而後再查表獲取相關溫度值。orm
溫度採集除了這些和溼度採集不一樣外,還須要外加一個電阻,該電阻的阻值要和傳感器模塊中的溫敏電阻25度時的阻值同樣(主要目的是便於計算)。外接電阻和溫敏電阻實際上是串聯在一塊兒,咱們已經對AM1001模塊進行相應調整,已經將外接電阻集成到AM1001內部,電阻阻值爲10KΩ,AD採集的就是這10K上的電壓值。那麼溫敏電阻的阻值就能夠這樣計算:假設10K上的電壓值爲V,那麼溫敏電阻上的電壓就是5-V(由於模塊供電電壓爲5V),根據等比公式就能夠知道當前溫敏電阻的值R= (5 - V) / V * R0。htm
其中溼度採集部分代碼以下:開發
//溼度get
static double ConvertHumidity(double value)
{
double V = (value / 4096) * 3.3;
return DataTransition(V, AMT1001_Voltage, AMT1001_Humidityvalue);
}
溼度採集部分代碼以下:
//溫度
static double ConvertTemperature(double value)
{
double V = (value / 4096) * 3.3;
double R = (5 - V) / V * AMT1001_R;
return DataTransition(R, AMT1001_Resistance, AMT1001_Temperaturevalue);
}
主方法中的代碼以下:
AnalogInput AI1 = new AnalogInput(Mainboard.ADC.Channel0);
//模擬量輸入通道爲channel0,對應CPU管腳PA7,溫溼度傳感器的黃線
AnalogInput AI2 = new AnalogInput(Mainboard.ADC.Channel1);
//模擬量輸入通道爲channel1,對應CPU管腳PA6,溫溼度傳感器的白線
double H, //溼度
T; //溫度
string info = "";
while (true)
{
info = "H=";
H = ConvertHumidity(AI1.ReadRaw());
//讀取溼度值
T = ConvertTemperature(AI2.ReadRaw());
//讀取溫度值
info += H.ToString("F2") + "% ; T=" + T.ToString("F2") + "℃";
Debug.Print(info);
//在輸出窗口中打印結果
Thread.Sleep(1000);
}
採用MFDeploy.exe調試工具,程序運行結果以下圖所示: