J-Scope的使用

1、硬件准备

  首先准备Jlink硬件,V8版本在J-Scope中采样频率高到50Hz,粗略的观看还可以;V9版本可以到1MHz;对于Scpoe还有一个同时观察变量的数量,V8最少,V9可观察的多一些,基本够用。

2、软件准备

segger官方网站地址:https://www.segger.com/

Scope软件下载地址:https://www.segger.com/j-link-j-scope.html

目前为Setup_JScope_V510d.exe

3、J-Scope软件配套JLink的软件版本

要想使用J-Scope,需要JLink的软件版本高一些,软件版本和Jlink的硬件本无关,只要自己的仿真器支持升级就行,所以最好下载最新的JLink驱动。

下载网站:https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack

目前最新的驱动:JLink_Windows_V620h.exe

4、J-Scope软件的HSS使用方法

安装完成之后,找到自己的安装目录,如图所示,会看到J-Scope的启动文件和他的帮助文件。

UM08028_JScope.pdf是官方的帮助文档,非常详细专业。

(1)启动软件

可以新建工程,或打开以前已有的工程,如下图所示。

选择新建新建,电机【OK】后的界面如图所示:

(2)J-Scope软件配置 

  a、J-Link的链接选择

    USB:大家用的基本是USB接口的

    Serial No

    TCP/IP

    Exitsting Session

  b、Specify Target Device:指明目标器件,配置过程如图

  

  c、Target Interface &Speed:目标的接口和速度

    JTAG、SWD或FINE,仿真的速度,如图

  至于选择JTAG还是SWD,需要根据自己开发板的接口来选择,与之相一致就好。

  d、Sampling Source

  

  e、Sampling Rate 单位us,最小修改为1.

    

  f、Elf File添加

  

  Elf文件是keil 生成的文件。扩展名为axf,在自己keil工程的文件夹中寻找。

  

  (3)J-Scope软件的观察变量

      

  FOC核心算法中的各个变量,勾选上即可,然后【OK】即可。

  

  连接好目标板,点击红色的圆点,即可开始采样,在采样过程中,用鼠标子在变量区点取一个变量,然后按【+】【-】键,则可以实现图形的上移、下移,如果按一下【Ctrl】键,然后在按【+】【-】,则可实现图形的放大和缩小,其实是修改了Y轴分辨率。

  采样停止后,在图形界面,鼠标左键点住拖动,可实现图形的左右移动,方便观察图像的历史记录。

  采样时或停止后均可点击放大和缩小图标,来实现采样率的改变。

  (4)J-Scope软件的保存数据文件

  【File】菜单中有数据的导出和导入功能,导出后可存为Excel文件,然后在Excel中进行处理,也可导入到Matlab中。

5、J-Scope软件RTT模式单片机工程中需要配置

  注:RTT模式选芯片型号的时候,必选对应的型号不能选内核型号。

    

  (1)下载这几个文件,也可以在Jscope的安装路径下找到。

  安装路径如下图:

  (2)将SEGGER_RTT.c,SEGGER_RTT.h,SEGGER_RTT.h添加进工程,并把SEGGER_RTT.c添加到工程。

  (3)添加缓存定义

    char JS_RTT_UpBuffer[4096];    // J-Scope RTT Buffer
    int  JS_RTT_Channel = 1;       // J-Scope RTT Channel

    上面的缓存大小可以给小点512也行。

  (4)随便找个地方初始化

     SEGGER_RTT_ConfigUpBuffer(JS_RTT_Channel, "JScope_I4I4I4", &JS_RTT_UpBuffer[0], sizeof(JS_RTT_UpBuffer), SEGGER_RTT_MODE_NO_BLOCK_SKIP);

    

  (5)

    #pragma pack(push, 1)
    struct {
        signed int Sine1;
        signed int Sine2;
        signed int Sine3;
      } acValBuffer;
    #pragma pack(pop)

    上面是你要发送的结构体,自己定义。

  (6)在你要发送的地方赋值并发送,例如中断:

      acValBuffer.Sine1 = Test_Counter1;
              acValBuffer.Sine2 = Test_Counter2;
              acValBuffer.Sine2 = Test_Counter3;

    SEGGER_RTT_Write(JS_RTT_Channel, &acValBuffer, sizeof(acValBuffer));

  (7)下面是重点!!!官方没有提到的。例如我想发四个数,两个int型,两个short型。

      #pragma pack(push, 1)

        struct {

            signed int Sine1;

            signed int Sine2;

            short Sine3;

            short Sine4;

        } acValBuffer;

        #pragma pack(pop)

  那么对应的初始化要改为"JScope_I4I4I4"这个参数就要改成"JScope_I4I4I2I2“

  (8)还有一个更重要的!那就是如果发送频率过块,快卡死,卡在一个循环里。

    SEGGER_RTT.c这个文件的WriteBlocking函数要做修改。

    

    加一句。

      if(NumBytesToWrite == 0){NumBytesToWrite = 1;}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章