通过USB控制步进电机

通过USB控制步进电机,usb,device,microcontroller,motordriver,Usb,Device,Microcontroller,Motordriver,我正在做一个USB设备是用来控制步进电机的。在使用并行端口之前,我已经这样做了。由于这些端口在当前的主板中不存在,我决定在我的设备和PC(主机)之间实现USB通信。 为了实现我的目标,我赋予飞思卡尔微控制器一个USB模块12Mbps的设备。 我的USB设备在给定时间必须接收4个字节(每个电机驱动器一个字节),因为每个字节都是移动发动机的步骤。 在PC(主机)中,用户的应用程序处理包含信息的文本文件,并使轨迹坐标以特定速率为每个电机发送字节(实现电机加速度和速度的时间很短) 使用并行端口是一个简单

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

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

对全速USB协议做了一些研究,了解到帧每1ms发送一次。 然后,您可以每1ms发送4字节或更多字节,但我无法像使用并行端口那样管理时间。 我的微控制器每帧最多可以发送64字节(基于传送纸类型控制、批量、整数、Iso…)

问题1:

我想知道怎样才能比每1ms发送4字节数据包更快

问题2:

对于这些类型的设备,什么类型的传输可以为我提供建议


谢谢。

就像里卡多说的,USB串行接口就足够了

至于传输类型,请尝试实现CDC堆栈,并使用SCI接收器侦听PC命令。这将为您提供一个接收缓冲区,满足您的需要

  • 初始化SCI(波特率等)
  • 启用接收器和中断
  • 接收数据时,将其移动到4字节的命令缓冲区
  • 清除接收缓冲区,等待更多信息
当你拥有全部4个字节时,启动步进器!四个字节应为µs

请咨询飞思卡尔,查看您的处理器是否受支持

甚至可能有一些示例代码可以帮助您开始


-干杯

就像里卡多说的,USB串行接口就足够了

至于传输类型,请尝试实现CDC堆栈,并使用SCI接收器侦听PC命令。这将为您提供一个接收缓冲区,满足您的需要

  • 初始化SCI(波特率等)
  • 启用接收器和中断
  • 接收数据时,将其移动到4字节的命令缓冲区
  • 清除接收缓冲区,等待更多信息
当你拥有全部4个字节时,启动步进器!四个字节应为µs

请咨询飞思卡尔,查看您的处理器是否受支持

甚至可能有一些示例代码可以帮助您开始


-干杯

我正在实现同样的目标(驱动/控制数控机床):

USB设备只是同步的I/O并行端口。使用连续批量传输一个管道作为输入,一个管道作为输出。通过这种方式,我能够以~70KHz的采样率实现同步64位并行通信。它使用
(i)4.27+(o)4.27 MBit/s
周围的流量,这是矿井MCU和代码的限制。由于USB事件中断,较大的速度会导致输出抖动

如何操作(在MCU端)

我有两个FIFO,一个用于输入,一个用于输出数据。我有定时器中断发生的采样率频率。在其中,我读取输入并将其馈送到第一个FIFO,从另一个FIFO读取数据并将其发送到输出

除此之外,调用USB任务(在同一中断内)检查FIFO,以发送到USB并从中输入数据,处理传输本身

我为这项任务选择了ATMEL AT32UC3A芯片。经过长时间痛苦的研究,我决定使用这些MCU,因为它们有足够的内存用于FIFO和程序,因此不需要额外的IC。它具有可使用的FPGA包(BGA不是选项)。它有HS USB(大多数USB MCU只有与您类似的FS)。它以
66MHz的频率运行。它支持许多有趣的功能(过去用它做过有趣的项目),而且我过去对ATMEL MCU的使用有经验

因此,如果你想实现类似的目标

  • 从批量传输开始(
    PC->USB->MCU->output
  • 如果需要,添加FIFO

    不知道您需要的采样率。旧的LPT可以处理
    80-196KHz
    ,具体取决于制造商。现代的要慢得多(这既愚蠢又可悲)

  • 测量临界采样率

    你需要示波器或者很好的听力。输出数据必须是同步的,这样就不会有空洞、抖动等

    如果存在上述任何一种情况,则必须降低采样率。Mine设置甚至可以处理
    1MHz
    采样率,但存在USB抖动(有时USB事件冻结发送的时间比一个样本更长…),因此我只能实现
    70KHz
    的稳定输出

  • 如果需要,还可以添加输入

    但只有当输出正常工作时。不要忘了降低采样率后,这太。。。使用单独的批量管道FIFO进行输入和输出


  • 我正在实现同样的目标(驱动/控制数控机床):

    USB设备只是同步的I/O并行端口。使用连续批量传输一个管道作为输入,一个作为ou