当嵌入式系统在运行时,去处理一些内部数据是比较难的,一旦使用Debug工具调试断点,则整个系统便会停下来,而无法监测到运行中的真实情况,本文介绍一种简单的数据可视化工具Data Visualizer的使用,如图1所示,类似于MCC工具,可以从MPLAB XIDE的Plugins中去在线安装此插件,此处不做详述。安装好的视图如图2所示。
图1 数据可视化工具的作用
图2 安装好之后的Data Visualizer
一.嵌入式系统的创建
在使用Data Visualizer之前,我们先通过MCC建立一个工程,通过PWM1产生器信号PG1H信号,触发ADC的专用通道AN0,在ADC AN0中断中得到AN0在Demo板上的采样值,同时在Timer1的中断中去采用UART外设把数据发送到Data Visualizer的界面中去显示。除此之外,我们也验证一下使用Data Visualizer的基本串口终端的功能。
图3 数据显示实验平台
本文实验均基于dsPIC33CK256MP506 Digital Power PIM 板,MA330048,如图3所示。
图4 主时钟的配置参数
主时钟的配置参数如图4所示,采用内部FRC振荡器,通过PLL适当配置可以达到100MHz的指令时钟频率,这里系统时钟FOSC为200M.
图5 辅助时钟的配置参数
辅助时钟同样采用内部FRC振荡器,通过APLL的适当配置达到500M的时钟输出,作为PWM模块的输入时钟。此时我们注意FVCO/4为400M, 会用它作为ADC的输入时钟,将ADC内核时钟配置为66.5MHz,以满足小于70MHz的要求。
图6 Timer1的配置参数
将定时器Timer1配置为2mS的周期,我们每一次中断都会去将数据送到Data Visualizer界面。
图7 UART的配置参数
将UART1的波特率设为230400,并且重定位Printf到UART以便在代码中使用Printf函数打印变量输出。
图8 pin脚基于Demo板设置
通过参考硬件Demo板的UART端口连接,在MCC中设置相应的端口,并使能UART的起始状态为高。此处AN0为我们监控的采样数据通道,对应板上的P2可调电阻电压输入。
图9 全局中断和ADC及Timer中断的使能
由于我们需要在AN0中断中得到ADC AN0的500kHz频率的周期采样值,因此使能AN0的中断,并设定高优先级,Timer1中断设置为低优先级,且使能中断。
由于篇幅和主题的关系,我们这里对PWM模块和ADC模块的配置不做详细介绍,后续会专门通过相应的篇幅去介绍。
图10 ADC中断信号和PWM之间的关系
图10中,我们测量得到的在500kHz的PWM(CH1)开关频率下,每周期都触发ADC AN0进入AN0中断,进行RB12翻转(CH2),而CH4为AN0的电压值1.66V,此时dsPIC33CK的供电为板上的LDO输出3.3V.
图11 Timer1中断的翻转信号
在图11中,我们测量得到Timer1中断的翻转信号RB11(CH3),每次中断都会翻转,所以其翻转周期和Timer1设定的周期2ms相同。
二.在Timer 1中断中进行串口终端数据的发送
图12 Timer1中断中将数据发送到Data Visualizer终端
图13 串口参数设置窗口
烧录程序后,当接上Demo板串口数据线,拔掉编程接口线并将编程器PICkit4移除板子连接避免相互影响,由于板上自带USB转串口接口器件,因此会自动识别串口号为COM10,设定Baud Rate为230400和MCC配置保持一致,并检查其它默认配置和MCC串口配置一致,否则打印出来的可能是无意义的乱码。
图14 串口数据发送到终端
在上图14中,选择COM10右侧的下拉选项中,选择Send to Terminal,并且在右侧窗口中,选择正确的数据源COM10,设置为8bit ASCII码,则可以观察到如截图中的期望的数据结果。
三.在Timer1中断中发送数据流到Data Visualizer图形显示窗口
图15 在Timer 1中断中进行数据流发送设置
图16 数据流封装的帧格式解释
大多数数据通信界面使用字节流去做数据传输,当需要传输多个字节的数据时,需要对数据进行一定的封装,Data Visualizer得到原始数据后,进行封装为多个数据流,数据流的格式取决于用户的定义。
图17 Data Visualizer目前支持的变量数据类型
目前此数据显示工具支持的数据类型如图17所示,这里我们用到的是16位的无符号ADC数据,表示单端无符号数据采样值。
图18 数据流的格式说明
在具体执行数据发送时,最低位的字节先发送,高位的字节后发送,由一个起始字节和结尾字节组成一个封装结构,采用这个封装结构去帮助解释器同步数据流。起始字节可以是任意的字节,结尾字节是起始字节的反码字节。
烧录代码后,连接串口USB线,移除PICkit4和板子和电脑的连接,打开Data Visualizer界面。
图19 将数据流发送到Data Visualizer并图形显示
如图19选择COM10 右侧的New Variable Streamer选项,打开数据流结构设置界面。
图20 数据流格式设置要求
图21 数据流设置界面
除了给数据流命名之外,由于起始字节为0x03,则需要设置帧格式为One’s Complement,并写入起始帧字节数据,界面自动得到结束帧字节为0xFC。
图22 添加变量名称及类型
这里我们只传输一个16位无符号数据即可,并选择相应的数据显示轴格式。
图23 Data Visualizer中的数据显示
注意左侧选择正确的数据源,此处为COM10,下面数据终端中的原有数据可以清零,并且设置为断开数据源。此时上面窗口显示正确的数据图形显示,此处由于是数字电位器设定的ADC采样电压,因此有一些小的波动。
图24 数据纵纵坐标设置合适范围
当从曲线左侧的设置按钮中进入,可以设置相应的数据显示范围,如图24所示。
图25 调整数据范围后的数据显示
此时显示的数据为2.03k,很接近实际的电压1.65V对应的ADC采样值2048.
图26 鼠标滚轮调整横坐标范围及精度
当采用鼠标滚轮调整横坐标时间单位时,可以看到右侧的窗口的数据同时跟随变化,实时显示。
相关Printf的典型转义字符及数据说明符顺便列到下面,必要时供参考,注意在使用时 #include<stdio.h>.
图27 Printf函数转义字符
图28 Printf典型数据说明符
总结,本文基于PWM触发ADC采样电压为例,通过串口UART将数据在Timer1定时器中断中发送到串口终端进行数据显示及图形化数据显示,方便在嵌入式系统中进行系统数据的监查。
参考文献:
MPLAB® Data Visualizer User's Guide
相关文章:
基于MCC配置dsPIC33C芯片的时钟及输出系统时钟FOSC波形