ВНИМАНИЕ! На форуме начался конкурс - астрофотография месяца ДЕКАБРЬ!
0 Пользователей и 1 Гость просматривают эту тему.
// Определим входящие ножки гид-порта#define pinDecPlus 2#define pinDecMinus 3#define pinRaPlus 4#define pinRaMinus 5// Определим ножки подключения ШД#define motorDecDir 14#define motorDecStep 15#define motorRaDir 16#define motorRaStep 17// Переменные для задержки#define pauseStep 10int pauseMs;int pauseUs;int pauseCor;void setup() { // Инициализация портов pinMode(pinRaPlus, INPUT); pinMode(pinRaMinus, INPUT); pinMode(pinDecPlus, INPUT); pinMode(pinDecMinus, INPUT); pinMode(motorRaDir, OUTPUT); pinMode(motorRaStep, OUTPUT); pinMode(motorDecDir, OUTPUT); pinMode(motorDecStep, OUTPUT); digitalWrite(motorRaDir, HIGH); digitalWrite(motorRaStep, LOW);}void makeStep(char motorStep, char motorDir, bool dir) { if (pauseMs == 5) pauseCor = pauseCor + pauseMs; // учтём время, потраченное на гид, чтобы скорректировать паузу на шаге по Ra digitalWrite(motorDir, dir); // установим направление вращения ШД digitalWrite(motorStep, HIGH); // даём сигнал на шаг delayMicroseconds(pauseStep); // делаем задержку, чтобы ШД шагнул digitalWrite(motorStep, LOW); // снимаем сигнал шаг delay(pauseMs); // выдерживаем паузу между шагами в ms if (pauseUs > 0) delayMicroseconds(pauseUs); // выдерживаем паузу между шагами в us}void loop() { // Опрос гид-порта pauseMs = 5; pauseCor = 0; pauseUs = 0; if (digitalRead(pinRaPlus) == LOW) makeStep(motorRaStep, motorRaDir, HIGH); if (digitalRead(pinRaMinus) == LOW) makeStep(motorRaStep, motorRaDir, LOW); if (digitalRead(pinDecPlus) == LOW) makeStep(motorDecStep, motorDecDir, HIGH); if (digitalRead(pinDecMinus) == LOW) makeStep(motorDecStep, motorDecDir, LOW); // Делаем очередной шаг по Ra pauseMs = 41 - pauseCor; pauseUs = 10; makeStep(motorRaStep, motorRaDir, HIGH);}
Можно ли использовать камеру попроще, типа переделанной вебки без гид-порта, подавая упр сигнал через ПК ?
Я примерно понял, как рассчитывается период (исходя из передаточных чисел червычного редуктора тонких движений, ременной передачи, числа полюсов ШД), но будет лучше, если вы поясните. Т.к. железо у всех разное, считать каждый будет под себя.
Рассчитывается очень просто. 5) За сутки (86164 секунды) ось RA должна совершить 1 полный оборот. Но у нас общее передаточное число 292.5, соответственно ШД за 1 сутки должен сделать ровно 292.5 шага.
Но это без учёта времени, необходимого на выполнение операций самим микроконтроллером (присваивания, опрос гид порта и тд). Я не стал искать точных данных по времени исполнения каждой команды, а просто подогнал эту задержку опытным путём. вышло 41.10мс.
*оборота
Можно пойти другим путем. Инициализировать таймер-счетчик, так чтобы на него подавалась тактовая частота, деленная, скажем, на 64. Записать в него рассчитанный коэфф, равный половине времени шага ШД. Подпрограмма по прерыванию таймера будет инвертировать вывод порта для подачи на контроллер ШД. Все это будет абсолютно независимо от операций в основном цикле.
А коробочку Ивана Ионова лучше тогда встроить в схему, чтобы не плодить сущностей :-)
И кстати, можно ещё добавить кнопочный пульт, т.к. оси микродвижений с подключенными ШД будут недоступны.
ЗЫ: Посмотрел сейчас на схему, там не нужно контроллеры ШД запитывать отдельно от 5 В? Вывод второй снизу справа?
Если же цель сделать простой часовик для визуала, таймер окажется хорошей альтернативой моему варианту.
можно поступить проще - в Ардуинке уже есть USB порт, и при установленном драйвере, она уже определяется в системе как СОМ порт. достаточно передавать в него управляющие сигналы. А на Ардуинке чуть изменить прошивку - анализировать кроме гид-порта еще и SerialPort, и выполнять соответствующие команды. Кстати, так можно и goto реализовать
Можно пойти другим путем. Инициализировать таймер-счетчик, так чтобы на него подавалась тактовая частота, деленная, скажем, на 64.
Денис, могу всё передать тебе на изучение, если охота зомби оживлять
Я уже накропал это в ассемблере, по наивности считая, что часовика достаточно для астрофото.
В длиннофокусные аппараты с часовиком вполне можно снимать Луну и Планеты.
Сложность ещё в том, что Полярная мне недоступна (с балкона).
// Определим ножки подключения ШД#define motorDecDir 14#define motorDecStep 15#define motorRaDir 16#define motorRaStep 17
# Определить X_STEP_BIT 2/UNO цифровой Булавки 2# Определить Y_STEP_BIT 3/UNO цифровой Булавки 3# Определить Z_STEP_BIT 4/UNO цифровой Булавки 4# Определить X_DIRECTION_BIT 5/UNO цифровой Булавки 5# Определить Y_DIRECTION_BIT 6/UNO цифровой Булавки 6# Определить Z_DIRECTION_BIT 7/UNO цифровой Булавки 7
// Определим ножки подключения ШД#define motorDecDir 6#define motorDecStep 3#define motorRaDir 5#define motorRaStep 2
// Определим входящие ножки гид-порта#define pinDecPlus НОЖКА Y+#define pinDecMinus НОЖКА Y-#define pinRaPlus НОЖКА Х+#define pinRaMinus НОЖКА Х-
// Делаем очередной шаг по Ra pauseMs = 41 - pauseCor;
// Делаем очередной шаг по Ra pauseMs = 92 - pauseCor;
pauseUs = 10;