1

我正在为一个项目使用 MSP432,我想知道当增量编码器达到指定计数时如何生成中断。中断应阻止电机沿特定方向移动。

背景:我正在使用增量编码器来控制有刷电机。当刷子电机向左或向右移动时,它以机械方式连接到一个增量编码器,该编码器对脉冲或“咔嗒声”进行计数。增量编码器有效地控制了电机的运动极限。即,如果编码器以正确的方向读取 20 个脉冲,则电机应停止。我的项目有两种由 switch-case 语句控制的操作模式。第一种是常规模式,第二种是用户可以通过操纵杆控制电机的模式。无论程序处于哪种模式,当达到运动极限时,电机都应该停止。

伪代码:

Case: Routine Button Mode

{

// Motor executes right, left, right movement routine 

digitalWrite(directionMotor,RIGHT); // telling motor what direction to go
analogWrite(pwm_motor2,60); // telling motor to activate at 60% PWM

if(encoder_count == Motion_Limit)
analogWrite(pwm_motor,0); // tell motor to stop

// change direction

digitalWrite(directionMotor,LEFT); // telling motor what direction to go
analogWrite(pwm_motor2,60); // telling motor to activate at 60% PWM

}

Case: Joystick_Control

{

while(analogRead<10) // Joystick is pushed to the left
{

digitalWrite(directionMotor,LEFT); // telling motor what direction to go
analogWrite(pwm_motor2,60); // telling motor to activate at 60% PWM

if(encoder_count == Motion_Limit)
analogWrite(pwm_motor,0); // tell motor to stop

}

while(analogRead>1000) // Joystick is pushed to the right
{

digitalWrite(directionMotor,RIGHT); // telling motor what direction to go
analogWrite(pwm_motor2,60); // telling motor to activate at 60% PWM

if(encoder_count == Motion_Limit)
analogWrite(pwm_motor,0); // tell motor to stop

}

} // end case statement

同样,无论程序处于何种操作模式,都应该在达到计数时停止。即使已达到运动限制,程序仍应允许操纵杆控制驱动电机远离运动限制。也就是说,如果count == 20在右极限,我仍然可以向左驱动电机。本质上,编码器应该在运行的所有时刻都跟踪电机。

问题: 1. 如何在 MSP432 上声明中断?2. 我可以使用增量编码器作为中断吗?我发现的大多数示例都使用输出高或低信号作为中断标志的按钮。我不确定我可以用编码器做同样的事情

4

1 回答 1

1

您的代码看起来很像 Arduino 代码,要附加中断,您应该使用 Arduino attachInterrupt() 函数。如果您使用不同的高级支持库,那么它的文档应该包含一些中断示例。


至于你的问题的实质。

您的增量编码器应该有两条线,一条指示左运动,一条指示右运动。

如这些行所示,您将需要向上和向下更改全局变量 encoder_count。这绝对应该使用每条线路的中断来完成。中断应在编码器数据表中指定的边沿转换时触发。在按钮边缘和编码器边缘触发没有区别(除了按钮比较乱,需要去抖,找一个不去抖的例子)。

如果在增量计数上准确停止电机非常重要,您可以测试增量编码器增量/减量中断中的值并在需要时禁用电机。

但是,将测试作为主循环的一部分可能就足够了。(旁注:请记住,当操纵杆居中时您需要处理。)

我还建议创建一个函数来控制电机。这会抽象出实现细节,让您的主循环专注于更高级别的功能。确保电机控制始终由一个功能完成还可以让您保证始终应用您的限制。

于 2018-11-20T04:31:09.430 回答