[졸프1]경위대식 자동천체추적가대 Chaser _ 전체적 구상과 결과물 기록 by 시나브로

1.프로그램
 1) PC (MFC) : 지방항성시 계산, 좌표계변환, RS232C, .NET f.w 필요, 제작환경:xp pro sp3 (snoopy), visual studio 2010
 < MFC(dialog기반) 실행파일 : mfc_rs232c.exe / 소스코드일부 :mfc_rs232cDlg.cpp>

 ※ 천문노트 (http://www.astronote.org/) 의 오픈소스 라이브러리를 사용하였습니다.
     해당 라이브러리는 방문하여서 구할 수 있습니다. 소스코드 일부는 이를 사용하여 제작한 동작부분의 코드입니다.
 ※ RS232C 통신은 인터넷을 통해 많이 돌아다니는 소스이기에 정확한 출처를 알수 없지만 암튼.. 구글링한 것을 일부 변형하였습니다.

 2) AVR ATmega128 : AVR studio 4.19 사용, L297모터모듈구동, LCD패널 출력, 컨트롤러(PIN 입력)동작, RS232C 통신 및 파싱
 < winAVR 컴파일러 소스코드 : chaser_mega128.zip >

-PC가 제어값을 계산하는 상부제어구조로 AVR이 각 입/출력에 해당하는 하부제어로, 수동조작시에 PC연결은 필요없음 

< PC(MFC) 프로그램 >

2.목적, 구성
 1) 목표 : skywatcher사 eq5 적위대식 가대를 활용하여 경위대식 동작을 하도록 함.
              항성을 천체좌표 변환을 통해 자동추적할 것.

 2)소자 : 
   (1) AVR ATmega128 develop kit (N.T.C)
   (2) serial LCD pannel(N.T.C)
   (3) Unipolar Stepmotor driver(L297+SLA7026) or Bipolar Stepmotor driver(L297+L298)
   (4) pushswitch *5
   (5) 2,3 state Switch
   (6) 만능기판, 저항, fastdiode
   (7) skywatcher사 EQ5mount, controller set
   (8) autonics E40H8-1000-5-L-6 rotary encoder*2 
        등.
 3)구성 : 
   (1) PC - MCU : RS232C통신 (UART1)
   (2) MCU - LCD (UART0)
   (3) MCU-L297 (PORTC)
   (4) MCU-Controller(PINA, active low)
   (5) MCU-Encoder(PINE, ExINT 6,7)
   (6) timer0 사용
   (7) 외부인터럽트는 rising edge 방식으로 사용, 

< 전체 시스템 개요 >

3. 활용 유틸리티
  1) AVR studio 4.19, 5.1
  2) ponyprog 2000
  3) MS visual studio 2010
  4) usb to serial converter driver

4. 경과
  1) 바이폴라 구조의 드라이버 L297+L298로 직접 제작하다가 실패
      - 만능기판을 컨덕티브펜으로 배선하려는 시도를 빨리 버렸어야 했음.
      - skywatcher사 컨트롤러의 스텝모터가 바이폴라구조 결선이 힘듦을 늦게 파악함.
  2) L297+SLA7026 유니폴라 구조로 변경.
  3) ATmega128 입 출력 포트 결정에 앞서 수도코드로 함수구조랑 변수구조를 결정 함.
      - LCD모듈, 로터리엔코더, 스텝모터, RS232C 파트별 함수구조가 충돌함.
  4) 라이브러리 수집후 C 구조로 포팅하려고 난리친 후 PC-MCU 간 rs232c 방식을 결정함.
      - 최초에 상/하부 제어를 생각지 못하여 벌어진 삽질.
  5) ACTIVE LOW로 컨트롤러 제작한 것이 동작을 안함.
      - 풀업저항을 정확하게 계산하지 않아서 전압강하가 잘 이루어지지 않는 문제.
  6) 컨트롤러에 NAND게이트 도입했으나 실패
      - 설계를 못하니까. 무식하게 풀업저항을 병렬로 추가하고 동작테스트하고 반복하여 어찌어찌 동작을 함.
  7) AVR에서 string 이 파싱 안되는 문제가 발생
      - pc에서 송신요청 - mcu해당 입력확인 후 송신 - pc 수신체크 후 계산값 재송신 - mcu 동작 파라미터 변경
        순으로 짯는데, scanf와 유니코드 cstring의 통신 및 파싱 문제로 오래동안 시간 낭비.
  8) 초기세팅값 입력 편의를 위해 대화상자 기반 MFC 도입. 다시 C++ MFC에 포팅
      - MFC를 처음 건들여 봤음. 학부 커리큘럼에 대한 원망과 지난 C,C++ 교수님들에 대한 원망이 폭발한 시기.
  9) 동작이 구현됬으나 추적이 올바로 이루어 지지 않는 문제가 발생
      - AVR, MFC 모두 코드를 갈아치우기엔 너무 많이 온 탓에, 조금씩 코드 변경하면서 하다보니 됨. 
        스테핑모터로의 출력 배선이 꼬여서 발생한 문제로 추정.
  10) 락엔락 통에 컨트롤러 박스 제작 및 전원부 수정

5. 결과물 내용
  1) 수동 컨트롤러 조작으로 방위축/고도축 제어
  2) 수동 조작 속도 가변 (고속/일반/저속)
  3) 30초마다 pc와 통신하며 자동 추적 기능
  4) 초기세팅
    (1) 스테라리움 표시값을 그대로 입력하면 됨 (도/시, 분, 초)
    (2) 기타 성도프로그램 사용값도 동일
    (3) 사용자가 천체물리학 기본내용을 알고 있어야함.

6. 개선안
  1) 남반구 지원 : 엔코더 해석값 동작 범위를 음수 위도 방향으로 해석하도록 알고리즘 수정
  2) 시간선 자동 변환 : PC(window 환경)의 timezone을 읽어서 활용토록 수정
  3) 배터리효율 문제 : 36W 차량용 베터리 사용..이거슨 장비의 한계로 개선여지가 뚜렷하게 보이진 않음..



ps1. 더이상의 수정은 귀찮고, 개량 한다고 해서 망원경/가대도 없는 마당에 뭐 별 쓸모도 없어서 이쯤에서 마무리..
ps2. MFC통짜는 용량이 너무 크고 이글루스는 5MB제한이고..
ps3. http://www.astronote.org/의 오픈라이브러리를 사용했고, 
       딱히 특이사항이랄게 PC와의 통신과 피드백 과정인데 그 퀄리티가 안습한지라..

덧글

댓글 입력 영역