Две ардуино
- Войдите на сайт для отправки комментариев
Доброго дня!
Имеется две Arduino Uno R3 китайские. У каждой 3 мотора и чпу shield (типа для чпу станока). Мне нужно обьединить две ардуино. Почитал на форуме, что можно через i2c, SPI, библиотеку easytransfer. Но возник вариант т.к. уже выведены от каждой ардуино разъём DE-9(последовательный rs232)), можно ли обьединть RX, TX, Gnd двух arduino и соединить с TX, RX, Gnd разъёма DE-9? Так как мне не важно кто из них ведущий, а кто ведомый.
В com порт я пишу последовательность шагов для моторов, например, 20,30,20 и он понимает, что это для 1-го, 2-го и 3-го моторов соответственно. А если подключить таким образом как я описал, я хочу писать 20,30,40,20,30,40 для 1-го, 2-го и 3-го, 4-го, 5-го, 6-го моторов соответственно. Как же это будет понимать 2-ая ардуинка, что я кней обращаюсь, а не к 1-ой? Как я подумал, можно писать для 1-ой ардуино так 20,30,40,0,0,0 для 2-ой так 0,0,0,20,30,40. Но как они будут это понимать, если они висят на одном разъём DE-9?
А у меня вопросы.
Что делают эти шесть моторов?
Может их на одну Мегу повесить через шилды?
Доброго дня!
Имеется две Arduino Uno R3 китайские. У каждой 3 мотора и чпу shield (типа для чпу станока). Мне нужно обьединить две ардуино. Почитал на форуме, что можно через i2c, SPI, библиотеку easytransfer. Но возник вариант т.к. уже выведены от каждой ардуино разъём DE-9(последовательный rs232)), можно ли обьединть RX, TX, Gnd двух arduino и соединить с TX, RX, Gnd разъёма DE-9? Так как мне не важно кто из них ведущий, а кто ведомый.
В com порт я пишу последовательность шагов для моторов, например, 20,30,20 и он понимает, что это для 1-го, 2-го и 3-го моторов соответственно. А если подключить таким образом как я описал, я хочу писать 20,30,40,20,30,40 для 1-го, 2-го и 3-го, 4-го, 5-го, 6-го моторов соответственно. Как же это будет понимать 2-ая ардуинка, что я кней обращаюсь, а не к 1-ой? Как я подумал, можно писать для 1-ой ардуино так 20,30,40,0,0,0 для 2-ой так 0,0,0,20,30,40. Но как они будут это понимать, если они висят на одном разъём DE-9?
Безусловно можно. Плучится асинхронный полнодуплексный канал. Но на нём необходимо будет во-первых, правильно читать через проверку наличия полученного байта, чтобы не повисать, и отправлять с учётов заполнения буфера FIFO, во-вторых, предусмотреть восстановления синхронизации, если байт потеряется, то последовательность сдвинется ведь. Не забудьте соединить RX-TX перекрёстно.
vladimir62
Ардуино мега не подойдет. Уже испльзуется 2 уно. Управление платформой 3 мотора - одной, 3 - другой.
faeton
А как обращатся к одной и другой ардуине. На одинаковых пинах - то моторы стоят?
Что-то я недопонял
1. Управляющие сигналы приходят с компьютера ?
2. Через RS-232 ?
3. На Ардуинах имеются RS-232 ? Really ??
Хорошо бы схему подключения всего этого увидеть.
vladimir62
Ардуино мега не подойдет. Уже испльзуется 2 уно. Управление платформой 3 мотора - одной, 3 - другой.
faeton
А как обращатся к одной и другой ардуине. На одинаковых пинах - то моторы стоят?
Знаете, только гениальность присутствующих позволит понять то, что Вы желали спросить... :)
Если надо объединить 2 платы для общения между собой, то запросто можно по сом, как я написал ранее. Если необходимо 2 платы подключть к компу, параллельно, используя один порт компа, то есть несколько вариантов:
1. С платы, которая подключена к компу, транслировать по любому интерфейсу на вторую плату. Что правильно.
2. Теоритически сом порт на входе RX никогда ничего не передаёт, только слушает и, при отсутствии линий DTR-подобных, для аппаратного управления потокм, работает исключительно с потоком бит. Следовательно, два волда RX можно на платах подключить параллельно на один выход TX компа. Но подключать два RX на платах параллельно нельзя и Вы теряете обратную связь от плат. Возможно, это не надо - платы лишь слушают что им свистят в эфире.
А понимать они будут просто: посылать в порт шаги для всех моторов. Платы будут принимать полный пакет каждая, превая будет первую половину пакета исполнять, игнорируя вторую, вторая - наоборот. Так все моторы будут управляться параллельно. Их даже незачем делить 0,0,0,x,y,z и a,b,c,0,0,0. Запросто можно всем послать команду 10,20,30,40,50,60, или любому одному: 0,0,28,0,0,0, или любым двум 0,15,0,20,0,0 и т.д.. Каждая плата читает всё целиком, но отбрасывает чужую половину.
НО! Передавать шаги - дело пагубное, ибо, не знание откуда мотор собрался шагать, и вообще дошагал ли он уже, до передачи команды на следующее шагание, может привести с сбою. Передавать необходимо координаты, куда следует стать мотору, и локальным контроллером отслеживать движение с выдачей в обратку сигнала готов/иду/авария, либо выдавать в обратку текущие координаты для проверки в ПО компа.
Можно, безусловно, перед каждой командой шагания выполнять калибровку мотора - гнать его в положение ноль, c аппаратной проверкой датчиком положения ноль, но это не модно. :)
При чём тут пины, кстати? Чтобы не менять код, чтобы залить одинаковый код в обе платы, что, в принципе будет правильно, необходимо на одну из ног платы ждампером устанавливать её адрес. При получении пакета из порта, проверять эту ногу: если она 0, брать исполнять первую половину пакета, иначе - вторую.
P.S. Вот вообще к чему прводят скетчи - человек понятия не имеет о том, что такое шина, что такое адрес, не говоря уже о сигнале чипселект... :)
Araris
1. Да. Использую Serial.
2-3. Посадил на RX и TX разъём DE-9(последовательный порт) и передаю через него кол-во шагов.
faeton
Спасибо вам!
Что означает :"При чём тут пины, кстати? Чтобы не менять код, чтобы залить одинаковый код в обе платы, что, в принципе будет правильно, необходимо на одну из ног платы ждампером устанавливать её адрес. При получении пакета из порта, проверять эту ногу: если она 0, брать исполнять первую половину пакета, иначе - вторую." Не очень понятно про джампер и адрес!
Только зачем писать такие фразы? "Знаете, только гениальность присутствующих позволит понять то, что Вы желали спросить... :)" и "P.S. Вот вообще к чему прводят скетчи - человек понятия не имеет о том, что такое шина, что такое адрес, не говоря уже о сигнале чипселект... :)"
Я и так понимаю,что не мастер в этих делах. Только учусь, так сказать. И мне казалось, что я доступным языком описал вопрос. Посадить две ардуины на один разьём DE-9! Всё! Ну и пояснения по поводу количества шагов.
Только зачем писать такие фразы? "Знаете, только гениальность присутствующих позволит понять то, что Вы желали спросить... :)" и "P.S. Вот вообще к чему прводят скетчи - человек понятия не имеет о том, что такое шина, что такое адрес, не говоря уже о сигнале чипселект... :)"
Старайтесь более понятно излагать задачу или вопрос. Лично я с третьего раза только понял в чём вопрос: соединить две платы между собой, повестить две платы на один порт или как платам распознать свою команду. Может быть, я торможу, но как-то кроме меня никто и не откликнулся. :)
Araris
1. Да. Использую Serial.
2-3. Посадил на RX и TX разъём DE-9(последовательный порт) и передаю через него кол-во шагов.
Понятно. Меня напрягло упоминание RS-232, дело в том, что не все [новички] знают, что RS-232 и Serial TTL - это "две большие разницы" и попытка соединения RS-232 с пинами RX/TX для Ардуино, так сказать, чревата.
Я за Serial TTl и RS-232, но мой вопрос простой: "Что делают 6 ШД? Как они работают?"
vladimir62
Первые 3 мотора двигают платформу по x,y,z и другие 3 мотора платформу по x,y,z .
vladimir62
Первые 3 мотора двигают платформу по x,y,z и другие 3 мотора платформу по x,y,z .
Решил сделать 3D апаратную игру в теннис? :)))
С сутью то разобрался? Получилось?
faeton
Нет. Там сложнее. Там позицинирование.
Не понял про джампер и адрес.
"При чём тут пины, кстати? Чтобы не менять код, чтобы залить одинаковый код в обе платы, что, в принципе будет правильно, необходимо на одну из ног платы ждампером устанавливать её адрес. При получении пакета из порта, проверять эту ногу: если она 0, брать исполнять первую половину пакета, иначе - вторую."
faeton
Нет. Там сложнее. Там позицинирование.
Не понял про джампер и адрес.
"При чём тут пины, кстати? Чтобы не менять код, чтобы залить одинаковый код в обе платы, что, в принципе будет правильно, необходимо на одну из ног платы ждампером устанавливать её адрес. При получении пакета из порта, проверять эту ногу: если она 0, брать исполнять первую половину пакета, иначе - вторую."
Про джампер. Ты соединил входы портов, посылаешь на все 6 моторов команду одновременно и её обе платы принимают одновременно. Чтобы платы узнали кто из них первая, а кто вторая, кому какую половину посылки исполнять, можно поставить джампер/свич/перемычку, читаемую ногой процессора в процедуре инициализации, записывали в переменную-флаг и потом, используя эту переменную, при получении посылки выбирали свою часть команды. Это, если софт на обеих платах одинаковый.
Не пойму, что в нашем случае означает перемычка?
Не пойму, что в нашем случае означает перемычка?
Три торчащих вывода, замыкаемых фиговинкой или маленький переключатель. :)
Это -то я понимаю. У меня такие перемычки стоят:). Не понимаю другого "можно поставить джампер/свич/перемычку, читаемую ногой процессора в процедуре инициализации". Куда ставить перемычку?
На пин и на землю?
На пин и на землю?
Да, включив подтяжку входа. Не просто pinMode(MyAddressPin, INPUT), а pinMode(MyAddressPin, INPUT_PULLUP).
Понял. Благодарю!