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


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

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

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

  • *****
  • Сообщений: 1 287
  • Благодарностей: 124
    • Сообщения от 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_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
А какие характерные времена для отработки пауз?
Никаких пауз в цикле исполнения не предусмотрено. Применен совершенно другой подход, не знаю, делал ли кто-нибудь так: unsigned long iMilisec - по сути виртуальное время монтировки. В непрерывном цикле исполнения iMilisec постоянно сравнивается с реальным временем milisec() и принимается решение о целесообразности шага. Если все расчетные коэффициенты правильные - обеспечена абсолютная (?) точность ведения. Примерный расчет показывает, что при моих коэффициентах, между шагами получается  около 63 мс.
О, тем более концепция хорошо ложится на работу с кооперативной многозадачностью и обслуживания большого количества периферии.
У природы нет плохой погоды, у неё просто на нас аллергия.

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

alex AMK

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

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

  • *****
  • Сообщений: 9 037
  • Благодарностей: 288
    • Сообщения от Александр (AnDom)
Ёшкин кот!!! Эдак и в космос улетим :)
Я видел М51 в Серегин 20"РК, а М42 в 650мм ньютон!!! :)

Оффлайн sleeping07

  • ***
  • Сообщений: 149
  • Благодарностей: 16
    • Сообщения от sleeping07
Никаких пауз в цикле исполнения не предусмотрено. Применен совершенно другой подход, не знаю, делал ли кто-нибудь так: unsigned long iMilisec - по сути виртуальное время монтировки. В непрерывном цикле исполнения iMilisec постоянно сравнивается с реальным временем milisec() и принимается решение о целесообразности шага. Если все расчетные коэффициенты правильные - обеспечена абсолютная (?) точность ведения. Примерный расчет показывает, что при моих коэффициентах, между шагами получается  около 63 мс.
Я примерно так же делал - когда в цикле накапливается время, больше или равное расчетной длине шага, делается этот шаг, но при этом абсолютной точности не получить, потому как по чуть чуть, но запаздываем из-за разных накладных расходов - работы других процедур. Даже потом делал коррекцию длины следущего шага с учетом отставания на предыдущих - в этом случае результат уже приближался к абсолютному, потому как саморегулировался, и корректировал даже отставания, большие длины шага, догоняя. Но в итоге при переходе к гидированию коррекцию убрал за ненадобностью.

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

  • *****
  • Сообщений: 1 287
  • Благодарностей: 124
    • Сообщения от 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_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 287
  • Благодарностей: 124
    • Сообщения от 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_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 287
  • Благодарностей: 124
    • Сообщения от Iovch
Ёшкин кот!!! Эдак и в космос улетим :)
Так мы и так практически уже в космосе :)!
Ньютон SW150/750, Рефрактор триплет 100/365_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

Оффлайн xd

  • *****
  • Сообщений: 17 977
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
Берите например GPS-датчик Ublox Neo 6M, там можно сигнал 1PPS снимать.
У природы нет плохой погоды, у неё просто на нас аллергия.

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

Оффлайн huch

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

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

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

Оффлайн Oleg1601

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

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

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

Оффлайн Oleg1601

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

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

  • *****
  • Сообщений: 1 287
  • Благодарностей: 124
    • Сообщения от 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_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

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

Оффлайн Oleg1601

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

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

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

  • *****
  • Сообщений: 1 287
  • Благодарностей: 124
    • Сообщения от 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_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 287
  • Благодарностей: 124
    • Сообщения от 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_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

  • *****
  • Сообщений: 1 287
  • Благодарностей: 124
    • Сообщения от 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_H/M, CG4_GoTo_H/M, Datyson T7C, Levenhuk T510NG, Canon 450Da, БП2 10х50 Berkut

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

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