Работа с шилдом l298n
- Войдите на сайт для отправки комментариев
Сб, 30/11/2013 - 12:18
Доброго времени суток. У меня возникла такая проблема. Подцепил к ардуине мотор шилд l298n, хочу настроить его так:
сделал 2 кнопки. нажимая на одну кнопку, двигатели вращались в одну сторону, нажимая на другую, двигатели вращались в обратную сторону. Вроде условия правильные, но почему-то не хочет работать данная система. Помогите чем можете.
#define BUTTON 11 #define BUTTON2 10 #define LED 12 #define d1 2 #define m1 3 #define d2 4 #define m2 5 int motorspeed=200; int stopmotor=0; void setup() { pinMode(LED, OUTPUT); pinMode(BUTTON,INPUT_PULLUP); pinMode(BUTTON2,INPUT_PULLUP); pinMode(d1, OUTPUT); pinMode(d2, OUTPUT); } void loop() { if(digitalRead(BUTTON)==LOW){ if(digitalRead(BUTTON2)==LOW){ digitalWrite(LED,LOW); analogWrite(m1, 0); // скорость вращения analogWrite(m2, 0); }else{ digitalWrite(LED,HIGH); digitalWrite(d1, 0); // направление digitalWrite(d2, 0); analogWrite(m1, 200); // скорость вращения analogWrite(m2, 200); } }else{ if(digitalRead(BUTTON2)==LOW){ digitalWrite(LED,HIGH); digitalWrite(d1, 1); // направление digitalWrite(d2, 1); analogWrite(m1, 200); // скорость вращения analogWrite(m2, 200); }else{ digitalWrite(LED,LOW); analogWrite(m1, 0); // скорость вращения analogWrite(m2, 0); } } }
кнопки как подключены?
к ардуинке обычно подключены напрямую)
Button работает нормально, тоесть при нажатии двигатели запускаются и крутятся в одном направлении. После нажатия button2 начинают происходить непонятные вещи. Когда button2 зажимается, двигатели начинают крутиться на низкой скорости, а когда отжимаю button2, они начинают крутиться в обратном направлении, хотя не должны крутиться.
Попробуй нарисовать блок схему того что ты написал в псевдо коде и выложи на проверку. Это может решить проблему почему глюк происходит второй
А первый .. выложи схему как именно подключены кнопки
...и как моторы подключил
Вот вроде простая блок-схема.
Кнопки без резисторов подключал. Объясняли на мастер-классе так)
А нужно с резисторами, они там не просто так да и схема подключения кнопок не особо правильная, там в итоге может что угодно быть. Высший пилотаж что они у тебя ни на змелю не заведены ни на 5В. Что с чем дуина сравнивать будет то?
По блок схеме похоже на твой скетч но оба выглядят странно хоть и всё верно.
Спасибо, завтра попробую, отпишусь:)
но про подключение кнопок лучше http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no... тут смотри, там грантированно работает, как работает у тебя не понятно
хорошо, подключу так как написано
как работает у тебя не понятно
А нужно с резисторами, они там не просто так да и схема подключения кнопок не особо правильная, там в итоге может что угодно быть. Высший пилотаж что они у тебя ни на змелю не заведены ни на 5В. Что с чем дуина сравнивать будет то?
Не нужно никаких резисторов. Не вводите человека в заблуждение. Код внимательно посмотрите из первого сообщения:
Ссылаетесь на тему про кнопки, но при этом сами ее и не читали.
Кнопки подключены верно.
А проблема в том что вы использовали не совсем корректную схему подключения драйвера.
Вот решение вашей проблемы:
http://arduino.ru/forum/apparatnye-voprosy/vopros-po-upravleniyu-dvigatelei-s-pomoshchyu-l298n-shimom
Если я правильно понимаю то так при таком объявлении будем использовать подтягивающие резисторы на самой микрухе... но опять таки из того что я читал говорилось, что это не особо надёжно и лучше явно задать их явно иначе действительно может начать происходить что угодно...
L298N насколько знаю это не целиком шилд или модуль а единственный драйвер микросхемка, которая может быть внутри разных шилдов или модулей... авто не уточнил какой у него именно шилд или модуль...
у меня такая вот штука)
Кстати
Pins Configured as INPUT_PULLUP
The Atmega chip on the Arduino has internal pull-up resistors (resistors that connect to power internally) that you can access. If you prefer to use these instead of external pull-down resistors, you can use the INPUT_PULLUP argument in pinMode(). This effectively inverts the behavior, where HIGH means the sensor is off, and LOW means the sensor is on. See the Input Pullup Serial tutorial for an example of this in use.
Если я правильно понимаю то так при таком объявлении будем использовать подтягивающие резисторы на самой микрухе... но опять таки из того что я читал говорилось, что это не особо надёжно и лучше явно задать их явно иначе действительно может начать происходить что угодно...
Я не знаю, но 298-ой драйвер ставят для более или менее солидной нагрузки в частности электромоторов. Насколько они сойдут за сильные электромагнитные помехи...
Тут все зависит от того какой длины провода от кнопок к дуине и на каком расстоянии эти провода расположены от моторов. Естественно если взять полуметровые провода и обмотамть вокруг двигателей...
Так что и вам рекомндую пользоваться внутренней подтяжкой и только когда она не тянет переходить на внешнюю.
Я просто к тому что на самодельном шилде при работе с кнопкой через прерывания словил дребезжание (те при одном нажатии срабатывает несколько раз), думаю выпаять и поставить резистор побольше на землю
Дребезг отдельная тема. С дребезгом можно тоже бороться как программно так и аппаратно. Что бы избавиться от дребезга нужно не резистор ставить, а конденсатор. Программное решение проблемы дребезга в прерывании тоже уже обсуждалось на форуме.
Да, прочитал. Как я понял, мне нужно подключить ENA и ENB и по нажатию кнопки дописать:
digitalWrite(IN1, 1); digitalWrite(IN2,0); analogWrite(ENA, speed); digitalWrite(IN3, 1); digitalWrite(IN4, 0); analogWrite(ENB, speed);- при движении в одну сторону. А в другую просто поменять 0 на 1? или не?)
Если вы хотите простого алгоритма управления, то да нужно задействовать еще и enable'ы. Если же вы поняли как работать с 4-х проводным подключением, то можно пользоваться и им.
ну чем проще, тем лучше) завтра попробую, надеюсь все получится
Спасибо, все заработало)