Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.starlab.ru/archive/index.php/t-28861.html
Дата изменения: Unknown
Дата индексирования: Mon Apr 11 02:29:56 2016
Кодировка: Windows-1251
Простая система управления монтировкой на Arduino [Архив] - Общая Астрономическая Конференция

PDA

Просмотр полной версии : Простая система управления монтировкой на Arduino


Oleg1601
22.03.2016, 23:30
На создание этой устройства меня сподвигла мысль собрать простую и достаточно удобную систему управления своей монтировкой DS EQ-3 с помощью микроконтроллера. Хотелось сделать ее такой, чтобы можно было с комфортом визуалить и заниматься планетным астрофото. Поскольку пайкой заниматься не хотелось, взгляд упал на популярную аппаратную платформу Ардуино. Из ее модулей и было решено собирать электрическую часть. Все электронные блоки и моторы были приобретены мною на интернет-портале eBay.
Что касается пульта управления, то была идея сделать его простым в управлении, чтобы не делать "распальцовку" по кнопкам пульта, как на кодовом замке подъезда, а чтобы было пропорциональное управление джойстиком, то есть, чем дальше наклоняем ручку джойстика от центрального положения, тем выше скорость поворота монтировки на соответствующей оси. Что собственно и было реализовано при написании скетча.

В итоге, получилась простая система практически ручного управления, безо всяких го-то и прочего. Прошу заметить, что я не специалист в области программирования, и с написанием скетча для Ардуино, а также сделать некоторые расчеты и детали, мне помогли другие люди, за что им огромное СПАСИБО, особенно пользователю с ником D_a_r_k_man. :vo
Возможно в будущем добавится еще что-то, что позволит автоматизировать какие-либо процессы, но пока имеем то, что имеем.

Система выполняет следующие функции:


Управление обоими осями с помощью шаговых двигателей;
Управление скоростью поворота с помощью джойстика;
Режим ведения с астрономической скоростью для одной (полярной) оси.


Принципиальная схема системы:
https://s7.postimg.org/vv6ds5bo7/9.jpg (https://postimg.org/image/vv6ds5bo7/)


Описание работы программы:
Тут все просто. После подачи питания монтировка переходит в режим дистанционного управления по командам от джойстика. Направление движения, а также скорость, задается ручкой джойстика. Возможно движение трубы телескопа одновременно по двум осям, правда скорость в этом случае ниже, чем поочередное движение по осям.
Для того, чтобы включить режим ведения со звездной скоростью для наблюдения за выбранным объектом (по оси RA), нужно нажать на кнопку джойстика. При этом загорается красный светодиод индикации на пульте. Во время работы этого режима повороты трубы, с помощью джойстика, отключаются. Чтобы вернуться к первоначальному управлению поворотами трубы телескопа нужно повторно нажать кнопку джойстика.

Итак, из чего все состоит:
Сердце всей системы - это, конечно же, плата Arduino UNO R3, собранная на микропроцессоре ATmega328P CH340.
Сигналы управления с нее поступают на два драйвера EasyDriver V44, собранные на микросхемах А3967, которые подходят к любым биполярным шаговым двигателям на ток до 750 мА.
По умолчанию (без установки перемычек) драйверы EasyDriver уже работают в микрошаговом режиме 1/8, который позволяет получать на моторе, делающего 200 полных шагов/оборот, 1600 микрошагов/оборот. Этот режим и был использован в работе устройства. Напряжение питания (от 6 до 30 В и ток 2А; в моем случае 28 В) на драйвера подается с внешнего блока питания по кабелю.
Транзисторы, и особенно микросхемы драйверов во время работы существенно нагреваются - поэтому, в обязательном порядке, пришлось придумать их охлаждение. На корпуса этих радиоэлементов были приклеены радиаторы, а напротив самих плат драйверов, в крышку корпуса, врезан компьютерный кулер охлаждения.
Блок управления собран в корпусе из отжившего свой век компьютерного CD-рома. В нем размещены платы микроконтроллера, драйверов, стабилизатор на 12 вольт для питания кулера охлаждения (на фото его еще нет), а также элементы коммутации.


https://s30.postimg.org/rm49tir7x/01.jpg (https://postimg.org/image/rm49tir7x/) https://s30.postimg.org/q8h8byhcd/4.jpg (https://postimg.org/image/q8h8byhcd/) https://s30.postimg.org/nsfey3z9p/8.jpg (https://postimg.org/image/nsfey3z9p/)


Все разъемы управления и питания, а также индикация, вынесены на фронтальную панель корпуса - это 2 розетки под вилки RJ-11 4P-4C для подключения моторов и одна розетка под вилку RJ-45 8P-8C для подключения пульта ДУ. Здесь же находится 5мм гнездо для подачи напряжения питания (28 вольт) на драйверы ШД, кнопка включения/выключения, светодиод индикации включения, а также выходы платы микроконтроллера Ардуино - гнездо подачи напряжения питания (5 вольт) и розетка mini USB для подключения к ПК. Если Ардуино подключено к ПК через mini USB, то 5В через отдельное гнездо можно не подавать.
Блок управления с пультом соединяется кабелем Path Сord с разъемами RJ-45 на концах.
Сигналы управления моторами передаются через кабели RJ-11 используемые в телефонной связи. Плюс этих кабелей, кроме того, что они оснащены удобными миниатюрными разъемами в том, что они совершенно не замерзают на морозе и остаются гибкими - не 'дубеют'.

Проводной пульт управления собран в корпусе вышедшего из строя радиотелефона Siemens. Отверстия оставшиеся от удаленных кнопок, дисплея и прочих внутренностей были заполнены клеем 'холодная сварка'. После того, как клей высох, корпус шлифовался и красился.

https://s27.postimg.org/y8k6p3n1b/6.jpg (https://postimg.org/image/y8k6p3n1b/) https://s27.postimg.org/lv7ci6xcv/7.jpg (https://postimg.org/image/lv7ci6xcv/) https://s27.postimg.org/g8azkpuu7/5.jpg (https://postimg.org/image/g8azkpuu7/)

Внутри корпуса пульта деталей разместилось совсем немного - плата с джойстиком, светодиод индикации режима 'ведения со звездной скоростью' и разъем RJ-45 для подключения кабеля. Ручка джойстика вынесена наружу корпуса через удачно расположенное отверстие вызывного динамика телефона - нужно было только удалить его решетку.
Режим 'Стоп' включается в 'нейтральном', среднем, положении ручки джойстика, т.е., не трогаем джойстик - телескоп не движется.
Слежение со звездной скоростью (горит красный светодиод на пульте), включается при нажатии на среднюю кнопку джойстика.

Oleg1601
22.03.2016, 23:43
Продолжение:

Повороты осей монтировки осуществляют биполярные шаговые двигатели Nema17 42х42мм, марка 17HS2408, рассчитанные на ток 600мА. Вращение от них на червячные приводы монтировки передается через одноступенчатые редукторы, выполненные из двух пар металлических шестеренок. Малые шестерни, диаметром 10мм, имеют по 30 зубьев. Большие шестерни, диаметром 50мм, имеют по 168 зубьев. Передаточное отношение у таких пар шестерен редуктора получается - 5.6, что с червячными парами (по оси DEK - 88 зубьев, на RА - 138 зубьев) даст передаточное отношение 1:492.8 и 1:772.8 соответственно.

https://s9.postimg.org/r7aqdxw17/P1110773.jpg (https://postimg.org/image/r7aqdxw17/) https://s9.postimg.org/6ofu8vi3v/1.jpg (https://postimg.org/image/6ofu8vi3v/)


Количество шагов для установки в скетч (для обеспечения звездной скорости) рассчитывалось так (в расчетах даны цифры монтировки DS EQ-3):
1. Сначала считаем количество импульсов на оборот оси RA монтировки
- передаточное отношение основной червячной пары (138) умножается на передаточное число редуктора (5.6), умножается на число шагов ШД на полный оборот, и еще умножается на кратность микрошага.
138 х 5.6 х 200 х 8 = 1 236 480

2. Период обращения Земли - 23 часа 56 минут 4 секунды, это будет 1 градус в 4 минуты времени, или же 15 угловых секунд в секунду времени.
Пересчитываем в градусах, минутах и секундах, на сколько угловых секунд или их долей RA будет смещаться на один тик шаговика (учитывая микрошаг, редуктор и саму ЧП), делим 15" на получившееся число. Это и будет кол-во импульсов в секунду.

360њ это 360 х 60 = 21 600 угловых минут или 21 600 х 60 = 1 296 000 угловых секунд.
Значит, с такой редукцией, на таком микрошаге, получается чуть больше одной угловой секунды на один микрошаг шаговика, а именно 1 296 000/1 236 480 = 1.048136645962733 угловых секунды на один "тик" на входе STEP драйвера. Это и есть разрешающая способность монтировки по ведению.
То есть, для 15 угловых секунд в секунду времени нужно сделать 15/1.048136645962733 = 14.31 импульса.


Скетч и библиотека AccelStepper 1.48 в одном архиве:
Чтобы скетч скомпилировался, надо скопировать библиотеку AccelStepper в папку libraries в директории, в которой у вас хранятся скетчи для Arduino.

Ссылка для скачивания:
http://www.fayloobmennik.net/5971490

Фото монтировки после доработки:

https://s10.postimg.org/9clvebrdx/3.jpg (https://postimg.org/image/9clvebrdx/) https://s10.postimg.org/ms8w3rzvp/2.jpg (https://postimg.org/image/ms8w3rzvp/)

D_a_r_k_man
23.03.2016, 01:06
Приятно видеть свои железяки в работе:D
Молодец, завел. А я уже думал писать, спрашивать, работает ли все это дело, или забросил)))

Oleg1601
23.03.2016, 09:11
Нет-нет, не забросил. Просто сейчас пытаюсь к этому делу приспособить энкодеры, да и времени свободного маловато, вот сразу и не опубликовал свою конструкцию. Еще раз СПАСИБО за помощь!!!

саня барада
23.03.2016, 10:14
Хорошо получилось!

Oleg1601
23.03.2016, 17:04
Кстати, совсем недавно нашел интересную разработку ГО-ТО на Ардуино
http://telescope.deagostini.ru/forum/viewtopic.php?f=7&t=892&sid=9229670aa3e944e712d8728c8ee4abfd&start=100

D_a_r_k_man
23.03.2016, 18:49
del

Oleg1601
25.03.2016, 16:40
del
Что сие означает?

D_a_r_k_man
25.03.2016, 19:49
Что сие означает?

Удалил сообщение, там была ссылка на эту тему (http://www.astronomy.ru/forum/index.php/topic,137688.0.html), но я ее почитал, заметил там тебя, решил что смысла сюда ее писать нет)

Oleg1601
25.03.2016, 22:20
Ясно ;)

саня барада
26.03.2016, 09:06
Олег, eqmod для управления не подойдет (вроде тоже на отладке), или только на ардуино?

Oleg1601
26.03.2016, 10:21
Олег, eqmod для управления не подойдет (вроде тоже на отладке), или только на ардуино?
На счет eqmod ничего сказать не могу - не знаю, не пробовал... :-k

Rain Dog
26.03.2016, 12:20
eqmod это было бы совсем замечательно. Тогда и гидировать можно будет! :)

Oleg1601
27.03.2016, 09:25
Для наглядности... Используемый скетч для прошивки:

/*

* Для управления ШД в программе используется библиотека AccelStepper 1.48
* http://www.open.com.au/mikem/arduino/AccelStepper/index.html
*
*/

#include <AccelStepper.h>

// Назначение входов/выходов
// Шаговые двигатели

#define MOTOR1_DIR_PIN 8
#define MOTOR2_DIR_PIN 11

#define MOTOR1_STEP_PIN 9
#define MOTOR2_STEP_PIN 10

#define MOTOR1_SPR 1600 // Кол-во шагов на 1 оборот вала двигателя
#define MOTOR2_SPR 1600

#define MOTOR1_MAX_SPEED 8000.0 // Максимальная скорость моторов в режиме 1
#define MOTOR2_MAX_SPEED 8000.0

#define MODE2_MAX_SPEED 14,35 // Скорость в режиме 2 Звездная скорость

// Органы управления и индикации

#define MOTOR1_JOY_IN 0 // Ось Y джойстика
#define MOTOR2_JOY_IN 1 // Ось X джойстика
#define BTN1 0 // Кнопка РЕЖИМ 2 СТАРТ/СТОП
#define LED_MODE 1 // Индикатор режима:
// 0=РЕЖИМ 2 (светодиод горит)
// 1=РЕЖИМ 1 (светодиод не горит)


int nMotor1SP, nMotor2SP; // Задание направления от джойстика
int nMode2SP; // Задание скорости для работы в РЕЖИМ 2
int nMotor1MV, nMotor2MV; // Задание скорости после ограничителя
int nModeControllerState = 0; // Текущее состояние конечного автомата ModeController
int nMode = 0; // Текущий номер режима
// 0=РЕЖИМ 1. Управление от джойстика
// 1=РЕЖИМ 2. Движение с заданной скоростью по одной оси
bool bBTN1Value; // Состояние кнопки BTN1


AccelStepper stpMotor1(AccelStepper:: DRIVER, MOTOR1_STEP_PIN, MOTOR1_DIR_PIN);
AccelStepper stpMotor2(AccelStepper:: DRIVER, MOTOR2_STEP_PIN, MOTOR2_DIR_PIN);

void setup() {

phInit();

}



void loop() {

static int nBTN1Counter;

phGetCommand();

switch (nModeControllerState) {


case 0:
if (bBTN1Value == false) {
nBTN1Counter++;
} else {
nBTN1Counter = 0;
}

if ((bBTN1Value == false) && (nBTN1Counter > 10)) {
nModeControllerState = 1;
nBTN1Counter = 0;
}
break;

case 1:
if (bBTN1Value==true) {
nModeControllerState = 2;
nMode = 1;
digitalWrite(LED_MODE, 0);
}
break;

case 2:
if (bBTN1Value == false) {
nBTN1Counter++;
} else {
nBTN1Counter = 0;
}

if ((bBTN1Value == false) && (nBTN1Counter > 10)) {
nModeControllerState = 3;
nBTN1Counter = 0;
}
break;

case 3:
if (bBTN1Value==true) {
nModeControllerState = 0;
nMode = 0;
digitalWrite(LED_MODE, 1);
}
break;
default:
break;
}


switch (nMode) {

case 0:
phMotorRunMode1();
break;

case 1:
phMotorRunMode2();
break;
default:
break;
}
}

void phInit()
{
pinMode(MOTOR1_DIR_PIN, OUTPUT);
pinMode(MOTOR2_DIR_PIN, OUTPUT);
pinMode(MOTOR1_STEP_PIN, OUTPUT);
pinMode(MOTOR2_STEP_PIN, OUTPUT);

pinMode(BTN1, INPUT_PULLUP);
pinMode(LED_MODE, OUTPUT);

nMotor1MV = 0;
nMotor2MV = 0;
stpMotor1.setMaxSpeed(MOTOR1_MAX_SPEED);
stpMotor2.setMaxSpeed(MOTOR2_MAX_SPEED);
stpMotor1.setAcceleration(10.0);
stpMotor2.setAcceleration(10.0);
stpMotor1.setSpeed(0);
stpMotor2.setSpeed(0);

digitalWrite(LED_MODE, 1);

return;
}

void phGetCommand()
{
bBTN1Value = digitalRead(BTN1);

nMotor1SP = analogRead(MOTOR1_JOY_IN) - 512; // Ось Y джойстика
nMotor2SP = analogRead(MOTOR2_JOY_IN) - 512; // Ось X джойстика
nMode2SP = MODE2_MAX_SPEED * 1; // Задание скорости режима 2 Умножить на -1 если требуется реверс

if ((nMotor1SP < -40) || (nMotor1SP > 40)) {

nMotor1MV = map(nMotor1SP, -512, 511, -1*MOTOR1_MAX_SPEED, MOTOR1_MAX_SPEED);
} else {
nMotor1MV = 0;
}
nMotor1MV = nMotor1MV * 1; // Поменять на -1 если требуется реверс



if ((nMotor2SP < -40) || (nMotor2SP > 40)) {

nMotor2MV = map(nMotor2SP, -512, 511, -1*MOTOR2_MAX_SPEED, MOTOR2_MAX_SPEED);
} else {
nMotor2MV = 0;
}
nMotor2MV = nMotor2MV * 1; // Поменять на -1 если требуется реверс

}

void phMotorRunMode1()
{
stpMotor1.setSpeed(nMotor1MV); // Задаем скорость для мотора 1
stpMotor2.setSpeed(nMotor2MV); // Задаем скорость для мотора 2

stpMotor1.runSpeed(); // Выполняем движение с заданной скоростью
stpMotor2.runSpeed();
}

void phMotorRunMode2()
{
stpMotor1.setSpeed(nMode2SP); // Задаем скорость для мотора 1
stpMotor1.runSpeed(); // Выполняем движение с заданной скоростью
}

саня барада
28.03.2016, 08:05
Испытания монтировки были?

Oleg1601
28.03.2016, 13:39
Испытания монтировки были?


Конечно-да, зачем бы я стал выкладывать нерабочую модель.
Как-нибудь запишу видео работы и выложу здесь.

саня барада
01.04.2016, 15:05
А что с энкодерами, как в работе себя показали?

Oleg1601
02.04.2016, 10:17
А что с энкодерами, как в работе себя показали?
Сами энкодеры норм, но в целом еще все очень сыро и недоработано - пока хвалиться нечем.

Oleg1601
08.04.2016, 14:49
Выложил видео демонстрации работы своей системы
https://www.youtube.com/watch?v=aZ73CHkdziw

саня барада
08.04.2016, 15:10
Выложил видео демонстрации работы своей системы
https://www.youtube.com/watch?v=aZ73CHkdziw
Отличная работа:vo

Oleg1601
08.04.2016, 15:37
Отличная работа:vo
Спасибо ;)

D_a_r_k_man
08.04.2016, 16:58
Оно живое!!!:D:D
Поздравляю тебя)

ASheff
08.04.2016, 17:24
Круто! :vo

Oleg1601
08.04.2016, 18:12
Всем спасибо!