導(dǎo)軌式多通道數(shù)字稱重儀表設(shè)計(jì)
文章介紹了種導(dǎo)軌式多通道地磅數(shù)字稱重儀表的硬件電路設(shè)計(jì)要點(diǎn)和軟件編程方法,提出了類似產(chǎn)品設(shè)計(jì) 時的新思路,尤其是在模塊式通道擴(kuò)展方式、儀表相關(guān)參數(shù)定義等方面有自己到的想法。
0.前言
在工業(yè)自動化域,很多應(yīng)用場合都需要用 到稱重儀表,例如包裝輸送帶、分選機(jī)、充絨機(jī) 等。這些應(yīng)用般都以PLC為主要控制設(shè)備,要 求同時采集多只稱重傳感器的重量數(shù)據(jù),進(jìn)行相 關(guān)控制。傳統(tǒng)的方案是將每只稱重傳感器輸出的 mV信號經(jīng)過模擬放大器變送到0 ~5V或者4 ~ 20 mA的工業(yè)標(biāo)準(zhǔn)過程信號,再輸入到PLC的模 擬量模塊,進(jìn)行AD轉(zhuǎn)換處理。這種處理方式容易 存在信號處理精度不高,溫度特性不佳,以及成 本造價較高等缺點(diǎn),而且由于PLC處理速度的限 制,在進(jìn)行數(shù)字濾波等軟件處理方面往往受到限 制。采用市面上單通道的數(shù)字儀表又存在著占用 空間大、安裝接線復(fù)雜、循環(huán)讀取效率低等問題。 本文采用了多通道數(shù)字儀表的設(shè)計(jì)思路,可以用 Modbus RTU命令次讀取全部所有通道的稱重?cái)?shù) 據(jù),很好地解決了上述問題。
1.功能概述
本設(shè)計(jì)的多通道數(shù)字稱重儀表采用多顆立 高精度ASADC,內(nèi)置PGA,直接對稱重傳感器輸 出的m號進(jìn)行AD轉(zhuǎn)換,并經(jīng)ARM內(nèi)核的32 位處理器進(jìn)行數(shù)字濾波、標(biāo)度變換,配有RS485 總線接口,支持標(biāo)準(zhǔn)Modbus RTU協(xié)議,將多通道 稱重?cái)?shù)據(jù)上傳到PLC做控制處理。為了在實(shí)際應(yīng) 用時方便調(diào)試,本設(shè)計(jì)采用了輕觸式按鍵和點(diǎn)陣 式液晶屏做菜單式人機(jī)交互界面。為了適應(yīng)工業(yè) 現(xiàn)場環(huán)境,設(shè)計(jì)時考慮了各種軟硬件抗干擾措施, 以滿足EMC/EMI要求。為了安裝方便,采用工業(yè)標(biāo)準(zhǔn)導(dǎo)軌式安裝方式。本儀表以4通道為基本設(shè) 計(jì),可接4個通道擴(kuò)展模塊,每個擴(kuò)展模塊可擴(kuò) 充2通道,多支持12通道。支持通過SD卡進(jìn) 行固件升。
2.硬件電路設(shè)計(jì)
本儀表硬件電路部分由M⑶及存儲器、SD卡 接口、LCD顯示及按鍵、ADC、電源、通信等部 分組成。
2.1MCU及存儲、LCD顯示及按鍵部分
如圖1所示,MCU選用意法半導(dǎo)體公司32位 ARM Corte-M3 內(nèi)核處理器 STM32F103RCT6。存儲 部分外掛了 I2C接口的EEPR0M,用于存儲儀表 工作參數(shù)。LCD采用的是串行接口的12864液晶 模塊,背光采用PWM控制。按鍵部分是普通的并 行IO輸入。
2. 2 ADC部分
ADC部分如圖2所示。稱重傳感器通常采用 應(yīng)變式原理,為全橋式惠斯通電橋形式,輸出信 號般都是mV。以常見的2. 0 mV/V靈敏度傳 感器為例,在橋路激勵電壓為10 V時,其滿量程 輸出為:
2 mV/V X 10 V =20 mV 數(shù)字稱重儀表傳感器橋壓和ADC參考電壓通 常采用比例式接法以降低橋壓波動對轉(zhuǎn)換結(jié)果的 影響。為了簡化電源設(shè)計(jì),傳感器橋路激勵電壓 選擇5V,這樣傳感器滿度輸出會降低到:
2 mV/V X5 V = 10 mV 在這個數(shù)量的輸入電壓條件下,為了實(shí)現(xiàn) 十萬分之以上的測量分辨率,要求ADC有良好的無噪聲分辨率等指標(biāo)。本設(shè)計(jì)選用CS5532ASZ。 在參考電壓為5 V的情況下,其滿量程差分輸入范 圍為:
VFS=5 000 mV/ (64 x2) =39 mV 按無噪聲分辨率19位算,當(dāng)輸入39 mV滿量程電壓時,能得到約26萬無噪聲碼。滿量程輸入 10 mV算,無噪聲AD碼為6.5萬。通過后續(xù)做進(jìn) 步的軟件濾波能實(shí)現(xiàn)10萬以上的有效輸出AD 碼。采用4片CS5532立并行采集,保證了通道 之間的同步和立有效的輸出速率。
2.3電源部分
電源部分如圖3所示。本儀表采用直流24 V 電,經(jīng)電源隔離模塊后,輸出電壓為6V,輸出 功率為6W。儀表工作電源分為數(shù)字和模擬兩部 分。數(shù)字部分電源有5 V和3. 3 V,分別由6 V電 壓經(jīng)兩路LDO降壓得到,CPU等外圍電路使 用;模擬電源部分是由6 V電壓經(jīng)過每個通道各自 的用LDO降為5 V,提給各通道的ADC芯片 及傳感器擠壓。
2.4通訊部分
通信接口為RS485,支持Modbus RTU協(xié)議。 通信和MCU相互電氣隔離,有效提高了抗* 力,如圖4所示.
3.軟件設(shè)計(jì)
軟件開發(fā)環(huán)境采用IAR for STM32。通過 STM32配置工具STM32CubeMX設(shè)置好IO 口,中 斷,定時器等資源后,直接可以生成IAR工程文 件基本配置代碼,直接打開即可進(jìn)步進(jìn)行編程。 我們采用傳統(tǒng)的模塊式編程方式。主要功能
模塊有外設(shè)初始化模塊、參數(shù)初始化模塊、顯示 及按鍵處理模塊、濾波及標(biāo)度變換模塊、主循環(huán) 調(diào)度模塊、ADC完成中斷處理子程序、定時器中 斷服務(wù)子程序、通信中斷服務(wù)子程序和參數(shù)及SD 卡存儲服務(wù)函數(shù)等。其中主循環(huán)模塊包括ADC標(biāo) 度變換,數(shù)字量I0,通信協(xié)議解析等。下面重點(diǎn) 介紹主要的幾個模塊功能。
3.1參數(shù)初始化模塊
儀表參數(shù)存儲在MCU內(nèi)部的Flash及外掛的 EEPROM芯片中,互為備份。開機(jī)時,對參數(shù)存 儲進(jìn)行CRC校驗(yàn)。發(fā)現(xiàn)錯誤,則用正確的拷貝覆 蓋,提高了參數(shù)存儲的可靠性。
參數(shù)定義如下:
上面的例子定義了3個參數(shù):
(1)參數(shù) paramDisplayRangeHigh I 索引值 0, 出廠默認(rèn)值100.00,編輯方式為數(shù)值方式,小 值-999. 99,大值999.99,小數(shù)點(diǎn)位置2。
(2 )參數(shù)paramBaudRate :索引值1,出廠默認(rèn) 值3,即9600bps,編輯方式為下拉列表方式,小值 0即1 200 bps,大值4即19 200 bps,無小數(shù)點(diǎn)。
(3 )參數(shù)paramDeviceld :索引值2,出廠默 認(rèn)值1,編輯方式為數(shù)值方式,小值1,大值 254,無小數(shù)點(diǎn)。
3.2顯示模塊
顯示模塊負(fù)責(zé)測量狀態(tài)下顯示各個通道的測 量值,參數(shù)編輯狀態(tài)下顯示及編輯參數(shù)等。針對 12864點(diǎn)陣液晶模塊,我們提取了幾個不同點(diǎn)陣的 字模,含有26個英文字母、0?9數(shù)字及常用的符 號,主要函數(shù)有:
void Display8x8Pattern (unsigned char x,unsigned char y,unsigned char
* pattern) ; I丨在位置顯示個8x8點(diǎn)陣圖像
void Display16x12Pattern (unsigned char x,unsigned char y,unsigned
char * pattern) ; I丨在位置顯示個16x12點(diǎn)陣圖像
void Display24x16Pattern (unsigned char x,unsigned char y,unsigned
char * pattern) ; I丨在位置顯示個24x16點(diǎn)陣圖像
void DisplayChar (TCharStyle style, unsigned char x,unsigned char y,
unsigned char ch) ; I丨在位置顯示_個特定點(diǎn)陣的字符
void DisplayStrNull (TPatternStyle style, unsigned char x, unsigned char
y,unsigned char ch) ; I丨在位置顯示個特定點(diǎn)陣的以NULL
結(jié)尾的字符串
void DisplayInt32 (TPatternStyle style, unsigned char x,unsigned char y,int32 val) ; I丨在位置顯示個特定點(diǎn)陣的32位整數(shù)。 點(diǎn)陣類型由以下定義:
typedef enum {ps8x8,ps16x12,ps24x 16 } TPatternStyle ;
3.3按鍵處理模塊
按鍵處理模式包括SET鍵處理、移位鍵處理、 功能鍵處理等。按鍵值索引定義:
enum {kbSET,kbSHIFT,kbINC,kbDEC,kbF1,kbF2,kbLONG SET,kbLONGSHIFT};
在10 ms定時器中斷服務(wù)子程序里做按鍵掃 描,每次中斷記錄次某個或者某兩個按鍵的按 壓時間及抬起時間,作為按鍵消抖處理,并識別 單鍵或者組合鍵鍵值。鍵值為-1的時候,表示無 任何按鍵按下。主循環(huán)根據(jù)鍵值進(jìn)入到對應(yīng)的按 鍵功能處理函數(shù)。
3.4濾波及標(biāo)度變換模塊
這是稱重儀表的主要功能模塊。稱重儀表的 數(shù)據(jù)處理流程為:AD原碼讀出—初始軟件濾波— 系統(tǒng)校準(zhǔn)(內(nèi)碼值規(guī)格化)—用戶標(biāo)定(多段標(biāo) 定、零點(diǎn)跟蹤、去皮)—顯示值。軟件濾波要根據(jù) 實(shí)際應(yīng)用選擇合適的濾波算法,常見的有加權(quán)滑 動平均值濾波、階滯后濾波、消抖濾波等。成 熟的產(chǎn)品會有幾種濾波方法的組合應(yīng)用,并且可 由用戶在現(xiàn)場自由調(diào)整濾波參數(shù)。良好的軟件濾 波會有效增加系統(tǒng)的無噪聲分辨率。系統(tǒng)校準(zhǔn)是 為了消除儀表模擬鏈路的離散誤差,將內(nèi)碼值統(tǒng) 規(guī)格化到個特定值。本儀表在輸入標(biāo)準(zhǔn)滿量 程的2mVZV時,通過系統(tǒng)校準(zhǔn)為1000000 (百 萬)內(nèi)碼。用戶標(biāo)定是指標(biāo)定到用戶所實(shí)際使用 的傳感器量程。用戶標(biāo)定采用多段線性變換的方 法,即根據(jù)輸入的內(nèi)碼值,查表得到對應(yīng)的線性 方程,進(jìn)而計(jì)算出工程量綱值PV。
零點(diǎn)跟蹤是為了消除傳感器在零點(diǎn)附近的輸 出漂移。我們采用的方法是,當(dāng)PV值處于零點(diǎn)跟 蹤區(qū)域內(nèi),維持穩(wěn)定段時間,則將此時的零點(diǎn) 重設(shè)為0。去皮即是人為的顯示值遷移。
3.5主循環(huán)調(diào)度模塊
主循環(huán)依次判斷各個中斷服務(wù)子程序設(shè)置的 各種信號量標(biāo)志,并進(jìn)入到相應(yīng)的服務(wù)函數(shù)中。 例如按鍵標(biāo)志、定時器標(biāo)志、ADC讀取完成標(biāo)志、 串行口接收到幀數(shù)據(jù)標(biāo)志等。本設(shè)計(jì)沒有運(yùn)行 RT0S,UCOS等嵌入式實(shí)時操作系統(tǒng),要防止些 占用時間較長的函數(shù)過程影響主循環(huán)的調(diào)度效率。 例如全屏幕的顯示刷新會影響儀表對Modbus RTU 通訊命令的及時響應(yīng)。將此類函數(shù)里面耗時的循 環(huán)過程拆分成在主循環(huán)里面多次調(diào)度逐步執(zhí)行的 函數(shù)片是個可行的辦法。
3.6 ADC完成中斷處理子程序
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ù)子程序
定時器中斷主要用于按鍵掃描、顯示刷新、 Modbus RTU幀中斷處理、通用異步延時等.
3.8通訊中斷服務(wù)子程序
STM32片上USART提接收和發(fā)送中斷。我 們設(shè)置兩個接收緩沖區(qū)和個發(fā)送緩沖區(qū)。當(dāng)收 到個串行字符時,會觸發(fā)接收中斷。在中斷服 務(wù)函數(shù)里面, 行本機(jī)地址判斷,是本機(jī)地 址則初始化接收緩沖區(qū)指針,并將接收到的字節(jié)數(shù)據(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ù)。Modbus RTU對幀定時有著嚴(yán)格的要求, 要根據(jù)波特率調(diào)整幀定時時間。采用光耦做收發(fā)控 制線隔離時,要格外注意其轉(zhuǎn)換速率的影響。
BootLoader我們要在BootLoader里面操作SD 卡以支持通過SD卡升固件,其流程如下:開機(jī) 先檢測SD卡內(nèi)是否有符合要求的固件升文 件,有的話讀出版本信息和當(dāng)前固件版本做比較, 是新版本則詢問是否升,否則直接跳到Aro。
Modbus RTU協(xié)議我們把儀表的通道測量值和運(yùn)行參數(shù) 對應(yīng)到Modbus保持寄存器區(qū),支持多寄存器的連續(xù)讀寫操作,可與PLC等ModbusR- TU主站設(shè)備方便快捷交換數(shù)據(jù)。保持寄存器和內(nèi)
部參數(shù)對應(yīng)舉例如表1所示.
PLC通過發(fā)送次Modbus RTU讀保持寄存器 命令,即可讀出全部4組通道的測量值。
PLC 發(fā)送:01 03 00 00 00 08 (此處省略 CRC 校驗(yàn)碼)
儀表回傳:01 03 10 CH1 CH1 CH1 CH1 CH2 CH2 CH2 CH2 CH3 CH3 CH3 CH3 CH4 CH4 CH4 CH4 (此處省略CRC校驗(yàn)碼)
其中CH1 ~ CH4測量值各占4個字節(jié),即32位