在之前的部落格裡,電機階躍波形和速度需要實時顯示在上位機上,友善整定參數和觀測,之前用的是序列槽發送一定的協定到虛拟示波器上,如圖,做個廣告:山外調試助手,以前和野火一家的。
但是單片機序列槽的發送過程對于程式執行過程來說算是個delay(),之前測過在9600波特率的情況下,發送幾個位元組的資料動辄幾ms,在本項目中需要頻繁發送實時速度資料到上位機,序列槽幹擾了單片機的實時性。是以在追求實時性的場合必須替換掉序列槽方式,由于KL25是帶USB外設的,而且demo闆也提供了USB口,是以整合了USB通信到電機PID程式中。由于程式是把USB列舉為CDC類,在裝置管理器中顯示的就是傳統序列槽,驅動官方提供了 Freescale_CDC_Driver_Kinetis.inf ,你也可以浏覽計算機手動安裝------從已安裝的裝置驅動清單選擇-----廠商-----Freescale,P&E Micro----------型号---------選擇open cdc serial驅動安裝。安裝完就是個新序列槽com9:
既然用了USB通信功能,速度有沒有變快呢?為此進行了驗證,在CDC初始化時設定了和之前序列槽相同的波特率115200,測試隻從下位機語句執行時間角度考慮,上位機的響應時間不包括 也不是重點。測試直接利用引腳取反,示波器直接觀測,首先在兩種情況加入測試引腳:
PTB8_OUT = 0;
EP_IN_Transfer( EP2 ,wave ,5 ); //USB方式
PTB8_OUT = 1;
PTB8_OUT = 0;
uart_sendN(UART0, wave, 5); //UART方式
PTB8_OUT = 1;
示波器設定triger檢視:
左圖為UART方式 峰寬 268 us,右圖USB方式峰寬 6.6 us,用時大為縮短,USB通信帶來的實時性得到極大提升。且USB 中斷方式支援錯誤重傳,在可靠性上也比UART高。之後又測試了CDC虛拟序列槽波特率提升到256000,用時并沒有減短,仍然為6.6 us,認為這是USB的發送處理時間,與虛拟波特率無關。 上位機隻需換到com9打開,原樣顯示波形。
(聯系我,打開個人資料即可檢視郵箱)
2018.12.23更新: 所有單片機序列槽發送函數有個 while(發送緩沖區空 ==1) 再發送 的過程,是以費時很長,而USB發送函數,把資料扔給USB外設寄存器就不管了,等于是沒有阻塞,當然快很多,測的6.6us隻是引腳語句執行時間和發送語句的執行時間。