Как определить положение ходового винта с помощью абсолютного энкодера?
Мне нужно контролировать положение шагового двигателя ходового винта с помощью абсолютного энкодера EMS22A? Я видел, как Джеймс Брутон делает это в своем видео. кто-нибудь может мне помочь?
Видео Джеймса Брутона: https://www.youtube.com/watch?v=ngazw18f6zw
редактировать: я определил «самое большое изменение», чтобы подсчитать количество произошедших циклов. Однако при быстром вращении программа не смогла обнаружить изменение.
void loop(){
unsigned long currentMillis = millis();
pos = encoder.ReadAngle();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
pos2 = encoder.ReadAngle();
}
int change = pos2-pos;
if (change > 200){
cycle--;
}
if (change < -200){
cycle++;
}
if(change > 1){
motor.Forward();
}
if(change < -1){
motor.Reverse();
}
if(change <= 1 && change >= -1){
motor.Stop();
}
Serial.print(pos);
Serial.print(" ");
Serial.println(cycle);
}
@Julius Noel Banayo, 👍-2
Обсуждение1 ответ
Энкодер прикрепляется к валу двигателя (или другого устройства) и отправляет 10-битное положение вращения с точностью 0,35 градуса и заявленной точностью +/- 0,7 градуса. Приложение будет отслеживать количество оборотов, определяя, когда вал завершил оборот в любом направлении.
В приложении с ходовым винтом всегда будет небольшой люфт или "люфт". Ходовой винт и гайка не могут быть идеальными и должны иметь небольшой уклон (технический термин!), чтобы поддерживать низкое трение вращения. Это означает, что гайка будет иметь некоторый линейный люфт, оставляя большую неопределенность в линейном положении, даже если угловое положение ходового винта точно известно. В большинстве приложений это удается путем поворота ходового винта назад, за положение цели, а затем приближения к цели в прямом направлении. Положение ходового винта и гайки будет откалибровано для этого направления. Конечно, его можно откалибровать отдельно для каждого направления. Ключевым моментом является то, что гайка должна быть закручена «позади» (для определенного направления) цели больше, чем на известный линейный зазор, чтобы быть уверенным, что зазор будет полностью устранен во время приближения к цели.
- Как управлять 4 двигателями постоянного тока с помощью Arduino?
- Самый точный способ измерения линейного расстояния, пройденного колесом
- Проблема со чтением данных с энкодера с помощью arduino
- Как правильно запустить 4 двигателя постоянного тока с помощью Arduino?
- Прямая кинематика робота с дифференциальным приводом
- Управление 2 двигателями постоянного тока с L293D и батарейным блоком 6V?
- Arduino ведет себя странно при отключении от компьютера
- Проблема с управляемыми двигателями L293D с помощью ИК-пульта дистанционного управления
Я предложил несколько общих советов, но вы получите ответы лучше и точнее, если сможете конкретно указать, какая помощь вам нужна, где вы застряли и т. д., @JRobert
В чем именно заключается ваша проблема при этом?, @chrisl
Какую библиотеку вы используете для кодировщика? Пожалуйста, дайте ссылку., @chrisl