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;}