步进电机控制时间安排

4
我有一个问题,关于在使用Microchip TCP/IP堆栈时控制步进电机。以前我使用定时器来控制步进电机,我将定时器的周期设置为脉冲之间所需的时间,然后在定时器滴答ISR中根据需要更改电机相位输出。在我这样做的情况下,我的步进电机最大速率约为每秒400个脉冲,这意味着中断发生每2.5毫秒一次。而我是使用USB进行与主机通信。
现在我正在开发一个新产品,它将使用TCP/IP堆栈通过以太网与PC通信,并通过SPI和UART模块与其他设备通信。这个新设备必须能够操作高达每秒2000个脉冲的步进电机,这意味着如果我使用相同的定时器/ISR方法驱动步进电机,则中断可能每0.5毫秒触发一次。根据从主机接收到的命令打开和关闭步进电机,因此主机通信和电机操作需要协调和同时进行。如果步进电机速度略有变化,那么不会有问题,但这并不理想。另外,如果步进电机在移动过程中停顿了30毫秒,那是不可接受的。
我考虑在这个项目中使用带有16MHz指令时钟速度(使用内部FRC + PLL的32Mhz / 2)的PIC24F。您认为步进电机的中断会干扰以太网通信或反之亦然吗?有更好的方法吗?
我考虑使用单独的PIC来控制步进电机,然后我可以向该PIC发送目标位置命令或停止命令以启动和停止运动,但这将添加另一个固件并使一切都变得复杂。

尝试访问http://electronics.stackexchange.com? - Paul R
3个回答

1

这取决于硬件,最好的答案是尝试一下。

您的其他选择是使用单独的PIC来控制步进电机,就像您提到的那样,使用伪线程(用户空间线程,但通常在大多数PIC平台的编译器中不可用)。

但也许对您最有用的是将软件的主循环控制步进电机(进行...移动、睡眠、继续),然后使用中断处理TCP/IP请求,并使用它们修改状态寄存器/变量。

使用中断是个好主意,但当您有如此高优先级的事情时,轮询和循环是更好的选择。为了确保一切顺利,您需要能够保证您的TCP/IP中断不会超过xxx周期(或毫秒,在PIC上是同样的事情),否则需要将步进控制代码添加到TCP/IP中断处理程序中。

如果您的PIC控制器具有优先级中断,则所有这些都是不必要的。在这种情况下,只需将步进中断放在比TCP中断更高的优先级上,您就可以开始了。但是,我不认为PIC对用户功能有这个功能,但我可能错了。迁移到另一个支持优先级中断的平台也可能是一个好主意,因为这将使代码更加清晰,并且总体上会让您的生活更轻松。


实际上,我所使用过的所有PIC都具有优先级中断。您可以将优先级设置为1到7。 - PICyourBrain
但我猜真正的问题是,如果TCP/IP中断由于更高优先级的中断被延迟,是否会导致通信出现错误?超时?等等? - PICyourBrain

1

我曾经遇到过同样的问题,就是在控制步进电机和接收来自PC和传感器的数据之间管理微控制器CPU时间的问题,但我通过将控制程序(脉冲)分成每个1K字节的块并将它们发送到微控制器内存中解决了这个问题,从而能够释放其CPU时间。


0

主机需要在0.5毫秒边界上启动和停止步进电机吗?我没有任何数据来支持这一点,但我的感觉是以太网链路的可变延迟可能会主导您对命令的响应能力,特别是如果同一网络上有其他设备。


在我的情况下,启动和停止时间可以延迟几百毫秒而不会造成任何问题。 - PICyourBrain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接