通过USB控制步进电机

时间:2013-07-22 17:20:46

标签: usb device microcontroller motordriver

我正在做USB设备就是控制步进电机。我在使用并行端口之前完成了这个。因为当前主板上不存在这些端口,所以我决定在我的设备和PC(主机)之间实现USB通信。 为了实现我的目标,我赋予了飞思卡尔微控制器带有USB模块12Mbps的设备。 我的USB设备必须在给定时间接收4个字节(每个电机驱动器一个),因为每个字节都应该移动引擎。 在PC(主机)中,用户的应用程序处理带有信息的文本文件,并使轨迹坐标以一定的速率为每个电机发送字节(时间很小,以实现电机的加速和速度)。

使用并行端口是一项简单的任务,因为每个字节按顺序发送到用户应用程序确定的时间。

对全速USB协议进行一些研究,了解到帧每1ms发送一次。 然后你可以每1ms发送4个字节或更多,但我不能像平行端口那样管理时间。 我的微控制器每帧最多可发送64个字节(基于转印纸类型Control,Bulk,Int,Iso ..)。

问题1:

我想知道以何种方式比每1 ms更快地发送4字节数据包?

问题2:

哪种类型的转让可以告诉我这些类型的设备?

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我正在实现这样的目标(驾驶/控制CNC机器):

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. 衡量关键采样率

    你需要示波器或非常好的听力。输出数据必须是同步的,因此没有漏洞,没有抖动等......

    如果存在任何这些,您必须降低采样率。我的设置甚至可以处理1MHz采样率,但 USB 抖动存在(有时 USB 事件冻结发送时间超过一个样本......)所以我只实现70KHz稳定输出。

  4. 如果需要也输入然后添加

    但仅限于输出正常工作。此后不要忘记降低采样率...使用单独的批量管道 FIFO 来输入和输出。