我有一个关于使用 Microchip TCP/IP 堆栈时的步进电机控制的问题。

过去我使用定时器来控制步进电机。我将计时器的周期设置为脉冲之间所需的时间,然后根据计时器滴答 ISR 中的需要更改电机相位输出。在我这样做的情况下,我的步进器以每秒约 400 个脉冲的最大速率移动,这意味着每 2.5 毫秒发生一次中断。我使用 USB 与主机进行通信。

我现在正在开发一款新产品,它将使用 TCP/IP 堆栈通过以太网与 PC 进行通信。它还将通过 SPI 和 UART 模块与其他设备进行通信。这个新设备必须能够以高达每秒 2000 个脉冲的速度运行步进器,这意味着如果我使用相同的定时器/ISR 方法来驱动步进器,则可能每 0.5 毫秒触发一次中断。步进器根据从主机接收到的命令来打开和关闭,因此与主机的通信和电机的操作需要协调且同时发生。如果步进速度略有变化,那不会是问题,但并不理想。另外,如果步进器在移动过程中暂停 30 毫秒,这是不可接受的。

我正在考虑在该项目中使用指令时钟速度为 16MHz(使用内部 FRC+PLL 为 32Mhz/2)的 PI​​C24F。您认为步进器的中断会破坏以太网通信还是反之亦然?有更好的方法吗?

我考虑过使用单独的 PIC 进行步进控制,然后我可以发送该 PIC 目标位置命令或停止命令来启动和停止运动,但这会在混合中添加另一个固件并使周围的事情变得复杂。

有帮助吗?

解决方案

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

您的其他选项是,要么使用单独的图片进行步进控制,如您所提及的,要么使用伪线程(userland螺纹,但在PIC平台的大多数编译器中通常都不可用)。

但是也许最适合您的是让软件的主循环控制步进电机(....移动,睡觉,继续),然后使用中断来处理TCP/IP请求,您将与您联系。修改状态寄存器/变量。

使用中断是一个好主意,但是当您拥有这种高优先级时,民意测验和循环是更好的选择。为了确保一切顺利,您需要能够保证您的TCP/IP中断不会超过XXX周期(或者在PIC上,同一件事),或者在TCP中添加步进控制代码/IP中断处理程序。

现在,如果您的PIC控制器优先考虑中断,则不需要这些。在这种情况下,只要将步进器中断的优先级比TCP中断更高,就可以了。但是,我不认为PIC对于用户功能没有,但是我可能会误解。迁移到另一个平台也可能是一个好主意 支持优先考虑的中断,因为这将使代码更加干净,并使您的生活整体更轻松。

其他提示

我遇到了相同的问题,即在控制步进电动机和从PC和传感器接收数据之间管理微控制器CPU的时间,但是我通过将控制程序(脉冲)(脉冲)求解为每个1KBYTE并将其发送到微控制器内存。然后我能够释放其CPU时间。

主机是否需要在 0.5 毫秒的范围内启动和停止步进器?我没有任何数字来支持这一点,但我的感觉是,以太网链路的可变延迟可能会主导您对命令的响应,尤其是在同一网络上有其他设备的情况下。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top