60 шаговых двигателей, как управлять оджновременно?
Для boldive :
Спасибо за ответ! Я конечно не специалист в АСУ, но идея отличная на мой взгляд (я знаю КАМАК только 😁 ).
Т.е. как я понял заключается она в том, чтобы не париться, а навесить несколько модулей из Bechkoff. Написать программу в TwinCat и возможностей оборудования хватит на обслуживание столь большого количества двигателей и датчиков. Только можно ли поподробней, что конкретно надо использовать, какие модули? Нужна ли панель, или можно на ноут вывести? Ну и 20тыс баксов это конечно много (я наверно лучше машину себе куплю).
Можно ли обойтись малой кровью?
Сама идея показана на картинке правильно. Только на картинке сервомоторы с драйвами сидящими на Ethercat (это у них такой заточенный под автоматизацию Ethernet), Вам это не надо. От Beckhoff надо только Twincat и тот разноцветный блок слева-посередине картинки. Если малой кровью то TwinCat будет стоить в пределах 2000$, Ethernet Bus Terminal Controller (например BC9020) с модулями входа/выхода (вам нужны будут пара цифровых входов, много цифровых выходов для управления шаговыми контроллерами, например на TA8435, и много входов, по одному на каждый энкодер), если поискать на ebay то можно и в 100$ уложиться (плюс доставка). А лучше позвоните в местное представительство Beckhoff они вам все популярно и расскажут. Компьютер с сетевой картой для управления любой >P3-800 или P4, только это должен быть Intel CPU.
Если еще дешевле. Тогда бесплатно скачиваете с сайта Beckhoff TwinCat и наслаждаетесь им 30 дней, после этого просто его еще раз переустанавливаете и пользуетесь еше 30 дней. И так пока не решитесь купить его. С моторами и драйвами надеюсь все понятно. А вот с энкодэрами подумайте. Это может оказаться самой дорогой составляющей. Подумайте насчет переменных резисторов (в вашем случае на выдвижную рейку ставите еще одно колесо и на него резистор, не садите резистор на вал двигателя потому как контролируется перемещение рейки. В случае проблемм с соединением мотор-шестеренка-рейка ваш резистор отловит ошибку) Тогда еще добавляете нужное количество аналоговых входов (по напряжению 0-10V) и ситема контроля почти готова.
Преимущество все этого очень легкая масштабируемость и повторяемость. Про контроль я уже и не говорю. Весь компьютер в вашем распоряжении. И еще по поводу TwinCat. Не поверите, но TwinCat (это настоящая realtime система) решает когда работать ему а гогда операционной системе Windows. Так что если вдруг на экране монитора увидите синий экран с приветствием от Била Гейтца (надеюсь знаете что это такое 😁 ) на работе TwinCat это никак не скажется, он будет продолжать работать.
И еще забыл. HMI может работать где угодно, хоть на лаптопе, хоть на внешнем телевизоре. С TwinCat идет билиотека ADS, там примеры и сами модули чтобы на VisualBasic or C# писать экран визуализации/управления.
зачем вам обратно на компьютер вообще чего бы то ни было выдавать? - сложности великие!
Пожалуйста не забываете что речь идет о медицинском оборудовании а не о самолете-тренере.
Цикл работы микроконтроллера.(вариант)
-
ожидание начала поступления данных о новом положении стержней
-
Получение данных о желаемой конфигурации стрежней и по его окончанию сброс флага/сигнала готовности к работе (если таковой требуется для работы связанных блоков). Для общения с Host компютером забудьте о USB ориентируйтесь на RS232. В случае необходимости FTDI 232 обеспечит вам трансляцию Com порта по USB с минимальными затратами с вашей стороны. Нативный usb драйвер вам под свое оборудование нафиг пока писать не надо. Так что на логическо программном уровне com com и еще раз com IMHO.
-
Опрос всех энкодеров для получения текущего положения.
-
Формирование вектора невязок/сравнения (два бита на шаговик значения 0 стоять , -1 назад, 1 вперед ) и выставление его на выводы управления направлением движения. Если есть достаточно IO ног на контроллере то сразу на них нет делать внешний тригер защеку с мультиплекированием данных адресной шиной и сбрасывать порциями.
-
если вектор невязок сравнения не нулевой формирование строба шага по которому все шаговики разом шагают в указанном для каждого из них на шаге 3 направлении и на пятый шаг. Если вектор сравнений нулевой на шаг 6
-
возвращается на шаг 2 (если требуется повышенная защищенность для повторного опроса энкодеров) или получаем новое положение стержней из исходного и движений сделаных на шаге 4 после чего на шаг 3 (скоростной вариант). Тут можно комбинировать скажем до предпологаемого 0-го вектора идем быстро не опрашивая реальное положение в конце потом еще раз проверяем положение на всякий случай. Для оптимизации все вектора невязок по шагам к можно рассчитать сразу если достаточно памяти или пересчитывать каждый раз по месту если ее нет.
-
выставление флага/сигнала готовности к работе для внешних блоков и переход на шаг 0.
Вот как то так.
WBR CrazyElk
p.s. обратите внимание в алгоритме нигде нет сколько именно стрежней обслуживает контроллер. хоть 1 хоть все 60 и в реализации сразу делайте это параметром. не хватит скорости ног али чего еще экстенсивным будет проще развивать добавляя блоки и объединяя сигнал готовности по and.
Не, ну без датчиков никак не получится.
Недавно у нас на пучке тестировали болгарский коллиматор, прототип из 6ти пластин. Из недостатков помимо криво сделанных пластин и блока управления на 3 движка размером с дом, было сделано замечание по поводу отсутствия датчиков положения отслеживающих непосредственное перемещение пластин (т.е. датчик механически должен быть связан лишь пластиной, не допускается связывать их с движком, а уж отсутствие вообще не приемлемо). Координату отслеживать лишь по количеству шагов двигателя нельзя, так как всегда накапливается статическая ошибка + необходимо всегда калибровать пластину перед каждым запуском (гнать на концевик), которых при стандартной работе устройства за 1 час около 15-20 пусков.
Именно наличие независимых датчиков делает устройство самодостаточным, вроде как уникальным. Дает уверенность в правильном расположении каждой из пластин.
Насчет потенциометров (переменных резисторов) тоже проблема, так как достаточно миниатюрных не нашел, а если и были то по заоблачным ценам. Энкодеры оказались более дешевые (уже закуплено 8 штук по цене где-то 13$ за каждый, не самые лучшие конечно, но достаточно маленькие, на первое время пойдет). Это по поводу датчиков.
Насчет сервомашинок интересно очень, не думал что можно обычным коллекторным двигателем добиться таких хороших точностей. Но габариты здесь основополагающий фактор. Даже если использовать «нано» машинку (высота 30мм, длина 20мм) то разместить их на площади 50см^2 невозможно, тем более если учитывать что машинка должна располагаться под 90гр к линии перемещения пластины если использовать реечную передачу и находиться все машинки будут сбоку от пластин.
На рисунке хорошо видно как можно использовать мои двигатели, это более практично по компоновке.
А идея как раз то, что я и хотел (для Constantine). Есть микроконтроллер задача которого, получив координату с компа для каждой платины, сравнить с имеющимися, определить какую куда двигать, послать сигнал на соответствующую ножку.
Я не знаю, можно используя лишь один канал микроконтроллера управлять шаговым двигателем, задавать ему скорость и направление. Если да, то отлично. Берем микроконтроллер с 60 выводами и вешаем на него 60 драйверов с движками все.
А обратно информацию передавать необходимо, ежесекундно на мониторе оператора (врача терапевта) должна высвечиваться картинка о текущем положении пластин. Как на картинках
.
Для boldive:
Ваша идея я думаю самая верная. Это отход от уровня плат сделанных на коленке к реальной системе управления, которую не стыдно демонстрировать иностранцам. Но я думаю это слишком большой шаг вперед для меня, до этого надо дойти умом и деньгами. Наверно испробовав самодельную схему, можно будет смело переходит на такую. И надо будет уговорить начальство потратить столько денег 😃
Цикл работы микроконтроллера.(вариант)
ожидание начала поступления данных о новом положении стержней
Получение данных о желаемой конфигурации стрежней и по его окончанию сброс флага/сигнала готовности к работе (если таковой требуется для работы связанных блоков). Для общения с Host компютером забудьте о USB ориентируйтесь на RS232. В случае необходимости FTDI 232 обеспечит вам трансляцию Com порта по USB с минимальными затратами с вашей стороны. Нативный usb драйвер вам под свое оборудование нафиг пока писать не надо. Так что на логическо программном уровне com com и еще раз com IMHO.
Опрос всех энкодеров для получения текущего положения.
Формирование вектора невязок/сравнения (два бита на шаговик значения 0 стоять , -1 назад, 1 вперед ) и выставление его на выводы управления направлением движения. Если есть достаточно IO ног на контроллере то сразу на них нет делать внешний тригер защеку с мультиплекированием данных адресной шиной и сбрасывать порциями.
если вектор невязок сравнения не нулевой формирование строба шага по которому все шаговики разом шагают в указанном для каждого из них на шаге 3 направлении и на пятый шаг. Если вектор сравнений нулевой на шаг 6
возвращается на шаг 2 (если требуется повышенная защищенность для повторного опроса энкодеров) или получаем новое положение стержней из исходного и движений сделаных на шаге 4 после чего на шаг 3 (скоростной вариант). Тут можно комбинировать скажем до предпологаемого 0-го вектора идем быстро не опрашивая реальное положение в конце потом еще раз проверяем положение на всякий случай. Для оптимизации все вектора невязок по шагам к можно рассчитать сразу если достаточно памяти или пересчитывать каждый раз по месту если ее нет.
выставление флага/сигнала готовности к работе для внешних блоков и переход на шаг 0.
Вот как то так.
WBR CrazyElk
p.s. обратите внимание в алгоритме нигде нет сколько именно стрежней обслуживает контроллер. хоть 1 хоть все 60 и в реализации сразу делайте это параметром. не хватит скорости ног али чего еще экстенсивным будет проще развивать добавляя блоки и объединяя сигнал готовности по and.
Вот как раз про это я и спрашивал.
Насчет RS232 верное замечание, я думал что без преобразователя USB/RS не обойтись.
Пока не понял что значит “…делать внешний тригер защеку с мультиплекированием данных адресной шиной и сбрасывать порциями…”.
Остальное внимательно читаю. Отпишусь позже.
PS. реально запрограммировать так микроконтроллер своими силами, или необходимо иметь IQ 200?
Natan
Пока не понял что значит
– Это значить что если ног у кристалла микроконтроллера нет в достаточном количестве, то надо/можно сделать (вариантов как сделать много так что не зацикливатесь) такое устройство - называемое, регистр защелка, к которому идет в том или ином виде мелко разрядная шина адреса/номер очередной партии и шина входных данных, а из него идет выходная шина данных. Микроконтроллер у которого мало ног чтобы самому управлять непосредственно все XXX шаговых двигателей сперва выставляет значение адреса/номера очередной порции данных на адресную шину, а данные на шину данных на которых все регистры защелки сидят параллельно. После чего по стробу готовности ОДИН из регистров защелоек запоминает (защелкивает) данные с входной шины данных и выставляет их на свою выходную шину которая и ведет к двигателями (но они двигатели эти данные не замечают ибо сигнала готовности на них еще не дали). Эдакий расширитель количества ног микроконтроллера с последовательно параллельным интерфейсом общения.
В качестве иллюстрации. Из крайности как вариант такого регистра на 120 бит для микропроцессора у которого всего 3 выхода осталось
- регистр последовательно сдвига на 120 выходов (или 12 10битных регистров последовательно каскадированных).
- Строб 1 бит (clock регистра),
- Шина данных 1бит (In - вход сдвигового регистра)
- Адрес количесво clock бит после reset (Reset - регистра).
Даем reset, а затем по очереди выставляя данные по битику дергаем clock, через 120 clock-ов на выходах регистра 120 требуемых значений.
Регистры защелки бывают разные различные и разнообразные как по данным так и по адресам - в голову пока не берите, вдруг у кристалла ног хватит. Главное что если что то решение есть. И его целиком без ущерба для окружающих прячут в подраздел (подпрограмму) шага 3 под именем “выставление на выводы управления направлением движения” все скопом или пачками или строго по 1 - как дело десятое и всего остального не тревожащее.
“реально запрограммировать”
- Все что вы можете описать шаг за шагом без слов “ну это всем понятно” обычно можно запрограммировать. Контроллер это “две из ларца” которые быстро и без раздумий делают точно то что им сказал программист. Не раздумывая о правильности, естественности или общепринятости значения слов в человеческой среде. Скажете рубить месить так и станут не задумываясь что в руках. Так что все дело только в умении точно и недвусмысленно произнести что делать по шагам (раз уж это микроконтроллер то скорее всего на языке C). Главное начать 😃. Основное препятствие это когда “сделай хорошо” а что это такое и сам желающий не знает. Типа пожелания “ну ты у меня умная придумай сама …”. Умная конечно придумает вариант, но вот часто после желающий осознает “нехорошо это” или “точно такой но с перламутровыми пуговицами” и так 10 раз.
WBR CrazyElk
вопрос еще не решен? 😃