一、项目背景
本人参加2021年电赛并取得A题THD测量装置的国家二等奖,正在对该装置进行全方面的升级,包括测量范围,精度,带宽,测量参数等方面,目的实现硬件便携(口袋仪器与数据采集卡的结合),手机+PC上位机显示,系统不限于特定测量仪器功能,后续可通过便捷的方式更换具有示波,信号发生,万用表等功能的测量板扩展相应功能。申请本开发板想要用来进行远程控制,无线传输方案原型设计,以及云端数据系统的原型设计。
二、作品简介
由于上述内容除了使用RVB2601实现云端数据系统外均为本人的毕业设计,所以本次作品提交以RVB2601的使用介绍为主。
图片左端为本人设计制作的测量板第一版,主要实现输入任意波形信号的采集,THD测量,频率、VPP、谐波归一化幅值等参数的测量,单周期波形的采集等功能,具体见第三部分。测量板将采集到的数据通过串口发送至PC,蓝牙发送至手机,在本作品提交中,由于需要使用串口,因此将蓝牙模块串口断开接至CH2601的串口0,RVB2601接收数据解析出各测量参量,然后将数据上传至IOT studio显示,个别数据在LCD显示。
三、各部分功能说明和解析
非常感谢平头哥的支持,在这次评测活动中,由于前期忙着考研复试与毕业设计,至今才来发帖来分享自己对本次申请板卡RVB2601的使用体验,我大概5月开始前前后后花了应该有八九天的时间来使用板卡熟悉环境,构建一个简单的应用。当时申请板卡的时候,目的也是为了给毕设增加一个数据上传云端的功能,但是后面做完前面的任务后剩余的时间裕量也不足了,但也基本实现了Web显示的功能,遗憾的是暂未实现采集的单周期波形显示功能。
首先我的毕业设计来源于2021年电赛A题信号失真度测量装置,在比赛时我也是将比赛要求完成,因此毕设主要是对整个电路的集成与参数的优化,另外增加PC上位机显示控制功能,整体较为简单。在毕业设计制作过程中,电路设计阶段参照DSO模拟前级电路原理,单片机程序设计综合运用等效时间采样、平顶窗、频谱分析等应用原理实现了整个测量系统的设计制作。在毕设整体设计完成后,我预想使用申请的RVB2601+IOT studio实现WEB端数据查看与测量控制,设计过程如下。
首先接触一个新的板卡或单片机,比如使用MSP430与MSP432时,参照官网提供的详细的datasheet和usersguide,搭配例程来可以较深刻的理解工作机制并构建应用。刚收到RVB2601后,我是这样想的,但奈何官方资料比较少,例程至今也比较有限,我对物联网与操作系统的认识仅限于使用过小熊派和LiteOS连接华为云,其主控为熟悉STM32的低功耗系列,另外我主要方向是底层的板级设计与程序开发信号处理,所以刚开始对RVB2601用起来很不习惯,在我看来只uart的操作就一次又一次的封装,分在不同的包中,函数功能不尽相同,且各函数也不易查找,缺少注释与文件支持。
好在我本次需要用到的外设不多,只调用一个串口即可,作用是与测量板通信,接收测量板的测量数据,并对其测量范围进行控制。另外控制W800连接IOT studio,将数据上传并接收控制指令。
1、串口方面:
由于本装置的PC端与手机端应用都是基于.NET框架开发的,本人在两个平台上也都使用异步接收数据,对数据进行拼接解析协议,因此我在本单片机的使用中也首选异步收发,这和我之前裸跑32/432不大相同,我按照GitBook指导文档中CSI2驱动接口的异步收发接口说明与例程实现了TX但是不能实现非固定的字节接收,这困扰了我很长时间,为此我想了好多办法,去串口接收寄存器读缓存个数等等,但基本都失败了。后面看了sipower的发帖,嗯,去试了试,嗯,可以,但是由于我需要快速接收数据,测量板发送数据周期<100ms,每次发送300字节左右,由于我水平与时间有限,并且对操作系统认识不足,所以没能调试出来。
后面,还是使用了同步收发,成功完成收发任务。
//串口接收函数
void get_input(char * str)
{
char input = 'a';
uint32_t i ;
uint32_t num = 0;
for( i = 0; i<500 ;i++) str = '\0';
while(uart_getc() != 'T'){
num++;
if(num == 2200000) return; //超时退出
}
str[0] = 'T';
i = 1;
while(input != 'E')
{
input = uart_getc() ;
str = input;
i++;
}
}
2.传输协议
解决了物理层后,需要在协议层规定数据传输格式,由于下位机向电脑与手机端发送数据与接收数据均采用同一格式,因此本着效果不错就不修改方案的原则,我没有再去改下位机单片机MSP432的程序,使用同一协议格式通信,如下:
发送: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’(分别表示频率测量范围为“1k~500k”或“500k~1M”)
其中T后A前为THD,Amp后F前为归一化幅值逗号隔开,F后V前为频率,V后W前为峰峰值,W后为50个点的波形数据逗号隔开,T和E为数据开始与数据结束,通过串口接收。
串口接收任务如下:
//串口接收任务
static void uart_task(void *arg)
{
char str[500];
uint32_t i;
while(1)
{
//串口接收
get_input(str);
// printf("%s\n",str);
if(str[0]=='T'){
rec_flag = 1;
//解析出各参数
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 = T_adr[i+1];
T_adr = '\0';
//Amp
for(i = 0;i < 4; i++) H2 = A_adr[i+3];
for(i = 0;i < 4; i++) H3 = A_adr[i+8];
for(i = 0;i < 4; i++) H4 = A_adr[i+13];
for(i = 0;i < 4; i++) H5 = A_adr[i+18];
//FRE
for(i = 0;i < strlen(F_adr)-strlen(V_adr)-1;i++) FRE = F_adr[i+1];
FRE = '\0';
//VPP
for(i = 0;i < strlen(V_adr)-strlen(W_adr)-1-1;i++) VPP = V_adr[i+1];
VPP = '\0';
//Wave
for(i = 0;i < strlen(W_adr)-3;i++)
{
Wave = W_adr[i+1];
}
}
// printf("THD = %s\n",THD);
// printf("H2 = %s\n",H2);
// printf("H3 = %s\n",H3);
// printf("H4 = %s\n",H4);
// printf("H5 = %s\n",H5);
// printf("FRE = %s\n",FRE);
// printf("VPP = %s\n",VPP);
// printf("Wave = %s\n",Wave);
aos_msleep(20);
}
}
3.上传云端
和ESP8266类似,W800可以AT指令控制,所以这个过程就变得简单了,这里使用sipower博主分享的四个AT指令控制函数和上云例程,非常感谢博主的分享。这里在IOT Studio上创建产品,增加功能定义,添加设备。在数据上传函数中将前面的参数与后面的波形数据分开发送,波形数据用数组发送。
在这里注意:在printf里\\表示\,\”表示”
四、作品源码
链接:https://pan.baidu.com/s/1Z4kLJfqyFD5iI0tun0NZxw?pwd=d8tx
提取码:d8tx
--来自百度网盘超级会员V5的分享
五、视频演示
最后使用RVB2601实现系统数据接收与上传功能,前一天晚上测试没问题,正想着第二天拍个视频,到第二天下午测量板和RVB2601被信号发生器的信号线扯到桌子下面了,从1M高的桌子上摔了下来,然后RVB2601就连接不到Wifi了,测量板一点事没有,就很离谱,刚开始屏幕不听使唤,程序卡住不动,后面重烧一遍原程序,还是不行,试了几个之前的管用的程序,Wifi都连接不上了,我实在是被这个开发板打败了,发视频能演示什么呢?唉,现在我只想快点把这块板子寄回去,我以后研究生方向和物联网方向也没有关系,本来还有点感兴趣来,使用这个板子做简单开发的过程中遇到大大小小的问题,真是让人摸不到头脑,希望下一步官方可以提供更多的例程与详细的资料,不然对于像我这种对于行业开发了解不是很深入的人来说有一定的难度。
视频连接:
链接:https://pan.baidu.com/s/1YTGGdCWo1JxIpNaMdr4-qw?pwd=6s4n
提取码:6s4n
--来自百度网盘超级会员V5的分享
六、项目总结
说实话,在大学里我也熟悉51、STM32、MSP432、MSP430系列的很多款单片机,也用过ESP8266、小熊派,侧重领域为仪器仪表与信号处理,在大大小小的电子竞赛中获奖,自我感觉CH2601和IDE与一线产品有着差距,希望国产产品可以不断提高,让更多的国产产品走入开发者与大学的开发学习工作中。
本帖最后由 爱神的箭 于 2022-6-4 21:55 编辑