咨詢電話
ENGLISH0755-88840386發(fā)布時間:2020-09-27 09:26:30 |來源:網(wǎng)絡(luò)轉(zhuǎn)載
0前言
在工業(yè)自動化領(lǐng)域,很多應(yīng)用場合都需要用到稱重儀表,例如包裝輸送帶、分選機、充絨機等。這些應(yīng)用一般都以PLC為主要控制設(shè)備,要求同時采集多只稱重傳感器的重量數(shù)據(jù),進行相關(guān)控制。傳統(tǒng)的方案是將每只稱重傳感器輸出的mV級信號經(jīng)過模擬放大器變送到0~5V或者4~20mA的工業(yè)標(biāo)準(zhǔn)過程信號,再輸入到PLC的模擬量模塊,進行AD轉(zhuǎn)換處理。這種處理方式容易存在信號處理精度不高,溫度特性不佳,以及成本造價較高等缺點,而且由于PLC處理速度的限制,在進行數(shù)字濾波等軟件處理方面往往受到限制。采用市面上單通道的數(shù)字儀表又存在著占用空間大、安裝接線復(fù)雜、循環(huán)讀取效率低等問題。本文采用了多通道數(shù)字儀表的設(shè)計思路,可以用ModbusRTU命令一次讀取全部所有通道的稱重數(shù)據(jù),很好地解決了上述問題。
1功能概述
本設(shè)計的多通道數(shù)字稱重儀表釆用多顆獨立高精度ASADC,內(nèi)置PGA,直接對稱重傳感器輸出的mV信號進行AD轉(zhuǎn)換,并經(jīng)ARM內(nèi)核的32位處理器進行數(shù)字濾波、標(biāo)度變換,配有RS485總線接口,支持標(biāo)準(zhǔn)ModbusRTU協(xié)議,將多通道稱重數(shù)據(jù)上傳到PLC做控制處理。為了在實際應(yīng)用時方便調(diào)試,本設(shè)計采用了輕觸式按鍵和點陣式液晶屏做菜單式人機交互界面。為了適應(yīng)工業(yè)現(xiàn)場環(huán)境,設(shè)計時考慮了各種軟硬件抗干擾措施,以滿足EMC/EMI要求。為了安裝方便,釆用工業(yè)標(biāo)準(zhǔn)導(dǎo)軌式安裝方式。本儀表以4通道為基本設(shè)計,可接4個通道擴展模塊,每個擴展模塊可擴充2通道,最多支持12通道。支持通過SD卡進行固件升級。
2硬件電路設(shè)計
本儀表硬件電路部分由MCU及存儲器、SD卡接口、LCD顯示及按鍵、ADC、電源、通信等部分組成。
2.1MCU及存儲、LCD顯示及按鍵部分
如圖1所示,MCU選用意法半導(dǎo)體公司32位ARMCorte-M3內(nèi)核處理器STM32F103RCT6。存儲部分外掛了I2C接口的EEPROM,用于存儲儀表工作參數(shù)。LCD釆用的是串行接口的12864液晶模塊,背光釆用PWM控制。按鍵部分是普通的并行10輸入。
2.2ADC部分
ADC部分如圖2所示。稱重傳感器通常采用應(yīng)變式原理,為全橋式惠斯通電橋形式,輸出信號一般都是mV級。以常見的2.0mV/V靈敏度傳感器為例,在橋路激勵電壓為10V時,其滿量程輸出為:
2mV/Vxl0V=20mV
數(shù)字稱重儀表傳感器橋壓和ADC參考電壓通常采用比例式接法以降低橋壓波動對轉(zhuǎn)換結(jié)果的影響。為了簡化電源設(shè)計,傳感器橋路激勵電壓選擇5V,這樣傳感器滿度輸出會降低到:
2mV/Vx5V=10mV
在這個數(shù)量級的輸入電壓條件下,為了實現(xiàn)十萬分之一以上的測量分辨率,要求ADC有良好
圖1MCU、存儲及顯示按鍵部分
的無噪聲分辨率等指標(biāo)。本設(shè)計選用CS5532ASZO在參考電壓為5V的情況下,其滿量程差分輸入范圍為:
VFS=5000mV/(64x2)=39mV
按無噪聲分辨率19位算,當(dāng)輸入39mV滿量程電壓時,能得到約26萬無噪聲碼。滿量程輸入10mV算,無噪聲AD碼為6.5萬。通過后續(xù)做進一步的軟件濾波能實現(xiàn)10萬以上的有效輸出AD碼。采用4片CS5532獨立并行采集,保證了通道之間的同步和獨立有效的輸出速率。
圖2ADC部分
2.3電源部分
電源部分如圖3所示。本儀表采用直流24V供電,經(jīng)電源隔離模塊后,輸出電壓為6V,輸出功率為6W。儀表工作電源分為數(shù)字和模擬兩部分。數(shù)字部分電源有5V和3.3V,分別由6V電壓經(jīng)兩路LDO降壓得到,供CPU等外圍電路使用;模擬電源部分是由6V電壓經(jīng)過每個通道各自的專用LDO降為5V,提供給各通道的ADC芯片及傳感器擠壓。
2.4通訊部分
通信接口為RS485,支持ModbusRTU協(xié)議。通信和MCU相互電氣隔離,有效提高了抗干擾能力,如圖4所示。
3軟件設(shè)計
軟件開發(fā)環(huán)境采用IARforSTM32O通過STM32配置工具STM32CubeMX設(shè)置好10口,中斷,定時器等資源后,直接可以生成IARI程文件基本配置代碼,直接打開即可進一步進行編程。
我們釆用傳統(tǒng)的模塊式編程方式。主要功能模塊有外設(shè)初始化模塊、參數(shù)初始化模塊、顯示及按鍵處理模塊、濾波及標(biāo)度變換模塊、主循環(huán)調(diào)度模塊、ADC完成中斷處理子程序、定時器中斷服務(wù)子程序、通信中斷服務(wù)子程序和參數(shù)及SD卡存儲服務(wù)函數(shù)等。其中主循環(huán)模塊包括ADC標(biāo)度變換,數(shù)字量10,通信協(xié)議解析等。下面重點介紹主要的幾個模塊功能。
3.1參數(shù)初始化模塊
儀表參數(shù)存儲在MCU內(nèi)部的Flash及外掛的EEPR0M芯片中,互為備份。開機時,對參數(shù)存儲進行CRC校驗。發(fā)現(xiàn)錯誤,則用正確的拷貝覆蓋,提高了參數(shù)存儲的可靠性。
參數(shù)定義如下:
所有參數(shù)統(tǒng)一采用32位整型定義,簡化了讀寫及存儲函數(shù)。預(yù)定義參數(shù)編號:
〃顯示量程上限
〃波特率
〃從站站號
enum|//參數(shù)索引定義
paramDisplayRangeHigh,paramBaudRate,paramDeviceld,
constTParamDefParamDef[]={//參數(shù)定義舉例{10000,esNumber,-99999,99999,2},
{3,esList,0,4,0],
11,esNumber,1,254,0}
h
constunsignedchar*sBaudRate]]=|
“1200bps”,
“2400bps”,
“4800bps”,
“9600bps”,
“19200bps”
上面的例子定義了3個參數(shù):
(1)參數(shù)paramDisplayRangeHigh:索引值0,出廠默認(rèn)值100.00,編輯方式為數(shù)值方式,最小值-999.99,最大值999.99,小數(shù)點位置2。
(2)參數(shù)paramBaudRate:索引值1,出廠默認(rèn)值3,即9600bps,編輯方式為下拉列表方式,最小值0即1200bps,最大值4即19200bps,無小數(shù)點。
(3)參數(shù)paramDeviceld:索引值2,出廠默認(rèn)值1,編輯方式為數(shù)值方式,最小值1,最大值254,無小數(shù)點。
3.2顯示模塊
顯示模塊負(fù)責(zé)測量狀態(tài)下顯示各個通道的測量值,參數(shù)編輯狀態(tài)下顯示及編輯參數(shù)等。針對12864點陣液晶模塊,我們提取了幾個不同點陣的字模,含有26個英文字母、0~9數(shù)字及常用的符號,主要函數(shù)有:
voidDisplay8x8Pattern(unsignedcharx,unsignedchary,unsignedchar*pattern);//在指定位置顯示一個8x8點陣圖像
voidDisplay16x12Pattern(unsignedcharx,unsignedchary,unsignedchar*pattern);//在指定位置顯示一個16x12點陣圖像voidDisplay24xl6Pattem(unsignedcharx,unsignedchary,unsignedchar*pattern);//在指定位置顯示一個24x16點陣圖像voidDisplayChar(ICharStylestyle,unsignedcharx,unsignedchary,unsignedcharch);//在指定位置顯示一個特定點陣的字符voidDisplayStrNull(TPattemStylestyle,unsignedcharx,unsignedchary,unsignedcharch);//在指定位置顯示一個特定點陣的以NULL結(jié)尾的字符串
voidDisplaylnt32(TPattemStylestyle,unsignedcharx,unsignedchary,int32val);〃在指定位置顯示-•個特定點陣的32位整數(shù)c點陣類型由以下定義:
typedefenum|ps8x8,psl6xl2,ps24xl6\TPattemStyle;
3.3按鍵處理模塊
按鍵處理模式包括SET鍵處理、移位鍵處理、功能鍵處理等。按鍵值索引定義:
enum|kbSET,kbSHIFT,kbINC,kbDEC,kbFl,kbF2,kbLONG_SET,kbLONG_SHIFT|:
在10ms定時器中斷服務(wù)子程序里做按鍵掃描,每次中斷記錄一次某個或者某兩個按鍵的按壓時間及抬起時間,作為按鍵消抖處理,并識別單鍵或者組合鍵鍵值。鍵值為-1的時候,表示無任何按鍵按下。主循環(huán)根據(jù)鍵值進入到對應(yīng)的按鍵功能處理函數(shù)。
3.4濾波及標(biāo)度變換模塊
這是稱重儀表的主要功能模塊。稱重儀表的數(shù)據(jù)處理流程為:AD原碼讀出-初始軟件濾波一系統(tǒng)校準(zhǔn)(內(nèi)碼值規(guī)格化)T用戶標(biāo)定(多段標(biāo)定、零點跟蹤、去皮)T顯示值。軟件濾波要根據(jù)實際應(yīng)用選擇合適的濾波算法,常見的有加權(quán)滑動平均值濾波、一階滯后濾波、消抖濾波等。成熟的產(chǎn)品會有幾種濾波方法的組合應(yīng)用,并且可由用戶在現(xiàn)場自由調(diào)整濾波參數(shù)6良好的軟件濾波會有效增加系統(tǒng)的無噪聲分辨率。系統(tǒng)校準(zhǔn)是為了消除儀表模擬鏈路的離散誤差,將內(nèi)碼值統(tǒng)一規(guī)格化到一個特定值。本儀表在輸入標(biāo)準(zhǔn)滿量程的2mV/V時,通過系統(tǒng)校準(zhǔn)為1000000(一百萬)內(nèi)碼。'用戶標(biāo)定是指標(biāo)定到用戶所實際使用的傳感器量程。用戶標(biāo)定釆用多段線性變換的方法,即根據(jù)輸入的內(nèi)碼值,查表得到對應(yīng)的線性方程,進而計算出工程量綱值PV。
零點跟蹤是為了消除傳感器在零點附近的輸出漂移。我們采用的方法是,當(dāng)PV值處于零點跟蹤區(qū)域內(nèi),維持穩(wěn)定一段時間,則將此時的零點重設(shè)為0。去皮即是人為的顯示值遷移。
3.5主循環(huán)調(diào)度模塊
主循環(huán)依次判斷各個中斷服務(wù)子程序設(shè)置的各種信號量標(biāo)志,并進入到相應(yīng)的服務(wù)函數(shù)中。例如按鍵標(biāo)志、定時器標(biāo)志、ADC讀取完成標(biāo)志、串行口接收到一幀數(shù)據(jù)標(biāo)志等。本設(shè)計沒有運行RTOS,UCOS等嵌入式實時操作系統(tǒng),要防止一些占用時間較長的函數(shù)過程影響主循環(huán)的調(diào)度效率。例如全屏幕的顯示刷新會影響儀表對ModbusRTU通訊命令的及時響應(yīng)。將此類函數(shù)里面耗時的循環(huán)過程拆分成在主循環(huán)里面多次調(diào)度逐步執(zhí)行的函數(shù)片是一個可行的辦法。
3.6ADC完成中斷處理子程序
CS5532配置成連續(xù)采集模式。完成一次AD轉(zhuǎn)換后,芯片會拉低SDO引腳指示AD數(shù)據(jù)已經(jīng)準(zhǔn)備好讀出。將SDO引腳連到MCU的某外部中斷引腳,即可以用中斷方式及時讀取ADC結(jié)果。中斷方式要配置成下降沿觸發(fā),并在讀取結(jié)束,中斷返回時,清除中斷標(biāo)志,置位ADC完成標(biāo)志位,供主循環(huán)查詢處理。
3.7定時器中斷服務(wù)子程序
定時器中斷主要用于按鍵掃描、顯示刷新、
ModbusRTU幀中斷處理、通用異步延時等。
3.8通訊中斷服務(wù)子程序
STM32片上USART提供接收和發(fā)送中斷。我們設(shè)置兩個接收緩沖區(qū)和一個發(fā)送緩沖區(qū)。當(dāng)收到一個串行字符時,會觸發(fā)接收中斷。在中斷服務(wù)函數(shù)里面,首先進行本機地址判斷,是本機地址則初始化接收緩沖區(qū)指針,并將接收到的字節(jié)數(shù)(下轉(zhuǎn)第75頁)
據(jù)存入,指向下一個緩沖區(qū)位置并啟動幀判斷定時器;否則即將緩沖區(qū)指針設(shè)為-1。當(dāng)幀判斷定時器溢出時,在中斷服務(wù)子程序里面將緩沖區(qū)數(shù)據(jù)拷貝到工作區(qū),并置位幀接收標(biāo)志,供主循環(huán)處理。
發(fā)送數(shù)據(jù)時,將要發(fā)送的數(shù)據(jù)拷貝到發(fā)送緩沖區(qū),并設(shè)定要發(fā)送的數(shù)據(jù)長度,然后將緩沖區(qū)首字節(jié)送給USART發(fā)送寄存器。當(dāng)一個字節(jié)發(fā)送完成后,會觸發(fā)發(fā)送完成中斷,在該中斷里面將發(fā)送指針加一,要發(fā)送的數(shù)據(jù)個數(shù)減一即可,直到發(fā)送完所有數(shù)據(jù)。ModbusRTU對幀定時有著嚴(yán)格的要求,要根據(jù)波特率調(diào)整幀定時時間。采用光耦做收發(fā)控制線隔離時,要格外注意其轉(zhuǎn)換速率的影響。
BootLoader我們要在BootLoader里面操作SD卡以支持通過SD卡升級固件,其流程如下:開機首先檢測SD卡內(nèi)是否有符合要求的固件升級文件,有的話讀出版本信息和當(dāng)前固件版本做比較,是新版本則詢問是否升級,否則直接跳到App。
ModbusRTU協(xié)議我們把儀表的通道測量值和運行參數(shù)一一對應(yīng)到Modbus保持寄存器區(qū),支持多寄存器的連續(xù)讀寫操作,可與PLC等ModbusR-TU主站設(shè)備方便快捷交換數(shù)據(jù)。保持寄存器和內(nèi)
部參數(shù)對應(yīng)舉例如表1所示。
PLC通過發(fā)送一次ModbusRTU讀保持寄存器命令,即可讀出全部4組通道的測量值。
PLC發(fā)送:010300000008(此處省略CRC校驗碼)
儀表回傳:010310CHICHICHICHICH2CH2CH2CH2CH3CH3CH3CH3CH4CH4CH4CH4(此處省略CRC校驗碼)
其中CHI~CH4測量值各占4個字節(jié),即32位。
文章來源于網(wǎng)絡(luò)轉(zhuǎn)載,侵刪