AM57x 多核SoC開發板——GPMC的多通道AD採集綜合案例手冊(上)
本文檔適用開發環境:
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=2×16384 //劃分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)端的關鍵程式碼,請看下篇文章,感謝關注,歡迎點贊或評論區留言!