我在一个项目中使用MSP432,我想知道如何在增量编码器达到指定计数时生成中断。中断应阻止电机朝特定方向移动。
背景:我使用增量式编码器来控制刷电机。当电刷马达向左或向右移动时,它机械地连接到一个递增的编码器,该编码器对脉冲或“咔哒声”进行计数。增量式编码器有效地控制了电机的运动极限。也就是说,如果编码器在正确的方向上读取20个脉冲,电机应该停止。我的项目有两种操作模式,由switch case语句控制。第一种是常规模式,第二种是用户可以用操纵杆控制马达的模式。无论程序处于哪种模式,当达到运动极限时,电机应停止。
Psedo代码:

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

同样,无论程序处于哪种操作模式,当达到计数时都应该停止。即使已达到运动限制,程序仍应允许操纵杆控制装置驱动马达远离运动限制。也就是说,如果计数=20在右极限,我仍然可以驱动马达左。基本上,编码器应该在运行的所有时刻跟踪电机。
问题:
一。如何在MSP432上声明中断?
2。我可以使用增量编码器作为中断吗?我发现的大多数例子都使用一个输出高或低信号的按钮作为中断的标志。我不确定我能不能用编码器做同样的事情

最佳答案

您的代码看起来很像Arduino代码,要附加中断,应该使用Arduino attachintrupt()函数。如果您使用不同的高级支持
库的文档应该包括一些中断示例。
关于你的问题。
增量编码器应该有两条线,一条表示左运动,一条表示右运动。
您需要按照这些行的指示上下更改全局变量编码器计数。这绝对应该使用每一行的中断来完成。中断应在编码器数据表中指定的边缘转换上触发。在按钮边缘触发和在编码器边缘触发没有区别(除了按钮很乱,需要去噪,找一个非去噪的例子)。
如果非常重要的是在递增计数时完全停止电机,则可以测试递增编码器递增/递减中断中的值,并在需要时禁用电机。
不过,作为主循环的一部分进行测试可能就足够了。(侧注:记住,当操纵杆居中时,您需要处理。)
我还建议创建一个控制马达的函数。这将抽象出实现细节,允许您的主循环关注更高级别的功能。确保电机控制始终由一个功能完成,也允许您保证始终应用您的限制。

关于c - MSP432带编码器计数的中断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53384417/

10-11 14:45