一 前言 縱觀當前國內的望遠鏡市場,大大小小的望遠鏡都配上了電腦,實現PC機控制,這樣無形之中就增加了產品的生產成本,使一些原本不必要配電腦的中小型望遠鏡也必須得配一臺電腦,脫離了電腦,就只能進行一些簡單的手動操作,令人苦不堪言,本人主要就這一方面作了一些粗陋的研究,用單片機的匯編語言編制了望遠鏡自動找星的程序,實現了把手盒自動找星的功能。 二 系統硬件概述 本控制系統的核心部分是采用雙串口的CPU(W77E58芯片),可以同時和上位機及把手盒通信,也可以單獨和他們通信,一片XC95108-84負責計數分頻等工作,一片MC146818時鐘芯片,用來產生恒星時,附加一些外圍接口電路,具體詳情見(圖一),因為本文著重介紹的是算法部分,因此硬件部分不再細述。 下位機系統方框原理圖(圖一) 三 軟件部分 具體地講,軟件總的可以分為四大部分:PC機(工控機)部分,把手盒部分,下位機部分以及功放模塊部分。其中PC機和把手盒分別與下位機的主電腦CPU(W77E58)通信,由串行電纜連接,實現通信,功放模塊(驅動部分)與下位機連體,由數據線直接連接,下面我們主要介紹下位機軟件的設計流程及算法思路: 1、 設計思路 我們應該明確該設計的目的,即實現望遠鏡自動找星的功能,具體地說,首先得給望遠鏡進行位置的準確標定,即選中天空中的某一顆已知星,由把手盒手動操作,把它找進望遠鏡視場的正中央,放在主鏡的十字線的中心,此時把這顆星的坐標位置由把手盒輸入進去,定標替換望遠鏡原來的位置,然后以這顆星為基本點,根據時角和赤緯去找尋天空中的任意一顆未知的星,由于系統在程序中做進了掉電保護模塊,因此,對望遠鏡而言,調試完畢之后只需要標定一次,以后每次關機之前系統都會自動保存望遠鏡當前的實時位置,給用戶帶來了極大的方便,自動找星時,我們給望遠鏡輸入天空星體的天文坐標(α,δ)之后,望遠鏡根據當前自身指向的天區位置以及待尋目標星所處的天區位置選擇一條合適的路徑,驅動赤經、赤緯電機轉動使其指向目標星,讓目標星體落入望遠鏡視場,找星結束后自動轉入跟蹤,望遠鏡的指向與天體的坐標是通過恒星時聯系起來的,因此我們需要知道恒星時,每次觀測之前要先校正一下恒星時,恒星時由程序配合手動校正,并顯示于面板上。由公式 t+α=s① 其中t是星體的時角位置 α 是星體的赤經值 s 是當地的地方恒星時 顯然我們可以把望遠鏡的時角和星體的時角對應起來,在跟蹤狀態時,為了克服地球自轉的影響,時角在以每時秒15個角秒的速度沿著反地球自轉方向勻速運動,因此在赤經方面主要是實時地采集當地的地方恒星時,不停的刷新顯示,計算目標星的時角,最終讓望遠鏡的動態時角值等于目標星的時角,這樣赤經找星完畢;在赤緯方面,因為恒星的赤緯是不變的,所以我們只需要將望遠鏡的動態赤緯顯示值不斷的靠近目標星的赤緯值,不過對赤道式望遠鏡而言,得需要考慮望遠鏡的所處天區的位置以及目標星的位置,選擇合適的找星路徑,確保望遠鏡的鏡筒的姿勢正確,至于限位部分,可以根據客戶要求自行設定。 2 、下位機軟件流程圖 3、子程序部分 (1)鍵盤輸入及顯示部分 在該系統中,我們選用了8279芯片,在程序中查詢鍵值,送入固定單元,如果無鍵按下,則送#0FFH入固定單元,然后查詢此單元,如果為#0FFH,則返回,否則根據單元的鍵值內容轉入相應的功能子程序;而顯示部分主要把待顯示的數據經過拆分成7位(本系統采用7位數碼管顯示),分別送給顯示緩沖區,由查表的方式從表中取出7個相應的字型,送到8279數據口實現動態顯示,8279的鍵盤掃描及顯示方式是通過初始化編程來實現的,8279初始化部分程序如下: MOV DPTR, #7FF0H; 8279芯片的狀態地址 MOV A, #0D1H; 清除命令 MOV @DPTR, A; 命令字送入 LL: MOV A, @DPTR; 讀8279狀態字 JB ACC.7, LL ; 清除等待 MOV A, #08H; 顯示器左邊輸入外部譯碼,雙鍵互鎖方式 MOV @DPTR, A; 命令字送入 MOV A, #2AH; 時鐘編程命令 MOV @DPTR,A; 命令字送入 RET; 返回 (2)MC146818時鐘部分 MC146818芯片是摩托羅拉公司生產的一種可編程的時鐘芯片,該系統中用它來讀寫恒星時,其中一些主要的操作就是芯片的初始化,讀時間操作,寫時間操作幾大部分,在使用該芯片進行執行讀/寫時間操作時,必須得注意,要首先查詢它的狀態看它是否正在刷新數據,如果是,必須等刷新數據動作完成之后再對芯片進行讀/寫操作,否則容易出錯,MC146818的初始化部分程序如下: MOV DPTR,#0BFCAH; A寄存器口地址 MOV A,#26H; 命令字 MOVX @DPTR,A INC DPL; B寄存器口地址 MOV A,#1AH; 命令字 MOVX @DPTR,A RET; 返回 讀時間子程序: MOV DPTR, #0BFCAH AA: MOVX A, @DPTR; 讀取狀態字 ANL A, #80H JNZ AA; 芯片是否正在刷新?否,讀取數據 MOV DPTR, #0BFC0H;讀秒單元 MOVX A, @DPTR MOV @R1, A INC R1 MOV DPL, #0C2H; 讀分單元 MOVX A, @DPTR MOV @R1,A INC R1 MOV DPL, #0C4H; 讀時單元 MOVX A, @DPTR MOV @R1, A RET; 返回 寫時間的子程序同上類似,不再多述。 (3)串行通信子程序 W77E58實現雙串口通信,初始化完畢后進入主流程,逐個查詢串口是否有通信數據請求,如果有則進入通信子程序執行并返回,否則程序直接往下執行,把下位機的數據分別發送給把手盒和工控機,等待接收控制命令。具體的初始化程序如下: MOV TCON,#50H; 定時器/計數器狀態設置 MOV TMOD,#21H; 定時器/計數器方式設置 MOV PCON,#00H; 電源控制器設置 MOV SCON,#53H; 串行口0工作方式設置 MOV TL1,#0FDH; 計數常數設置 MOV TH1,#0FDH MOV SCON1,#53H; 串行口1工作方式設置 MOV TH0,#3CH; 計數常數設置 MOV TL0,#0B0H RET; 返回 (4)標定子程序流圖 (5)自動找星子程序 首先根據輸入的目標星的赤經值,取出當地的地方恒星時S,通過計算,換算成目標星的時角值to,然后讀取望遠鏡此時的實時位置值tt,根據他們赤經時角所處的天區差異來選擇不同的找星路徑,具體情況可以分為以下幾種: 1) 如果望遠鏡與目標星的時角處于同一天區(以望遠鏡的中柱為軸線,分為東西兩大天區,人為設定),則先驅動赤緯軸,再驅動赤經軸,直到找到目標星,進入跟蹤。 2) 如果望遠鏡與目標星的時角處于不同天區,即跨天區找星,則先驅動赤緯軸,讓赤緯指向北極,再驅動赤經軸,然后再驅動赤緯軸,直到找到目標星,進入跟蹤。 另外,由于我們的位置反饋信息是來自增量式圓光柵編碼器,而赤緯的度數始終在(-90,90)區間,因此還需要進行一下特殊處理。 剩下的就是典型的追擊問題,以赤經為例,具體流程圖如下: 四 結束語 經過一個多月的實際使用觀測,望遠鏡系統運行良好,平穩無噪音,找星定位準確,精度高,能適用于各種大中小型的望遠鏡。 |