2013-07-22 67 views
1

我正在做的USB設備是控制步進電機。在使用並行端口之前,我已經完成了此操作。由於這些端口在當前主板中不存在,我決定在我的設備和PC(主機)之間實現USB通信。爲了實現我的目標,我向飛思卡爾微控制器提供了具有12Mbps USB模塊的設備。 我的USB設備在給定時間必須接收4個字節(每個電機驅動程序一個字節),因爲每個字節都是應移動引擎的步驟。 在PC(主機)中,用戶的應用程序處理帶有信息的文本文件,並使軌跡座標以一定的速率爲每個電機發送字節(時間對於實現電機的加速度和速度而言是微不足道的)。通過USB控制步進電機

使用並行端口是一項簡單的任務,因爲每個字節都按順序發送到由用戶應用程序確定的時間。

對全速USB協議做了一點研究,理解幀每隔1ms發送一次。 然後您可以每1ms發送4個字節或更多,但我無法像處理並行端口那樣管理時間。 我的微控制器每幀最多可以發送64字節(基於轉換紙張類型Control,Bulk,Int,Iso ..)。

問題1:

我想知道用什麼方式,我可以更快地發送4字節的數據包超過每隔1毫秒?

問題2:

什麼類型的傳輸可以告訴我這些類型的設備?

謝謝。

+0

我認爲一個USB串行(批量配置)它已經足夠你的情況。您可以將包發送到高波特率,例如:1Mbps。 –

回答

1

像裏卡多說的那樣,USB串口就足夠了。

至於傳輸類型,嘗試實現CDC堆棧並使用您的SCI接收器來收聽PC命令。這將給你一個接收緩衝區,這將滿足您的需求。

  • 初始化您的SCI(波特率等)
  • 啓用接收器和中斷
  • 在數據接收,它移動到你的4個字節的命令緩衝區
  • 清除接收緩衝區,等待更多

當你有全部4個字節時,請開啓步進器!四個字節應占用μs。

請與飛思卡爾聯繫以確定您的處理器是否受支持。

http://cache.freescale.com/files/microcontrollers/doc/support_info/USB_STACK_RELEASE_NOTES_V4.1.1.pdf?fpsp=1

甚至有可能是一些示例代碼,讓你開始。

-Cheers

0

我實現同樣的目標(驅動/控制數控機牀)是這樣的:

USB設備僅僅是同步I/O並行端口。使用連續批量傳送一個管作爲輸入端和一個作爲輸出。這樣我就可以實現〜70KHz採樣率的同步64位並行通信。它使用了大約(i)4.27+(o)4.27 MBit/s交通是限制我的MCU和代碼。更大的速度,導致抖動的輸出由於USB事件中斷。

如何做到這一點(在MCU端)

我有2 FIFO的一個遷入,另一個用於傳出數據。我有采樣率頻率發生定時器中斷。在它予讀出的輸入和其饋送到所述第一FIFO和從另一個FIFO讀取數據並將其發送到輸出端。

更重要的是在USB任務稱爲(同一個中斷內)檢查FIFO發送到和接收的數據從USB處理傳輸本身

頂我選擇ATMEL AT32UC3A芯片爲此任務。經過長時間和痛苦的全面研究,我決定這些MCU的,因爲他們有足夠的內存FIFO的和程序,所以不需要額外的IC。它有FPGA包可用於(BGA不是一個選項)。它有HS USB(最USB MCU的只有FS像你)。它運行在66MHz。它支持很多有趣的功能(過去那樣有趣的項目,它)和粗的我有ATMEL MCU「從過去的

所以經驗,如果你想實現類似然後

  1. 東西開始與批量傳送(PC -> USB -> MCU -> output
  2. 如果需要

    不ķ添加FIFO現在是您需要的採樣率。老LPT的可以處理從80-196KHz依賴於製造廠商。現代人要慢得多(這很愚蠢和難過)。

  3. 測量臨界採樣率

    你需要示波器還是很不錯的聽證會這個。輸出數據必須同步所以它無氣孔,無抖動,等...

    如果有的話這些都是目前需要降低採樣率。我的設置甚至可以處理採樣率,但存在抖動(有時USB事件凍結髮送更長的一個採樣......),所以我只能達到穩定輸出的70KHz

  4. 如果需要的話還投入再加入他們

    ,但只有當輸出工作,因爲它應該。不要忘記在此之後降低採樣率...使用單獨的散裝管道FIFO s用於輸入和輸出。