开发者 nbfei 通过调用串口与测量板通信,接收测量板的测量数据,并对其测量范围进行控制。另外控制w800连接iot studio,将数据上传并接收控制指令,完成便携仪器云端数据系统。
关于便携仪器云端数据系统的实现过程,请见本文详细介绍。
01 项目背景
本人参加2021年电赛并取得a题thd测量装置的国家二等奖,正在对该装置进行全方面的升级,包括测量范围,精度,带宽,测量参数等方面,目的实现硬件便携(口袋仪器与数据采集卡的结合),手机+pc上位机显示,系统不限于特定测量仪器功能,后续可通过便捷的方式更换具有示波,信号发生,万用表等功能的测量板扩展相应功能。申请本开发板想要用来进行远程控制,无线传输方案原型设计,以及云端数据系统的原型设计。
02 作品简介
由于上述内容除了使用rvb2601实现云端数据系统外均为本人的毕业设计,所以本次作品提交以rvb2601的使用介绍为主。
图片左端为本人设计制作的测量板第一版,主要实现输入任意波形信号的采集,thd测量,频率、vpp、谐波归一化幅值等参数的测量,单周期波形的采集等功能,具体见第三部分。测量板将采集到的数据通过串口发送至pc,蓝牙发送至手机,在本作品提交中,由于需要使用串口,因此将蓝牙模块串口断开接至ch2601的串口0,rvb2601接收数据解析出各测量参量,然后将数据上传至iot studio显示,个别数据在lcd显示。
03 各部分功能说明和解析
非常感谢平头哥的支持,在这次评测活动中,由于前期忙着考研复试与毕业设计,至今才来发帖来分享自己对本次申请板卡rvb2601的使用体验,我大概5月开始前前后后花了应该有八九天的时间来使用板卡熟悉环境,构建一个简单的应用。当时申请板卡的时候,目的也是为了给毕设增加一个数据上传云端的功能,但是后面做完前面的任务后剩余的时间裕量也不足了,但也基本实现了web显示的功能,遗憾的是暂未实现采集的单周期波形显示功能。
首先我的毕业设计来源于2021年电赛a题信号失真度测量装置,在比赛时我也是将比赛要求完成,因此毕设主要是对整个电路的集成与参数的优化,另外增加pc上位机显示控制功能,整体较为简单。在毕业设计制作过程中,电路设计阶段参照dso模拟前级电路原理,单片机程序设计综合运用等效时间采样、平顶窗、频谱分析等应用原理实现了整个测量系统的设计制作。在毕设整体设计完成后,我预想使用申请的rvb2601+iot studio实现web端数据查看与测量控制,设计过程如下。
首先接触一个新的板卡或单片机,比如使用msp430与msp432时,参照官网提供的详细的datasheet和usersguide,搭配例程来可以较深刻的理解工作机制并构建应用。刚收到rvb2601后,我是这样想的,但奈何官方资料比较少,例程至今也比较有限,我对物联网与操作系统的认识仅限于使用过小熊派和liteos连接华为云,其主控为熟悉stm32的低功耗系列,另外我主要方向是底层的板级设计与程序开发信号处理,所以刚开始对rvb2601用起来很不习惯,在我看来只uart的操作就一次又一次的封装,分在不同的包中,函数功能不尽相同,且各函数也不易查找,缺少注释与文件支持。
好在我本次需要用到的外设不多,只调用一个串口即可,作用是与测量板通信,接收测量板的测量数据,并对其测量范围进行控制。另外控制w800连接iot studio,将数据上传并接收控制指令。
3.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[i] = '';while(uart_getc() != 't'){num++;if(num == 2200000)return;//超时退出}str[0] = 't';i = 1;while(input != 'e'){input = uart_getc() ;str[i] = input;i++;}}
3.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,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');//thdfor(i = 0;i < strlen(t_adr)-strlen(a_adr)-1;i++)thd[i] = t_adr[i+1];t_adr[i] = '';//ampfor(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];//frefor(i = 0;i < strlen(f_adr)-strlen(v_adr)-1;i++)fre[i] = f_adr[i+1];fre[i] = '';//vppfor(i = 0;i < strlen(v_adr)-strlen(w_adr)-1-1;i++)vpp[i] = v_adr[i+1];vpp[i] = '';//wavefor(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指令控制,所以这个过程就变得简单了,这里使用sipower博主分享的四个at指令控制函数和上云例程,非常感谢博主的分享。这里在iot studio上创建产品,增加功能定义,添加设备。在数据上传函数中将前面的参数与后面的波形数据分开发送,波形数据用数组发送。
在这里注意:在printf里\表示,”表示”
04 作品源码
链接:https://pan.baidu.com/s/1z4kljfqyfd5ii0tun0nzxw?pwd=d8tx
提取码:d8tx
05 视频演示
视频链接:
链接:https://pan.baidu.com/s/1ytggdcwo1jxipnamdr4-qw?pwd=6s4n
提取码:6s4n
PoE供电选择哪种网线最合适?PoE以太网供电的两种方法
EK与技嘉合作推出一款专为技嘉主板设计的水冷头
关于家电界那些奇葩的灯饰
联想可能正在对新笔记本电脑的显示屏进行更改
NVIDIA在着手于把老游戏用RTX科技进行包装,使其焕发新生
助力数据采集 推动信息化系统云端发展
Littelfuse产品荣获智能化行业优秀解决方案奖
智能可穿戴设备处于逆境,不如看看苹果怎么说?
嵌入式系统简易版本的printf满足自己的需要
4种线性稳压驱动器电路
基于 XP® 的 SLA 电池充电器
微信正式推出可实现全语音交互的车载版
电脑电视 (PCTV) 技术
旋转编码器的零位
科学家通过脑机接口可预测癫痫的发作日期
新能源汽车的动力来源发展历程回顾
为何起步最晚的华为云突飞猛进?
蒲公英P5千兆旁路组网盒子新升级,支持PoE供电,机体优化更精巧!
2018年第四季度各类元器件交期及价格走势
分享一些从单片机向Linux进阶需要掌握哪些基础知识