Помогите со скетчем, управление двигателями
- Войдите на сайт для отправки комментариев
Вс, 25/02/2018 - 02:11
Всем доброго дня!
Возникла такая проблема не могу никак заставить крутится движки на плате Romeo BLE mini В ней используется драйвер двигателя DRV8833PWR В котором по два входа на канал, один из которых ШИМ для управления скорость вращения.
Имеется скетч: в котором используется L298N
У меня не получается адаптировать скетч под драйвер двигателя DRV8833PWR
Помогите пожалйста
Сам скетч:
/* Arduino Wireless Control using the NRF24L01 Transceiver module */ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define enA 2 // Note: Pin 9 in previous video ( pin 10 is used for the SPI communication of the NRF24L01) #define in1 4 #define in2 5 #define enB 3 // Note: Pin 10 in previous video #define in3 6 #define in4 7 RF24 radio(8, 9); // CE, CSN const byte address[6] = "00001"; char receivedData[32] = ""; int xAxis, yAxis; int motorSpeedA = 0; int motorSpeedB = 0; void setup() { pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { if (radio.available()) { // If the NRF240L01 module received data radio.read(&receivedData, sizeof(receivedData)); // Read the data and put it into character array xAxis = atoi(&receivedData[0]); // Convert the data from the character array (received X value) into integer delay(10); radio.read(&receivedData, sizeof(receivedData)); yAxis = atoi(&receivedData[0]); delay(10); } // Y-axis used for forward and backward control if (yAxis < 470) { // Set Motor A backward digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // Set Motor B backward digitalWrite(in3, HIGH); digitalWrite(in4, LOW); // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed motorSpeedA = map(yAxis, 470, 0, 0, 255); motorSpeedB = map(yAxis, 470, 0, 0, 255); } else if (yAxis > 550) { // Set Motor A forward digitalWrite(in1, LOW); digitalWrite(in2, HIGH); // Set Motor B forward digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // Convert the increasing Y-axis readings for going forward from 550 to 1023 into 0 to 255 value for the PWM signal for increasing the motor speed motorSpeedA = map(yAxis, 550, 1023, 0, 255); motorSpeedB = map(yAxis, 550, 1023, 0, 255); } // If joystick stays in middle the motors are not moving else { motorSpeedA = 0; motorSpeedB = 0; } // X-axis used for left and right control if (xAxis < 470) { // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value int xMapped = map(xAxis, 470, 0, 0, 255); // Move to left - decrease left motor speed, increase right motor speed motorSpeedA = motorSpeedA - xMapped; motorSpeedB = motorSpeedB + xMapped; // Confine the range from 0 to 255 if (motorSpeedA < 0) { motorSpeedA = 0; } if (motorSpeedB > 255) { motorSpeedB = 255; } } if (xAxis > 550) { // Convert the increasing X-axis readings from 550 to 1023 into 0 to 255 value int xMapped = map(xAxis, 550, 1023, 0, 255); // Move right - decrease right motor speed, increase left motor speed motorSpeedA = motorSpeedA + xMapped; motorSpeedB = motorSpeedB - xMapped; // Confine the range from 0 to 255 if (motorSpeedA > 255) { motorSpeedA = 255; } if (motorSpeedB < 0) { motorSpeedB = 0; } } // Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70) if (motorSpeedA < 70) { motorSpeedA = 0; } if (motorSpeedB < 70) { motorSpeedB = 0; } analogWrite(enA, motorSpeedA); // Send PWM signal to motor A analogWrite(enB, motorSpeedB); // Send PWM signal to motor B }
Например ошибки в 53 и 132 строках. А теперь посчитайте стоки и найдите указанные:)
на форуме не просто так есть правила публикации кода !
прочтите и выложите код по-правилам форума.
чтобы было проще Вам помогать приведите схему подключений.
Datasheet смотрели? В частности страницу 9, таблицу 2.
Да смотрел даташит!
Что вы поняли из этой таблицы, какие модификации исходного скетча производили?
Думаю, что вы понимаете, что раздел форума "Программирование" - это не отдел выполнения заказов и вам необходимо 90% работы сделать самому?
Внёс изменение согласно таблице, но по чему то не работает?
Таблицу №1 я видел. Посмотрите на Таблицу №2.
Видите, что PWM нужно подавать на разные ноги, в зависимости от того, в какую сторону надо крутить мотор?
За реверс же отвечает логическое значение 1 0 на одном из каналов. А за скорость другой канал PWM? т.е PWM в направлении вращении не участвуют, как я понял. Или я ошибаюсь?
Я ориентируюсь на ваше описание: " два входа на канал, один из которых ШИМ для управления скорость вращения".
Т.е. полагаю, что именно так на ардуину вы и заводите. Данной ситуации соответствует таблица 2.
Я бы для проверки сделал простой скетч, который на один выход давал PWM, а на другом менял HIGH/LOW раз в несколько секунд. Думаю, что это должно заставить мотор крутиться в разные стороны. Если это сработает, то перестраиваете исходный скетч с учетом таблицы 2.
PS. Да, в сущности для реверса, упрощенно, PWM перекидывать не надо. Однако, обратите внимание, что при этом меняются режимы работы двигателя (fast decay/slow decay). Если вам нужно оставаться в одном режиме, то придется еще и PWM перекидывать на другую ногу.
у LN298N сигнал PWM обычно подают на вход EN, а направление вращения задают комбинацией сигналов IN 0/1.
Тут, согласно тбл1. при обоих отключенных входах мотор предоставлен сам себе ибо его выходы в состоянии Z. Вот это Вам и надо.
Соответственно IN1=0, IN2=PWM -- едем в одну сторону, IN1=PWM, IN2=0 -- едем в другую сторону. А уж где там перед, где зад - как моторы подключите. Приятно то, что можно подать обе единицы и получить торможение коротко-замкнутым ротором.
Так какие нужно изменения внести? А то я что-то не пойму ни как
Чтобы понять - нужно написать маленький тестовый скетч. Завести в нем движок - несколько строчек.
Вы это сделали или ждете ЕвгенияП, который за всех код пишет?
Скетч работает, но как реализовать остановку двигателя?
А вот Архат вам написал в #12: если подать через digitalWrite() LOW в оба входа - движок вращается по инерции, если HIGH - активно тормозит ротором.
Скетч работает! Останвка 3 сек.
Отлично.
Осталось только разобраться с перекидыванием PWM на разные INx, чтобы режим работы двигателя сохранять и можно интегрировать в логику первоначального скетча.
А вы подскажите как это можно сделать?
Подсказать как IN1 навесить на один PWM-пин, а IN2 на другой и по очереди писать в них через analogWrite?
Как в скетч это завести, в самый первый?
Вот те здрасте. Находите условие в кода, срабатывающее за движение в какую-то сторону и пишете туда свой код, как в тестовом скетче:
Не получается!
Вы можете по скетчу моему накидать как правильно?
Да я-то могу, но вы же хотите научиться самостоятельно это делать, как я понимаю, раз вы написали в раздел "Программирование"? В противном случае есть раздел "Ищу исполнителя", который сэкономит вам время, но отберет некоторую сумму денег.
Вот вы сейчас запостили опять скетч, но я не вижу там никаких изменений. Давайте сначала определим, какие движения осуществляются и в каких строках. Пишите.
Я хочу чтобо мне помогли понять как это правильно сделать! Я по этому и написал в раздел программирование.
В скетче есть motorSpeedA = 0; его нужно менять?
Если считаете, что я вам не помогаю, то давайте подождем еще кого-нибудь, более отзывчивого.
Если вы знаете как можно сделать, почему не можете помочь?
Помочь ничего не делать?
Помощь подразумевает, что делаете все-таки Вы, а кто-то Вам помогает в этом. Но не делает вместо Вас, т.к. это уже не помощь.
А я сделал, написал мини скетч работы двигателя А дальше попросил помочь связать его с основным скетче. А что вы подразумеваете сделать за меня?
Да! Походу помощи не от кого ждать! Ладно, значит будем сами искать и думать как решить данный вопрос.
И это - правильно. Все что Вам было необходимо, Вы уже разобрались. Остальное - "как вписать это в мой (ли?) код?" - только ваших рук дело. Успеха! :)
Да! Походу помощи не от кого ждать! Ладно, значит будем сами искать и думать как решить данный вопрос.
Можем поменяться: вы вместо меня переписываете драйвер сетевого модуля, а я в ваш скетч моторы добавляю. Идет?
Да! Походу помощи не от кого ждать! Ладно, значит будем сами искать и думать как решить данный вопрос.
Можем поменяться: вы вместо меня переписываете драйвер сетевого модуля, а я в ваш скетч моторы добавляю. Идет?
нифига, - как только драйвер осилишь сразу за моторы...
?
Да! Походу помощи не от кого ждать! Ладно, значит будем сами искать и думать как решить данный вопрос.
Можем поменяться: вы вместо меня переписываете драйвер сетевого модуля, а я в ваш скетч моторы добавляю. Идет?
Если бы я знал как вам помочь, я помог бы вам переписать драйвер для сетевого модуля. Но так как, я не особо селен в среде программирования ардуино, то толку от меня 0. А если вы принципиально никому не хотите помогать, то какой смысл в ваших пустых комментариев и ответах?
Но так как, я не особо селен в среде программирования ардуино
А в какой среде программирования Вы сильны?
К теме это ни как не относится!
Почему не относится? Вот Вы написали фразу: "но так как, я не особо селен в среде программирования ардуино". Эта фраза подразумевает, что сложности у Вас именно со средой программирования Ардуино (Arduino IDE). То бишь проблем с самим языком программирования С/С++ у Вас нет? Или всё же Вам надо было написать так? - "но так как, я не особо силен в программировании".
Я как бы намекаю, что сложности у Вас не со "средой программирования ардуино", а с программированием в целом.
Если бы я знал как вам помочь, я помог бы вам переписать драйвер для сетевого модуля. Но так как, я не особо селен в среде программирования ардуино, то толку от меня 0. А если вы принципиально никому не хотите помогать, то какой смысл в ваших пустых комментариев и ответах?
Может вы сумеете назовать хотя бы одну причину, по которой мне нужно бросить всё своё и кинутся исправлять и отлаживать ваше?
Впрочем, действительно, что я сюда пишу. Надо было вообще не начинать. Глядишь - занимались бы сейчас тем, в чем сильны, а не ардуиной.
Почему не относится? Вот Вы написали фразу: "но так как, я не особо селен в среде программирования ардуино". Эта фраза подразумевает, что сложности у Вас именно со средой программирования Ардуино (Arduino IDE). То бишь проблем с самим языком программирования С/С++ у Вас нет? Или всё же Вам надо было написать так? - "но так как, я не особо силен в программировании".
Я как бы намекаю, что сложности у Вас не со "средой программирования ардуино", а с программированием в целом.
Язык программирования Arduno построен на C++ Соответственно если у меня есть проблемы с программированием в среде Arduino значит у меня есть проблемы с C++ Я надеюсь этот ответ удовлетворит вас?
Если бы я знал как вам помочь, я помог бы вам переписать драйвер для сетевого модуля. Но так как, я не особо селен в среде программирования ардуино, то толку от меня 0. А если вы принципиально никому не хотите помогать, то какой смысл в ваших пустых комментариев и ответах?
Может вы сумеете назовать хотя бы одну причину, по которой мне нужно бросить всё своё и кинутся исправлять и отлаживать ваше?
Впрочем, действительно, что я сюда пишу. Надо было вообще не начинать. Глядишь - занимались бы сейчас тем, в чем сильны, а не ардуиной.
Я вас заставлял писать мне код? Нет! Если для вас это не посильная и трудновыполнимая задача. И вы Сами не особо сильны в программировании Arduino. То какой смысл вам здесь показывать Свою значимость и "превосоходство", над тем что Вы сами не знаете?
И вы Сами не особо сильны в программировании Arduino.
Так что вы от меня тогда хотите-то?
.
И вы Сами не особо сильны в программировании Arduino.
Так что вы от меня тогда хотите-то?
Нет, от вас мне точно ничего не надо)
Vladimir555, вы тактически не правильно повели себя на этом форуме с самого начала.
а теперь, ещё и после препираний с людьми, которые хотели вам помочь, думаю вы не получите ни безвоздмездной, ни платной
помощи.
хотя задача ваша совсем не сложная.
если бы вы приложили хоть какое то усилие в программировании, а не копирование чужих кодов и пустую полемику, то давно радовались и управляли своей игрушкой.