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


A A A A Автор Тема: Универсальная система управления телескопом на Arduino  (Прочитано 91506 раз)

rigel14 и 1 Гость просматривают эту тему.

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
На форуме уже имеется несколько тем, посвященных системам управления монтировками, собранных на базе компонентов ардуино, в частности:

Простая система управления монтировкой на Arduino
Управление монтировкой на ШД Arduino + grbl
GOTO на Arduino практическая реализация "Импортозамещение"

   В результате изучения этих, и многих других источников, у меня сложилось четкое представление, как простейшим образом, на базе компонентов Ардуино можно решить некоторые вопросы, связанные с управлением телескопом.
   В настоящий момент собран действующий образец управляющего блока на базе Ардуино нано и драйверов А4988 для монтировки на шаговых двигателях с выходом для подключения электрофокусера, с индикацией координат наведения и прочей информации на двухстрочном LCD, с возможностью выполнения команд GOTO задаваемых с ПК, с возможностью подключения проводного устройства управления. Реализовано прямое подключение к плагину «управление телескопом» программы Stellarium. Разработано программное обеспечение для управления экваториальной и альт-азимутальной монтировками, масса тестовых программ. Собранная система управляет монтировкой из комплекта Деагостини «Собери свой телескоп» (аналог Astro-3, на фото), но система подойдет для управления любой монтировкой на шаговых двигателях. Пришло время собрать окончательный вариант изделия уже с беспроводным управлением. В процессе переборки системы, попытаюсь систематизировать и показать в этой теме, от простого к сложному, как простейшим образом, на Ардуино можно реализовать тот или иной функционал. Думаю, материал будет полезным.

Для удобства ориентирования в теме привожу здесь ссылки на основные моменты и программы:

Астротрекер или привод оси прямого восхождения, описание электронной части:
Универсальная система управления телескопом на Arduino
Астротрекер или привод оси прямого восхождения, скетч GOTO1 + драйвер ch341ser.zip:
Универсальная система управления телескопом на Arduino
Привод оси склонений и элемент управления (джойстик), ускорение перемещений, описание:
Универсальная система управления телескопом на Arduino
Привод оси склонений и элемент управления (джойстик), ускорение перемещений, скетч GOTO2:
Универсальная система управления телескопом на Arduino
Система управления экваториальной монтировкой с функциями GOTO, описание и скетч GOTO3:
Универсальная система управления телескопом на Arduino
Прикручиваем управление фокусером к джойстику
Универсальная система управления телескопом на Arduino
Подключаем LCD, описание электронной части:
Универсальная система управления телескопом на Arduino
Подключаем LCD, скетч GOTO4 + драйвер LCD 1602:
Универсальная система управления телескопом на Arduino
Скетч GOTO4 с автоопределением и автоюстировкой джойстика:
Универсальная система управления телескопом на Arduino
Пульт ИК часть 1 (Slave), описание электронной части:
Универсальная система управления телескопом на Arduino
Пульт ИК часть 1 (Slave), скетч GOTO5SLAVE, программа настройки и драйвер пульта ИК:
Универсальная система управления телескопом на Arduino
Пульт ИК часть 2 (Master), описание электронной части и скетч GOTO5MASTER:
Универсальная система управления телескопом на Arduino
Шаговый электрофокусер, описание электронной части:
Универсальная система управления телескопом на Arduino
Шаговый электрофокусер, скетч GOTO6MASTER.zip:
Универсальная система управления телескопом на Arduino
Версии GOTO6MASTER и GOTO6SLAVE для штатного ИК пульта ардуино:
Универсальная система управления телескопом на Arduino
Энергонезависимые часы реального времени:
Универсальная система управления телескопом на Arduino
Скетч для управления альт-азимутальной монтировкой GOTO7MASTER:
Универсальная система управления телескопом на Arduino


Ссылка на яндекс-диск со всеми материалами и стабильными версиями: https://yadi.sk/d/f1jTO1AohCtbz
« Последнее редактирование: 15 Авг 2019 [15:40:58] от Deimos »
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Онлайн Deimos

  • Модератор
  • *****
  • Сообщений: 16 437
  • Рейтинг: +266/-10
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Show only replies by Deimos
    • Белорусская любительская астрономическая сеть
А какие характерные времена для отработки пауз?
Никаких пауз в цикле исполнения не предусмотрено. Применен совершенно другой подход, не знаю, делал ли кто-нибудь так: unsigned long iMilisec - по сути виртуальное время монтировки. В непрерывном цикле исполнения iMilisec постоянно сравнивается с реальным временем milisec() и принимается решение о целесообразности шага. Если все расчетные коэффициенты правильные - обеспечена абсолютная (?) точность ведения. Примерный расчет показывает, что при моих коэффициентах, между шагами получается  около 63 мс.
О, тем более концепция хорошо ложится на работу с кооперативной многозадачностью и обслуживания большого количества периферии.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

alex AMK

  • Гость
О, тем более концепция хорошо ложится на работу с кооперативной многозадачностью и обслуживания большого количества периферии.
так может  уже возможно реализовать алгоритм того же МЕАД LX200 с GPS ?  есть же GPS модули для ардуино. а так же можно всевозможные датчики  установить - гироскоп, датчик улгла положения по обеим осям , компас -модуль(такой для ардуино тоже есть).  LX200 компьютер очень небольшой по памяти и производительности. теже чипы, что и в ардуино и ........ в   NexStar GT Celestron монтировках. Остается самое сложное - визуализация информации на индикаторах и "дружба" с Аскомом. Разрешите такой вопрос, как механику подгоняли к программе?

Оффлайн Александр (AnDom)

  • *****
  • Сообщений: 8 252
  • Рейтинг: +242/-2
    • Show only replies by Александр (AnDom)
Ёшкин кот!!! Эдак и в космос улетим :)
Я видел М51 в Серегин 20"РК!!! :)

Онлайн sleeping07

  • ***
  • Сообщений: 142
  • Рейтинг: +15/-0
    • Show only replies by sleeping07
Никаких пауз в цикле исполнения не предусмотрено. Применен совершенно другой подход, не знаю, делал ли кто-нибудь так: unsigned long iMilisec - по сути виртуальное время монтировки. В непрерывном цикле исполнения iMilisec постоянно сравнивается с реальным временем milisec() и принимается решение о целесообразности шага. Если все расчетные коэффициенты правильные - обеспечена абсолютная (?) точность ведения. Примерный расчет показывает, что при моих коэффициентах, между шагами получается  около 63 мс.
Я примерно так же делал - когда в цикле накапливается время, больше или равное расчетной длине шага, делается этот шаг, но при этом абсолютной точности не получить, потому как по чуть чуть, но запаздываем из-за разных накладных расходов - работы других процедур. Даже потом делал коррекцию длины следущего шага с учетом отставания на предыдущих - в этом случае результат уже приближался к абсолютному, потому как саморегулировался, и корректировал даже отставания, большие длины шага, догоняя. Но в итоге при переходе к гидированию коррекцию убрал за ненадобностью.
ТАЛ-1 моторизованный, астротрекер самодельный с гидированием Ra+Dec;
Bushnell Rangemaster 7x35, Swift Audubon 804 8.5x44 FMC, Canon IS 10x30

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Пытаюсь запустить скетч GOTO2, на своём Arduino UNO - возникли вопросы по правке скетча и, соответственно, цоколёвке.
#define ENABLE_XYZ_PIN 8 //Enable X,Y,Z pin - куда идёт провод/провода с 8-го контакта ардуины?
С контактов #define DX_FORCE_PIN и #define DY_FORCE_PIN провода идут на соответствующие контакты MS драйверов, верно?
ENABLE_XYZ_PIN 8 идет на пин ENABLE всех драйверов 4988 (соединены разводкой шилда). Если движки крутятся, то не надо заморачиваться этим контактом, лишь бы не замкнут был на землю.  DX_FORCE_PIN и #define DY_FORCE_PIN - эти идут на незаземленные перемычками контакты MS драйверов X и Y соответственно.
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
так может  уже возможно реализовать алгоритм того же МЕАД LX200 с GPS ?  есть же GPS модули для ардуино. а так же можно всевозможные датчики  установить - гироскоп, датчик улгла положения по обеим осям , компас -модуль(такой для ардуино тоже есть).  LX200 компьютер очень небольшой по памяти и производительности. теже чипы, что и в ардуино и ........ в   NexStar GT Celestron монтировках. Остается самое сложное - визуализация информации на индикаторах и "дружба" с Аскомом. Разрешите такой вопрос, как механику подгоняли к программе?
Датчиков разных можно будет подключить, потому и тему обозвал как "универсальная система". В ардуиновские датчики положения/ускорения/углов не верю, т.к. они не рассчитаны на требуемую точность. А вот модуль GPS может очень полезным оказаться для азимутального скетча - там широта и долгота места расположения используется, кроме этого GPS датчик должен очень точно время выдавать. NexStar communication protocol - очень скоро в этой теме в ардуину будем запихивать. Визуализация тоже будет. Насчет дружбы с Аскомом - подумаю, предполагаю, что не сложно будет под Аском настроить. Механику по оси ПВ брал из старого лазерного принтера, по оси склонения - от сканера, редукторы из этих же устройств. Особенно хороши косые шестеренки лазерного принтера - замечательно работают. Если интересна моя механическая часть - скажите - по - подробнее сфотографирую. Программа под любую механику настраивается вот этими коэффициентами:
 
int iStepsDX  =   48;    //Полных шагов на 1 оборот двигателя X
int iStepsXPS =  200;    //Полных шагов в секунду на двигателе X
int iXStepX   =   16;    //Кратность шага драйвера X
double dRDX   = 1780.69; //Передаточное число редуктора X
int iStepsDY  =   96;    //Полных шагов на 1 оборот двигателя Y
int iStepsYPS =  250;    //Полных шагов в секунду на двигателе Y
int iYStepX   =    4;    //Кратность шага драйвера Y
double dRDY   = 3168.00; //Передаточное число редуктора Y
int iStDX = -1;      //Исходное направление шага двигателя Х
int iStDY =  1;      //Исходное направление шага двигателя Y
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Ёшкин кот!!! Эдак и в космос улетим :)
Так мы и так практически уже в космосе :)!
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Онлайн Deimos

  • Модератор
  • *****
  • Сообщений: 16 437
  • Рейтинг: +266/-10
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Show only replies by Deimos
    • Белорусская любительская астрономическая сеть
Берите например GPS-датчик Ublox Neo 6M, там можно сигнал 1PPS снимать.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн huch

  • *****
  • Сообщений: 607
  • Рейтинг: +12/-0
    • Show only replies by huch
Ардуино уно подойдет в качестве обработчика команд беспроводного пульта на ИК. Да и собственно, это то же самое, что Ардуино нано, чип то один и тот же! Да и мой код под нее переделать элементарно, номера пинов только в заголовке поменять.
Я ковырял библиотеки работы с ИК пультами. Функции опроса кода нажатой клавиши работают долго. Много времени занимает прием последовательности импульсов. Бороться с этим очень трудно. Заставить контроллер делать что-то еще в паузах у меня не получилось. Но отказываться от ИК не хочется. Уж очень удобно получается

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Управление на ИК обязательно сделаем, только для этого надо будет вторую Ардуино задействовать, т.к. библиотеки управления пультом ИК используют прерывания и это ставит крест на использование их в основном цикле исполнения: все функции времени сбиваются, я проверял это. Радует одно: стандартный датчик ИК Ардуино откликнулся на все пульты, что в доме лежат! А их не мало, значит, практически под любой пульт можно скетч написать.
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн Oleg1601

  • *****
  • Сообщений: 898
  • Рейтинг: +28/-0
    • Show only replies by Oleg1601
Чёт у меня не пошло... моторы еле-еле крутятся, режим ведения вообще не запустился.
Телескоп: Рефрактор ахромат 102/1000, ньютон DS DTF 130/1000 (MOD), монтировка DS-EQ3/AT-5 (MOD)

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Олег! Что-то с разводкой контактов не так, у меня все бодро работает. Жена даже испугалась, когда белье развешивала на балконе, а я что-то настраивал! Сейчас табличку разводки моего шилда прикреплю, проверяй.
« Последнее редактирование: 04 Июл 2016 [13:11:48] от Iovch »
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн Oleg1601

  • *****
  • Сообщений: 898
  • Рейтинг: +28/-0
    • Show only replies by Oleg1601
int iStepsDX  =   48;    //Полных шагов на 1 оборот двигателя X
int iStepsXPS =  200;    //Полных шагов в секунду на двигателе X
А тут точно не наоборот?
Как бы за секунду мотор полный оборот не сделает, а количество шагов за секунду  почемуто выходит больше, чем количество шагов за полный оборот мотора...
Телескоп: Рефрактор ахромат 102/1000, ньютон DS DTF 130/1000 (MOD), монтировка DS-EQ3/AT-5 (MOD)

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Это правильные значения для моего (весьма посредственного) движка 48 шагов на оборот и 200 шагов в секунду. Но рекомендую ставить двигатели с числом шагов на оборот 200 и до 1000 шагов в сек. Получается рабочая скорость ротора ШД в моем случае около 4 оборотов в сек, а например для такого ШД NEMA17 http://wexon.ru/sites/default/files/tuotekuvat_pdf/catalogue_ametek_mae_november_2012-rus-5.pdf нужно ставить int iStepsDX  =   200 и попробовать int iStepsXPS =  1000 (5 оборотов в сек). Если крутящего момента будет маловато (пропуски шагов), то iStepsXPS уменьшать до 300-500. А вообще 4-6 оборотов в секунду на роторе шаговых двигателей - это норма для них.
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Чтобы закрыть тему астротрекера и перейти непосредственно к описанию GOTO для экваториальной монтировки, прикладываю улучшенный вариант скетча GOTO2 который позволяет всего-то-лишь управлять монтировкой посредством джойстика и включать трекинг. Здесь использованы некоторые битовые операции языка С, реализовано одновременное и двухскоростное управление обеими осями. Одно замечание: диагональные движения, когда включаются оба двигателя происходят заметно медленнее, чем при работе каждого двигателя по-отдельности. Связано это с тем, что когда они работают вместе, то шаги происходят последовательно: шаг ШД1, затем шаг ШД2, ШД1, ШД2 и т.д. Соответственно, работа каждого ШД существенно замедляется.  Программно можно было бы с этим по-бороться, но не нахожу в этом большого смысла.
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн Oleg1601

  • *****
  • Сообщений: 898
  • Рейтинг: +28/-0
    • Show only replies by Oleg1601
Залил свежевыложенный GOTO2_2.  У меня Arduino UNO R3 и драйвера на А3967.
Результат - идёт одновременное вращение по обеим осям - по оси Y - по часовой стрелке, по оси Х - против. Если зажать кнопку джойстика - движки останавливаются, НО начинается биение.
При управлении от джойстика быстрое (полношаговое) вращение мотора есть только на оси Х, а по оси Y - только медленное, да ещё в придачу с ней, одновременно, вращается ось Х.

Ранее, при заливке скетча GOTO2 работало всё чётко - при небольшом наклоне ручки джойстика - малая скорость, при большом - большая скорость (включался полношаговый режим).
Телескоп: Рефрактор ахромат 102/1000, ньютон DS DTF 130/1000 (MOD), монтировка DS-EQ3/AT-5 (MOD)

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Олег! Здесь высветились сразу два момента настройки джойстика в скетче GOTO2_2. Во-первых, чувствительность нулевого положения джойстика, регулируется функцией int AskJOY() в файле GOTO2.h Вот эти строки регулируют ось Х:

  if(iA1>=25 && iA1 < 490)    { iRetValue=iRetValue |  1; } // Микрошаг X+
  if(iA1>520 && iA1<=1000)  { iRetValue=iRetValue |  4; } // Микрошаг X-

Эти строки регулируют ось У:

  if(iA2>=25  && iA2 < 490)   { iRetValue=iRetValue |  2; } // Микрошаг Y+
  if(iA2>510  && iA2<=1000) { iRetValue=iRetValue |  8; } // Микрошаг Y-

Надо сделать следующее:

Если при включении и неподвижном джойстике монтировка движется в сторону Х+:

Уменьшать значение 490, ставить 480 и менее в строке  if(iA1>=25 && iA1 < 490)    { iRetValue=iRetValue |  1; } // Микрошаг X+

Аналогично, если движение в сторону У+

Уменьшать значение 490, ставить 480 и менее в строке  if(iA2>=25  && iA2 < 490)   { iRetValue=iRetValue |  2; } // Микрошаг Y+

Если при включении и неподвижном джойстике монтировка движется в сторону Х-, У-:

Увеличивать значения соответственно 520 и 510 в строках:

 if(iA1>520 && iA1<=1000)  { iRetValue=iRetValue |  4; } // Микрошаг X-
 if(iA2>510  && iA2<=1000) { iRetValue=iRetValue |  8; } // Микрошаг Y-

К сожалению, джойстики ардуино достаточно "топОрные" и расчетное напряжение на входе контактов измерительных контактов А1 и А2 ардуино нано (1024/2=512 УЕ) может сильно отличаться от экземпляра к экземпляру.
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Второй момент. Одинаковая скорость по какой-либо оси вне зависимости от наклона джойстика. Как раз при написании скетча GOTO2_2 эту проблему и решал. В принципе, я ее решил, но не исключаю, что в каких-то уникальных частных случаях эта скорость будет одинакова. Тогда в функциях int Force_X(boolean bForce) или int Force_Y(boolean bForce) соответствующей оси следует уменьшить соответственно величины:

  imStepsXPS = 500; //Микрошагов в секунду на двигателе X
  imStepsYPS = 500; //Микрошагов в секунду на двигателе Y

Здесь 500 заменить на 400 или 300 - тем самым замедлится выполнение микрошагов.
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Еще внимательно прочитал сообщение Олега, понял, что отсутствие увеличения приращения скорости при наклоне джойстика может быть вызвано также самим джойстиком. Опять же регулируем функцией int AskJOY() в файле GOTO2.h Только меняем другие пороговые значения:

 if(iA1>520 && iA1<=1000)  { iRetValue=iRetValue |  4; }  // Микрошаг X-
 if(iA1>1000)                        { iRetValue=iRetValue | 64; } // Полный шаг X-

 if(iA2>510  && iA2<=1000) { iRetValue=iRetValue |  8; } // Микрошаг Y-
 if(iA2>1000)              { iRetValue=iRetValue | 128;}         // Полный шаг Y-

Следует заменить 1000 на 950 например во всех строках, касающихся требуемой оси.
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 195
  • Рейтинг: +107/-0
    • Show only replies by Iovch
Протестировал сегодня GOTO2_2 по звезде по имени Солнце примерно так работает https://vk.com/video217033998_456239023 Юпитер 37А + пленка AstroSolar Photo в прямой проекции на матрицу Levenhuk T-510NG.
Ньютон SW150/750, Рефрактор триплет 100/365, CG4_GoTo_H/M, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut