Использование arduino mega делает мой cnc claw багги. Справка
У меня есть три степпера nema 23 с одним 8-канальным реле(все контакты используются), питающим два двигателя постоянного тока и 4 ИК-датчика для обратной связи на машине.
Проблема в том, что моя машина работает нормально всего 2-3 минуты, пока она просто не перезагрузится в середине процедуры и не разрушит всю мою систему.
Я использую 1/2 step microstepping с TB6600 stepper driver. Также мой arduino mega 2560, возможно, это проблема, о которой я не знаю.
Вот я прилагаю код
const int dirPin1=2;
const int stepPin1=3;
const int dirPin2=4;
const int stepPin2=5;
const int dirPin3=6;
const int stepPin3=7;
int del=1;
void setup() {
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(14,OUTPUT);
pinMode(15,OUTPUT);
pinMode(16,INPUT);
pinMode(17,INPUT);
pinMode(18,INPUT);
pinMode(19,INPUT);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
digitalWrite(14,HIGH);
digitalWrite(15,HIGH);
}
void picker_up(){
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(570);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(100);
}
void picker_down(){
digitalWrite(8,LOW);
digitalWrite(8,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(320);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(100);
}
void claw_close(){
digitalWrite(12,LOW);
digitalWrite(13,LOW);
digitalWrite(14,HIGH);
digitalWrite(15,HIGH);
delay(100);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
digitalWrite(14,HIGH);
digitalWrite(15,HIGH);
delay(100);
}
void claw_open(){
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
digitalWrite(14,LOW);
digitalWrite(15,LOW);
delay(100);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
digitalWrite(14,HIGH);
digitalWrite(15,HIGH);
delay(100);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(dirPin1,HIGH);
digitalWrite(dirPin2,HIGH);
digitalWrite(dirPin3,LOW);
for(int i=0;i<=1200;i++){
digitalWrite(stepPin1,HIGH);
digitalWrite(stepPin2,HIGH);
digitalWrite(stepPin3,HIGH);
delay(del);
digitalWrite(stepPin1,LOW);
digitalWrite(stepPin2,LOW);
digitalWrite(stepPin3,LOW);
delay(del);
}
for(int i=1;i<=400;i++){
digitalWrite(stepPin1,HIGH);
delay(del);
digitalWrite(stepPin1,LOW);
delay(del);
}
delay(1000);
picker_down();
claw_open();
claw_close();
picker_up();
delay(2000);
digitalWrite(dirPin1,LOW);
digitalWrite(dirPin2,LOW);
digitalWrite(dirPin3,HIGH);
for(int i=1;i<=400;i++){
digitalWrite(stepPin1,HIGH);
delay(del);
digitalWrite(stepPin1,LOW);
delay(del);
}
for(int i=0;i<=1200;i++){
digitalWrite(stepPin1,HIGH);
digitalWrite(stepPin2,HIGH);
digitalWrite(stepPin3,HIGH);
delay(del);
digitalWrite(stepPin1,LOW);
digitalWrite(stepPin2,LOW);
digitalWrite(stepPin3,LOW);
delay(del);
}
delay(2000);
}
Я не понимаю, почему это происходит. Или мне нужно еще несколько электронных компонентов, включенных в машину, и я знаю, что мог бы использовать МОП-транзисторы для управления двигателями, но я просто слишком ленив.
Я использовал uno до этого, и он работал нормально, так что должен ли я просто вернуться к его использованию?
Кроме того, я изменил код, чтобы быть совместимым с uno снова, так что, пожалуйста, подскажите с номерами контактов.
@Ritesh Sharma, 👍0
Обсуждение0
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как получить уникальный идентификатор для всех плат Arduino?
- Как очистить буфер FIFO на MPU6050?
- Элегантное решение для обновления содержимого TFT-дисплея
- Считывание нескольких поворотных энкодеров
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
Я не верю, что существует какой-либо разумный способ ответить на вопрос с предоставленной информацией. Это может быть буквально все, что угодно. Я бы не рекомендовал выполнять шаговое вождение "вручную", когда есть доступные библиотеки. По крайней мере, вам нужно будет включить схему., @Dave Newton
Я иду на риск здесь без схемы, но распространенной причиной сброса является низкое напряжение, вызванное слишком большим потреблением тока. "Я знаю, что мог бы использовать МОП-транзисторы для управления двигателями, но я просто ленив". предполагает возможную причину. Ваши двигатели питаются от Arduino?, @JRobert
Я использую внешние источники питания для всего, даже реле не питается от arduino mega, @Ritesh Sharma
добавьте немного отладочного кода, @jsotola
Все еще не так много нужно сделать (это структурная схема, а не схема). Поскольку, по сути, нет кода, кроме цифровой записи, я бы заподозрил проблему с электричеством., @Dave Newton
На самом деле я думал об использовании библиотеки шаговых двигателей, но библиотека ускоряет шаг, блокирует все остальные приводы, чтобы заставить шаговый двигатель вращаться, что означает, что мои два двигателя, которые работают вместе, не будут работать. @ДавеНьютон, @Ritesh Sharma
Не ускоряющий шаг не блокирует. Вам просто нужно правильно использовать его, установив целевую позицию, а затем очень регулярно и быстро выполнять функцию "выполнить" соответствующих объектов accelstepper, чтобы они не пропустили ни одного шага. На самом деле библиотека предназначена для этого. Он также имеет функцию блокировки, но больше для полноты и особых ситуаций. Неблокирующий способ на самом деле является предполагаемым способом использования, @chrisl
На самом деле я до сих пор сам как-то разобрался в проблеме, и она связана с использованием реле для питания моих двигателей, поскольку arduino не может управлять переключением реле, поэтому я использую ведомый arduino, чтобы не испортить систему., @Ritesh Sharma
Если вы решили проблему, ypu может написать ответ на ваш собственный вопрос. Таким образом, ваша эарнинга может помочь другим в будущем, @chrisl
Итак, прежде всего, я отказался от 12-вольтового и 5-вольтового двигателей(этот был взломанным сервоприводом tower pro) и использовал два пневматических цилиндра, так как в моей фирме есть компрессионные двигатели для изготовления привода. В то время как сейчас он более прочный, но лучше. Я также решил проблему, о которой спрашивал, это было сделано с помощью ведомого устройства arduino nano, поэтому я просто использовал последовательную связь, чтобы запустить подпрограмму реле на nano таким образом, даже если мое реле выдаст некоторые ошибки, в моей системе ничего не пойдет не так. Также еще одной моей ошибкой было одновременное включение реле и двигателя., @Ritesh Sharma