Что делать, если на Ардуино заняты все порты?
- Войдите на сайт для отправки комментариев
Сб, 30/05/2020 - 16:04
Добрый день, уважаемые знатоки! Нужен ваш совет!
Признаюсь, я не смог правильно "спросить у Гугла", по этому обращаюсь к вам.
Собственно, вопрос как и в теме: у меня заняты почти все порты на Ардуино Нано, но нужно подключить еще устройств. При этом Ардуино Мега я использовать не могу - размер слишком большой.
На этом форуме я нашел упоминание о камушке PCF8574 и на его основе I2C расширитель портов
Также, я нашел Модуль PCA9685 16-канальный с I2C интерфейсом 12-bit PWM/Servo для ШИМ сигнала.
Собственно, вопрос: есть ли еще какие-то способы увеличить число подключенных устройств? Если дадите ссылку, буду очень признателен!)
Самый простой, быстрый и стандартный способ - сдвиговые регистры 74hc165/74hc595.
Каких устройств?
Спасибо, погуглю!
Где софтина и схема? Скорее всего можно всё упростить или на софтверном или на железочном уровне. Тока их не видно.
Если не грузить лишними подробностями, то мне необходимо "добавить" еще один двигатель, который будет вращаться по кругу в обе стороны под управлением джойстика. И очень хочется чтоб был доступен ШИМ.
У меня сейчас свободны пины 9 (шим), 4, 2, 1, 0.
Я пытался использовать Сервопривод, но при использовании библиотеки Servo отключается ШИМ на 9 и 10 портах. Не подходит.
Подключил шаговый двигатель. Но при использовании библиотеки AccelStepper и команды runToNewPosition все блокируется. Это не подходит. Если управлять пошагово двигатель очень долго поворачивается и очень сильно греется. stepper.setMaxSpeed();stepper.setAcceleration(); Мне никак не помогли это исправить.
По логике (ну, по моей) осталось попробовать только подключить обычный DC двигатель через драйвер типа этого. Но желательно, что б можно было поворачивать плавно, т.е. использовать ШИМ.
Вот такие пироги
Если не грузить лишними подробностями
Если не грузить лишними подробностями, то представьте схему и программу. Если да - будем думать; иначе - идите нахер;
Извините, пока еще в схемы не умею. Но научусь!)
К Ардуино подключен:
1. Драйвер двигателя L298N на пины 3,5,6 и 10 (постоянно переставлял, оставил как есть).
2. bluetooth модуль nrf24l01 на пины 13, 12, 11 и 7.
3. Осталось 0,1,2,4,9.
На аналоговой части свободны А1-А5.
Если не грузить лишними подробностями
Если не грузить лишними подробностями, то представьте схему и программу. Если да - будем думать; иначе - идите нахер;
Не могу идти нахер - я уже там!)
Программу, это код имеется ввиду?
Программу, это код имеется ввиду?
Код - это когда пишете в программном коде или на ассемблере (и то не совсем). Остальное - это программы. Не надо увеличивать свою значимость.
А схему надо нарисовать. Поставьте себе любую cad программу и рисуйте. Иначе очень трудно понимать друг друга.
Хорошо, спасибо, буду разбираться!
1. "... в схемы не умею ..." ...ля. :)) Не умеете читать схемы (не понимаете схем) или понимаете, но пока не можете рисовать схемы в каком-либо редакторе? Я совершенно без сарказма спрашиваю. Надо понимать, как общаться. Если Вы заморочались Ардуино серьёзно, то и то, и другое придётся осваивать.
2. Схема должна быть обязательно полной и именно Вашей, а не "похожей". Очень часто ТС приводит только фрагмент схемы своего устройства, считая, что всё дело именно в нём, а реальные "косяки" остаются вне сферы обсуждения.
3. В крайнем случае схему можно аккуратно(!) нарисовать от руки, отсканировать и разместить здесь. Если схема велика, нарисовать по частям и показать все части, только чтобы присутствовали все компоненты, все соединения, нормально читались все обозначения и номиналы элементов.
Обнадёживает. :))
Ну, слукавил немного)). Не подумал, что в данном вопросе это важно. Но в cad-ы не умею, тут точно.
Но, если доктор сказал в морг - значит в морг!)) (С)
Сделаю как можно быстрее.
Получается так.
Кстати, удобнее чем на бумаге! Спасибо! Вопрос уже принес положительный результат!)
Вторая ревизия схемы читается гораздо легче первой. :)) Можно еще "подрихтовать" линии, идущие по азимуту.
Теперь вопрос полноты. Схему следует дополнить:
1. Вы писали о двигателях. На схеме их нет. Их следует привести обязательно со схемой их питания.
2. Как и от чего получает питание каждый из модулей? Как подключена линия GND ("общий", "земля"). Это важно.
Ещё удобнее - сигаретой в воздухе. Заказчики очень любят. :)) Во "фрицинге" всё меньше от "фрица" (нем.) и всё больше от "инга" (ам. англ.). Увы. Оно, конечно, очень быстро, особенно для новичков. Иллюстративно и удобно для простых монтажных схем. А вот чтобы из "фрицинг-иллюстрации" сделать рабочую схему, понятную специалисту, бывает всю голову свернёшь. Так что не рекомендую привыкать. Пристраститесь - тяжело потом будет отвыкать. Для рисования схем CAD не нужен. Достаточно нормального векторного графического редактора. Даже простого. Тут главное - понимать, что делаешь. На практике весьма удобен SPlan. И библиотеки отечественных УГО есть, и ничего лишнего.
Хорошо, коли так. Но не обольщайтесь. Положительного пока весьма скромно. :))
3. Вы писали, что средство управления двигателем - джойстик. На схеме его нет. А должен быть.
ип@ть-капать, да Eagle какойнить поставил, там дилов на абученийе пять минут и в дамки)))
утя-ж аналоговый порт пачти весь свабоден, чо кукушку мнёшь? цельных 7 портов!
SPI можно мультиплексировать, ты нЭзнал? rx-tx тож свабодны... чё муму дрюкать???
Спасибо, займусь сейчас!
Единственное, займет немного больше времени.
И разрешите сделать эту схему в фрицинге, а потом уже буду осваивать SPlan!
2. Как и от чего получает питание каждый из модулей? Как подключена линия GND ("общий", "земля"). Это важно.
С землей не совсем понял. Как мне определить какая у меня GND? Или какая правильнее.
3. Вы писали, что средство управления двигателем - джойстик. На схеме его нет. А должен быть.
По Блютузу через nrf24l01. Или это тоже нужно в схеме отобразить?
У Вас каждый модуль получает питание. Нарисуйте для каждого модуля, куда и как подключены линии питания Vcc и GND. С какого пина какого модуля провода идут на какой пин другого модуля или блока питания или куда еще.
3. Вы писали, что средство управления двигателем - джойстик. На схеме его нет. А должен быть.
По Блютузу через nrf24l01. Или это тоже нужно в схеме отобразить?
Если управление по Блютусу, то это скажется, скорее, на программной части. Но если управление не пойдёт, то придётся рисовать и джойстик со своим Блютусом, чтобы убедиться, что там нет ошибок в схеме.
NRF не блюпуп вроде.
Ой, ну пусть сейчас пока побудет блюпупом. :)) Тут для начала хоть какую-нибудь схемку получить, чтобы было, что предметно обсуждать. За схемой - программа. А там, думаю, много чего ещё выясниться. :))
5 часов жру попкорн и жду схемы устройства. Похоже сегодня не дождусь...
С кем поспорим, шо данный проЭкт НИкогда не будет ТС воплощён в жизнь?
С кем поспорим, шо данный проЭкт НИкогда не будет ТС воплощён в жизнь?
Можно со мной, т.к. то, что описано в теме уже собрано на макете. Но обязательно ли мерятся гениталиями?)
Извиняюсь, радиомодуль 2.4 ГГц
ехх макэт макэт, этт как бискалёс виласипэт)))
начо спорим?
Получилось так.
Радиомодуль подключен через адаптер.
Питает все это безобразие 3шт 18650. Почему 3? DC двигателям можно и 4, но я не стал ставить больше. Я еще не обкатывал машину в поле, только на холостом ходу проверял. Если не будет хватать - буду ставить 4й. По ТТХ драйвера и моторов позволяет.
Ардуино и радиомодуль питаю от 2х 18650, как на схеме. Что б не использовать понижающий преобразователь.
Собственно, хочу сказать что все это уже собрано и работает так, как я и задумал. Вопрос был в другом. Мне нужен еще 1 DC двигатель с ШИМ, но ШИМ порт остался только один - 9й.
А на что мы можем в интернете поспорить и куда потом доказательства кидать?)
Если вопрос в мотивации, то я замотивирован самостоятельно, тут проблем нет) Но, если найду ответ на мой вопрос, то весь процесс значительно ускориться.
начохошь. доказательства в ютуб.
Ок, договорились!)
А по сути вопроса есть что?
У меня? Канэшно есть. Изложи протокол, как ты его видишь, каким образом будет производится ПЛАВНАЯ регулировка оборотов "моторчиков" от джойстика, если DC PWM управление нелинейно и зависит от нагрузки на ось электродвигателя. Интересует только протокол обмена, код вааЩе неинтересен.
Я не совсем понял суть вопроса, каюсь!) Но у меня есть драйвер двигателя l298n к которому подключены 2 двигателя. И у них все получается с PWM.
По такому же принципу, только на драйвер двигателя один только двигатель. Думалось мне взять МХ1508, он просто меньше. К тому же взял у китайца маленькие, на 3 В моторы с редуктором, на 30 и 15 оборотов в минуту. По сути подходят.
Но для вращения с ШИМ в обе стороны мне ж нужно 2 ШИМ пина, верно? Или я путаю что-то?
Наконец понял суть вопроса.
Отвечаю - ШИМ бывает не только аппаратный, но и программный. Тут все зависит от уровня лени. Или от количества денег - возьмите мегу и проблем с аппаратным ШИМом не будет.
Наконец понял суть вопроса.
Отвечаю - ШИМ бывает не только аппаратный, но и программный. Тут все зависит от уровня лени. Или от количества денег - возьмите мегу и проблем с аппаратным ШИМом не будет.
Я смотрел библиотеку от Гайвера, но не вникал. Может подскажите еще варианты?
Мега слишком большая, увы. Не влазит.
Я смотрел библиотеку от Гайвера, но не вникал. Может подскажите еще варианты?
Мега слишком большая, увы. Не влазит.
Про Гайвера не поминайте к ночи. Уж очень косячно у него. А направление задам. Почитайте на этом форуме blink без delay(). Там расскажут как с помощью millis() организовать временные переключения (что и есть ШИМ). И если Ваша программа правильно написана (т.е. там нет delay() и блокирующих функций), то ШИМ 10-30кГц можно программно организовать на 2-3 пинах без ущерба программе.
Хорошо, спасибо!) Будем изучать!)
А насчет "не влезает" тоже возражу - на али видел мегу в мини варианте (не помню как называется). Опять-же есть стм32 - но там думать надо... серьезная система.
ШИМ 10-30кГц можно программно организовать на 2-3 пинах без ущерба программе.
Вероятность "победы" ТСа с "ШИМой на милсах" уменьшилась как минимум раза в четыре. Продолжай.
Опять-же есть стм32 - но там думать надо... серьезная система.
Ну это совсем ступорный вариант. Перебор.
Вероятность "победы" ТСа с "ШИМой на милсах" уменьшилась как минимум раза в четыре. Продолжай.
А какая есть альтернатива? Или у нас принципиальный спор без подсказок?)
А сколько каналов ШИМ нужно для управления скоростью 1-го DC-двигателя? По моим понятиям - 1. Чтобы проверить свои понятия, обратился к https://3d-diy.ru/wiki/arduino-moduli/drayver-dvigatelya-l298n/ Там также. На один двигатель постоянного тока с драйвером L298N требуется 1 ШИМ канал для управления скоростью и 2 дискретных канала для управления направлением.
На али Мега 2560 PRO называется.
При подключении к этому драйверу я не использовал ENA и ENB с целью экономии пинов. ШИМ я подавал на IN1-4. Так можно и оно работает также. Но теперь, выходит, нужно переделать подключение и освободятся 2 ШИМ пина.
.. и разобраться с кодом.
При подключении к этому драйверу я не использовал ENA и ENB с целью экономии пинов. ШИМ я подавал на IN1-4. Так можно и оно работает также. Но теперь, выходит, нужно переделать подключение и освободятся 2 ШИМ пина.
Можно еще подъэкономить пины. В скетче примера не используют торможение двигателем, когда обмотка разогнанного двигателя замыкается через верхние транзисторы (IN1=IN2=0) или через нижние (IN1=IN2=1). Т.е. если двигателем активно не тормозить, а аккуратно управлять только скоростью, то направление можно задавать только одним сигналом, тогда всегда IN1!=IN2. Это можно сделать аппаратным инвертором.
Можно еще подъэкономить пины. В скетче примера не используют торможение двигателем, когда обмотка разогнанного двигателя замыкается через верхние транзисторы (IN1=IN2=0) или через нижние (IN1=IN2=1). Т.е. если двигателем активно не тормозить, а аккуратно управлять только скоростью, то направление можно задавать только одним сигналом, тогда всегда IN1!=IN2. Это можно сделать аппаратным инвертором.
Идея хорошая, но думаю не подойдет. У меня двигатели могут двигаться с разной скоростью. Нужно каждым отдельно управлять.
Но в целом, все равно, огромное спасибо! Думаю, вопрос можно считать решенным!)
Идея хорошая, но думаю не подойдет. У меня двигатели могут двигаться с разной скоростью. Нужно каждым отдельно управлять.
А кто не даёт управлять каждым отдельно? На каждый двигатель своя скорость и своё направление. Для двигателя №1 скорость - ШИМ на ENA, направление - IN1!=IN2 (аппаратный инвертор). Для двигателя №2 скорость - ШИМ на ENB, направление - IN3!=IN4 (аппаратный инвертор). Итого на 2 двигателя 2 ШИМа и 2 дискретных выхода. Независимо один от другого.
Огромное пожалуйста. :))
Хозяин-барин. Хорошо, коли так. :))
Так оно и получилось, как только схемка обнаружилась. :))
В следующий раз буду сразу приходить с схемой!)