基于STM 32和LTC 1859的數據采集系統(tǒng)
崔海朋 (青島杰瑞工控技術有限公司,山東?青島?266071)
摘? 要:現在很多采集系統(tǒng)要求較高的精度,而且信號形式、范圍也有所不同,處理電路比較復雜,硬件成本 高。為了解決該問題,設計了基于STM32和LTC1859的16位高精度數據采集系統(tǒng),詳細介紹了軟硬件設計。此 系統(tǒng)不僅可以實現8路電流信號的單端輸入,也可以實現8路電壓信號的單端輸入,成本低,精度高。
0 引言
現在很多數據采集系統(tǒng)要求較高的精度,同時要求 可以適應不同的信號形式,例如可以連接電流信號、電 壓信號,信號的范圍也不同,常規(guī)的方法是采用復雜的 電路處理再進行數據采集,這樣不僅增加了硬件成本, 還降低了系統(tǒng)精度。本系統(tǒng)設計的基于Cortex-M3處理 器和 LTC1859的 16位高精度數據采集系統(tǒng),不僅可以 實現8路的電流信號的輸入,還可以實現8路電壓信號的 輸入,對輸入信號的范圍可以通過軟件來設置,同時 AD采集電路與Cortex-M3處理器采用了電源隔離和信 號隔離,提高了系統(tǒng)的可靠性。
LTC1859是ADI公司推出的一款高性能的具停機功 能的8通道、 16位、100 ksps的 AD轉換器,每個通道可 通過軟件實現 0~5 V,0~10 V,0~±5 V,0~± 10V的 不同范圍的輸入電壓,同時還可以實現單輸入和差分 信號輸入的選擇,每個通道可承受至±25 V的故障保 護。LTC1859的多路復用器可以配置為接受 4個差分輸 入、8個單端輸入、或差分與單端輸入的組合。該器件 提供了卓越的DC性能,具有在整個溫度范圍內的15位無漏失碼和±3 LSB MAX INL。LTC1859與控制器之 間采用SPI總線進行通信。LTC1859用單5 V電源工作, 同時僅消耗40 mW功率。LTC1859還具有溫度系數為 ±1.0×10-5/℃的 2.5 V內部基準,如果需要較高的準確 度,還可以從外部驅動。對于那些對功耗敏感的應用, LTC1859提供了兩種斷電模式:打盹模式和休眠模式。
本系統(tǒng)的 Cortex-M3處理器為意法半導體公司推 出的32位RISC處理器STM32F103VCT6,主頻最高可 達72 MHz。該處理器具有256 kB的程序存儲器,48 kB 的RAM,同時它有8個定時器、5路串口、3路SPI、2 路I2C,具有獨立看門狗和窗口看門狗,非常適合于與 LTC1859構成高精度的數據采集和控制系統(tǒng)。
1 硬件系統(tǒng)設計
本系統(tǒng)設計了由 2片LM324運放和1片 LTC1859構 成 8通道的單端信號輸入。每片LM324含有4個運放,2 片LM324構成了8路信號調理電路,其中電阻實現電流 信號到電壓信號的轉換,當連接電壓信號時,該電阻 不連接。LM324為電壓跟隨器電路,這里不再詳述。LTC1859的電路如圖1所示。本電路具有通用性,在實 際應用中性能穩(wěn)定,效果很好。下面對電路進行詳細 分析。
LTC1859引腳中CH0~CH7是8路模擬輸入通道, 在本系統(tǒng)中構成了8路單端輸入信號。 MUXOUT+、 MUXOUT-為模擬復用器的正負輸出,把它們連在 ADC+、ADC-上進行正常操作。BUSY為輸出轉換 器的狀態(tài),當正在轉換中為低,轉換結束變高,連在 ARM處理器的I/O口上,SDO為SPI總線的串行數據輸 出,接在Cortex-M3處理器的SPI接口的MISO引腳上, SDI為SPI總線的串行數據輸入,接在Cortex-M3處理器 的SPI接口的MOSI引腳上,SCK為SPI總線的時鐘,接 在Cortex-M3處理器的SPICLK上。RD為引腳SDO數字 輸出的能使信號,當RD為低能使輸出,當RD為高SDO 為高阻抗。在本系統(tǒng)中,該引腳連接至地,一直使能
LTC1859的輸出功能。CONVST為啟動轉換引腳。其它 引腳分別接電源、數字地、模擬地,在布線時注意數字 地和模擬地的分開,幾個電容推薦采用鉭電容,這樣可 以提高系統(tǒng)的精度。
2 隔離電路設計
為了提高系統(tǒng)的可靠性,本系統(tǒng)設計了電源隔離和 SPI總線隔離電路,使LTC1859采集電路與Cortex-M3處 理器電氣完全隔離,外部輸入信號不會影響到處理器電 路的運行,大大提高了系統(tǒng)的可靠性。下面從2個方面 來重點介紹。
2.1 電源隔離
LTC1859的供電采用DC/DC變換器實現電源與 CPU電源的隔離。電源模塊采用廣州金升陽公司的 B1212M-2M。B1212M-2M采用小型DIP封裝,溫度特 性好,隔離電 壓1 000 V DC。 圖2中12 V輸出 電壓為前端信 號調理電路中 LM324芯片供 電,后端電源采 用了L7805CV穩(wěn) 壓,為LTC1859 供電。
2.2 SPI總線的 隔離是非常關 鍵的一部分
本系統(tǒng)采 用了專用的 SPI隔離芯片 ADUM1411。 它是ADI公司推 出的四通道數 字隔離芯片, 單芯片可以替 代 4 個光耦,采用芯片級脈沖變壓器磁耦合技術,施密特觸發(fā)器輸 入/輸出,隔離電壓2 500 V。與傳統(tǒng)的光耦隔離相比, 具有壽命長,節(jié)省PCB(印制板)面積等諸多優(yōu)點。 每個ADUM1411芯片含有3路數字輸出和1路數字輸入 通道。由于LTC1859有5條控制線與Cortex-M3處理器 進行通訊,因此本系統(tǒng)選用了2片ADUM1411實現與 Cortex-M3處理器的完全隔離。電路如圖3所示。
3 軟件設計
系統(tǒng)采用SPI總線通信,軟件的關鍵是Cortex-M3處 理器和LTC1859之間的時序匹配,下面詳細介紹。
3.1 LTC1859軟件配置
LTC1859是在SCK的下降沿傳輸,上升沿被捕獲, 這就要求Cortex-M3處理器在進行SPI初始化時采用上 升沿無延時模式。8位的控制字通過SDI輸入,用于配 置LTC1859以進行下一個轉換,同時前一個轉換輸出在 SDO上輸出,在數據交換的末端,在CONVST上施加1 個上升沿啟動被請求的轉換。轉換完成后,轉換結果將 在下1個數據傳送周期提供。LTC1859的8位命令控制字 在首8個SCK的上升沿按時間順序記錄到SDI輸入中, SDI隨后的輸入的位被忽略。8位的控制字含有對通道地 址、信號輸入范圍和斷電模式的控制,具體內容參見手 冊,這里不再贅述。本系統(tǒng)中配置為8通道單端輸入方 式,信號輸入范圍默認配置為0~5 V,斷電模式設置為上電模式,不進入打盹和休眠模式。
3.2 Cortex-M3處理器SPI接口配置
Cortex-M3處理器的SPI接收設置為全雙工主模式。 為了一次可以讀取到LTC1859轉換后的16位的結果, SPI接收設置為16位模式。禁止軟件NSS功能,SPI的速 率默認設置為256分頻后的速率,實際應用可以根據需 要進行更改。初始化代碼如下:
void SPI1_Configuration(void)
{
SPI_InitTypeDef SPI_ InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //全雙工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;//16bit模式
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //空閑時為低電平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //上升沿無延遲模式
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //禁止軟件NSS功能
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_ BaudRatePrescaler_256; //SPI速率設置
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位先發(fā)
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}
3.3 模數轉換采集
下面詳細介紹軟件編寫,SPI總線的時鐘很快,既 可以采用中斷方式,也可以采用查詢方式。本系統(tǒng)采用查詢方式,其軟件流程如圖 4所示。
程序源代碼及其詳細注釋如下,該函數的入口參數 為通道號,即為0~7,函數根據通道號讀取該通道的數 據,同時將該數據值返回,其中部分函數為STM32的庫 函數,這里不再詳細講述。
u16 ReadADC1859(u16 channel)
{
u16 control_code;
control_code=Get_Control_Code(channel);//根 據通道計算控制字
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_ FLAG_TXE) == RESET); //等待發(fā)送緩沖器為空
SPI_I2S_SendData(SPI1,control_code); //發(fā)送 控制字
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_ FLAG_RXNE) == RESET);//等待接收緩沖器變非空
temp_value = SPI_I2S_ReceiveData(SPI1); / / 讀取數據
GPIO_ResetBits(GPIOA, GPIO_Pin_4);//convst 置低
GPIO_SetBits(GPIOA, GPIO_Pin_4); //convst 置高啟動一個轉換
delay40ns(); //延遲
delay40ns();
GPIO_ResetBits(GPIOA, GPIO_Pin_4);//將 convst拉低
while(GPIO_ReadInputDataBit(GPIOC, GPIO_ Pin_4)==0x00); //等待busy變高
delay40ns(); //延遲
delay40ns();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_ FLAG_TXE) == RESET); //等待發(fā)送緩沖器為空
SPI_I2S_SendData(SPI1,control_code); //發(fā)送 控制字
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_ FLAG_RXNE) == RESET);//等待接收緩沖器變非空
temp_value = SPI_I2S_ReceiveData(SPI1); / / 讀取數據
return temp_value; //數據返回
}
4 結論
本系統(tǒng)成功實現了基于STM32處理器和LTC1859的 16位高精度數據采集系統(tǒng),給出了全新實用的硬件和軟 件設計,適用于不同信號類型和電壓范圍變化較大的數 據采集系統(tǒng)。該系統(tǒng)精度高,成本低,可靠性高,具有 一定的應用推廣價值。
參考文獻:
[1] LTC1857/LTC1858/LTC1859 DataSheet[EB]. Linear Corp, 2004.
[2] 李軍民,祝紅軍,王瑞.基于DSP和LTC1859數據采集系統(tǒng)設計 [J].微計算機信息,2010,26(02):115-117.
[3] 陳東升,高俊俠,胡科堂.基于STM32的遠程溫控系統(tǒng)設計[J].電 子產品世界,2011(5):30-32.
[4] 王永虹,徐煒,郝立平.STM32系列ARM Cortex-M3微控制器原理及實踐[M].北京:北京 航空航天大學出版社,2008.
本文來源于科技期刊《電子產品世界》2020年第03期第43頁,歡迎您寫論文時引用,并注明出處。
評論