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


A A A A Автор Тема: СЭП ДВ-43  (Прочитано 2318 раз)

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

Оффлайн dont_panic

  • Модератор
  • *****
  • Сообщений: 6 207
  • Благодарностей: 496
  • Александр
    • Сообщения от dont_panic
Re: СЭП ДВ-43
« Ответ #20 : 28 Авг 2022 [20:44:54] »
Это по сути часовой привод для визуала
7х35

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

  • ***
  • Сообщений: 116
  • Благодарностей: 19
  • Мне нравится этот форум!
    • Сообщения от Singacs
Re: СЭП ДВ-43
« Ответ #21 : 29 Авг 2022 [06:51:51] »
Я немного не понял для чего эта платформа добу.
1. Она наводит на объекты с помощью установленных моторов?
2. Если это для астрофотографии она гидируется камерой гидом?
Лишь позволяет удерживать длительное время наблюдаемый объект в поле зрения. Астрофото здесь идёт побочным эффектом без претензий на высокое качество.

Оффлайн sky-man

  • *****
  • Сообщений: 8 186
  • Благодарностей: 564
  • На форуме с 2007 г.
    • Instagram: astrophoto_skyman
    • DeepSkyHosting: id874
    • Сообщения от sky-man
Re: СЭП ДВ-43
« Ответ #22 : 29 Авг 2022 [09:00:49] »
Понял, интересная штука. Явно может пригодится при наблюдении планет на больших увеличениях. Ну и дипскай когда не убегает из поля зрения тоже приятно.
Бинокуляр из двух труб SW 102/500 GoTo
Мои астрофото deepskyhosting.com/id874
Астрономы Казани https://vk.com/astronomikazani

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

  • ***
  • Сообщений: 116
  • Благодарностей: 19
  • Мне нравится этот форум!
    • Сообщения от Singacs
Re: СЭП ДВ-43
« Ответ #23 : 29 Авг 2022 [14:40:44] »
Понял, интересная штука. Явно может пригодится при наблюдении планет на больших увеличениях. Ну и дипскай когда не убегает из поля зрения тоже приятно.
Да, визуал дипская тянет отлично! Отходил в одну из ночей на 20 минут, оставив в поле зрения окуляра треугольник звёзд близко к краям. По возвращении к телескопу в окуляре разницы почти не заметил.

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

  • ***
  • Сообщений: 116
  • Благодарностей: 19
  • Мне нравится этот форум!
    • Сообщения от Singacs
Re: СЭП ДВ-43
« Ответ #24 : 12 Мар 2023 [18:03:00] »
Новая электроника СЭП ДВ-43

В ноябре прошлого года я стал почти перед каждыми наблюдениями сталкиваться с неработоспособностью управляющей электроники моей платформы. Тогда один портативный аккумулятор питал как Arduino Uno с периферией, так и драйвер DRV8825 с двигателем через повышающий преобразователь. Экстренные манипуляции с резистором драйвера приводили платформу в чувство, но лишь до следующего раза. Пока в конце концов драйвер не сдался окончательно.

В новогодние праздники я, глядя на снятую коробочку с электроникой платформы, поймал за хвост идею напиться от безысходности взяться за теорию, просмотреть каждый элемент схемы на предмет работоспособности в принципе и его характеристик. В первую очередь, я отметил тот факт, что аккумулятор выдавал с каждого порта USB по 5.1V/2.6A. Затем обратил внимание на то, что повышающий преобразователь, обладая, как выяснилось, мощностью 3W, на выходе давал примерно 20V, что отражалось на диком падении силы тока. Собирая платформу и электронику, я лишь обрадовался, что всё работает, и над пределами работоспособности, её устойчивостью не задумался.

Это всё предыстория. Дальше начались подбор более мощных компонентов, эксперименты с аккумуляторами, закупка новых элементов, пайка, сборка новой коробки для электроники и конструирование начинки. Сегодня могу представить новый вариант управляющего блока.

Из блока во внешний отсек вынесен информационный дисплей и индикаторы в формате "светофор". В основном отсеке нашлось место двум одинаковым аккумуляторам, один из которых питает Arduino Uno, ИК-приёмник для взаимодействия с пультом, дисплей и "светофор", а второй предназначен для питания драйвера. Чтобы не поднимать всякий раз крышку для подключения кабелей к аккумуляторам, вставил в крышку кнопки для отдельного включения питания от каждого аккумулятора. К основанию блока приделаны крепления, прочно удерживающие аккумуляторы "в седле".



В качестве драйвера двигателя был выбран TB6600 с мощностью до 200W, который потребовал для себя много пространства, поэтому радиатор пришлось отпилить и вернуть продавцу вынести наружу, что смотрится довольно красиво. В данном драйвере настройка тока проводится не вращением резистора отвёрткой, что успело очень надоесть в DRV8825, а DIP-переключателями в соответствии с памяткой на корпусе драйвера. Ими же настраивается и микрошаг. Очень удобно. Вместе с повышающим преобразователем мощностью 100W рисуется, безусловно, совсем иная картина, внушающая уверенность в запасе прочности схемы. Для настройки выходного напряжения преобразователя в крышке проделано маленькое отверстие до резистора, настраиваемого отвёрткой.



Второй аккумулятор потребовался, чтобы можно было использовать лишь один USB-порт в каждом аккумуляторе, что позволяет "выжать" из него, о чём свидетельствует его спецификация, не стандартные 5V, а до 12V, что затем сказывается на малом проседании после преобразования силы тока, необходимой драйверу. Но для получения желаемого напряжения оставалось вооружить схему QC-триггером. На изображениях ниже такой триггер встроен в USB-тестер Fnirsi FNB48P. Данный тестер выгодно отличается от множества иных защитным корпусом и наличием Bluetooth. Последнее позволяет, не открывая крышку блока, настроить с помощью смартфона выходное напряжение тестера, ибо памяти на последний используемый режим работы у него нет или пока не обнаружено.
До такого замечательного USB-тестера был также опробован неплохой вариант со связкой триггера Qualcomm QC2.0/3.0 и USB-тестера (для контроля напряжения) SunShine 302A, представленный на последней фотографии. Задействуется лишнее устройство, зато у такого триггера есть память на напряжение.
Для относительного упорядочивания возросшего количества проводов к крышке приделаны скобы, внутри которых эти провода теперь и проходят. Есть прекрасный вариант с миниатюрным гибким кабель-каналом, если кому интересно, дам ссылку.





При первой же возможности проведу испытания под звёздным небом!
« Последнее редактирование: 13 Мар 2023 [09:48:54] от Singacs »

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

  • ***
  • Сообщений: 116
  • Благодарностей: 19
  • Мне нравится этот форум!
    • Сообщения от Singacs
Re: СЭП ДВ-43
« Ответ #25 : 13 Мар 2023 [17:32:00] »
По неоднократным просьбам публикую скетч Arduino с комментариями:

#include <LiquidCrystal_I2C.h>
#define _LCD_TYPE 1  // для работы с I2C дисплеями
#include <LCD_1602_RUS_ALL.h>
LCD_1602_RUS lcd(0x27, 16, 2);
#include <IRremote.h>

// пины драйвера
#define PIN_STEP 5
#define PIN_DIR 3
#define PIN_EN 4
// пины светофора
#define PIN_GREEN 8
#define PIN_YELLOW 9
#define PIN_RED 10
// пин для ИК-приёмника
IRrecv irrecv(7);
decode_results results;
// пины для концевых кнопок
#define PIN_SB 11
#define PIN_FB 12
// задержка импульсов (speed)
long delay_sp = 1200;

// для вращения мотора без блокирования (micros вместо delay)
uint32_t timer;
int motor_state = HIGH;

// состояния кнопок
int SB_state = 0, FB_state = 0;

// основные идентификаторы
int prev_button, // показатель предыдущей нажатой кнопки (далее - ПНК)
spin = 1; // показатель вращения (1: звёздное, -1: возвратное)
bool onoff_i = 0, // показатель статуса процесса (1: включён, 0: выключен)
sp_set = 0, // показатель режима задания скорости (1: включён, 0: выключен)
point = 0; // наличие точки при задании скорости (1: есть, 0: нет)
int pt_count;

const int sp_len = 10;
char second[16]="";
char c_delay_sp[sp_len];
char c_temp_sp[sp_len]="";

void setup() {
  // инициализация дисплея
  lcd.init(); lcd.backlight();
  lcd.setCursor(0, 0); lcd.print("Запуск СЭПДВ-43");
  lcd.setCursor(0, 1); lcd.print("...");
  delay(3000);
  lcd.clear();
  li2s("Режим <Ожидание>");
  // инициализация светофора
  digitalWrite(PIN_GREEN, LOW);
  digitalWrite(PIN_RED, LOW);
  digitalWrite(PIN_YELLOW, HIGH);

  irrecv.enableIRIn();
  pinMode(PIN_SB, INPUT);
  pinMode(PIN_FB, INPUT);
  // режим для STEP, DIR и EN как OUTPUT
  pinMode(PIN_STEP, OUTPUT);
  pinMode(PIN_DIR, OUTPUT);
  pinMode(PIN_EN, OUTPUT);
  digitalWrite(PIN_EN, LOW);
  // режим для светофора как OUTPUT
  pinMode(PIN_GREEN, OUTPUT);
  pinMode(PIN_RED, OUTPUT);
  pinMode(PIN_YELLOW, OUTPUT);
}

void loop() {
  SB_state = digitalRead(PIN_SB);
  FB_state = digitalRead(PIN_FB);
  if (irrecv.decode(&results)) { // если поступает ИК-сигнал
    switch (results.value) {
      case 0xFF5AA5: // <right>
        lcd.clear();
        li2s("Режим <Работа>");
        right();
        onoff_i = 1; // запуск процесса
        prev_button = 0xFF5AA5; // ПНК: <right>
        break;
      case 0xFF10EF: // <left>
        lcd.clear(); p_f("Режим <Возврат", "к старту>");
        left ();
        onoff_i = 1; // запуск процесса
        prev_button = 0xFF10EF; // ПНК: <left>
        break;
      case 0xFF38C7: // <OK>
        if (sp_set == 0) {
          if (onoff_i == 1) onoff_i = 0; else onoff_i = 1; // смена статуса процесса
          prev_button = 0xFF38C7; // ПНК: ON/OFF
          onoff(); 
        } else if (sp_set == 1) {
          char* point = strchr(c_temp_sp, '.');
          char c_fl_val[10] = "";
          if (point != NULL) { 
            strncpy(c_fl_val, c_temp_sp, point - c_temp_sp);
            int pt_val = atoi(++point);
            delay_sp = atol(c_fl_val) * 1000 + pow(10,3-pt_count) * pt_val;
          } else delay_sp = atol(c_temp_sp) * 1000;
          sp_set = 0;
          c_temp_sp[0] = 0;
          onoff();
        }
        break;
      case 0xFF18E7:  // <up>
        if (delay_sp <= 100) {
          delay_sp += 1;
        } else if (delay_sp <= 1000) {
          delay_sp += 10;
        } else if (delay_sp <= 10000) {
          delay_sp += 100;
        } else if (delay_sp <= 100000) {
          delay_sp += 1000;
        } else delay_sp += 10000;
        onoff();
        break;
      case 0xFF4AB5: // <down>
        if (delay_sp <= 100) {
          delay_sp -= 1;
        } else if (delay_sp <= 1000) {
          delay_sp -= 10;
        } else if (delay_sp <= 10000) {
          delay_sp -= 100;
        } else if (delay_sp <= 100000) {
          delay_sp -= 1000;
        } else delay_sp -= 10000;
        onoff();
        break;
      case 0xFF6897: // <*>
        if (sp_set == 0) {
          sp_set = 1;
          point = 0;
          pt_count = 0;
          lcd.clear(); p_f("Ввод скорости:", "");
        } else if (sp_set == 1) {
          sp_set = 0;
          c_temp_sp[0] = 0;
          onoff();
        }
        break;
      case 0xFFA25D: // <1>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "1"));
          if (point == 1) pt_count++;
        }
        break;
      case 0xFF629D: // <2>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "2"));
          if (point == 1) pt_count++;
        }
        break;   
      case 0xFFE21D: // <3>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "3"));
          if (point == 1) pt_count++;
        }
        break;
      case 0xFF22DD: // <4>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "4"));
          if (point == 1) pt_count++;
        }
        break;
      case 0xFF02FD: // <5>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "5"));
          if (point == 1) pt_count++;
        }
        break;
      case 0xFFC23D: // <6>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "6"));
          if (point == 1) pt_count++;
        }
        break;
      case 0xFFE01F: // <7>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "7"));
          if (point == 1) pt_count++;
        }
        break;
      case 0xFFA857: // <8>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "8"));
          if (point == 1) pt_count++;
        }
        break;
      case 0xFF906F: // <9>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "9"));
          if (point == 1) pt_count++;
        }
        break;
      case 0xFF9867: // <0>
        if (sp_set == 1 && pt_count < 3) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "0"));
          if (point == 1) pt_count++;
        }
        break;
      case 0xFFB04F: // <#>
        if (point == 0 && sp_set == 1) {
          lcd.clear(); p_f("Ввод скорости:", strcat(c_temp_sp, "."));
          point = 1;
        }
        break;
    }
    irrecv.resume(); // сброс ИК и новое прослушивание
  }
  else { // при отсутствии ожидаемого сигнала выполнить повтор операции согласно инструкции (ПНК пульта или концевой кнопки)
    /* если нет концевых кнопок, данный участок кода закомментировать
    if (SB_state == LOW) {
      lcd.clear();
      li2s("Режим <Работа>");
      prev_button = 0xFF5AA5;
    }
    if (FB_state == LOW) {
      lcd.clear(); p_f("Режим <Возврат", "к старту>");
      prev_button = 0xFF10EF;
    }
    */
    switch (prev_button) {
      case 0xFF5AA5: // <right>
        right();
        break;
      case 0xFF10EF: // <left>
        left();
        break;
    }
  }
 
}

void right() { // звёздное вращение
 
  spin = 1;
  digitalWrite(PIN_GREEN, HIGH);
  digitalWrite(PIN_RED, LOW);
  digitalWrite(PIN_YELLOW, LOW);

  digitalWrite(PIN_DIR, LOW);

  if (micros()-timer >= delay_sp) {
    timer = micros();
    if (motor_state == HIGH) {
      motor_state = LOW;
      } else {
        motor_state = HIGH;
      }
    digitalWrite(PIN_STEP, motor_state);
  }
 
}

void left() { // возвратное вращение

  spin = -1; 
  digitalWrite(PIN_GREEN, LOW);
  digitalWrite(PIN_RED, HIGH);
  digitalWrite(PIN_YELLOW, LOW);

  digitalWrite(PIN_DIR, HIGH);
  digitalWrite(PIN_STEP, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_STEP, LOW);
  delayMicroseconds(10);
   
}

void onoff() { // запуск/остановка процесса
  if (onoff_i == 0) { // если статус "выключен", активировать жёлтый фонарь и не питать драйвер
    digitalWrite(PIN_GREEN, LOW);
    digitalWrite(PIN_RED, LOW);
    digitalWrite(PIN_YELLOW, HIGH);
    digitalWrite(PIN_STEP, LOW);
    lcd.clear();
    li2s("Режим <Ожидание>");
  }
  if (onoff_i == 1) { // если статус "включён"
    if (spin == 1) {
      lcd.clear();
      li2s("Режим <Работа>");
      right();
      prev_button = 0xFF5AA5;
    }
    else {
      lcd.clear();
      p_f("Режим <Возврат", "к старту>");
      left ();
      prev_button = 0xFF10EF;
    }
  }
}

void p_f (char* first, char* second) {
  lcd.setCursor(0, 0); lcd.print(first);
  lcd.setCursor(0, 1); lcd.print(second);
}

// Перевод численного значения скорости в строку для отображения на экране
void li2s (char* regime) {
 
  int fl = floor (delay_sp / 1000);
  char c_fl[sp_len];
  itoa(fl, c_fl, DEC);
  int fl_len = strlen(c_fl);
 
  int pt = delay_sp - fl * 1000;
  char c_pt[sp_len];
  itoa(pt, c_pt, DEC);
  int pt_len = strlen(c_pt);
 
  char buff[16] = "";
  strcat(buff, c_fl);

  if (pt == 0) {
    strcat(buff, "мс");
  } else {
    strcat(buff, ".");
    switch (pt_len) {
      case 1: // <right>
        strcat(buff, "00"); strcat(buff, c_pt);
        break;
      case 2: // <right>
        strcat(buff, "0"); strcat(buff, c_pt);
        break;
      case 3: // <right>
        strcat(buff, c_pt);
        break;
    }
    strcat(buff, "мс");
  }
 
  lcd.setCursor(0, 0); lcd.print(regime); 
  lcd.setCursor(0, 1); lcd.print("Скор.: "); lcd.setCursor(7, 1); lcd.print(buff);
}

Онлайн lobzon

  • *****
  • Сообщений: 916
  • Благодарностей: 105
  • Мне нравится этот форум!
    • Сообщения от lobzon
Re: СЭП ДВ-43
« Ответ #26 : 13 Мар 2023 [18:34:52] »
По неоднократным просьбам публикую скетч Arduino с комментариями:
Большое спасибо!
Доб Аполлон 9,6"(1:6), Svbony Sv503 102/714, Synta BK909AZ3, Б7х30
МБС-1, МБИ-3

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

  • ***
  • Сообщений: 116
  • Благодарностей: 19
  • Мне нравится этот форум!
    • Сообщения от Singacs
Re: СЭП ДВ-43
« Ответ #27 : 15 Мар 2023 [01:50:33] »
Публикую также схему управления, соотносящуюся с программным кодом, приведённым двумя постами выше.


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

  • ***
  • Сообщений: 116
  • Благодарностей: 19
  • Мне нравится этот форум!
    • Сообщения от Singacs
Re: СЭП ДВ-43
« Ответ #28 : 26 Мар 2023 [08:13:43] »
Неба пока нет. А тем временем электроника снова в знакомых ей стенах.
Моя "оговорочка" насчёт распила радиатора перестала быть таковой: верхняя часть платформы упиралась одним из винтов в эту часть драйвера почти в крайнем положении, поэтому был выбран самый простой и накарканный вариант решения проблемы!  :D

Оффлайн AlexanderF

  • *****
  • Сообщений: 1 384
  • Благодарностей: 66
  • На пути
    • Сообщения от AlexanderF
Re: СЭП ДВ-43
« Ответ #29 : 31 Мар 2023 [18:09:10] »
Краткий вопрос - интересно, подобную конструкцию можно ли усиливать? Например, для трубы весом 80-90кг?
+7-9восемь5-923-пять9-пять9
(кликните для показа/скрытия)

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

  • ***
  • Сообщений: 116
  • Благодарностей: 19
  • Мне нравится этот форум!
    • Сообщения от Singacs
Re: СЭП ДВ-43
« Ответ #30 : 13 Апр 2023 [15:15:17] »
Краткий вопрос - интересно, подобную конструкцию можно ли усиливать? Например, для трубы весом 80-90кг?
Думаю, вполне можно. Но это и свои центр тяжести, размеры платформы, диаметры несущих валов и, вероятно, мотор.