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


A A A A Автор Тема: Управление телескопом с помощью GO-TO  (Прочитано 34481 раз)

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

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #160 : 22 Дек 2005 [12:21:20] »
Стало быть сигналы PWM RA, PWM DEC сначала преобразуются в напряжение с помощью активного фильтра?
Точно, так и есть Денис.

Оффлайн Skyangel

  • *****
  • Сообщений: 1 041
  • Благодарностей: 21
    • Сообщения от Skyangel
    • Personal web-page
Re: Управление телескопом с помощью GO-TO
« Ответ #161 : 30 Дек 2005 [19:34:23] »
Вопрос  возможно не в тему, есть ли возможность прочитать содержимое pic16c54 если стоит бит защиты?

Суворов Владимир

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #162 : 30 Дек 2005 [19:45:18] »
A зачем это нужно, проще написать свое!
Да и голова обрадуется

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #163 : 30 Дек 2005 [19:56:14] »
Вопрос  возможно не в тему, есть ли возможность прочитать содержимое pic16c54 если стоит бит защиты?
с битом защиты невозможно, во всяком случае у меня не получилось

С наступающим Новым Годом !  :)
Желаю всем успехов и счастья в Новом Году.  :)
« Последнее редактирование: 30 Дек 2005 [19:58:27] от Andreichk »

Оффлайн Anton

  • *****
  • Сообщений: 7 275
  • Благодарностей: 77
    • Сообщения от Anton
Re: Управление телескопом с помощью GO-TO
« Ответ #164 : 12 Янв 2006 [02:30:02] »
Во!
Маньякам гоутистам нарыл мегассылку:
http://www.epanorama.net/links/motorcontrol.html

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #165 : 12 Янв 2006 [13:29:44] »
На всякий случай занёс в избранное :)

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #166 : 19 Янв 2006 [13:44:02] »
Новый драйвер к полёту готов :) разгон до 1.5°  в сек
« Последнее редактирование: 19 Янв 2006 [16:54:41] от Andreichk »

Онлайн Дядя Вова

  • *****
  • Сообщений: 8 088
  • Благодарностей: 95
    • Сообщения от Дядя Вова
Re: Управление телескопом с помощью GO-TO
« Ответ #167 : 19 Янв 2006 [13:48:39] »
Управляется через RS232 от Ccontrol
А это не медленновато будет?
(Vixen ED80+Canon300Da, 9x50+QHY5)+EQ6upg
Meade ETX-90PE

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #168 : 19 Янв 2006 [13:50:46] »
там скорость связи 57600

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #169 : 19 Янв 2006 [14:02:09] »
function goto_RA()// РАЗГОН
{
   out_ra=out_ra-0.1;    -   Может сюда формулу какую-нибудь вставить для формирования S--кривой ?  ???
if out_ra<=8 out_ra=8;
   plm.out(0,out_ra);// Выход PWM
}//----------------
//####################################################

function goto_RA_TOPMO3()
{
   for out_ra=out_ra...1000
 {
   out_ra=out_ra+0.2;
   plm.out(0,out_ra);
 }
}//----------------
//####################################################

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #170 : 19 Янв 2006 [16:53:29] »
Исправленный драйвер

/******************************************************/
/*                                                                                            */
/*  File:       Driver.c     for    Steppermotor                                   */
/*  Description: Main-Modul.                                                         */
/*              Starts the external 20 MHz Quartz and flashes the Port  */
/*               Port 1.x on GLYN EVBR8C/13 Carrier Board                  */
/*                                                                                           */
/*  Date:       22.01.2006                                                          */
/*                                                                                           */
/******************************************************/                 

#include "sfr_r813.h" 
void timer(void)
{   /*-------------------------------------------------
    -  Change on-chip oscillator clock to Main clock  -
    -------------------------------------------------*/
    prc0 = 1;           /* Protect off */
    cm13 = 1;           /* Xin Xout */
    cm15 = 1;           /* XCIN-XCOUT drive capacity select bit : HIGH */
    cm05 = 0;           /* Xin on */
    cm16 = 0;           /* Main clock = No division mode */
    cm17 = 0;
    cm06 = 0;           /* CM16 and CM17 enable */
    asm("nop");         /* Waiting for stable of oscillation */
    asm("nop");
    asm("nop");
    asm("nop");
    ocd2 = 0;           /* Main clock change */
    prc0 = 0;           /* Protect on */
   
   pd1 = 0xFF;         /* Set Port 1.0 - 1.7 be used for output*/
   pd4 = 0xFF;         /* Set Port 4.0 - 4.7 be used for output*/
   pd3_3 = 0x01;       /* Set Port 3.3  be used for output*/

}//---------------------------OK
//########################################
unsigned int adc(unsigned char ch)
{
  adcon0 = 0x80 + ch;
  adcon1 = 0x28;
  adst = 1;
  while(adst == 1){}
  return ad;
}//---------------------------OK
//########################################
void wait(void)
{unsigned int t;
   for (t=0; t<10; t++);
}//---------------------------OK
//########################################
void sleep_RA(void)
{   long t;
   for (t=0; t<(adc(6)); t++ );
    p4_5=1;wait();p4_5=0;//pulsen RA
}//---------------------------OK
//########################################
void sleep_DEC(void)
{   long t;
  for (t=0; t<(adc(5)); t++ );
    p3_3=1;wait();p3_3=0;//pulsen DEC
}//---------------------------OK
//########################################
void sleep_RA_DEC(void)
{   long t;
  for (t=0; t<(adc(6)); t++ );
    p4_5=1;p3_3=1;wait();p4_5=0;p3_3=0;//pulsen RA,DEC
}//---------------------------OK
//##################################
void step_left_up(void)//OK
{      //DEC RA
 p1 = 0b10001000;
 sleep_RA_DEC();
 p1 = 0b11001100;
 sleep_RA_DEC();
 p1 = 0b01000100;
 sleep_RA_DEC();
 p1 = 0b01100110;
 sleep_RA_DEC();
 p1 = 0b00100010;
 sleep_RA_DEC();
 p1 = 0b00110011;
 sleep_RA_DEC();
 p1 = 0b00010001;
 sleep_RA_DEC();
 p1 = 0b10011001;
 sleep_RA_DEC();
}//---------------------------OK
//########################################
void step_left_down(void)//OK
{      //DEC RA
 p1 = 0b10011000;
 sleep_RA_DEC();
 p1 = 0b00011100;
 sleep_RA_DEC();
 p1 = 0b00110100;
 sleep_RA_DEC();
 p1 = 0b00100110;
 sleep_RA_DEC();
 p1 = 0b01100010;
 sleep_RA_DEC();
 p1 = 0b01000011;
 sleep_RA_DEC();
 p1 = 0b11000001;
 sleep_RA_DEC();
 p1 = 0b10001001;
 sleep_RA_DEC();
}//---------------------------OK
//########################################
void step_right_up(void)//OK
{      //DEC RA
 p1 = 0b10001000;
 sleep_RA_DEC();
 p1 = 0b11001100;
 sleep_RA_DEC();
 p1 = 0b01000100;
 sleep_RA_DEC();
 p1 = 0b01100110;
 sleep_RA_DEC();
 p1 = 0b00100010;
 sleep_RA_DEC();
 p1 = 0b00110011;
 sleep_RA_DEC();
 p1 = 0b00010001;
 sleep_RA_DEC();
 p1 = 0b10011001;
 sleep_RA_DEC();
}//---------------------------OK
//########################################
void step_right_down(void)//OK
{      //DEC RA
 p1 = 0b10011000;
 sleep_RA_DEC();
 p1 = 0b00011100;
 sleep_RA_DEC();
 p1 = 0b00110100;
 sleep_RA_DEC();
 p1 = 0b00100110;
 sleep_RA_DEC();
 p1 = 0b01100010;
 sleep_RA_DEC();
 p1 = 0b01000011;
 sleep_RA_DEC();
 p1 = 0b11000001;
 sleep_RA_DEC();
 p1 = 0b10001001;
 sleep_RA_DEC();
}//---------------------------OK
//########################################
void step_up(void)//DEC UP
{      //DEC RA
 p1 = 0b10000000;
 sleep_DEC();
 p1 = 0b11000000;
 sleep_DEC();
 p1 = 0b01000000;
 sleep_DEC();
 p1 = 0b01100000;
 sleep_DEC();
 p1 = 0b00100000;
 sleep_DEC();
 p1 = 0b00110000;
 sleep_DEC();
 p1 = 0b00010000;
 sleep_DEC();
 p1 = 0b10010000;
 sleep_DEC();
}//---------------------------OK
//########################################
void step_down(void)//DEC DOWN
{      //DEC RA
 p1 = 0b10010000;
 sleep_DEC();
 p1 = 0b00010000;
 sleep_DEC();
 p1 = 0b00110000;
 sleep_DEC();
 p1 = 0b00100000;
 sleep_DEC();
 p1 = 0b01100000;
 sleep_DEC();
 p1 = 0b01000000;
 sleep_DEC();
 p1 = 0b11000000;
 sleep_DEC();
 p1 = 0b10000000;
 sleep_DEC();
}//---------------------------OK
//########################################
void step_right(void)//RA right
{      //DEC RA
 p1 = 0b00001000;
 sleep_RA();
 p1 = 0b00001100;
 sleep_RA();
 p1 = 0b00000100;
 sleep_RA();
 p1 = 0b00000110;
 sleep_RA();
 p1 = 0b00000010;
 sleep_RA();
 p1 = 0b00000011;
 sleep_RA();
 p1 = 0b00000001;
 sleep_RA();
 p1 = 0b00001001;
 sleep_RA();
}//---------------------------OK
//########################################
void step_left(void)//RA left
{      //DEC RA
 p1 = 0b00001001;
 sleep_RA();
 p1 = 0b00000001;
 sleep_RA();
 p1 = 0b00000011;
 sleep_RA();
 p1 = 0b00000010;
 sleep_RA();
 p1 = 0b00000110;
 sleep_RA();
 p1 = 0b00000100;
 sleep_RA();
 p1 = 0b00001100;
 sleep_RA();
 p1 = 0b00001000;
 sleep_RA();
}//---------------------------OK
//########################################
void sleep_star_()
{   long t;
  for (t=0; t<(8000+10*adc(6)); t++ );
    p4_5=1;p3_3=1;wait();p4_5=0;p3_3=0;//pulsen DEC,RA
}//---------------------------OK
//##################################
 long Dec_korr;
void step_cymku_Dec_plus(void)//DEC,RA starspeed korrektur DEC
{      //DEC RA
 while  ( Dec_korr >=adc(5))//PWM DEC
 
  {  p1 = 0b10001000;
  sleep_star_();
    p1 = 0b11001100;
    sleep_star_();
    p1 = 0b01000100;
    sleep_star_();
    p1 = 0b01100110;
    sleep_star_();
    p1 = 0b00100010;
    sleep_star_();
    p1 = 0b00110011;
    sleep_star_();
    p1 = 0b00010001;
    sleep_star_();
    p1 = 0b10011001;
    sleep_star_();
   }
}//---------------------------OK
//########################################
void step_cymku_Dec_minus(void)//DEC,RA starspeed korrektur DEC
{      //DEC RA
   while   (Dec_korr <=adc(5))//PWM DEC  p1 = 0b10001000;
  {   p1 = 0b10011000;
    sleep_star_();
    p1 = 0b00011100;
    sleep_star_();
    p1 = 0b00110100;
    sleep_star_();
    p1 = 0b00100110;
    sleep_star_();
    p1 = 0b01100010;
    sleep_star_();
    p1 = 0b01000011;
    sleep_star_();
    p1 = 0b11000001;
    sleep_star_();
    p1 = 0b10001001;
    sleep_star_();
   }
}//---------------------------OK
//########################################
void Dec_korrektur(void)
{ long t;
  //  Dec_korr=adc(5);//PWM DEC
  for (t=0; t<(8000+10*adc(6)); t++ );
    p3_3=1;wait();p3_3=0;//pulsen RA
   if (adc(5)<Dec_korr-30) step_cymku_Dec_plus();  - корректируем DEC
    if (adc(5)>Dec_korr+30)  step_cymku_Dec_minus(); - корректируем DEC
}//---------------------------OK
//##################################
void sleep_star(void)
{   long t;
  for (t=0; t<(8000+10*adc(6)); t++ );
    p3_3=1;wait();p3_3=0;//pulsen RA
}//---------------------------OK
//##################################
void step_cymku(void)//RA starspeed
{      //DEC RA
  Dec_korr=adc(5);//PWM DEC
  while (adc(1)>=200) {
    p1 = 0b00001000;
    sleep_star();
    p1 = 0b00001100;
    sleep_star();
    p1 = 0b00000100;
   sleep_star();
    p1 = 0b00000110;
   sleep_star();
    p1 = 0b00000010;
    sleep_star();
    p1 = 0b00000011;
    sleep_star();
    p1 = 0b00000001;
    sleep_star();   
    p1 = 0b00001001; 
     Dec_korrektur();
   }
}//---------------------------OK
//########################################
void start(void)
{
while(1){
   while (adc(1)>=200) {step_cymku();}
     //motoren zusammen
                    //RA>>>       DEC UP
   while ((p3_1==1) && (p3_0==1)) {step_right_up();}
                   //RA>>>       DEC DOWN
   while ((p3_1==1) && (adc(0)>=200)) {step_right_down();}
                    //RA <<<      DEC UP
   while ((p3_2==1) && (p3_0==1)) {step_left_up();}
               //RA <<<          DEC DOWN
   while ((p3_2==1) && (adc(0)>=200)) {step_left_down();}
            //motoren getrennt
   while ((adc(0)>=200)&&(p3_2==0)&&(p3_1==0)) {step_down();}
   while ((p3_0==1)&&(p3_2==0)&&(p3_1==0)) {step_up();}
   while ((p3_1==1)&&(adc(0)<200)&&(p3_0==0)) {step_right();}
   while ((p3_2==1)&&(adc(0)<200)&&(p3_0==0)) {step_left();}
   if ((p3_0==0)&&(p3_1==0)&&(p3_2==0)&&(adc(0)<200)&&(adc(1)<200)) p1 = 0b00000000;
        }
}//---------------------------OK
//########################################
void main(void)
{
    timer();
    start();
}//---------------------------OK
//########################################                                                                                                                                                                                                
« Последнее редактирование: 23 Янв 2006 [19:45:56] от Andreichk »

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #171 : 23 Янв 2006 [19:43:20] »
Драйвер для моторов.
Разгон до 2° в сек при напряжении 8 вольт.
В режиме Сутки напряжение понижается до 4.5 вольт.Так заметно меньше шумов.
Микросхему ULN28003 заменил на транзисторные ключи, так как она сильно нагревалась, особенно при суточном ходе.

Суворов Владимир

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #172 : 26 Янв 2006 [20:48:38] »
Драйвер для моторов.
Разгон до 2° в сек при напряжении 8 вольт.
В режиме Сутки напряжение понижается до 4.5 вольт.Так заметно меньше шумов.
Микросхему ULN28003 заменил на транзисторные ключи, так как она сильно нагревалась, особенно при суточном ходе.

ULN2803-ка всеже лучше. Я свою мотал наверное месяца три. И то погубил в резульеате
короткого замыкания на монетке. А так если вылетает, то меняешь и все.
Ну если поменял значит возможности поставить ее на радиатор не было.

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #173 : 26 Янв 2006 [20:53:24] »
Владимир,так она не горит, а только ей мощности не хватает. На большых оборотах мотор начинал клинить. А после того, как на ключи поменял, стало всё нормально крутить

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #174 : 07 Фев 2006 [15:59:17] »
Вопрос возник ???
Как определить момент изменения направления счёта АЗИМУТА для незаходящих объектов?
Подскажите, кто может плиз.

Оффлайн anddor

  • ****
  • Сообщений: 414
  • Благодарностей: 9
  • Per aspera ad astra!
    • Сообщения от anddor
Re: Управление телескопом с помощью GO-TO
« Ответ #175 : 08 Фев 2006 [02:05:49] »
В момент верхней кульминации, как известно, s = alp. В момент нижней кульминации s = 12h + alp. Моменты изменения направления счёта азимута находятся посередине между моментами верхней и нижней кульминации, т.е s1 = alp - 6h, s2 = alp + 6h. Элементарно, Ватсон :) :) :)

P.S. (на всякий случай)
s - местное звёздное время, alp - прямое восхождение светила. Только не ошибитесь при переводе (если потребуется) звездного времени в солнечное. Если получите отрицательные значения s1 или значения s2, большие 24, используйте именно их для пересчета (без прибавления или вычитания 24h) и соответствующую  верхней кульминации дату.
« Последнее редактирование: 08 Фев 2006 [02:50:58] от anddor »
Открылась бездна, звезд полна.
Звездам числа нет, бездне - дна...
                                   М.В. Ломоносов

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #176 : 08 Фев 2006 [02:13:30] »
Кому элементарно, а кому и нет :)

Оффлайн anddor

  • ****
  • Сообщений: 414
  • Благодарностей: 9
  • Per aspera ad astra!
    • Сообщения от anddor
Re: Управление телескопом с помощью GO-TO
« Ответ #177 : 08 Фев 2006 [02:53:06] »
Немного подумал и изменил постскриптум к своему предыдущему посту. Чтоб было понятнее и, главное, правильнее :)
Открылась бездна, звезд полна.
Звездам числа нет, бездне - дна...
                                   М.В. Ломоносов

Andreichk

  • Гость
Re: Управление телескопом с помощью GO-TO
« Ответ #178 : 10 Фев 2006 [12:59:53] »
anddorу отдельное спасибо. :)
Кажется я всё таки добил это преобразование экв. координат в горизонтальные.
Часовой угол показывает тоже самое, что и в проге  Starry Night Pro 5.0 , координаты объектов тоже попадают в правильный диапазон.
Правда всё таки не с такой точностью как хотелось бы. Причём некоторые с точностью в пару минут, а некоторые пару градусов.
Осталось ещё поточнее откалибрировать счётчики, чтобы точнее отсчитивать реальные градусы.


//##################################################################
//###########    РАСЧЁТ ЧАСОВОГО УГЛА В РАДИАНАХ     ###############
//##################################################################
function Hour_Angle(float RA)returns float
{float HA,ha,t_grad,t_rad,ST;//t=s-R.A.
ST=Sidereal_time( Longitude,system.year(),system.month(),system.day(),
                  system.hour(),system.minute(),system.second() );
//часовой угол в текущий момент времени в часах и дол.часа
HA = ST - RA;
if ST>0 and ST<12{
if HA > 0 and HA < 12 HA = HA;//ok
if HA < 0 and HA > -12 HA = HA;//ok
if HA < -12 HA = 24 + HA ;//ok
}

if ST>12 and ST<24{
if HA < 0 and HA > -12 HA = HA;//ok
if HA > 12 HA = ST - RA - 24;//ok
if HA > 0 and HA < 12 HA = HA;//ok
}

t_grad=(HA/24.0)*360.0;
t_rad = 0.017453293 * t_grad;
return t_rad;//в радианах
}//----------------OK
//####################################################


int richtung;float x;
function Azimuth_(float t,float Declination,float Latitude)returns float
{float A,azimuth,y;

A = (math.cos(Declination)*math.sin(t))/(-math.cos(Latitude)*math.sin(Declination)
     + math.sin(Latitude)*math.cos(Declination)*math.cos(t));//OK

  y = math.atan(A);

//--------------------------С ЮГА НА СЕВЕР    ------------------
if Declination<Latitude{
if t>0 and t<constant.half_pi{//Часовой угол от 0° до -90°   +++++++
                     if y<0 {
                             azimuth = constant.double_pi+y;//180-360
                            }
                     if y>0 {
                             azimuth = constant.pi+y;//180-360
                            }
                         }
//-----------------------------------------------------------------------------
if t>constant.half_pi and t<constant.pi{//Часовой угол от 90° до -180° ++++++
                     if y<0{
                            azimuth = constant.double_pi+y;//180-360
                           }
                        }
//-----------------------------------------------------------------------------

//------------------------  С СЕВЕРА НА ЮГ  ----------------------------

if t<0 and t>-constant.half_pi{//Часовой угол от 0° до -90°      ---------
                     if y<0 {
                               azimuth = constant.pi+y;//0-180
                              }
                     if y>0  {
                                azimuth = y;//0-180
                               }
                      }
//-----------------------------------------------------------------------------
if t<-constant.half_pi and t>-constant.pi{//Часовой угол от -90° до -180° -----
                     if y>0  {
                                azimuth = y;//0-180
                               }
                        }
//-----------------------------------------------------------------------------
              }
if Declination>Latitude{//для незаходящих объектов, то есть тех,
                //которые находятся в обл. между 52°Latitude и 90°Zenit
             if x>y richtung=0;//счёт уменьшается
             if x<y richtung=1;//счёт увеличивается
             if y>0 {//
                       azimuth = y;// 0 < t_grad < 180
                      }
             if y<0 {//
                       azimuth = constant.double_pi+y;// 180 < t_grad < 360
                      }
                }
x=y;
return azimuth;
}//-------------------------OK
//####################################################


Может не совсем грамотно с точки зрения астрономии такие алгоритмы рисовать, но работает правильно :)

Онлайн Дядя Вова

  • *****
  • Сообщений: 8 088
  • Благодарностей: 95
    • Сообщения от Дядя Вова
Re: Управление телескопом с помощью GO-TO
« Ответ #179 : 22 Фев 2006 [09:38:10] »
передняя панель
Двойка!!!
Напечатай  на бумажке свою панель в натуральную величину. Вместо разъемов воткни карандаши/ручки и пр. А потом имитируй нажатие кнопочек.
Если это удобно - мои глубокин извинения. ;)
Такой разъем питания вообще лучше не применять imho. И тем более не ставить его под ладонь. Ну и далее в таком же духе.
(Vixen ED80+Canon300Da, 9x50+QHY5)+EQ6upg
Meade ETX-90PE