Телескопы покупают здесь


A A A A Автор Тема: Альт-азимутальный контроллер на Ардуино Уно  (Прочитано 1733 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн voisergАвтор темы

  • *****
  • Сообщений: 615
  • Благодарностей: 7
  • GhostBuster
    • Сообщения от voiserg
Проект разрабатывается именно как  альт-азимутальная система управления, хотя конечно же при желании можно урезать до экваториала.
За основу взята работа Игоря Овчинникова Iovch "Универсальная система управления..."
Игорю большое спасибо и за работу, и за подробное и последовательное ее изложение - попробую поступить так же, сохранив по возможности преемственность в построении программ, обозначениях и т.п.
Начал с простейших функций - ведение (альт-азимутальный астротрекер) и наведение джойстиком с несколькими скоростями - пока без функций GOTO с часами реального времени и без ИК пульта с экраном.
Это соответствует уровню сложности 2 в последовательности работы Игоря.
Однако, даже на этом начальном функциональном уровне, учитывая специфику альт-азимутала, счел необходимым внести изменения, в основном в режим ведения.

В системе Игоря (по крайней мере в версии 2) управление по обеим осям осуществляется одинаково - пошагово.
Хотя в подпрограмме stepper_step GOTO2.h переменная ipSteps предусматривает насколько шагов (по аналоги с библиотеками Stepper и AsselStepper), но фактически управление передается, когда необходимо сделать один шаг.
При этом в процессе вычислений и управления по одной оси фактически используется два разных параметра скорости.
Одна скорость:
double udRAStepsPMS=double(ulSPRA)/double(StarMSPS);
это фактически расчетная звездная скорость шаг/мсек, количество шагов на один оборот сетапа (конкретно по оси RA, с учетом параметров двигателя и редукции) деленное на количество миллисекунд в астросутках (86164091)
Умножаемая на время цикла выполнения программы LoopTime это дает количество шагов за цикл ( дробное, по умолчанию меньше 1 на цикл). Если сумма StepsNeed за несколько циклов становится больше 1 - выполняется шаг.

Время выполнения шага ( внутреннее delay в подпрограмме stepper_step) определяется другим скоростным параметром:
int iStepsXPS =  250;    //Полных шагов в секунду на двигателе X
который Игорь очевидно определял эмпирически (фактически он не связан с вычисляемой выше "звездной" скоростью)
или в микрошагах за секунду
int imStepsXPS = iStepsXPS*iXStepX; //Микрошагов в секунду на двигателе Х.

Использование внутреннего delay на каждом шаге - очевидно рудимент от библиотек Stepper и AsselStepper, хотя Игорь попытался от них избавиться. Задержка снижает производительность процессора, а использование двух параметров скоростей усложняет восприятие программы (из-за этого в теме Игоря было несколько недоразумений).
 К тому же, такой пошаговый алгоритм приемлем для небольших скоростей, когда один (микро)шаг нужно делать не быстрее чем несколько циклов программы. Это приемлемо для экваториала (звездная скорость) и для ведения по альтитуде в альт-азимутале (скорость гарантировано меньше звездной). Я так и сделал для альтитуды, при этом убрал внутреннюю задержку в (микро)шаге, работая только со счетчиком StepsNeed, делая вычисления по времени петли LoopTime и текущей скорости, которую вычисляю в каждом цикле на основе базовой скорости Yspeed0 (звездная с учетом редукции, микрошага и т.д. по оси Y)  с учетом данных от потенциометрических датчиков азимута и альтитуды (подключены к аналоговым входам вместе с джойстиком) .

При ведении по азимуту с приближением к зениту скорость поворота возрастает и может намного превысить стандартную звездно-экваториальную - в этом случае пошаговый алгоритм неприемлем.
ПОэтому для ведения по азимуту я применил команду tone, выдающую частоту в Герцах (не менее 33), а значение частоты пересчитываю в каждом цикле на основе базовой скорости Хspeed0 (звездная с учетом редукции, микрошага и т.п. по оси Х)  с учетом данных от потенциометрических датчиков азимута и альтитуды .
SW 130/650, МТО 11 СА, Юпитер 36, Юп 21, Canon 350, QHY5, Монти EQ-3,  EQ-1, ArduinoDrive
Водяной рефрактор "Бутылка",
Наблюдение кинетической аберрации света звезд

Оффлайн voisergАвтор темы

  • *****
  • Сообщений: 615
  • Благодарностей: 7
  • GhostBuster
    • Сообщения от voiserg
Предполагаю, что система может быть использована на любом альт-азимутале, в том числе на на Добовских платформах.
Я же ее разрабатываю для спектроскопа, в котором дифрешетка (150х150, 600 линия на мм) стоит в апертуре двух горизонтальных телескопов (один самодельный Ньютон 100/500, другой МТО 11 СА без штатной ЛБ, 100/750).
Свет на дифрешетку направляется от зеркала целостата, управляемого по альтитуде (шаговик с редуктором).
Все это хозяйство установлено на горизонтальной поворотной платформе, управляемой шаговиком с двумя последовательными червячными редукторами.
В приложении фото установки и калибровочный спектр натриевой лампы (оранжевый дуплет).

SW 130/650, МТО 11 СА, Юпитер 36, Юп 21, Canon 350, QHY5, Монти EQ-3,  EQ-1, ArduinoDrive
Водяной рефрактор "Бутылка",
Наблюдение кинетической аберрации света звезд

Оффлайн voisergАвтор темы

  • *****
  • Сообщений: 615
  • Благодарностей: 7
  • GhostBuster
    • Сообщения от voiserg
Даже для самых ярких звезд (Арктур, Вега, Бетельгейзе, Альдебаран и т.п.) спектрограммы экспонируются порядка 30 с (съемка на Canon 350 D, ISO 1600). Это накладывает требование к точности ведения - пару пикселей  (3"-5") по азимуту за время экспозиции (спектр растянут по горизонтали, линии эмиссии или поглощения вертикальные) По альтитуде точность может быть меньше, но не намного, чтобы спектр сильно не расплывался, теряя яркость.

Не знаю, насколько такие требования реализуемы системой  GOTO  даже на экваториале, не говоря уже об альт-азимуте (читал, что GOTO имеют в основном точность порядка минуты). Сам я до GOTO еще не добрался, даже в исполнении Игоря (вот привезут еще один комплект деталей - попробую его версии 3,4 и т.д. на своей  EQ3 c SW130/650).
Гид тоже в будущем.
Пока же пытаюсь выжать максимум из того простейшего, что уже сделал.
В частности, расчеты для ведения делаю по апроксимирующим функциям.
Для невысоко расположенных звезд (примерно до 45* по альтитуде, на восток, юг и запад) расчет скорости ведения по азимуту делаю приблизительно по апроксимирующей функции
W=W0*[1-0.5*(1-sin(γ))(1-cos(2α)]
где W0 - звездная скорость с учетом редукции, микрошага и т.д.
 γ - угол широты места наблюдения
α - азимут наблюдаемой звезды.
Для моих 48*с.ш. получаю
Wx=Wx0*[1-0.13(1-cos(2α)]
но для возможности подстраивать скорость более точно эмпирически беру коэффициент чуть больше
Wx=Wx0*[1-0.15(1-cos(2α)].
Угол азимута задаю потенциометром, подстраиваясь под реальную скорость.

По альтитуде напрашивалась апроксимирующая функция
Wy=Wy0*cos(β)*sin(α)*cos(γ);
где β - наблюдаемый угол звезды по альтитуде,
но я ее решил еще упростить, задав соответствующим потенциометром просто "коэффициент усиления" Kalt, получив
Wy=Wy0*Kalt*sin(α)*0,67.

Еще раз замечу, что такое решение - самое грубое начальное приближение для невысоких целей.
Но при определенной настойчивости и сноровке мне и на таком "дрын-столе" удалось получить спектры от указанных выше звезд и Венеры (с ней даже проще - экспозиция порядка 1с).
Буду рад, если такая система будет полезной для визуала на Добовских платформах.


Конечно, для серьезного астро и спектро-фото эту систему нужно совершенствовать, особенно для ведения в области зенита и Полюса.
Как это сделано на профессиональном уровне (например на БТА) - я не знаю, но предполагаю, что систему расчетов, применимую на ЭВМ и ПЭВМ, на ардуиновском контроллере все равно придется всячески урезать.
Можно попробовать рассчитать и занести в память контроллера "поле скоростей" с приемлемой дискретностью ячеек. Оттуда по наблюдаемым координатам звезды можно вытаскивать соответствующие значения скоростей ведения.
ПОдозреваю, что средствами одной АРдуины вряд ли удастся решить задачу - придется связываться с компьютером либо для гидирования, либо для более точного расчета скоростей 
« Последнее редактирование: 25 Сен 2017 [17:07:53] от voiserg »
SW 130/650, МТО 11 СА, Юпитер 36, Юп 21, Canon 350, QHY5, Монти EQ-3,  EQ-1, ArduinoDrive
Водяной рефрактор "Бутылка",
Наблюдение кинетической аберрации света звезд

Оффлайн voisergАвтор темы

  • *****
  • Сообщений: 615
  • Благодарностей: 7
  • GhostBuster
    • Сообщения от voiserg
Наткнулся на характеристики альт-азимутальной монтировки 1,2 м телескопа Коуровской обсерватори (уральского университета)
http://astro.ins.urfu.ru/1.2-meter

Скорость наведения по азимуту и высоте    до 3°/сек
Рабочий диапазон высот H    20°<H<80°
СКО наведения при 15°<H<75°    <4"
СКО наведения при 75°<H<85°    <10"
СКО автоматического ведения дольше 10s    <0.15"
СКО автоматического ведения дольше 10m    <0.5"

Теперь еще бы посмотреть программу ведения с целью адаптации под Ардуино
Насколько я понял, это все делается в Екатеринбурге - так что Игорь Овчинников мог бы попробовать установить личный контакт.
« Последнее редактирование: 05 Окт 2017 [09:50:35] от voiserg »
SW 130/650, МТО 11 СА, Юпитер 36, Юп 21, Canon 350, QHY5, Монти EQ-3,  EQ-1, ArduinoDrive
Водяной рефрактор "Бутылка",
Наблюдение кинетической аберрации света звезд

Оффлайн voisergАвтор темы

  • *****
  • Сообщений: 615
  • Благодарностей: 7
  • GhostBuster
    • Сообщения от voiserg
Если кому интересно - в приложении скетч моего альт-азавра, составленный на основе скетчей Игоря Овчинникова GOTO 2 и 3 (контроллер с двумя драйверами шаговиков и джойстиком).

Главное отличие - использование для ведения по оси Х (азимут) команды tone, она же используется в режиме наведения джойстиком для обеих осей.
Для ведения по оси Y (альтитуда) используется (микро)шаговый мониторинг по расчетной скорости ведения Walt и времени выполнения цикла петли LoopTime, как у Игоря, но реализованный прямо в теле основной программы и без внутренней задержки в (микро)шаге.

В связи с этим нейтрализованы шаговые процедуры Stepper_step, Stepper_X_step, Stepper_Y_step  в  файле подкачки GOTO3.h - рабочими там остались только процедуры опроса джойстика (использую) и преобразования кодов (наверное нужно далее для LCD дисплея).
(Не забывайте в команде include "GOTO3.h..." проставить реальный адрес файла GOTO3.h в ВАШЕМ компьютере).

Как уже писал выше, скорости ведения вычисляются по аппроксимирующим функциям на основе базовых скоростей Хspeed0 и Yspeed0 и показаний потенциометрических датчиков, подключенных у меня к аналоговым входам А0 (Х-азимут) и А1 (коррекция скорости по Y-альтитуде).

В свою очередь, базовые скорости Хspeed0 и Yspeed0 должны вычисляться в самом начале по звездной скорости, числу шагов двигателя на оборот, полной редукции  и величине микрошага (у меня еще и дополнительный счетчик-делитель на 16 между выходом АРдуины и шаговым входом драйвера по оси Х - для обеспечения аргумента функции tone порядка 400, что дает приемлемую дискретность изменения скорости). Но похоже в формуле расчета есть баг с разрядностью и типом множителей - при моих значениях получается промежуточное переполнение и скорость вычисляется неправильно. К тому же расчетная величина - только ориентир, а беру чуть больше для увеличения диапазона подстройки скорости.  Поэтому нужная величина базовой скорости забита вручную.

Поскольку у меня были проблемы с равномерностью мкрошагов и нагреванием двигателей (при питании 12 В), применил дополнительную ШИМ-модуляцию драйверов А4988 по линиям ENABLE (с Ардуины у меня это ШИМ-выходы 5 и 6)
    analogWrite (Enable1, 50);
    analogWrite (Enable2, 100);
см. Универсальная система управления телескопом на Arduino
Возможно, это не правильно или не нужно - но мне существенно помогло.

Еще немного изменил алгоритм работы джойстика. Теперь небольшое отклонение джойстика вызывает микрошагание со скоростью вдвое больше чем при ведении, большое отклонение - в 4 раза больше, а переход в форсированный режим  (переход с микрошага на полный шаг)  происходит при одновременном отклонении джойстика со щелчком кнопки (при микрошаге ведения 8 получается скорость наведения в 8 и 32 раза больше).
Как уже писал выше, наведение по обеим осям производится командой tone (предпочтительна для больших скоростей). ПОскольку такую команду можно подавать только на один выход, "диагональное" наведение - по обеим осям сразу - вроде бы исключается, но на практике иногда как-то происходит (разбираться с этим багом не стал).
Нажатие кнопки без отклонения джойстика приводит к отключению (включению) трекинга, как было у Игоря.
Еще при любом действии джойстиком по монитору порта на компьютер выводятся показания потенциометров azim, alt и код операции джойстика (маска), что удобно при отладке и настройке на конкретную звезду по результатам предыдущих "стрельб".

Вот вроде бы и все изменения.
Если что не так - не взыщите - фактически это только макет для более продвинутой системы.
« Последнее редактирование: 07 Окт 2017 [21:13:31] от voiserg »
SW 130/650, МТО 11 СА, Юпитер 36, Юп 21, Canon 350, QHY5, Монти EQ-3,  EQ-1, ArduinoDrive
Водяной рефрактор "Бутылка",
Наблюдение кинетической аберрации света звезд

Оффлайн voisergАвтор темы

  • *****
  • Сообщений: 615
  • Благодарностей: 7
  • GhostBuster
    • Сообщения от voiserg
В околозенитную область с большими скоростями ведения на альт-азимутале пока не лезу.
Ведь даже профессиональные альт.телескопы не подходят к зениту ближе 5*, и мне пока такой экстрим не актуален.
Проще подождать, пока звезда пройдет зенит, чем ломать голову, как ее там провести на альт-азимутале.
А вот другую особую область, с малыми скоростями ведения - приполярную - уже не переждешь.
И просто стать колом там тоже нельзя - ведь даже Полярная звезда за минуту смещается на 10".
Мне для спектроскопии Полярной звезды пришлось написать спецпрограмульку на основе предыдущей.
В ней быстрое ведение по азимуту командой tone пришлось заменить медленным  пошаговым алгоритмом, как и по альтитуде.
В 10 раз уменьшил базовые значения скоростей Xspeed0, Yspeed0.
Для подстройки скорости ведения использовал те же два потенциометра, что и раньше (после считывания и масштабирования получаю величины umazim и umalt)  но поменял формулы расчета:
по азимуту Wx=Xspeed0*cos(umazim)
по альтитуде Wy=Yspeed0*sin(umazim)*umalt.
Настройку скоростей производил вручную, но с помощью телевика Юпитер 21 в комплекте с ЛБх2 (получил фокус 400 мм) и камерой QHY5 в режиме гида через Максим.
Цена пикселя получается такая же  как у Кенона 350 с Ньтоном 100/500 в моем спектроскопе (2,6" на пиксель)
В итоге получил вполне стабильное ведение с RMS менее 0,5 и довольно четкий спектр Полярной при экспозиции 1,5 мин, несмотря на присутствие легкой дымки во время съемки. По крайней мере, линии дублета натрия справа от изображения звезды проявились вполне отчетливо в обоих каналах спектроскопа (см.Приложение, на первом пятно звезды разлапистое из-за плохого качества зеркальца, но на качество спектра от дифрешетки оно не сказывается)
КОнечно, этот способ "заката солнца вручную" трудоемкий и не универсальный, для всеобщего применения рекомендовать не могу, но для моих целей пока устраивает (поделился опытом на случай если кого тоже "припечет").
« Последнее редактирование: 19 Окт 2017 [18:39:32] от voiserg »
SW 130/650, МТО 11 СА, Юпитер 36, Юп 21, Canon 350, QHY5, Монти EQ-3,  EQ-1, ArduinoDrive
Водяной рефрактор "Бутылка",
Наблюдение кинетической аберрации света звезд

Оффлайн Serj

  • *****
  • Сообщений: 4 533
  • Благодарностей: 94
    • Сообщения от Serj
    • Тверской астроклуб
А как вы собираетесь вычислять позицию телескопа, если для шагания используется Tone?
We have met the enemy and he is us.

Оффлайн voisergАвтор темы

  • *****
  • Сообщений: 615
  • Благодарностей: 7
  • GhostBuster
    • Сообщения от voiserg
Я не собираюсь вычислять позицию во время ведения или гидирования, и автоматизация поиска-наведения тоже не актуальна.
Мне важнее равномерная и точная скорость, чтобы на время экспозиции спектра - несколько минут - звезда не смещалась в кадре более чем на пару пикселей (особенно по горизонтали).
В этом смысле и наличие ошибки (смещения относительно положения в начале ведения-гидирования) мне не так важно, как стабильность ошибки во время экспозиции кадра.

В принципе же посчитать позицию по скорости в tone не сложнее, чем рассчитать скорость и количество шагов при пошаговом позиционировании в GO TO.
« Последнее редактирование: 20 Окт 2017 [07:42:32] от voiserg »
SW 130/650, МТО 11 СА, Юпитер 36, Юп 21, Canon 350, QHY5, Монти EQ-3,  EQ-1, ArduinoDrive
Водяной рефрактор "Бутылка",
Наблюдение кинетической аберрации света звезд

Оффлайн voisergАвтор темы

  • *****
  • Сообщений: 615
  • Благодарностей: 7
  • GhostBuster
    • Сообщения от voiserg
Еще раз спасибо Игорю Овчинникову - за энтузиазм при внедрении само-Ардуино.
https://astronomy.ru/forum/index.php/topic,143891.msg4528479.html#msg4528479
Его пример и инициатива сподвигли меня сделать собственные шаги на пути  "получения максимального функционала примитивными (минимально возможными) средствами электроники и программирования".
 
Напомню, что скорость трекинга у меня регулируется вручную потенциометрами по обеим осям.
Быстрое наведение осуществляется ардуиновским джойстиком (со своими потенциометрами) в "двухскоростном" режиме, как было у Iovch в старых версиях GOTO (его нынешнее 9-ступенчатое управление джойстиком считаю излишним из-за качества самого джойстика - слишком "грубый").
Переход с микрошага на полный шаг осуществляется постоянным нажатием на кнопку джойстика. Т.е. нажимаю кнопку и потом отклоняю джойстик в нужную сторону, при подходе к цели отпускаю кнопку (перехожу на микрошаг).
 Трекинг только на микрошагах.
ДЛя азимутала вначале поумничал с "апроксимирующими функциями" для скоростей, но потом перешел на "линейное программирование" - скорость пропорциональна повороту потенциометра, независимо по каждой оси.
Команду tone вначале тоже использовал для непрерывного трекинга по Х, но потом перешел на пошаговый трекинг по Х как и по У.
Шаги я не считаю, потому что ГоТу для меня не актуально (зато важно гидирование ).
По Х диапазон регулировки скорости от 0 до 2х-звездой  - это позволяет сопровождать звезды до высоты 70* , можно сделать и 3х-звездный максимум, чтобы подобраться ближе к зениту, но тогда точность уставки скорости меньше.
Направление меняется переключателем на цифровом входе.
По У диапазон скорости от -0,75 звездной через 0 до +0,75 звездной, т.е. направление меняется тем же потенциометром.

Таким образом в течение года производил "закат Солнц вручную" на своем альт-азимутальном БАССКе и SpectRoyal, ожидая пока Игорь доточит свой азимутал, подружив его с про-гайдерами.
Но в итоге решил сам сопрячь свой "универсал" с про-гайдерами через FTDI-коробочку Ионова - и результатом вполне доволен.
Кстати, у Ивана тоже есть "виртуальный пульт", управление  фотоаппаратом и фокусером  тоже реализовано.
Сейчас наверное имеет смысл переделать управление фокусером с "виртуального драйвера шаговика" на режим step-dir для сопряжения с готовыми драйверами шаговиков, за 12 лет прошедшие от создания "коробочки" они стали доступными и популярными.
Или предусмотреть переход на step-dir как опцию в настройках "виртуального пульта".
Но и без этого Спасибо Ивану за такую полезную и универсальную штуку, дающую доступ к про-гидам, а без ГОТУ с планетариями и каталогами я пока обойдусь.
« Последнее редактирование: 16 Окт 2018 [13:16:33] от voiserg »
SW 130/650, МТО 11 СА, Юпитер 36, Юп 21, Canon 350, QHY5, Монти EQ-3,  EQ-1, ArduinoDrive
Водяной рефрактор "Бутылка",
Наблюдение кинетической аберрации света звезд