Я использую 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 на правом пределе, я все еще могу вести двигатель влево. По сути, энкодер должен отслеживать двигатель в любой момент работы.
Вопросы:
1. Как мне объявить прерывание на MSP432?
2. Могу ли я использовать инкрементальный датчик для прерывания? В большинстве примеров, которые я нашел, используется кнопка, которая выводит сигнал высокого или низкого уровня в качестве флага для прерывания. Я не уверен, что могу сделать то же самое с кодировщиком