傳統(tǒng)的離心泵工況診斷方法,傳感器安裝不便,診斷成本較高,實(shí)際應(yīng)用困難。本文由開(kāi)發(fā)者對(duì)通過(guò)離心泵工況的機(jī)理進(jìn)行了研究,并設(shè)計(jì)研發(fā)了相應(yīng)的離心泵工況診斷系統(tǒng),從系統(tǒng)功能實(shí)現(xiàn),系統(tǒng)硬件總體設(shè)計(jì),系統(tǒng)軟件總體設(shè)計(jì)三方面對(duì)離心泵工況診斷系統(tǒng)的整體嵌入式架構(gòu)進(jìn)行了設(shè)計(jì)。01 系統(tǒng)功能實(shí)現(xiàn)1、能夠?qū)﹄x心泵驅(qū)動(dòng)電機(jī)各相輸入電流進(jìn)行頻譜繪制。系統(tǒng)能向操作人員實(shí)時(shí)展示離心泵驅(qū)動(dòng)電機(jī)各相輸入電流在 0~650Hz頻帶內(nèi)的頻譜。 2、能夠?qū)Ω黜?xiàng)離心泵工況診斷指標(biāo)進(jìn)行準(zhǔn)確計(jì)算。系統(tǒng)能對(duì)離心泵驅(qū)動(dòng)電機(jī)定子電流均方根指標(biāo)、脈沖因子指標(biāo)等多項(xiàng)工況診斷指標(biāo)進(jìn)行實(shí)時(shí)計(jì)算。同時(shí),系統(tǒng)應(yīng)能夠?qū)﹄x心泵驅(qū)動(dòng)電機(jī)輸入功率、電網(wǎng)工頻進(jìn)行實(shí)時(shí)監(jiān)測(cè)。并對(duì)各項(xiàng)參數(shù)的計(jì)算及監(jiān)測(cè)誤差控制在低于1.8%的閾值內(nèi)。 3、實(shí)現(xiàn)信息交互。系統(tǒng)下位機(jī)應(yīng)能夠與 TFTLCD 屏以及移動(dòng)端離心泵工況診斷 APP 兩個(gè)平臺(tái)之間進(jìn)行診斷信息交互。
02 系統(tǒng)硬件設(shè)計(jì)根據(jù)系統(tǒng)的功能設(shè)計(jì)指標(biāo),本文在系統(tǒng)硬件上設(shè)計(jì)了 MCU 核心控制模塊、AD 采集模塊、三相電參數(shù)監(jiān)測(cè)模塊、內(nèi)存擴(kuò)展模塊、數(shù)據(jù)存儲(chǔ)模塊、信息交互模塊、系統(tǒng)供電電源模塊共計(jì) 7 大功能模塊,系統(tǒng)總體框架圖如圖所示。
其中系統(tǒng)信息交互模塊實(shí)現(xiàn)了系統(tǒng)診斷信息的實(shí)時(shí)傳輸與共享,包括屏顯模塊、云端通信模塊兩部分。通過(guò)信息交互模塊,診斷信息被分別發(fā)送至了下位機(jī)端和移動(dòng)端APP,操作人員可以根據(jù)需要自行選擇是進(jìn)行現(xiàn)場(chǎng)診斷還是進(jìn)行遠(yuǎn)程診斷。信息交互模塊的功能框架圖如下所示:

屏顯模塊,負(fù)責(zé)將診斷信息直接呈現(xiàn)在顯示屏上。基于機(jī)智云平臺(tái)設(shè)計(jì)的云端通信模塊,則負(fù)責(zé)將診斷信息通過(guò)機(jī)智云服務(wù)器發(fā)送至操作人員的移動(dòng) APP 上。云端通信模塊的功能框架如下所示:

WiFi模塊對(duì)系統(tǒng)計(jì)算所得的診斷信息進(jìn)行封裝后傳至互聯(lián)網(wǎng),并通過(guò)互聯(lián)網(wǎng)上傳至機(jī)智云服務(wù)器,移動(dòng)端離心泵工況診斷 APP 通過(guò)與機(jī)智云服務(wù)器通信實(shí)時(shí)獲取離心泵的工況診斷信息。
云端通信模塊中的WiFi模塊負(fù)責(zé)系統(tǒng)的配置入網(wǎng)。WiFi模塊的性能對(duì)通信質(zhì)量起著重要的影響作用。綜合考慮傳輸速率、距離、功耗和接受靈敏度這四方面因素,選用樂(lè)鑫 ESP8266WiFi 模組作為系統(tǒng)云端通信模塊的WiFi模塊,其原理圖和實(shí)物圖分別如下所示。


離心泵工況診斷系統(tǒng)樣機(jī)的 PCB 設(shè)計(jì)圖和實(shí)物照片分別如下所示。

03 系統(tǒng)軟件總體設(shè)計(jì)在軟件設(shè)計(jì)上,系統(tǒng)對(duì)電流信號(hào)的采集通過(guò)單片機(jī)的 ADC 功能,DMA 功能,通用定時(shí)器定時(shí)功能實(shí)現(xiàn);系統(tǒng)對(duì)電流信號(hào)的時(shí)頻轉(zhuǎn)換和對(duì)診斷指標(biāo)的計(jì)算通過(guò)單片機(jī)的 DSP 功能實(shí)現(xiàn);三相電參數(shù)監(jiān)測(cè)模塊與 MCU 核心控制模塊之間的信息交互通過(guò)單片機(jī)的 SPI 通信功能實(shí)現(xiàn);診斷信息的人機(jī)交互通過(guò)單片機(jī)的 FSMC 驅(qū)動(dòng)功能,ESP8266 芯片的 WIFI入網(wǎng)功能以及單片機(jī)的串口通信功能實(shí)現(xiàn);系統(tǒng)內(nèi)存的擴(kuò)展通過(guò)單片機(jī)的 FSMC 驅(qū)動(dòng)功能實(shí)現(xiàn);診斷信息的存儲(chǔ)通過(guò)單片機(jī)的 SDIO 驅(qū)動(dòng)功能實(shí)現(xiàn)。
系統(tǒng)初始化在對(duì) MCU 核心控制模塊進(jìn)行復(fù)位操作后,程序?qū)?main 函數(shù)出發(fā),首先執(zhí)行延時(shí)函數(shù)初始化,單片機(jī) GPIO 引腳初始化,中斷嵌套初始化,串口初始化操作,然后依照HARDWARE 中的子文件,依次完成對(duì) AD 采集模塊,三相電參數(shù)監(jiān)測(cè)模塊,內(nèi)存擴(kuò)展模塊,數(shù)據(jù)存儲(chǔ)模塊,信息交互模塊的初始化操作,最后完成對(duì) FFT 運(yùn)算相關(guān)參數(shù)的初始化,系統(tǒng)初始化程序的邏輯實(shí)現(xiàn)流程如下: 
信息交互開(kāi)發(fā)
信息交互程序包括兩方面,一是屏顯模塊的信息顯示程序,二是系統(tǒng)下位機(jī)與移動(dòng) APP之間的通信程序。屏顯模塊的信息顯示程序較簡(jiǎn)單,MCU 核心控制模塊將屏顯模塊視為外部 SRAM 設(shè)備,通過(guò) FSMC 對(duì)其進(jìn)行驅(qū)動(dòng),完成顯示。離心泵工況診斷系統(tǒng)的屏顯界面如下所示:

平臺(tái)交互開(kāi)發(fā)系統(tǒng)與移動(dòng) APP 之間的遠(yuǎn)程通信是基于第三方云端服務(wù)器實(shí)現(xiàn)的,系統(tǒng)通過(guò) WiFi 模塊接入互聯(lián)網(wǎng)后,借助于第三方云端服務(wù)器與移動(dòng)端 APP 之間進(jìn)行數(shù)據(jù)傳遞。可以理解為系統(tǒng)在下位機(jī)端、云端、移動(dòng)端三者之間構(gòu)筑了一個(gè)相對(duì)完整的物聯(lián)網(wǎng)信息交互框架。
由于機(jī)智云平臺(tái)可以為用戶(hù)提供從設(shè)備接入到產(chǎn)品運(yùn)營(yíng)管理的整個(gè)生命周期的服務(wù)。本文選用機(jī)智云作為系統(tǒng)云端通信的開(kāi)發(fā)平臺(tái)?;跈C(jī)智云服務(wù)器的云端通信框架示意圖如下所示:
云端通信是在設(shè)備端、云端、移動(dòng)客戶(hù)端三者之間進(jìn)行的。設(shè)備端即診斷系統(tǒng)下位機(jī),在軟件上,設(shè)備端的云端通信功能要通過(guò) GAgent 應(yīng)用程序?qū)崿F(xiàn)。GAgent 是為設(shè)備端接入機(jī)智云提供的嵌入式固件系統(tǒng)。在離心泵工況診斷系統(tǒng)中,GAgent 在 ATK-ESP8266 WiFi模塊上運(yùn)行,負(fù)責(zé)在設(shè)備端、云端、移動(dòng)客戶(hù)端三者之間搭建以數(shù)據(jù)點(diǎn)為媒介的信息交互橋梁。在軟件上,移動(dòng)客戶(hù)端基于 SDK 環(huán)境建立了與云端及設(shè)備端通信的 API 接口。設(shè)備端與云端,移動(dòng)客戶(hù)端與云端之間傳輸?shù)男畔⒈环庋b成數(shù)據(jù)點(diǎn)格式,而 MCU 核心控制模塊在云端通信過(guò)程中主要負(fù)責(zé)數(shù)據(jù)點(diǎn)與系統(tǒng)實(shí)際動(dòng)作之間的對(duì)應(yīng)轉(zhuǎn)換。三端協(xié)同工作,確保了物聯(lián)網(wǎng)中的信息通暢。?移動(dòng)客戶(hù)端和設(shè)備端之間借助機(jī)智云平臺(tái)進(jìn)行通信。?
云端通信的具體開(kāi)發(fā)步驟如下:
?創(chuàng)建產(chǎn)品:在機(jī)智云開(kāi)發(fā)者中心官網(wǎng)中選擇“創(chuàng)建新產(chǎn)品”,并完成產(chǎn)品的屬性配置。具體地,本文在開(kāi)發(fā)過(guò)程中,根據(jù)診斷系統(tǒng)的應(yīng)用領(lǐng)域選擇產(chǎn)品分類(lèi)為“安防,監(jiān)控”類(lèi),將產(chǎn)品名稱(chēng)命名為“離心泵工況診斷系統(tǒng) V1”,選擇技術(shù)方案類(lèi)型為 WIFI/移動(dòng)網(wǎng)絡(luò)方案,選擇通訊方式為 WIFI,選擇數(shù)據(jù)傳輸方式為定長(zhǎng)。
?創(chuàng)建數(shù)據(jù)點(diǎn):數(shù)據(jù)點(diǎn)即設(shè)備產(chǎn)品功能的抽象。根據(jù)系統(tǒng)功能設(shè)計(jì)要求,分別建立采樣頻率、電網(wǎng)工頻、電機(jī)輸入功率、離心泵驅(qū)動(dòng)電機(jī)定子電流均方根指標(biāo)、脈沖因子指標(biāo)、峭度系數(shù)指標(biāo)、總諧波失真指標(biāo)、信噪比指標(biāo)、信納比指標(biāo)共 9 項(xiàng)只讀數(shù)值類(lèi)型的數(shù)據(jù)點(diǎn),用于顯示診斷信息。建立缺相報(bào)警這一項(xiàng)布爾值類(lèi)型的數(shù)據(jù)點(diǎn),用于離心泵驅(qū)動(dòng)電機(jī)某相斷路時(shí)報(bào)警。
?協(xié)議添加:生成并下載 MCU 開(kāi)發(fā)代碼包。并在項(xiàng)目工程模板中添加 Gizwits 工程協(xié)議文檔。
?程序改寫(xiě):基于機(jī)智云官網(wǎng)生成的 MCU 代碼包,對(duì)程序進(jìn)行改寫(xiě),將系統(tǒng)計(jì)算出的指標(biāo)值賦給對(duì)應(yīng)數(shù)據(jù)點(diǎn)。
?固件燒錄:將 GAgent 固件燒寫(xiě)進(jìn) ATK-ESP8266 WIFI 模塊中。具體燒錄過(guò)程見(jiàn):
http://docs.gizwits.com/zh-cn/deviceDev/ESP8266%E4%B8%B2%E5%8F%A3%E7%83%A7%E5%86%99%E8%AF%B4%E6%98%8E.html
?基于 Android Studio 環(huán)境,對(duì)機(jī)智云提供的 APP 開(kāi)源框架進(jìn)行個(gè)性化修改,最后生成的移動(dòng)客戶(hù)端界面。
?建立通信:操作 ATK-ESP8266 WIFI 模塊進(jìn)入 Airlink 模式下配網(wǎng),綁定設(shè)備,進(jìn)行對(duì)接通信測(cè)試,完成云端通信的所有配置。
系統(tǒng)APP界面圖如下:
離泵工況診斷的功能實(shí)現(xiàn)代碼如下:
//ADC 參數(shù)配置:voidADC_Config(void){ GPIO_InitTypeDefGPIO_InitStructure;ADC_CommonInitTypeDefADC_CommonInitStructure;ADC_InitTypeDefADC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); GPIO_InitStructureGPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);
ADC_CommonInitStructure.ADC_Mode= ADC_Mode_Independent; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInitStructure.ADC_DMAAccessMode =ADC_DMAAccessMode_Disabled; ADC_CommonInitStructure.ADC_Prescaler= ADC_Prescaler_Div4; ADC_CommonInit(&ADC_CommonInitStructure);
ADC_InitStructure.ADC_Resolution= ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode= ENABLE; ADC_InitStructure.ADC_ContinuousConvMode= DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising; ADC_InitStructure.ADC_ExternalTrigConv= ADC_ExternalTrigConv_T2_TRGO; ADC_InitStructure.ADC_DataAlign= ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion= 3; ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_480Cycles); ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_480Cycles); ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_480Cycles);
ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); ADC_DMACmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); }
(2) 三相電參數(shù)監(jiān)測(cè)模塊參數(shù)配置: void EMU_init(int Phase,int Wire) { Write_Att7022(0xD3,0x0000); //ATT7022E 復(fù)位 Write_Att7022(0xC3,0x000000); //校表數(shù)據(jù)寄存器恢復(fù)到上電初始值 Write_Att7022(0xC9,0x00005A);//使能SPI校表寫(xiě)操作Write_Att7022(0x01,0xB97E);//模式配置寄存器設(shè)置 Write_Att7022(0x03,0xF884); //EMU 單元配置 Write_Att7022(0x02,0x0100); //ADC 增益配置寄存器配置 Write_Att7022(0x31,0x3437); //模擬模塊寄存器使能 Write_Att7022(0x6D, 0xFF00); // Vrefgain 補(bǔ)償曲線(xiàn)系數(shù) TCcoffA 設(shè)置 Write_Att7022(0x6E, 0x0DB8); // Vrefgain 補(bǔ)償曲線(xiàn)系數(shù) TCcoffB 設(shè)置 Write_Att7022(0x6F, 0xD1DA); // Vrefgain 補(bǔ)償曲線(xiàn)系數(shù) TCcoffC 設(shè)置 Write_Att7022(0x1E,HFCONST); //HFconst 3200 Write_Att7022(0x17,(int)ATT_U_JIAOZHENG(0x0D,228.6)); //A 相電壓增益校準(zhǔn) Write_Att7022(0x18,(int)ATT_U_JIAOZHENG(0x0E,228.6)); //B 相電壓增益校準(zhǔn) Write_Att7022(0x19,(int)ATT_U_JIAOZHENG(0x0F,229.7)); //C 相電壓增益校準(zhǔn) Write_Att7022(0x1A,(int)ATT_I_JIAOZHENG(0x10,1.568)); //A 相電流增益校準(zhǔn) Write_Att7022(0x1B,(int)ATT_I_JIAOZHENG(0x11,1.568)); //B 相電流增益校準(zhǔn) Write_Att7022(0x1C,(int)ATT_I_JIAOZHENG(0x12,1.568)); //C 相電流增益校準(zhǔn) Write_Att7022(0x04,(int)ATT_P_JIAOZHENG(0x01,358.448)); //A 相有功功率增益校準(zhǔn) Write_Att7022(0x07,(int)ATT_P_JIAOZHENG(0x01,358.448)); //A 相無(wú)功功率增益校準(zhǔn) Write_Att7022(0x0A,(int)ATT_P_JIAOZHENG(0x01,358.448)); //A 相視在功率增益校準(zhǔn) Write_Att7022(0x05,(int)ATT_P_JIAOZHENG(0x02,358.448)); //B 相有功功率增益校準(zhǔn) Write_Att7022(0x08,(int)ATT_P_JIAOZHENG(0x02,358.448)); //B 相無(wú)功功率增益校準(zhǔn) Write_Att7022(0x0B,(int)ATT_P_JIAOZHENG(0x02,358.448)); //B 相視在功率增益校準(zhǔn) Write_Att7022(0x06,(int)ATT_P_JIAOZHENG(0x03,358.448)); //C 相有功功率增益校準(zhǔn) Write_Att7022(0x09,(int)ATT_P_JIAOZHENG(0x03,358.448)); //C 相無(wú)功功率增益校準(zhǔn) Write_Att7022(0x0C,(int)ATT_P_JIAOZHENG(0x03,358.448)); //C 相視在功率增益校準(zhǔn)
if (Phase==3 && Wire==3){ //SEL 選擇 Write_Att7022(0x35,0x080E); //IO 狀態(tài)寄存器配置 } else if(Phase==3 && Wire==4){ Write_Att7022(0x35,0x080F); } Write_Att7022(0xC5,0x0002); //打開(kāi)同步 Write_Att7022(0xC9,0x000000); //關(guān)閉 SPI 校表寫(xiě)操作 }
(3) main.c 文件相關(guān)程序: //頻譜繪制,帶寬 430Hz void Frequency_Spectrum(float32_t * arry,float32_t x,uint16_t n){ uint16_t i; float power; for(i=0;i<430;i++){ if(*(arry+i)/x==1){ *(arry+i)=1; } POINT_COLOR = BLACK; LCD_DrawLine(15+i,200+208*n,15+i,200+208*n-(*(arry+i))*180); } POINT_COLOR = BLUE; LCD_ShowString(330,20+208*n,120,12,12,"Freq(Hz) Power(dB)"); for(i=0;i<8;i++){ power=10*log10(RMSharmonic[i]*RMSharmonic[i]); LCD_ShowFloatNum(330,32+208*n+12*i,harmonic_frequency[i],2,12,0); if(power>0){ LCD_ShowFloatNum(396,32+208*n+12*i,power,2,12,0); } else{ LCD_ShowString(390,32+208*n+12*i,6,12,12,"-"); LCD_ShowFloatNum(396,32+208*n+12*i,(-power),2,12,0); } } }
//頻域診斷指標(biāo)計(jì)算 void Frequency_OperationIndicator(float32_t * arry,uint16_t n) { uint16_t i; float32_t current_power; float32_t fundamental_power; float32_t harmonic_power; float32_t sqrt_harmonic_power; for(i=0;i<(FFT_LENGTH/2+1);i++){ if(i==0) amplitude[i]=(*(arry+i)/FFT_LENGTH)* 4.39f; //直流分量幅值還原,頻譜修正 else amplitude[i]=(*(arry+i)*2/FFT_LENGTH) *4.39f; //交流分量幅值還原,頻譜修正 }
arm_max_f32(amplitude,2049,harmonic,harmonic_frequency); //基波基頻 RMSharmonic[0]=harmonic[0]/1.4142135623731f;
for(i=2;i<11;i++){ arm_max_f32((amplitude+i*harmonic_frequency[0]-1),2,harmonic+i-1,harmonic_frequency +i-1); //10 次以?xún)?nèi)諧波 *(harmonic_frequency+i-1)=*(harmonic_frequency+i-1)+i*harmonic_frequency[0]-1;/諧頻 RMSharmonic[i-1]=harmonic[i-1]/1.4142135623731f; } current_power=square(RMS[n],2); //信號(hào)總功率 fundamental_power=square(RMSharmonic[0],2);//基波功率 arm_power_f32(RMSharmonic+1,9,&harmonic_power); //諧波功率 arm_sqrt_f32(harmonic_power,&sqrt_harmonic_power); THD[n]=sqrt_harmonic_power/RMSharmonic[0]; //總諧波失真指標(biāo)計(jì)算 SNR[n]=(fundamental_power+harmonic_power)/(current_power-fundamental_power-harmon ic_power); SINAD[n]=current_power/(current_power-fundamental_power); arm_sqrt_f32(SNR[n],SNR+n); //信噪比指標(biāo)計(jì)算 arm_sqrt_f32(SINAD[n],SINAD+n); //信納比指標(biāo)計(jì)算 THD[n]=20*log10(THD[n]); //dB 換算 SNR[n]=20*log10(SNR[n]); //dB 換算 SINAD[n]=20*log10(SINAD[n]); //dB 換算 Frequency_Spectrum(amplitude,harmonic[0],n); }
//時(shí)域診斷指標(biāo)計(jì)算 void Time_OperationIndicator(float32_t * arry,uint16_t n) { uint32_t i; uint32_t imax; float32_t max; float32_t mean; //平均值 float32_t meanabs; //整流平均值 float32_t meansqrt; //算術(shù)平方根的平均值 float32_t squaremeansqrt; //方根幅值
arm_max_f32(arry,4096,&max,&imax); //峰值計(jì)算 arm_mean_f32(arry,4096,&mean); //平均值計(jì)算 arm_abs_f32(arry,arry,4096); //絕對(duì)值計(jì)算 for(i=0;i<4096;i++){ KURTOSIS[n]=KURTOSIS[n]+square((*(arry+i)-mean),4); } KURTOSIS[n]=KURTOSIS[n]/4096; KURTOSIS[n]=KURTOSIS[n]/square((*(RMS+n)),4); //峭度系數(shù)指標(biāo)計(jì)算 arm_mean_f32(arry,4096,&meanabs); for(i=0;i<4096;i++){ arm_sqrt_f32(*(arry+i),(arry+i)); } arm_mean_f32(arry,4096,&meansqrt); squaremeansqrt=square(meansqrt,2); PULSE[n]=max/meanabs; //脈沖因子指標(biāo)計(jì)算 MARGIN[n]=max/squaremeansqrt; //裕度因子指標(biāo)計(jì)算 }
//Gizwits 協(xié)議初始化 void Gizwits_Init(void) { TIM3_Int_Init(10-1,8400-1); //1MS 系統(tǒng)定時(shí) usart3_init(9600); memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t)); //設(shè)備狀態(tài)結(jié)構(gòu)體初始化 gizwitsInit(); //緩沖區(qū)初始化 }
//機(jī)智云用戶(hù)自定義函數(shù) void userHandle(void) { if(wifi_sta) //WIFI 已連接 { currentDataPoint.valueFe = Fe; currentDataPoint.valuePin = Pin; currentDataPoint.valueTHD = THD[3]; currentDataPoint.valueSNR = SNR[3]; currentDataPoint.valueSINAD = SINAD[3]; currentDataPoint.valueCf = PULSE[3]; currentDataPoint.valueCq = KURTOSIS[3]; currentDataPoint.valueCe = MARGIN[3]; currentDataPoint.valueFs = Fs; } }
//主函數(shù) int main(void) { uint16_t n; int key; arm_cfft_radix4_instance_f32 scfft; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //系統(tǒng)中斷優(yōu)先級(jí)分組 delay_init(168); //延時(shí)函數(shù)初始化 uart_init(115200); //初始化串口 KEY_Init(); //按鍵初始化 Gizwits_Init(); //機(jī)智云協(xié)議初始化 TIM2_Int_Init(); //通用定時(shí)器 2 初始化 ADC_Config(); //ADC 參數(shù)配置 DMA_Config(); //DMA 參數(shù)配置 LCD_Init(); //LCD 初始化 FSMC_SRAM_Init(); //外部 SRAM 初始化 arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1); //初始化 scfft 結(jié)構(gòu)體,設(shè)定 FFT 參 數(shù) Screen_diaplay(); //界面顯示 EMU_init(3,4); //三相電參數(shù)監(jiān)測(cè)模塊初始化 while (1) { if(flag_dma==1) { arm_rms_f32(ADC_Con_A[n],4096,RMS+0); //A 相輸入電流均方根指標(biāo)計(jì)算 arm_rms_f32(ADC_Con_B[n],4096,RMS+1); //B 相輸入電流均方根指標(biāo)計(jì)算 arm_rms_f32(ADC_Con_C[n],4096,RMS+2); //C 相輸入電流均方根指標(biāo)計(jì)算 //復(fù)數(shù)構(gòu)造 for(n=0;n fft_inputbuf[0][2*n]=ADC_Con_A[n]* Kaiser [n]; fft_inputbuf[0][2*n+1]=0; fft_inputbuf[1][2*n]=ADC_Con_B[n]*Kaiser[n]; fft_inputbuf[1][2*n+1]=0; fft_inputbuf[2][2*n]=ADC_Con_C[n]* Kaiser [n]; fft_inputbuf[2][2*n+1]=0; } arm_cfft_radix4_f32(&scfft,fft_inputbuf[0]); //FFT 計(jì)算(基 4) arm_cmplx_mag_f32(fft_inputbuf[0],fft_outputbufA,FFT_LENGTH); //復(fù)數(shù)求模 arm_cfft_radix4_f32(&scfft,fft_inputbuf[1]); arm_cmplx_mag_f32(fft_inputbuf[1],fft_outputbufB,FFT_LENGTH); arm_cfft_radix4_f32(&scfft,fft_inputbuf[2]); arm_cmplx_mag_f32(fft_inputbuf[2],fft_outputbufC,FFT_LENGTH);
Frequency_OperationIndicator(fft_outputbufA,0); //頻域診斷指標(biāo)計(jì)算 Frequency_OperationIndicator(fft_outputbufB,1); Frequency_OperationIndicator(fft_outputbufC,2); Time_OperationIndicator(ADC_Con_A,0); //時(shí)域診斷指標(biāo)計(jì)算 Time_OperationIndicator(ADC_Con_B,1); Time_OperationIndicator(ADC_Con_C,2);
//合相診斷指標(biāo)計(jì)算 RMS[3]=(RMS[0]+RMS[1]+RMS[2])/3; PULSE[3]=(PULSE[0]+PULSE[1]+PULSE[2])/3; MARGIN[3]=(MARGIN[0]+MARGIN[1]+MARGIN[2])/3; KURTOSIS[3]=(KURTOSIS[0]+KURTOSIS[1]+KURTOSIS[2])/3; THD[3]=(THD[0]+THD[1]+THD[2])/3; SNR[3]=(SNR[0]+SNR[1]+SNR[2])/3; SINAD[3]=(SINAD[0]+SINAD[1]+SINAD[2])/3; Fe=ReadSARegister(0x1C)/8192; //電網(wǎng)工頻 Pin=Calculate_S(HXPhase)*2; //電機(jī)輸入功率
LCD_ShowFloatNum(65,640,Fs,0,16,0); LCD_ShowFloatNum(65,665,F0,0,16,0); LCD_ShowFloatNum(65,690,Fe,2,16,0); LCD_ShowString(97,715,8,16,16,"-"); LCD_ShowFloatNum(105,715,-THD[3],2,16,0); LCD_ShowFloatNum(97,740,SNR[3],2,16,0); LCD_ShowFloatNum(113,765,SINAD[3],2,16,0); LCD_ShowFloatNum(352,640,RMS[3],2,16,0); LCD_ShowFloatNum(344,665,PULSE[3],2,16,0); LCD_ShowFloatNum(344,690,KURTOSIS[3],2,16,0); LCD_ShowFloatNum(344,715,MARGIN[3],2,16,0); LCD_ShowFloatNum(312,740,P,2,16,0);
userHandle(); //機(jī)智云協(xié)議用戶(hù)操作 gizwitsHandle((dataPoint_t *)¤tDataPoint); //機(jī)智云協(xié)議處理 key = KEY_Scan(0); if(key==KEY1_PRES) //KEY1 按鍵按下 { printf("WIFI 進(jìn)入 Airlink 連接模式\r\n"); gizwitsSetMode(WIFI_AIRLINK_MODE); //Airlink 模式接入 } if(key==WKUP_PRES) //KEY_UP 按鍵按下 { printf("WIFI 復(fù)位,以重新配置連接\r\n"); gizwitsSetMode(WIFI_RESET_MODE); //WIFI 復(fù)位 } } } }04 系統(tǒng)總結(jié)
綜合離心泵工況診斷系統(tǒng)的功能需求和硬件架構(gòu),本文從系統(tǒng)初始化、信息交互等方面對(duì)系統(tǒng)的功能實(shí)現(xiàn)程序進(jìn)行了設(shè)計(jì),基于機(jī)智云物聯(lián)網(wǎng)云平臺(tái)實(shí)現(xiàn)了電流信號(hào)的實(shí)時(shí)采集,診斷指標(biāo)的實(shí)時(shí)計(jì)算,電流頻譜的實(shí)時(shí)顯示,電機(jī)功率的實(shí)時(shí)監(jiān)測(cè)以及系統(tǒng)下位機(jī)與屏顯模塊、移動(dòng)端 APP 兩個(gè)平臺(tái)之間的信息交互。
實(shí)物工作情況圖如下:

-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2950文章
48147瀏覽量
418868
發(fā)布評(píng)論請(qǐng)先 登錄
面向抗空化能力的航空離心泵吸入室-蝸殼聯(lián)合流動(dòng)控制技術(shù)研究進(jìn)展與展望
基于PumpLinx的高壓航空燃油離心泵全工況非定常特性高精度仿真
從葉輪到蝸殼:航空燃油離心泵的工作原理及核心技術(shù)挑戰(zhàn)與瓶頸分析
電動(dòng)離心泵如何成為現(xiàn)代航空的“心臟”?深度解析其核心工作原理
逆向創(chuàng)新破封鎖:湖南泰德航空的電動(dòng)離心泵國(guó)產(chǎn)化“突圍戰(zhàn)”
高低溫試驗(yàn)臺(tái)智能診斷系統(tǒng)搭建:基于 PLC 與物聯(lián)網(wǎng)的故障預(yù)警技術(shù)
數(shù)據(jù)中臺(tái)可以接入哪些物聯(lián)網(wǎng)云平臺(tái)
光伏無(wú)人機(jī)巡檢診斷系統(tǒng)的作用
物聯(lián)網(wǎng)云平臺(tái)的作用有哪些?讓萬(wàn)物互聯(lián)
中易云物聯(lián)網(wǎng)平臺(tái)的十大功能
物聯(lián)網(wǎng)云平臺(tái)有什么功能特點(diǎn)
激光焊接技術(shù)在焊接離心泵葉輪工藝中的應(yīng)用
基于物聯(lián)網(wǎng)云平臺(tái)的離心泵工況診斷系統(tǒng)
評(píng)論