首页 文章

步进电机控制时序

提问于
浏览
4

在使用Microchip TCP / IP堆栈时,我对步进电机控制有疑问 .

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

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

我正在考虑在这个项目中使用PIC24F,指令时钟速度为16MHz(使用内部FRC PLL为32Mhz / 2) . 您是否认为步进器的中断会破坏以太网通信或反之亦然?有没有更好的方法呢?

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

3 回答

  • 0

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

    您提到的其他选择是使用单独的PIC进行步进控制,使用伪线程(用户态线程,但这通常不适用于PIC平台的大多数编译器) .

    但也许对您最有效的方法是让软件的主循环控制步进电机(用于......移动,休眠,继续),然后使用中断来处理进入的TCP / IP请求 . 修改状态寄存器/变量 .

    使用中断是一个好主意,但是当你拥有这个高优先级的东西时,轮询和循环是更好的选择 . 为了确保一切顺利,您需要能够保证您的TCP / IP中断不会超过xxx周期(或毫秒,实际上是PIC上的相同内容),或者向TCP添加步进控制代码/ IP中断处理程序 .

    如果PIC控制器具有优先级中断,那么这一切都不是必需的 . 在这种情况下,只需将步进中断置于比TCP中断更高的优先级,并且您认为PIC具有用户功能的优先级,但我可能会弄错 . 迁移到支持优先中断的另一个平台也是一个好主意,因为这样可以使代码更清晰,让您的整体生活更轻松 .

  • 1

    我遇到了同样的问题,那就是管理微控制器cpu在控制步进电机和从pc和传感器接收数据之间的时间,但是我通过将控制程序(脉冲)分成每个1K字节的碎片并将它们发送到微控制器存储器来解决 . 然后我就可以释放它的CPU时间 .

  • 1

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

相关问题