在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

聚豐項目 > 多組分氣體分析儀設(shè)計驗證

多組分氣體分析儀設(shè)計驗證

多組分氣體分析儀是我公司近期研發(fā)的三個主要產(chǎn)品之一。采用模塊化設(shè)計,可增減配置,可分析混合氣體中的氧氣、氫氣、甲烷、丙烷等氣體的組分。

A670521546 A670521546

分享
4 喜歡這個項目
團隊介紹

A670521546 A670521546

團隊成員

尹家軍 工程師

分享
項目簡介
多組分氣體分析儀是我公司近期研發(fā)的三個主要產(chǎn)品之一。采用模塊化設(shè)計,可增減配置,可分析混合氣體中的氧氣、氫氣、甲烷、丙烷等氣體的組分。
硬件說明

在硬件方面充分考慮系統(tǒng)應(yīng)用的需求,AD采集、DA輸出、DI輸入、DO輸出以及通訊等。


通訊部分主要包括串口通訊與以太網(wǎng)通訊。以太網(wǎng)的通訊采用W5500以太網(wǎng)控制器與MCU通過SPI總線通訊,在本項目中使用SPI2來實現(xiàn)通訊,以太網(wǎng)通訊部分的硬件設(shè)計如下:


                              


串口通訊主要對象有兩個,遠紅外炭氫傳感器和顯示屏。遠紅外炭氫傳感器采用單總線串行通訊,TTL電平。兩路接口,通常一用一備,在需要時也可接兩臺傳感器,如一臺甲烷一臺丙烷。硬件接口的設(shè)計如下:



對于顯示屏起通訊接口采用RS485或者RS232。主要是應(yīng)為面向不同的應(yīng)用場合,在需要大顯示屏的時候選擇的是RS485接口,在普通小顯示屏是使用的是RS232接口。但這兩個屏不會同時使用所以采用一個USART口,實際使用的USART2通訊口,是使用RS232還RS485選擇焊接不同的器件。硬件部分的設(shè)計如下圖所示:



模擬量輸入輸出采用SPI接口與AD7705和AD5663來完成,模擬量輸入輸出個兩路。模擬量輸入主要用于采集氫氣組分數(shù)據(jù)和氧氣組分數(shù)據(jù)。氫氣傳感器采用熱式原理輸出0-5VDC的信號。氧氣傳感器有兩種:順磁傳感器和電化學(xué)傳感器,順磁傳感器輸出4-20mA電流信號,電化學(xué)傳感器輸出0-2.5VDC的信號,兩者不同時采用,所以采用同一路AI通道,根據(jù)不同的傳感器焊接不同的器件。硬件設(shè)計如下:



模擬量輸出也是兩路,通過SPI總線與MCU通訊。沒路均能輸出0-5VDC信號。這部分硬件設(shè)計比較簡單:



數(shù)字量輸入輸出主要用與小型真空泵和電磁閥得控制以及按鈕和狀態(tài)信息的輸入,硬件電路比較簡單:



還有其他部分的硬件設(shè)計,相對比較平常就不在此討論了。


軟件說明

軟件的開發(fā)環(huán)境采用IAR EWARM和STM32CubeMX,在STM32CubeMX完成基本配置并生成項目,再在IAR EWARM開發(fā)應(yīng)用并調(diào)試。基本的開發(fā)調(diào)試就不討論了,主要說一說數(shù)字量輸入輸出,模擬量輸入輸出、串口通訊以及以太網(wǎng)通訊幾個方面的應(yīng)用開發(fā)和調(diào)試。


為了讓軟件更好地適應(yīng)更換傳感器和應(yīng)用不同場合的功能增減要求,我們在設(shè)計軟件時使用了一個配置文件來配置更能的使用和增減。這個配置文件就是一個頭文件,定義了一些宏來控制條件編譯,節(jié)選部分配置文件如下:


/*多組分氣體分析儀應(yīng)用版本定義:


      ——0,用于標(biāo)準(zhǔn)的多組分氣體分析儀,版本號VA1.0.1;


      ——1,用于標(biāo)準(zhǔn)的多組分氣體分析儀,版本號VA1.0.1;


      ——2,用于標(biāo)準(zhǔn)的多組分氣體分析儀,版本號VA1.0.1;


      ——3,用于便攜式氣體分析儀,版本號V1.0.1B;


      ——4,B版應(yīng)用板,版本號V1.0.1B;*/


#ifndef MFC_MasterBoard_VERSION


#define MFC_MasterBoard_VERSION (0)


#endif



/*定義擴展功能的使能,一次只能使能一項*/


//#define EXT_Ethernet_ENABLE     //擴展以太網(wǎng)通訊


//#define EXT_CAN_ENABLE          //擴展CAN總線通訊



/*定義片上Flash存取使能*/


#ifndef STORAGE_ENABLE


#define STORAGE_ENABLE (1)


#endif



/*全局變量定義*/


#include "globalvariable.h"


/*顯示屏控制*/


#include "lcdcommunication.h"


/*數(shù)字邏輯處理*/


#include "logicprocess.h"


/*模擬量輸入輸出處理*/


#include "addaprocess.h"


/*以太網(wǎng)通訊處理*/


#include "ethernetprocess.h"


/*紅外炭氫傳感器*/


#include "ndirdataprocess.h"



/*片上Flash參數(shù)存取操作*/


#if STORAGE_ENABLE > (1)


#include "storeprocess.h"


#endif



/*調(diào)試功能*/


#include "CommonConfig.h"


關(guān)于模擬量輸入輸出、串口通訊以及以太網(wǎng)通訊幾個方面軟件的設(shè)計及調(diào)試在前面的文章中都已經(jīng)較少的比較清楚了,只有數(shù)字量輸入輸出沒有涉及到,在總結(jié)這一篇文章中我們在軟件的設(shè)計和調(diào)試上主要說說數(shù)字量的處理。在多組分氣體成分分析儀中總共有5個DI輸入和5個DO輸出。這10個引腳的GPIO配置如下:


/*Configure GPIO pins : DI1_Pin DI2_Pin DI3_PinDI4_Pin


                           DI5_Pin */


GPIO_InitStruct.Pin = DI1_Pin|DI2_Pin|DI3_Pin|DI4_Pin


                          |DI5_Pin;


GPIO_InitStruct.Mode = GPIO_MODE_INPUT;


GPIO_InitStruct.Pull = GPIO_NOPULL;


HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);



/*Configure GPIO pins : DO1_Pin DO2_Pin DO3_PinDO4_Pin


                           DO5_Pin */


GPIO_InitStruct.Pin = DO1_Pin|DO2_Pin|DO3_Pin|DO4_Pin


                          |DO5_Pin;


GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;


GPIO_InitStruct.Pull = GPIO_NOPULL;


GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;


HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);



/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(GPIOD, DO1_Pin|DO2_Pin|DO3_Pin|DO4_Pin


                          |DO5_Pin,GPIO_PIN_RESET);



對于DI、DO的操作我們采用定義操作函數(shù)來實現(xiàn)對單個通道和全部通道的操作。我們首先定義兩個枚舉類型分別定義如下:


//定義數(shù)字量輸出通道枚舉類型,規(guī)定通道的范圍


typedef enum {


DOChannel1,


DOChannel2,


DOChannel3,


DOChannel4,


DOChannel5,


DOChannelNum


} DigitalOutput;



//定義數(shù)字量輸入通道枚舉類型,規(guī)定通道的范圍


typedef enum {


DIChannel1,


DIChannel2,


DIChannel3,


DIChannel4,


DIChannel5,


DIChannelNum


} DigitalInput;



數(shù)字量輸入輸出的枚舉主要是為了方便操作和識別,通道數(shù)量出現(xiàn)變化時只需要增加枚舉兩種的通道定義即可。此處數(shù)字量輸入輸出均定義了5個通道。枚舉量的最后一個成員代表了通道的數(shù)量,在枚舉全部通道時能夠很好的避免超出范圍的錯誤。


同時還要定義如下的結(jié)構(gòu)體,用于定義需要操作GPIO目標(biāo)。


//定義用于針腳操作的目標(biāo)針腳類型


typedef struct{


GPIO_TypeDef* GPIOx;


  uint16_tGPIO_Pin;


}TargetPin;



有了上述的定義則可以實現(xiàn)前面設(shè)想的操作了,接下來我們還需要定義兩個數(shù)字量輸入輸出通道的TargetPin類型的數(shù)組,用于存放想要操作的目標(biāo)通道,和前面枚舉兩種定義的通道一致,此處也是5個通道。


//定義DI通道的全部目標(biāo)針腳數(shù)組


TargetPin diPin[]={{GPIOE,GPIO_Pin_2},{GPIOE,GPIO_Pin_3},{GPIOE,GPIO_Pin_4}


                 ,{GPIOE,GPIO_Pin_5},{GPIOE,GPIO_Pin_6}};



//定義DO通道的全部目標(biāo)針腳數(shù)組


TargetPindoPin[]={{GPIOD,GPIO_Pin_3},{GPIOD,GPIO_Pin_4},{GPIOD,GPIO_Pin_5}


                 ,{GPIOD,GPIO_Pin_6},{GPIOD,GPIO_Pin_7}};


有了以上2個數(shù)組就可以在避免在操作過程中大量使用條件分支語句(Switch或if語句),簡化編碼和避免在增加通道時號要修改函數(shù)的情況。現(xiàn)在如果通道數(shù)量出現(xiàn)變化則只需要修改枚舉量和數(shù)組的值就可。或者操作的管腳出現(xiàn)變化則只需要修改數(shù)組的值就可以了。而不需要去修改函數(shù)體,而且函數(shù)體的編碼也非常簡單。


對數(shù)字量輸出的操作如下,在操作全部通道時,以枚舉變量作為循環(huán)變量,以枚舉的最后定義的數(shù)量來控制,并以枚舉量的取值作為數(shù)組下標(biāo),有效避免出現(xiàn)超出范圍的錯誤,同時在通道數(shù)量和通道對應(yīng)的具體針腳發(fā)生變化時,無需修改函數(shù)。


//操作全部繼電器DO通道


//輸入?yún)?shù)TargetPin *doPin為要操作的DO通道列表


//輸入?yún)?shù)BOOL *commands欲寫給DO通道的值列表


void OperationAllRelayChannel(TargetPin*doPin,BOOL *commands)


{


DigitalOutput DOChannel;


for(DOChannel=DOChannel1;DOChannel<DOChannelNum;DOChannel++)


  {


   OperationSingleRelayChannel(doPin[DOChannel],commands[DOChannel]);


  }


}



//操作單個繼電器DO通道


//輸入?yún)?shù)TargetPin doPin為要操作的DO通道


//輸入?yún)?shù)BOOL command欲寫給DO通道的值


void OperationSingleRelayChannel(TargetPindoPin,BOOL command)


{


   HAL_GPIO_WritePin(doPin.GPIOx,doPin.GPIO_Pin,command);


}


對數(shù)字量輸入的操作函數(shù)的編寫采用與數(shù)字量輸出相同的思路。對于枚舉之所以可以用作數(shù)組下標(biāo),是因為枚舉沒被指定值時,總是從0開始向上累加,正好與數(shù)組下標(biāo)是一致的。這要做還有一個好處是,通道與具體的GPIO引腳是由TargetPin數(shù)組的賦值順序決定的,修改非常方便。


//獲取全部DI量狀態(tài)輸入值


//輸入?yún)?shù)TargetPin *diPin為需要讀取的DI通道列表


//輸入?yún)?shù)BOOL *result為讀取的通道值返回列表


void GetAllDIStatusInput(TargetPin *diPin,BOOL*result)


{


DigitalInput DIChannel;


for(DIChannel=DIChannel1;DIChannel<DIChannelNum;DIChannel++)


  {


   result[DIChannel]=GetSingleDIStatusInput(diPin[DIChannel]);


  }


}



//獲取單個DI量狀態(tài)輸入值


//輸入?yún)?shù)TargetPin diPin是需要讀取的DI通道


//返回值為讀取的通道值


BOOL GetSingleDIStatusInput(TargetPin diPin)


{


  uint8_treadValue;


  readValue= GPIO_ReadInputDataBit(diPin.GPIOx,diPin.GPIO_Pin);


  return(readValue>0)?True:False;


}


最后來一張調(diào)試數(shù)字量輸入輸出的截圖:



多組分氣體成分分析儀項目軟件其他部分的設(shè)計與調(diào)試也已經(jīng)過驗證,在此就不多說了。


演示效果

多組分氣體分析儀的測試機已經(jīng)可以運行,大部分的功能也已經(jīng)完成,測試基本完成。來幾張結(jié)果圖片,首先來一張調(diào)試模擬量數(shù)據(jù)采集的圖片:



再來一張顯示屏顯示各組分的的畫面:



接下來再來一張顯示屏顯示參數(shù)設(shè)定和操作的界面:



再來一張顯示網(wǎng)絡(luò)通訊的界面:






評論區(qū)(2 )
  • 零角度: 對這個比較感興趣,可以共同探討一下嗎?QQ41040168

    回復(fù)

  • 動心忍性1234: 您好我是無線電雜志的編輯,我們對您的項目十分感興趣,請問您有興趣投稿嗎?成為我們的作者除稿費外還有其他優(yōu)厚條件。敬請參與。投稿請聯(lián)系QQ260534978.

    回復(fù)

主站蜘蛛池模板: 最新日本免费一区二区三区中文 | 免费看日本大片免费 | 成人午夜剧场 | 中文字幕日本一区波多野不卡 | www.色图| 亚洲一区中文字幕在线 | 国产一区高清 | 亚洲天天做日日做天天欢毛片 | 好紧好湿好黄的视频 | 亚洲精品在线视频 | 在线天堂中文在线网 | 你懂得福利 | 五月婷在线观看 | 男女交性高清视频无遮挡 | 免费一级毛毛片 | 成人宗合网 | 天天色综合色 | 99国内视频 | 91精品啪国产在线观看免费牛牛 | 激情亚洲综合网 | 四虎永久免费网站入口2020 | 国产高清在线 | 久久黄色毛片 | 四虎影院最新地址 | 亚洲精品一线二线三线 | 免费视频在线观看1 | 久久久久久9 | 日本在线不卡一区二区 | 特级毛片s级全部免费 | 狠狠摸狠狠操 | 午夜影院操 | 午夜网站在线观看 | 天堂视频在线观看 | 日本黄色高清视频网站 | 拍真实国产伦偷精品 | 国产午夜精品福利 | 欧美日韩在线成人免费 | 亚洲乱亚洲乱妇41p国产成人 | 222在线视频免费观看 | 日日做夜夜做 | 天天操天天操天天操天天操 |