我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

    

X-CTR100控制器配套的X-PrintfScope串口波形显示功能的使用,如其名,软件最大亮点是可以通过C语言Printf函数实现波形显示功能,使用简单灵活。另外也支持常规的串口通信协议,实现高效率传输。

原理

X-CTR100控制器配套X-PrintfScope串口波形显示软件,具有八个显示通道,最大特点是可通过C标准库函数printf增加@标识实现数据波形显示,例如printf("@%d %f ",a,b)可实现一个整形一个浮点类型数据波形显示,使用方便灵活。Printf协议使用字符编码方式,虽然使用方便灵活,但传输效率相对较低,本软件也支持高效的Data协议传输方式。

X-PrintfScope基于功能强大的Iocomp控件设计,软件界面及功能介绍如下图所示,详细使用请参考软件帮助或软件使用说明文档,本教程对软件基本操作进行说明。

    

串口设置

- 软件启动后,会自动搜索可用的串口,并在端口号下拉框处显示可用串口。如果有可用串口单击"OPEN"按钮即可打开对应串口,并且显示串口状态和参数信息(S:COM3_ON 115200 N 8 1),串口参数为默认参数(波特率:115200,校验位:NONE,数据位:8,停止位1)。

- 多个可用串口时,端口号下拉框可选择和切换不同串口。

- 波特率下拉框可以选择不同波特率。

- SET按钮可以打开不常用的'校验位''数据位''停止位'串口参数设置对话框。

- 进入串口参数设置对话框可进行参数设置,完成后单击参数更新即可完成参数设置。考虑到常用情况,参数设置不具有记忆性,每次进入均显示常用的默认参数值。

- 不支持串口热插拔,热插拔会报错误,建议关闭串口后再进行串口插拔。

波形显示

- 具有八个波形显示通道,使用不同颜色表示

- 波形可以拖动、放大、缩小操作

- 示波器上方具有帧数和帧率显示

- 建议最大发送帧率为120,帧率与电脑显示性能有关,帧率过大容易导致波形显示延迟

- CLEAR按钮实现波形和数据清除

- VIEW按钮实现数据显示(待实现)

- SAVE按钮实现数据保存为txt格式文件,文件名默认为"xx月xx日xx时xx分xx秒_.txt",其中xx为当前时间,"_"后可增加内容字符描述。

- LOAD按钮可实现保存数据的波形显示(待实现)

- Axes栏X、Y滑动条可进行X轴和Y轴数据缩放操作

通道操作

- Channel栏SET按钮可实现波形通道相关操作,单击可进入通道设置对话框

- 通道设置对话框 Name栏可定义波形通道名称

- View复选框可控制该通道波形是否显示

- Scale栏为输出与输入的比例系数

- Shift栏为输出与输入的唯一系数

- Scale和Shift可以方便进行波形显示范围的控制,方便进行不同数量级波形同屏显示

Printf通信协议

- Printf协议:通过C语言Printf函数增加@标识实现数据波形显示。

- 显示示例函数:printf("@%d %d %f %f \r\n", a, b, x, y);,实际发送数据 @876 142 12.35 48.357

- @为帧头标识符,回车换行\r\n为帧尾标识符。

- @帧头后面紧跟数据。

- 每个数据后面加一个空格,作为数据标识符。

- 支持整型%d和浮点%f两种数据类型。

- 数据数量为1~8,几个数据对应几个显示通道

Data通信协议

- Data协议为高效率的数据编码协议,传输效率比Printf协议高。

- 协议内容:0xAA + 0x55 + 数据个数 + 预留位 + 数据1低8位 + 数据1高8位 + …… + 校验和。

- 数据个数:根据需要可以选择1~8,对应数据1~数据8。

- 预留位:0x00

- 数据内容:数据位为16进制整型数据,低8位在前,高8位在后。数据数量与前面数据个数位对应。

- 校验和:前面数据累加和的低8位。

- 范例:帧数据'aa 55 03 00 43 fe 2a ff 74 ff df'

发送功能

- 为方便系统调试,设计了数据发送功能,可实现下位机命令交互功能。

- 可以在Send区,发送您发送的任意字符。

- 支持16进制发送,勾选'Hex'复选框后,发送的时候将对发送区的内容进行16进制和字符互转。

- Num为发送的字节数。

例程-Printf协议例程

使用MPU6050作为数据源,使用C语言Printf函数实现对MPU6050传感器3轴加速度、3轴陀螺仪、温度数据7个数据源进行波形显示,其中加速度陀螺仪为整型数据,温度为浮点数据。

硬件说明

硬件资源:

  • 串口UART1
  • LED灯
  • MPU6050运动传感器

软件说明

通过MPU6050相关X-API接口进行数据采集,并将采集的数据通过printf函数输出,主程序代码如下。

int main(void)

{    

    float tmp;

    int16_t acel[3];

    int16_t gyro[3];

    

    //XRT1初始化

    AX_Init(115200);

    

    //模块初始化及配置

    AX_MPU6050_Init(); //MPU6050初始化

    AX_MPU6050_SetAccRange(AX_ACC_RANGE_2G); //设置加速度量程

    AX_MPU6050_SetGyroRange(AX_GYRO_RANGE_250); //设置陀螺仪量程

    AX_MPU6050_SetGyroSmplRate(200); //设置陀螺仪采样率

    AX_MPU6050_SetDLPF(AX_DLPF_ACC94_GYRO98); //设置低通滤波器带宽

    
 

    

    while (1)

    {        

        AX_MPU6050_GetAccData(acel); //读取三轴加速度数据

        AX_MPU6050_GetGyroData(gyro); //读取三轴陀螺仪数据

        tmp = AX_MPU6050_GetTempValue(); //读取温度传感器数据

        

        printf("@%d %d %d %d %d %d %f \r\n",acel[0],acel[1],acel[2],gyro[0],gyro[1],gyro[2],tmp);

            

        AX_Delayms(7);

        AX_LEDG_Toggle();

    }

}

实现效果

波形显示效果如下图所示,软件会自动对数据进行跟踪显示,本例程帧率可以达到90,方便观察数据可以拖动窗口到全屏显示。

    

使用串口助手查看数据内容,如下图所示。

    

为了方便数据波形展示,可对每个通道数据进行设置,包括通道命名、显示开关、数据比例和偏移变化等,通道设置界面如下图所示。

    

例程-Data协议例程

Data协议即为普通串口数据帧通信协议,使用MPU6050作为数据源,采集3轴陀螺仪数据,通过X-API函数AX_PrintfScope_SendData()进行波形显示。

硬件说明

硬件资源:

  • 串口UART1
  • LED灯
  • MPU6050运动传感器

软件生态

X-SOFT软件生态,X-API扩展文件如下。

ax_printfscope.c—— Data协议源文件

ax_printfscope.h——Data协议操作接口头文件

Data协议实现部分封装到了ax_printfscope.c文件中,默认使用UART1,无须初始化硬件,具有一个发送数据函数接口,实现源码如下。

/**

* @简
述 X-PrintfScope软件 Data协议发送函数

* @参
数 *pbuf:发送数据指针,int16_t 16位整型数据

* num:发送数据个数,<8

* @返回值    

*/

void AX_PrintfScope_SendData(int16_t *pbuf,uint8_t num)

{

    u8 i;    

    u8 tx_buf[20]; //接收缓冲

u8 tx_checksum = 0;//发送校验和

    

    if((num < 9) && (num > 0))

    {

        /******获取数据******/

        tx_buf[0] = 0xAA; //帧头

        tx_buf[1] = 0x55; //

        tx_buf[2] = num; //数据长度

        tx_buf[3] = 0x00; //预留

        

        for(i=0; i<num; i++)

        {

            tx_buf[4+(i*2)] = (u8)( (*(pbuf+i)) & 0x00ff );

            tx_buf[5+(i*2)] = (u8)( (*(pbuf+i)) >> 8 );            

        }

        

        /******发送数据******/    

        for(i=0; i<(4+num*2); i++)

        {

            tx_checksum = tx_checksum + tx_buf[i];

            USART_SendData(USART1, tx_buf[i]);

            while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);

        }

        

        //发送校验和补码

        USART_SendData(USART1, (uint8_t)tx_checksum);

        while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);    

    }

}

软件说明

软件通过MPU6050相关X-API接口进行数据采集,并将采集的数据通过AX_PrintfScope_SendData()函数输出数据,进行波形显示,主程序代码如下。

int main(void)

{    

    int16_t gyro[3];

    int16_t buf[3];

    

    //XRT1初始化

    AX_Init(115200);

    printf("***X-PrintfScope软件 Data协议
波形显示例程***\r\n\r\n");

    

    //模块初始化及配置

    AX_MPU6050_Init(); //MPU6050初始化

    AX_MPU6050_SetAccRange(AX_ACC_RANGE_2G); //设置加速度量程

    AX_MPU6050_SetGyroRange(AX_GYRO_RANGE_250); //设置陀螺仪量程

    AX_MPU6050_SetGyroSmplRate(200); //设置陀螺仪采样率

    AX_MPU6050_SetDLPF(AX_DLPF_ACC94_GYRO98); //设置低通滤波器带宽

    

    while (1)

    {

        //获取数据

        AX_MPU6050_GetGyroData(gyro); //读取三轴陀螺仪数据

        

        //封装并发送数据

        buf[0] = gyro[0];

        buf[1] = gyro[1];

        buf[2] = gyro[2];

        AX_PrintfScope_SendData(buf,3);

        

        AX_Delayms(5);

        AX_LEDG_Toggle();

    }

}

实现效果

波形显示效果如下图所示,软件会自动对数据进行跟踪显示,本例程帧率可以达到170。

    

注意,拖动窗口查看波形时自动跟踪显示会停止,再次开启波形跟踪显示请单击绿色三角按钮。

使用串口助手查看数据内容,如下图所示。

    

玩转X-CTR100 | X-PrintfScope波形显示的更多相关文章

  1. Modelsim设置数据以模拟波形显示

    选中希望以模拟波形显示的信号,右击选择format—>Analog(automatic) 如果你的数据是用无符号数表示一个完整的波形的,那么可能显示出来的波形样子是下面的样子,不过不要紧,这是因 ...

  2. [转] 基于C#的波形显示控件的实现

    转自 基于C#的波形显示控件的实现[附完整源码下载] 编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的 ...

  3. 基于C#的波形显示控件的实现[转]

    编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示),整个项目边学 ...

  4. Modelsim波形显示字符

    偶然在 QQ 群里看到一个大佬发的 Modelsim 波形显示字符,闲着没事拿来玩玩,并将改良过程也整理一下. 一.字符点阵产生 软件采用 PCtoLCD2002,打开后不需要设置,直接打字然后点击[ ...

  5. modelsim仿真时让状态机波形显示状态的名字

    在使用Verilog编写有限状态机等逻辑的时候,状态机的各个状态通常以参数表示(如IDLE等).当使用ModelSim仿真的时候,状态机变量在wave窗口中以二进制编码的形式显示,如下面所示,这种显示 ...

  6. python 实现wav的波形显示(时域和频域)

    音频处理中,经常要看一下啊频域图是什么样子的,这里自己写了一个小程序,可以完美的同步显示时域和频域图,直接上代码: #wave data -xlxw #import import wave as we ...

  7. 玩转X-CTR100 l STM32F4 l OLED显示-SSD1306无字库

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      OLED显示屏具有自发光特性,不需要背光, ...

  8. 原创:DynamicDataDisplay波形显示自定义格式

    原创:DynamicDataDisplay 原版本在日期显示的格式上与我们的习惯不一样,特做如下修改: 自定义日期格式修改: //MainWindow.cs中 var ds = new Enumera ...

  9. 调用CImg库显示WAV格式音频波形

    最近在做傅里叶变换和小波变换时经常要通过显示波形来检验算法,但通过visual studio之类显示波形又显得麻烦,而且不能跨平台. CImg是一个跨平台的C++的图像处理库,提供的图像处理等功能十分 ...

随机推荐

  1. BZOJ4415: [Shoi2013]发牌 树状数组+二分

    Description 假设一开始,荷官拿出了一副新牌,这副牌有N张不同的牌,编号依次为1到N.由于是新牌,所以牌是按照顺序排好的,从牌库顶开始,依次为1, 2,……直到N,N号牌在牌库底.为了发完所 ...

  2. C# 获取SQL Server所有的数据库名称

    参考文章:http://www.cnblogs.com/Abel_cn/archive/2008/12/09/1351425.html http://blog.csdn.net/friendan/ar ...

  3. 【译】第1节--- EF Code First 介绍

    原文:http://www.entityframeworktutorial.net/code-first/entity-framework-code-first.aspx 本教程涵盖了code fir ...

  4. 02_Flume1.6.0安装及单节点Agent实践

    Flume1.6.0的安装1.上传Flume-1.6.0-tar.gz到待部署的所有机器     以我的为例: /usr/local/src/ 2.解压得到flume文件夹      # tar -x ...

  5. 学习mybatis-3 step by step 篇二

    Mapper XML 文件 基本的*Mapper.xml文件配置就不熬述了具体可参考: http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html 1.sq ...

  6. WPF基础学习笔记整理 (四) 布局

    WPF使用的是容器(container)进行布局: WPF窗口(Window类型)只能包含单个元素,故为了放置多个元素并增强界面效果,引入了容器: WPF布局容器都派生自System.Windows. ...

  7. c语言 快速排序

    #include<stdio.h> #include<stdlib.h> #define BUF_SIZE 10 void display(int array[], int m ...

  8. Jmeter工具做性能测试 常见的错误汇总

    在Win机器上用Jmeter做性能测试,汇总下我自身遇到的错误和解决方案 java.net.BindException: Address already in use: JVM_Bind 原因分析:压 ...

  9. 899F - Letters Removing

    Codeforces 899F - Letters Removing 思路:考虑一下怎么找到输入的l和r在原来串中的位置,我们想到用前缀和来找,一开始所有位置都为1,删掉后为0,那么前缀和为l的位置就 ...

  10. vuejs2点滴

    在Vue定义一个不被添加getter setter 的属性: https://github.com/vuejs/vue/issues/1988 博客: 0.vux的x-input源码分析. http: ...