MSP432带编码器计数的中断

时间:2018-11-20 00:10:20

标签: c interrupt sensor encoder msp432

我正在为一个项目使用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.我可以使用增量编码器作为中断吗?我发现的大多数示例都使用一个按钮,该按钮输出高电平或低电平信号作为中断标志。我不确定我可以使用编码器

做同样的事情

1 个答案:

答案 0 :(得分:1)

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


关于你所问的问题。

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

您将需要按照这些行的指示上下更改全局变量encoder_count。绝对应该使用每行的中断来完成此操作。中断应在编码器数据手册中指定的边沿过渡上触发。在按钮边缘和编码器边缘触发之间没有区别(除了按钮杂乱,需要去抖动,找到一个非去抖动的示例)。

如果要完全按照增量计数停止电动机非常重要,则可以测试增量编码器增量/减量中断中的值,并在需要时禁用电动机。

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

我还建议创建一个功能来控制电动机。这样可以简化实现细节,使您的主循环专注于更高级别的功能。确保始终通过一个功能完成电动机控制,还可以确保始终应用您的极限。