本文件適用開發環境:
Windows開發環境:Windows 7 64bit、Windows 10 64bit
Linux Processor SDK:ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05
RTOS Processor SDK:ti-processor-sdk-rtos-am57xx-evm-04.03.00.05
CCS:CCS7.4
本案例主要是通過GPMC介面採集AD7606或ADS8568模組輸入的AD訊號,由DSP端對AD訊號進行FFT處理,並由ARM端對AD訊號進行Qt波形繪製、資料儲存等,其中使用到的測試板卡為創龍科技的TL570x-EVM工業開發板。
創龍科技TL570x-EVM是一款基於TI Sitara系列AM5708 ARM Cortex-A15 + 浮點DSP C66x處理器設計的異構多核SoC評估板,由核心板和評估底板組成。典型應用在運動控制、工業PC、機器視覺、智慧電力、視訊監測等領域。
核心板經過專業的PCB Layout和高低溫測試驗證,穩定可靠,可滿足各種工業應用環境。開發板介面資源豐富,引出雙路PRU百兆網口、千兆網口、USB 3.0、CAMERA、GPMC、HDMI、PCIe等介面,方便使用者快速進行產品方案評估與技術預研。
案例功能
AM570x DSP端使用EDMA通過GPMC介面採集AD7606或ADS8568模組8通道的AD訊號,同時由DSP端對其中6通道的AD訊號進行FFT處理,最後將8通道時域資料和經FFT處理的6通道頻域資料儲存到DSP端L2SRAM中,可通過模擬器與CCS軟體檢視對應通道的時域波形和頻域波形。
程式儲存通道0的時域資料和經FFT處理的頻域資料至CMEM(共享記憶體)空間,通過IPC元件通知ARM端讀取該通道的時域資料和頻域資料,使用Qt在LCD螢幕上進行波形繪製,最後將資料儲存到檔案中。
本案例預設配置AD7606模組取樣週期為6us,即取樣率約為167KHz;配置ADS8568模組取樣週期分別為5us,即取樣率為200KHz。程式工作流程圖如下所示:
操作說明
硬體連線
將Tronlong的TL7606I(AD7606)模組或TL8568I(ADS8568)模組插入評估板GPMC擴充套件介面,並對模組進行獨立供電。TL7606I模組使用5V電源供電,J1跳線帽連線到0,使用±5V量程。TL8568I模組使用12V電源供電,軟體已配置為±12V量程。
將模組的待測輸通道正確連線訊號發生器,訊號發生器輸出頻率為4KHz、峰峰值為2Vpp(即幅值為1V)的正弦波訊號。待測訊號電壓請勿超過模組量程,否則可能會導致模組損壞。評估板接入LCD螢幕,並通過模擬器連線到PC機。硬體連線示意圖如下:
- 案例測試
案例位於產品資料“4-軟體資料\Demo\rtos-examples\tl-linux-ipc-examples\tl-gpmc-ad-fft\”目錄下,案例目錄說明如下。
表 1
bin目錄 |
app_host |
ARM端可執行檔案 |
load-firmware.sh |
DSP端可執行檔案執行指令碼 |
|
server_dsp1.xe66 |
DSP端可執行檔案 |
|
lib目錄 |
libqwt-6.1.3.tar.gz |
QWT庫壓縮包 |
src目錄 |
dsp1目錄 |
存放DSP端原始碼和配置檔案等 |
host目錄 |
存放ARM端原始碼和配置檔案等 |
|
ludev目錄 |
存放共享記憶體庫原始碼和映象檔案等 |
|
shared目錄 |
存放多核共用程式碼定義相關檔案 |
|
makefile |
頂層Makefile檔案,用於構建整個案例程式 |
|
products.mak |
頂層配置檔案,用於配置編譯環境 |
由於本案例需依賴QWT庫檔案,因此請將libqwt-6.1.3.tar.gz壓縮包解壓,並將解壓目錄中的lib目錄下的libqwt.so、libqwt.so.6、libqwt.so.6.1、libqwt.so.6.1.3此四個QWT庫檔案拷貝到檔案系統“/usr/lib/”目錄下。同時將bin目錄下的app_host、server_dsp1.xe66、load-firmware.sh此三個檔案拷貝到評估板檔案系統同一個目錄下。
Linux核心預留0xa0000000~0xac000000(192MByte)記憶體作為CMEM共享記憶體,案例使用0xa0000000~0xa0008000(32KByte)記憶體進行測試,此32KByte記憶體劃分為2個16KByte (0x4000,16384)池空間,分別用於存放模組通道0的時域資料和頻域資料。
進入評估板檔案系統執行如下命令。
備註:由於CMEM共享記憶體地址空間已超過512MByte,故如下測試僅支援DDR3不小於1GByte的評估板。
Target# /etc/init.d/matrix-gui-2.0 stop //關閉Matrix介面程式
Target# pkill ti-mctd //禁用ti-mctd服務,避免cmemk驅動解除安裝失敗
Target# rmmod cmemk //解除安裝cmemk驅動
Target# modprobe cmemk phys_start=0xa0000000 phys_end=0xa0008000 pools=2x16384 //劃分2個16KByte池空間
Target# cat /proc/cmem //檢視CMEM配置
進入app_host、server_dsp1.xe66、load-firmware.sh檔案所在目錄並執行如下命令,執行DSP端程式。
Target# ./load-firmware.sh
執行如下命令可檢視ARM端程式引數說明。
Target# ./app_host -h
執行如下命令,執行ARM端程式。
Target# ./app_host 0x01000000 6 10000 /home/root/ 7606
命令引數說明:
0x01000000:指定GPMC片選首地址,使用的GPMC片選為CS0。
6:指定訊號採集週期(單位:us)。TL7606I模組設定為6,TL8568I模組設定為5。
10000:指定採集迴圈次數。
/home/root/:指定模組通道0的時域資料和頻域資料的儲存路徑。時域資料儲存檔案為ad_raw_data.txt,頻域資料儲存檔案為ad_fft_data.txt。
7606:指定模組型號。TL7606I模組設定為7606,TL8568I模組設定為8568。
程式執行後,即可在LCD螢幕上看到通道0的時域波形和頻域波形。
- 使用CCS檢視訊號波形
在程式執行過程中可使用CCS軟體檢視儲存在DSP端L2SRAM中的時域和頻域波形。
載入Symbols資訊表
進入app_host、server_dsp1.xe66、load-firmware.sh檔案所在目錄執行如下命令,執行DSP端程式。
Target# ./load-firmware.sh
驅動預設配置DSP端的電源控制模式為auto-suspend(自動休眠),當DSP端處於休眠狀態時,CCS將無法連線DSP端。
請執行如下命令設定電源控制模式為on,禁用auto-suspend模式。
Target# echo "on" > /sys/bus/platform/devices/40800000.dsp/power/control
請執行如下命令禁用錯誤恢復功能,避免發生錯誤時系統自動重啟DSP端,干擾除錯。
Target# echo disabled > /sys/kernel/debug/remoteproc/remoteproc2/recovery
請執行如下命令,執行ARM端程式(以TL7606I模組為例)。
Target# ./app_host 0x01000000 6 10000 /home/root/ 7606
開啟CCS,建立模擬配置檔案後進入Debug介面,右鍵點選“Connect Target”連線DSP端,如下圖所示。連線後DSP端程式將會暫停執行,請點選
按鍵恢復執行。
由於程式除錯需用到映象檔案中的Symbols資訊表,因此請點選“Run -> Load -> Load Symbols...”載入案例bin目錄下的server_dsp1.xe66映象檔案匯入Symbols資訊表。
備註:請確保載入的server_dsp1.xe66檔案與當前DSP端執行的是同一個映象檔案,否則可能導致符號地址不一致以及模擬執行錯誤。
圖 18
檢視時域波形
點選“View -> Memory Browser”,在彈出介面的搜尋欄搜尋ch_raw_buffer陣列,該陣列存放時域資料,搜尋結果如下圖所示。ch_raw_buffer陣列包含8個地址,從左到右分別對應存放通道0至7時域資料的起始地址,例如0x00828EA0為存放通道0時域資料的起始地址。
點選“Tools -> Graph -> Single Time”,如下圖所示。
在彈出介面中按照下圖內容進行配置,然後點選OK,即可檢視AD訊號的時域波形。
表 2
Acquisition Buffer Size |
從Start Address開始讀取的資料長度 |
Dsp Data Type |
讀取的資料型別 |
Start Address |
從Start Addres開始讀取資料 |
Display Data Size |
顯示的資料長度(即將多少個取樣點的資料進行顯示,該數值不能大於Acquisition Buffer Size) |
程式已將8通道的時域資料儲存到DSP端L2SRAM,如需檢視其他通道波形,請按照上述方法開啟對應通道地址檢視即可。
本次使用TL7606I模組進行測試,在上圖中可看到通道0的時域波形,波形的幅值約為6796。從CCS看到的波形值為AD晶片內部暫存器儲存的數字量,從AD7606和ADS8568的晶片資料手冊得到的換算公式均為:數字量=待測量/量程*32768,則AD訊號實際幅值=數字量*量程/32768=6796*5V/32768=1.04V,與訊號發生器的1V標稱值接近。
檢視頻域波形
點選“View -> Memory Browser”,在彈出介面的搜尋欄搜尋ch_fft_buffer陣列,該陣列存放頻域資料,搜尋結果如下圖所示。ch_fft_buffer陣列包含8個地址,從左到右分別對應存放通道0至7頻域資料的起始地址,例如0x008292A0為存放通道0頻域資料的起始地址。
備註:由於受處理器的效能限制,程式預設只對通道0~5進行FFT處理,因此ch_fft_buffer陣列未存放通道6和7頻域資料。
點選“Tools -> Graph -> Single Time”,如下圖所示。
在彈出介面中按照下圖內容進行配置,然後點選OK,即可檢視AD訊號的頻域波形。
表 3
Acquisition Buffer Size |
從Start Address開始讀取的資料長度 |
Dsp Data Type |
讀取的資料型別 |
Index Increment |
索引增量(即每個取樣點資料序號的相差值,由於FFT資料以複數形式儲存,只取複數中的實部進行顯示,因此設定成2,隔點取值顯示) |
Start Address |
從Start Addres開始讀取資料 |
Display Data Size |
顯示的資料長度(即將多少個取樣點的資料進行顯示,該數值不能大於Acquisition Buffer Size) |
點選選單欄放大按鈕進行放大檢視,點選
開啟遊標工具,再點選X-Axis可檢視到訊號存在,如下圖所示。
程式已將6通道的頻域資料儲存到DSP端L2SRAM,如需檢視其他通道波形,請按照上述方法開啟對應通道地址檢視即可。
本次使用TL7606I模組進行測試,在上圖中可看到通道0的頻域波形在第12個點存在訊號。程式命令已設定每6us觸發一次TL7606I模組的CONVST/GPIO5[13]引腳進行AD訊號採集。
在程式執行過程中使用示波器通過測量CONVST/GPIO5[13]引腳,測得訊號實際採集週期為5.720us,即訊號實際取樣率為174.8KHz。
與設定的6us存在一定誤差的原因主要有如下兩點:
- 程式使用的GPTimer6定時器的精度存在誤差,並受系統延時影響。
- GPIO引腳電平翻轉存在約100ns的時延。如選擇專用的定時器輸出引腳作為觸發訊號,可降低時延。
根據採集頻率計算公式,某點n所表示的取樣頻率為:Fn=n*(Fs/N)(n>=0),引數解析如下表。
表 4
Fn |
取樣頻率 |
n |
存在訊號的點 |
Fs |
訊號取樣率 |
N |
訊號取樣長度 |
可得出實際的取樣頻率Fn=12*(174.8KHz/512)=4.0969KHz,與訊號發生器的4KHz標稱值接近。
到這裡,案例功能和操作的基本說明,包括硬體連線與案例測試、如何使用CCS檢視訊號波形部分就介紹到這裡,想要檢視案例編譯和ARM(Host)端、DSP(Slave)端的關鍵程式碼,請看下篇文章,感謝關注,歡迎點贊或評論區留言!