通过USB控制步进电机
我正在做一个USB设备是用来控制步进电机的。在使用并行端口之前,我已经这样做了。由于这些端口在当前的主板中不存在,我决定在我的设备和PC(主机)之间实现USB通信。 为了实现我的目标,我赋予飞思卡尔微控制器一个USB模块12Mbps的设备。 我的USB设备在给定时间必须接收4个字节(每个电机驱动器一个字节),因为每个字节都是移动发动机的步骤。 在PC(主机)中,用户的应用程序处理包含信息的文本文件,并使轨迹坐标以特定速率为每个电机发送字节(实现电机加速度和速度的时间很短) 使用并行端口是一个简单的任务,因为每个字节按顺序发送到用户应用程序确定的时间 对全速USB协议做了一些研究,了解到帧每1ms发送一次。 然后,您可以每1ms发送4字节或更多字节,但我无法像使用并行端口那样管理时间。 我的微控制器每帧最多可以发送64字节(基于传送纸类型控制、批量、整数、Iso…) 问题1: 我想知道怎样才能比每1ms发送4字节数据包更快 问题2: 对于这些类型的设备,什么类型的传输可以为我提供建议通过USB控制步进电机,usb,device,microcontroller,motordriver,Usb,Device,Microcontroller,Motordriver,我正在做一个USB设备是用来控制步进电机的。在使用并行端口之前,我已经这样做了。由于这些端口在当前的主板中不存在,我决定在我的设备和PC(主机)之间实现USB通信。 为了实现我的目标,我赋予飞思卡尔微控制器一个USB模块12Mbps的设备。 我的USB设备在给定时间必须接收4个字节(每个电机驱动器一个字节),因为每个字节都是移动发动机的步骤。 在PC(主机)中,用户的应用程序处理包含信息的文本文件,并使轨迹坐标以特定速率为每个电机发送字节(实现电机加速度和速度的时间很短) 使用并行端口是一个简单
谢谢。就像里卡多说的,USB串行接口就足够了 至于传输类型,请尝试实现CDC堆栈,并使用SCI接收器侦听PC命令。这将为您提供一个接收缓冲区,满足您的需要
- 初始化SCI(波特率等)
- 启用接收器和中断
- 接收数据时,将其移动到4字节的命令缓冲区
- 清除接收缓冲区,等待更多信息
-干杯就像里卡多说的,USB串行接口就足够了 至于传输类型,请尝试实现CDC堆栈,并使用SCI接收器侦听PC命令。这将为您提供一个接收缓冲区,满足您的需要
- 初始化SCI(波特率等)
- 启用接收器和中断
- 接收数据时,将其移动到4字节的命令缓冲区
- 清除接收缓冲区,等待更多信息
-干杯我正在实现同样的目标(驱动/控制数控机床): 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