技術(shù)參數(shù)
供電電源:24VDC±10%
輸入信號:取自內(nèi)置振動速度傳感器的信號
靈 敏 度:20mv/mm/s±5%
頻率響應(yīng):10 ~1000 Hz或者5~1000 Hz(特殊說明)
量 程:0-20mm/s(真有效值)
0-200um(峰-峰值)
測量誤差:±1%滿量程
輸出電流:4~20mA
輸出阻抗:≤500Ω
溫度范圍:運行時:-25℃~+65℃
儲存時:-40℃~85℃
相對濕度:至95%,不冷凝
外形尺寸:φ33×75mm
重 量:約340g
訂貨代號
XJ-9200A□□(可選)-□□(V/D)- A□□- B□□-C□□
選型說明
可選:防水接頭□:F-防水接頭
凱裝出線□:B-凱裝管
必選:選型說明
量程范圍□□:
振動速度量 10V-0~10mm/s; 20V*-0~20mm/s; 30V-0~30mm/s;……
振動位移量 100D-0~100μm;100D-0~200μm; 300D-0~300μm;……
安裝方向A□:
1-水平;2-垂直;3*-通用
安裝螺紋B□:
1*-M10×1.5;2-M8×1.25; 3-磁座;4-特殊定做
電纜長度C□:
1-1m;2*-2m;3-3m;……
無特殊情況,廠家按項生產(chǎn);如有特殊要求,請與我公司協(xié)商
選型舉例:XJ-9200A-20V-A3-B1-C2
水泵用振動傳感器RK-805
一些時候,我們需要通過熱電偶獲取溫度數(shù)據(jù)。在這里我們將討論如何實現(xiàn)并使用MAX31855熱電偶溫度變送器的驅(qū)動問題。
1、功能概述
MAX31855是具有冷端補償,能將K、J、N、T或E型熱電偶信號轉(zhuǎn)換成數(shù)字量的熱偶溫度變送器。該熱偶溫度變送器輸出14位帶符號數(shù)據(jù),通過SPI兼容接口、以只讀格式輸出。其引腳定義疾風(fēng)傳如下圖所示:
MAX31855器件處理來自熱電偶的讀數(shù),并通過串口發(fā)送數(shù)據(jù)。當(dāng)片選信號為低電平,并在SCK端施加時鐘信號,即可從SO讀取結(jié)果。MAX31855器件始終在后臺執(zhí)行轉(zhuǎn)換,只有片選信號CS為高電平時才能更新故障狀態(tài)和溫度數(shù)據(jù)。片選信號CS為低電平時,SO引腳將輸出位數(shù)據(jù)。通過SPI接口讀取完整的冷端補償熱電偶溫度,需要14個時鐘周期。讀取熱電偶和參考端溫度需要32個時鐘周期,其格式如下圖所示:
在時鐘下降沿讀取輸出位。位D31為熱電偶溫度符號位。D[30:18]位包含溫度轉(zhuǎn)換數(shù)據(jù),順序為MSB至LSB。D16位正常狀態(tài)下為低電平,熱電偶輸入開路或?qū)ND或VCC短路時變?yōu)楦唠娖?。參考端溫度?shù)據(jù)從D15開始。個數(shù)據(jù)位的定義如下:
MAX31855熱偶溫度變送器的溫度分辨率為0.25℃,溫度讀數(shù)為+1800℃,溫度讀數(shù)為-270℃,對于K型熱電偶,溫度范圍為-200℃至+700℃,保持±2℃精度。
2、驅(qū)動設(shè)計與實現(xiàn)
我們已經(jīng)了解了MAX31855熱偶溫度變送器的基本情況。接下來我們將依據(jù)MAX31855熱偶溫度變送器的各種配置參數(shù)設(shè)計并實現(xiàn)MAX31855熱偶溫度變送器的驅(qū)動程序。
2.1、對象定義
與以前的驅(qū)動設(shè)計一樣,我們依然是基于對象來設(shè)計MAX31855熱偶溫度變送器的驅(qū)動程序。所以我們要先抽象并定義MAX31855熱偶溫度變送器對象類型。一般來講對象包括屬性與操作兩方面,我們將據(jù)此逐一分析MAX31855熱偶溫度變送器對象的屬性與操作。
先考慮MAX31855熱偶溫度變送器對象的屬性。對于MAX31855熱偶溫度變送器來說,每次訪問返回的數(shù)據(jù)格式是固定的,這其中包括一些狀態(tài)位,所以為了記錄這些狀態(tài)位我們定義一個狀態(tài)量作為對象的屬性。還有讀回來的原始數(shù)據(jù)編碼、解析出來的檢測溫度和冷端溫度實際上表示了MAX31855熱偶溫度變送器當(dāng)時所處的狀態(tài),所以我們將其定義為對象的屬性。
再來考慮MAX31855熱偶溫度變送器對象的操作。對于MAX31855熱偶溫度變送器來說,操作就是獲取溫度檢測數(shù)據(jù),而讀取數(shù)據(jù)操作本身依賴于具體的軟硬件平臺,所提我們將其定義為對象的操作。而MAX31855熱偶溫度變送器采用SPI接口需要控制片選信號,當(dāng)然在總線上只有一臺設(shè)備時,我們可以直接將其通過硬件選中,但為了通用性我們還是使用軟件來控制片選操作,所以我們將片選動作作為對象的一個操作。
根據(jù)上述對MAX31855熱偶溫度變送器對象屬性和操作的分析,我們可以抽象的到MAX31855熱偶溫度變送器的對象類型如下:
復(fù)制/*定義MAX31855對象類型*/typedef struct Max31855Object { uint8_t status; uint32_t dataCode; float mTemperature; //TC測量溫度 float rTemperature; //冷端溫度 void (*ReadData)(uint8_t *rData,uint16_t rSize); void (*ChipSelcet)(Max31855CSType cs); //片選信號}Max31855ObjectType;
抽象了對象類型后就可聲明對象變量,可是這個對象變量必須作必要的初始化才能使用。所以我們需要一個初始化函數(shù)來對其進行初始化。在此函數(shù)中,我們將檢測變量的有效性和初始狀態(tài)賦值,并對設(shè)備進行必要的配置。根據(jù)這些要求我們設(shè)計MAX31855熱偶溫度變送器的對象初始化函數(shù)如下:
復(fù)制/*初始化MAX31855對象*/void Max31855Initialization(Max31855ObjectType *tc, Max31855ReadDataType read, Max31855ChipSelcetType cs ){ if((tc==NULL)||(read==NULL)) { return; } tc->ReadData=read; if(cs!=NULL) { tc->ChipSelcet=cs; } else { tc->ChipSelcet=DefaultChipSelect; } tc->status=0; tc->dataCode=0; tc->mTemperature=0.0; tc->rTemperature=0.0; tc->ChipSelcet(Max31855CS_Disable);}
2.2、對象操作
我們之所以定義這一對象,目的是為了操作該對象。接下來我們就來考了MAX31855熱偶溫度變送器對象的操作問題。我們使用MAX31855熱偶溫度變送器就是為了測量溫度。所以對MAX31855熱偶溫度變送器對象所要做的主要操作就是獲取溫度的轉(zhuǎn)換數(shù)據(jù)并解析出溫度值。對于MAX31855熱偶溫度變送器來說,除了熱電偶的測量溫度還有冷端的溫度,這兩個數(shù)據(jù)轉(zhuǎn)換值都是可以讀出來的,他們的格式如下:
根據(jù)前面的分析以及數(shù)據(jù)格式,我們可以設(shè)計獲取溫度數(shù)據(jù)的操作函數(shù)如下:
復(fù)制/*獲取MAX31855測量數(shù)據(jù)*/void Max31855GetDatas(Max31855ObjectType *tc){ uint8_t rData[4]; uint16_t tCode=0; uint16_t rCode=0; tc->ChipSelcet(Max31855CS_Enable); tc->ReadData(rData,4); tCode=(rData[0]<<8)+rData[1]; tCode=(tCode>>2); rCode=(rData[2]<<8)+rData[3]; rCode=(rCode>>4); tc->mTemperature=CalcMeasureTemperature(tCode); tc->rTemperature=CalcColdEndTemperature(rCode); tc->dataCode=(rData[0]<<24)+(rData[1]<<16)+(rData[2]<<8)+rData[3]; tc->ChipSelcet(Max31855CS_Disable);}
3、驅(qū)動的使用
我們已經(jīng)設(shè)計并實現(xiàn)了MAX31855熱偶溫度變送器對象的驅(qū)動程序。這一驅(qū)動程序的設(shè)計還需要驗證,所以我們需要設(shè)計一個簡單的應(yīng)用來驗證這一驅(qū)動程序的正確性。
3.1、聲明并初始化對象
為了基于對象操作MAX31855熱偶溫度變送器,我們還是需要聲明并初始化MAX31855熱偶溫度變送器對象變量。
復(fù)制Max31855ObjectType max31855;
聲明了這個對象變量,我們還需要使用前面設(shè)計的Max31855Initialization對象初始化函數(shù)對這個變量進行初始化。這個變量有幾個參數(shù):
復(fù)制Max31855ObjectType *tc, //MAX31855對象變量Max31855ReadDataType read, //讀MAX31855函數(shù)指針Max31855ChipSelcetType cs //片選操作函數(shù)指針
其中個參數(shù)為需要初始化的對象變量,后面兩個為操作回調(diào)函數(shù)的指針,這幾個函數(shù)我們是炫耀實現(xiàn)的,其原型定義如下:
復(fù)制typedef void (*Max31855ReadDataType)(uint8_t *rData,uint16_t rSize);typedef void (*Max31855ChipSelcetType)(Max31855CSType cs); //片選信號
這些函數(shù)的實現(xiàn)依賴于具體的軟硬件平臺,我們這里實現(xiàn)基于STM32F103的操作函數(shù),依據(jù)原型定義我們實現(xiàn)如下:
復(fù)制/*SPI1讀數(shù)據(jù)操作*/static void BmtcReadData(uint8_t *rData,uint16_t rSize){ HAL_SPI_Receive (&hspi1, rData, rSize, 1000);}/*SPI1片選操作函數(shù)*/static void BmtcChipSelcet(Max31855CSType cs){ if(Max31855CS_Enable == cs) { HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET); return; } HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET);}
這要初始化函數(shù)的全部參數(shù)皆已定義,我們可以初始化MAX31855熱偶溫度變送器對象如下:
復(fù)制/*初始化MAX31855對象*/ Max31855Initialization(&max31855, BmtcReadData, BmtcChipSelcet );
3.2、基于對象進行操作
事實上,這個驅(qū)動程序我們已經(jīng)應(yīng)用于具體的項目當(dāng)中,并且使用正常。所以在這個驗證中,我們直接將項目中的實現(xiàn)代碼節(jié)選如下:
復(fù)制/*獲取MAX31855測量數(shù)據(jù)*/ Max31855GetDatas(&max31855); aPara.phyPara.temperature=max31855.mTemperature; aPara.phyPara.rTemperature=max31855.rTemperature;
4、應(yīng)用總結(jié)
在我們的項目中,我們使用驅(qū)動實現(xiàn)了熱電偶的溫度采集,在使用過程中運行很穩(wěn)定,數(shù)據(jù)獲取及解析也沒有問題,所以驅(qū)動程序的設(shè)計應(yīng)該是符合要求的。
在使用驅(qū)動程序的時候要注意,MAX31855熱偶溫度變送器SPI端口的時鐘頻率有要求,主設(shè)備輸出的串行時鐘不要超過5MHz,我們設(shè)置為2.5MHz時運行比較穩(wěn)定。
在使用驅(qū)動時需注意,采用SPI接口的器件需要考慮片選操作的問題。如果片選信號是通過硬件電路來實現(xiàn)的,我們在初始化時給其傳遞NULL值。如果是軟件操作片選則傳遞我們編寫的片選操作函數(shù)。