60 шаговых двигателей, как управлять оджновременно?
Устройство называется многолепестковый коллиматор - используется в лучевой терапии для формирования пучков. На фото пример такого коллиматора (маде ин Канада) с использованием пневмоприводов.
Устройство состоит из двух блоков расположенных друг напротив друга с набором подвижных пластин по 30шт в каждом. Высота пластины порядка 3мм.
с какой точностью и скоростью необходимо двигать пластины коллиматора?
какой уровень радиации на уровне крепления этих цилиндров? (электроника разрушается от радиации).
если скорость нужна порядка пары - трех кадров в секунду, и уровень радиации достаточно низок - то можно воспользоваться сервомашинками.
для них - будет 60 проводов с разной скважностью импульсов соответстсвующие положениям соответствующих пластин, плюс единая шина питания.
в этом случае можно каскадно соединить несколько микроконтроллеров, или взять ЮСБ микроконтроллеры и соединить их на последовательный интерфейс компьютера.
с каждого можно будет получить до 16 каналов (возможно где-то больше).
это 16 байтов с инфой о положении (256 положений) и счетчиком времени меняющим состояние соответствующих выходных пинов в соответствии с числом в ячейке.
каждый следущий цикл запускает все состояния в единицу и в временном цикле проверяет все 16 регистров по простой программе ветвления, формируя новое “слово” отправляемое на выходные порты.
в конце цикла - проверка данных на юсб модуле.
такая система будет с открытой обратной связью, следовательно проще, но менее надежная в плане точности и контроля “ошибки”
Вообще сразу скажу что сейчас изготавливается экспериментальный образец (прототип), на 4 пары пластин с такими же габаритами (8 двигателей и 8 датчиков). Проработка тех.задания привела к выводу что удобно использовать только ШД, пневмоцилиндры не пойдут. Причем ШД актуаторы (неподвижная внутренняя гайка, подвижный выдвигающийся шкиф). Скорость пластин –около 0,3-0,5 см/с. Если учесть что за один шаг шкиф актуатора выдвигается на 0,04мм, то чтобы обеспечит нужную скорость нужно около 7-10 шагов в секунду.
С радиацией не проблема: в рабочей зоне, где мощность порядка 100рад/мин (1Гр/мин) конечно ничего кроме пластин находиться не будет (рабочая частица протон). Проблема лишь с наведенной активностью (гамма и нейтроны в основном). Шаговики никак не реагируют, а электронику необходимо помещать на расстоянии хотя бы 50см в бок от рабочей зоны + защита – свинцовый кожух от гамма и парафиновая прослойка от нейтронов.
С датчиками тоже все решено, рекомендуется использовать только энкодеры (цифровой выход, абсолютное значение) с подходящей точностью.
Прототип, как мы решили, будет управляться полноценным блоком управления, т.е. в дальнейшем его можно будет использовать на полноценный коллиматор.
Для boldive :
Спасибо за ответ! Я конечно не специалист в АСУ, но идея отличная на мой взгляд (я знаю КАМАК только 😁 ).
что то подобное, да?
Т.е. как я понял заключается она в том, чтобы не париться, а навесить несколько модулей из Bechkoff. Написать программу в TwinCat и возможностей оборудования хватит на обслуживание столь большого количества двигателей и датчиков. Только можно ли поподробней, что конкретно надо использовать, какие модули? Нужна ли панель, или можно на ноут вывести? Ну и 20тыс баксов это конечно много (я наверно лучше машину себе куплю).
Можно ли обойтись малой кровью?
Для Constantine :
Спасибо за ответы! Я не понял, что значит USB МИКРОконтроллеры – это стандартные контроллеры USB в компьютере? Серводвигатели никак не пойдут, так как конструктивно лишь подошли актуаторы (внешний диаметр 20мм, выдвижной шкиф с ходом 100мм! и диаметр 2,5мм!). Идея мне тоже понравилась, т.е. подразумевается использовать возможности собственно компа. Но загвоздка на мой взгляд в том что, комп должен находиться на расстоянии около 20метров от самого коллиматора. Удобнее конечно это расстояние покрыть небольшим кабелем до блока управления а потом уже ветвить, чем заложить огромным пуком (16*4 или еще больше).
И для меня вот это слишком сложно, я не спец:
…… с каждого можно будет получить до 16 каналов (возможно где-то больше).
это 16 байтов с инфой о положении (256 положений) и счетчиком времени меняющим состояние соответствующих выходных пинов в соответствии с числом в ячейке.
каждый следущий цикл запускает все состояния в единицу и в временном цикле проверяет все 16 регистров по простой программе ветвления, формируя новое “слово” отправляемое на выходные порты.
в конце цикла - проверка данных на юсб модуле……
Подразумевается 16 независимых каналов с каждого контроллера USB? Далее сигналы подаются параллельно/последовательно? Что будет принимать данные с датчиков?
Мне интересно моя первоначальная идея верна? Можно ли работать по такой схеме (далее ее усовершенствовать и так далее). Или следует создавать что-то новое? Например может легче взять микроконтроллер на левый блок для подачи управляющих сигналов на 30 пластин + микроконтроллер специально для обработки данных с датчиков и также повторить на правый блок. Поставить блок памяти для массового сбора данных с датчиков и посыла их на комп. Или все это не верно?
Для Constantine :
Спасибо за ответы! Я не понял, что значит USB МИКРОконтроллеры – это стандартные контроллеры USB в компьютере? Серводвигатели никак не пойдут, так как конструктивно лишь подошли актуаторы (внешний диаметр 20мм, выдвижной шкиф с ходом 100мм! и диаметр 2,5мм!). Идея мне тоже понравилась, т.е. подразумевается использовать возможности собственно компа. Но загвоздка на мой взгляд в том что, комп должен находиться на расстоянии около 20метров от самого коллиматора. Удобнее конечно это расстояние покрыть небольшим кабелем до блока управления а потом уже ветвить, чем заложить огромным пуком (16*4 или еще больше).
И для меня вот это слишком сложно, я не спец:…… с каждого можно будет получить до 16 каналов (возможно где-то больше).
это 16 байтов с инфой о положении (256 положений) и счетчиком времени меняющим состояние соответствующих выходных пинов в соответствии с числом в ячейке.
каждый следущий цикл запускает все состояния в единицу и в временном цикле проверяет все 16 регистров по простой программе ветвления, формируя новое “слово” отправляемое на выходные порты.
в конце цикла - проверка данных на юсб модуле……Подразумевается 16 независимых каналов с каждого контроллера USB? Далее сигналы подаются параллельно/последовательно? Что будет принимать данные с датчиков?
Мне интересно моя первоначальная идея верна? Можно ли работать по такой схеме (далее ее усовершенствовать и так далее). Или следует создавать что-то новое? Например может легче взять микроконтроллер на левый блок для подачи управляющих сигналов на 30 пластин + микроконтроллер специально для обработки данных с датчиков и также повторить на правый блок. Поставить блок памяти для массового сбора данных с датчиков и посыла их на комп. Или все это не верно?
никаких датчиков (зачем собственно).
положение сервомашинок (регулируется длительностью управляющего импульса)
питание приходит отдельно.
почитайте статью - тут на сайте www.rcdesign.ru/articles/radio/servo_intro
от компьютера отправляется последовательный сигнал - 17 байт скажем.
первый - номер контроллера, остальные 16 - положения машинок от 0 до 256.
на основании этого сигнала микроконтроллер формирует 16 независимых каналов по которым управляет 16 сервомашинками.
юсб микроконтроллер - я просто имел в виду микроконтроллер с модулем ЮСБ (он - модуль в этом случае работает независимо от контроллера).
зачем вам обратно на компьютер вообще чего бы то ни было выдавать? - сложности великие!
Для 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
вопрос еще не решен? 😃