開發(fā)者nbfei 通過調(diào)用串口與測(cè)量板通信,接收測(cè)量板的測(cè)量數(shù)據(jù),并對(duì)其測(cè)量范圍進(jìn)行控制。另外控制W800連接IOT studio,將數(shù)據(jù)上傳并接收控制指令,完成便攜儀器云端數(shù)據(jù)系統(tǒng)。
關(guān)于便攜儀器云端數(shù)據(jù)系統(tǒng)的實(shí)現(xiàn)過程,請(qǐng)見本文詳細(xì)介紹。
01項(xiàng)目背景
本人參加2021年電賽并取得A題THD測(cè)量裝置的國(guó)家二等獎(jiǎng),正在對(duì)該裝置進(jìn)行全方面的升級(jí),包括測(cè)量范圍,精度,帶寬,測(cè)量參數(shù)等方面,目的實(shí)現(xiàn)硬件便攜(口袋儀器與數(shù)據(jù)采集卡的結(jié)合),手機(jī)+PC上位機(jī)顯示,系統(tǒng)不限于特定測(cè)量?jī)x器功能,后續(xù)可通過便捷的方式更換具有示波,信號(hào)發(fā)生,萬用表等功能的測(cè)量板擴(kuò)展相應(yīng)功能。申請(qǐng)本開發(fā)板想要用來進(jìn)行遠(yuǎn)程控制,無線傳輸方案原型設(shè)計(jì),以及云端數(shù)據(jù)系統(tǒng)的原型設(shè)計(jì)。
02作品簡(jiǎn)介
由于上述內(nèi)容除了使用RVB2601實(shí)現(xiàn)云端數(shù)據(jù)系統(tǒng)外均為本人的畢業(yè)設(shè)計(jì),所以本次作品提交以RVB2601的使用介紹為主。
圖片左端為本人設(shè)計(jì)制作的測(cè)量板第一版,主要實(shí)現(xiàn)輸入任意波形信號(hào)的采集,THD測(cè)量,頻率、VPP、諧波歸一化幅值等參數(shù)的測(cè)量,單周期波形的采集等功能,具體見第三部分。測(cè)量板將采集到的數(shù)據(jù)通過串口發(fā)送至PC,藍(lán)牙發(fā)送至手機(jī),在本作品提交中,由于需要使用串口,因此將藍(lán)牙模塊串口斷開接至CH2601的串口0,RVB2601接收數(shù)據(jù)解析出各測(cè)量參量,然后將數(shù)據(jù)上傳至IOT studio顯示,個(gè)別數(shù)據(jù)在LCD顯示。
03各部分功能說明和解析
非常感謝平頭哥的支持,在這次評(píng)測(cè)活動(dòng)中,由于前期忙著考研復(fù)試與畢業(yè)設(shè)計(jì),至今才來發(fā)帖來分享自己對(duì)本次申請(qǐng)板卡RVB2601的使用體驗(yàn),我大概5月開始前前后后花了應(yīng)該有八九天的時(shí)間來使用板卡熟悉環(huán)境,構(gòu)建一個(gè)簡(jiǎn)單的應(yīng)用。當(dāng)時(shí)申請(qǐng)板卡的時(shí)候,目的也是為了給畢設(shè)增加一個(gè)數(shù)據(jù)上傳云端的功能,但是后面做完前面的任務(wù)后剩余的時(shí)間裕量也不足了,但也基本實(shí)現(xiàn)了Web顯示的功能,遺憾的是暫未實(shí)現(xiàn)采集的單周期波形顯示功能。
首先我的畢業(yè)設(shè)計(jì)來源于2021年電賽A題信號(hào)失真度測(cè)量裝置,在比賽時(shí)我也是將比賽要求完成,因此畢設(shè)主要是對(duì)整個(gè)電路的集成與參數(shù)的優(yōu)化,另外增加PC上位機(jī)顯示控制功能,整體較為簡(jiǎn)單。在畢業(yè)設(shè)計(jì)制作過程中,電路設(shè)計(jì)階段參照DSO模擬前級(jí)電路原理,單片機(jī)程序設(shè)計(jì)綜合運(yùn)用等效時(shí)間采樣、平頂窗、頻譜分析等應(yīng)用原理實(shí)現(xiàn)了整個(gè)測(cè)量系統(tǒng)的設(shè)計(jì)制作。在畢設(shè)整體設(shè)計(jì)完成后,我預(yù)想使用申請(qǐng)的RVB2601+IOT studio實(shí)現(xiàn)WEB端數(shù)據(jù)查看與測(cè)量控制,設(shè)計(jì)過程如下。
首先接觸一個(gè)新的板卡或單片機(jī),比如使用MSP430與MSP432時(shí),參照官網(wǎng)提供的詳細(xì)的datasheet和usersguide,搭配例程來可以較深刻的理解工作機(jī)制并構(gòu)建應(yīng)用。剛收到RVB2601后,我是這樣想的,但奈何官方資料比較少,例程至今也比較有限,我對(duì)物聯(lián)網(wǎng)與操作系統(tǒng)的認(rèn)識(shí)僅限于使用過小熊派和LiteOS連接華為云,其主控為熟悉STM32的低功耗系列,另外我主要方向是底層的板級(jí)設(shè)計(jì)與程序開發(fā)信號(hào)處理,所以剛開始對(duì)RVB2601用起來很不習(xí)慣,在我看來只uart的操作就一次又一次的封裝,分在不同的包中,函數(shù)功能不盡相同,且各函數(shù)也不易查找,缺少注釋與文件支持。
好在我本次需要用到的外設(shè)不多,只調(diào)用一個(gè)串口即可,作用是與測(cè)量板通信,接收測(cè)量板的測(cè)量數(shù)據(jù),并對(duì)其測(cè)量范圍進(jìn)行控制。另外控制W800連接IOT studio,將數(shù)據(jù)上傳并接收控制指令。
3.1 串口方面
由于本裝置的PC端與手機(jī)端應(yīng)用都是基于.NET框架開發(fā)的,本人在兩個(gè)平臺(tái)上也都使用異步接收數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行拼接解析協(xié)議,因此我在本單片機(jī)的使用中也首選異步收發(fā),這和我之前裸跑32/432不大相同,我按照GitBook指導(dǎo)文檔中CSI2驅(qū)動(dòng)接口的異步收發(fā)接口說明與例程實(shí)現(xiàn)了TX但是不能實(shí)現(xiàn)非固定的字節(jié)接收,這困擾了我很長(zhǎng)時(shí)間,為此我想了好多辦法,去串口接收寄存器讀緩存?zhèn)€數(shù)等等,但基本都失敗了。后面看了sipower的發(fā)帖,嗯,去試了試,嗯,可以,但是由于我需要快速接收數(shù)據(jù),測(cè)量板發(fā)送數(shù)據(jù)周期<100ms,每次發(fā)送300字節(jié)左右,由于我水平與時(shí)間有限,并且對(duì)操作系統(tǒng)認(rèn)識(shí)不足,所以沒能調(diào)試出來。
后面,還是使用了同步收發(fā),成功完成收發(fā)任務(wù)。
//串口接收函數(shù)
void get_input(char * str)
{
char input = 'a';
uint32_t i ;
uint32_t num = 0;
for( i = 0; i<500 ;i++)str[i] = '';
while(uart_getc() != 'T'){
num++;
if(num == 2200000)return;//超時(shí)退出
}
str[0] = 'T';
i = 1;
while(input != 'E')
{
input = uart_getc() ;
str[i] = input;
i++;
}
}
3.2 傳輸協(xié)議
解決了物理層后,需要在協(xié)議層規(guī)定數(shù)據(jù)傳輸格式,由于下位機(jī)向電腦與手機(jī)端發(fā)送數(shù)據(jù)與接收數(shù)據(jù)均采用同一格式,因此本著效果不錯(cuò)就不修改方案的原則,我沒有再去改下位機(jī)單片機(jī)MSP432的程序,使用同一協(xié)議格式通信,如下:
發(fā)送:T0.67Amp0.01,0.00,0.00,0.00F10000V1.97,W 799, 875, 949,1017,1087,1150,1208,1259,1299,1334,1359,1375,1376,1375,1358,1334,1299,1256,1206,1149,1086,1017, 947, 873, 797, 721, 646, 574, 503, 437, 376, 321, 273, 233, 201, 177, 163, 160, 166, 181, 205, 238, 279, 329, 384, 445, 513, 582, 656, 732,E
接收:‘0’或‘1’(分別表示頻率測(cè)量范圍為“1k~500k”或“500k~1M”)
其中T后A前為THD,Amp后F前為歸一化幅值逗號(hào)隔開,F(xiàn)后V前為頻率,V后W前為峰峰值,W后為50個(gè)點(diǎn)的波形數(shù)據(jù)逗號(hào)隔開,T和E為數(shù)據(jù)開始與數(shù)據(jù)結(jié)束,通過串口接收。
串口接收任務(wù)如下:
//串口接收任務(wù)
static void uart_task(void *arg)
{
char str[500];
uint32_t i;
while(1)
{
//串口接收
get_input(str);
//printf("%s
",str);
if(str[0]=='T'){
rec_flag = 1;
//解析出各參數(shù)
char *T_adr = strchr(str,'T');
char *A_adr = strchr(str,'A');
char *F_adr = strchr(str,'F');
char *V_adr = strchr(str,'V');
char *W_adr = strchr(str,'W');
//THD
for(i = 0;i < strlen(T_adr)-strlen(A_adr)-1;i++)THD[i] = T_adr[i+1];
T_adr[i] = '';
//Amp
for(i = 0;i < 4; i++)H2[i] = A_adr[i+3];
for(i = 0;i < 4; i++)H3[i] = A_adr[i+8];
for(i = 0;i < 4; i++)H4[i] = A_adr[i+13];
for(i = 0;i < 4; i++)H5[i] = A_adr[i+18];
//FRE
for(i = 0;i < strlen(F_adr)-strlen(V_adr)-1;i++)FRE[i] = F_adr[i+1];
FRE[i] = '';
//VPP
for(i = 0;i < strlen(V_adr)-strlen(W_adr)-1-1;i++)VPP[i] = V_adr[i+1];
VPP[i] = '';
//Wave
for(i = 0;i < strlen(W_adr)-3;i++)
{
Wave[i] = W_adr[i+1];
}
}
//printf("THD = %s
",THD);
//printf("H2 = %s
",H2);
//printf("H3 = %s
",H3);
//printf("H4 = %s
",H4);
//printf("H5 = %s
",H5);
//printf("FRE = %s
",FRE);
//printf("VPP = %s
",VPP);
//printf("Wave = %s
",Wave);
aos_msleep(20);
}
}
3.3 上傳云端
和ESP8266類似,W800可以AT指令控制,所以這個(gè)過程就變得簡(jiǎn)單了,這里使用sipower博主分享的四個(gè)AT指令控制函數(shù)和上云例程,非常感謝博主的分享。這里在IOT Studio上創(chuàng)建產(chǎn)品,增加功能定義,添加設(shè)備。在數(shù)據(jù)上傳函數(shù)中將前面的參數(shù)與后面的波形數(shù)據(jù)分開發(fā)送,波形數(shù)據(jù)用數(shù)組發(fā)送。
在這里注意:在printf里\表示,”表示”
04作品源碼
鏈接:https://pan.baidu.com/s/1Z4kLJfqyFD5iI0tun0NZxw?pwd=d8tx
提取碼:d8tx
05視頻演示
視頻鏈接:
鏈接:https://pan.baidu.com/s/1YTGGdCWo1JxIpNaMdr4-qw?pwd=6s4n
提取碼:6s4n
審核編輯 :李倩
-
數(shù)據(jù)采集
+關(guān)注
關(guān)注
39文章
6255瀏覽量
114050 -
信息化
+關(guān)注
關(guān)注
1文章
493瀏覽量
21202 -
數(shù)據(jù)系統(tǒng)
+關(guān)注
關(guān)注
0文章
19瀏覽量
10224
原文標(biāo)題:應(yīng)用速遞 | 助力數(shù)據(jù)采集 推動(dòng)信息化系統(tǒng)云端發(fā)展
文章出處:【微信號(hào):芯片開放社區(qū),微信公眾號(hào):芯片開放社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論