一前言
纵观当前国内的看远镜市场,大大小小的看远镜都配上了电脑,实现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初始化部分程序如下:
MOVDPTR,#7FF0H;8279芯片的状态地址
MOVA,#0D1H;清除命令
MOV@DPTR,A;命令字送进
LL:MOVA,@DPTR;读8279状态字
JBACC.7,LL;清除等待
MOVA,#08H;显示器左边输进外部译码,双键互锁方式
MOV@DPTR,A;命令字送进
MOVA,#2AH;时钟编程命令
MOV@DPTR,A;命令字送进
RET;返回
(2)MC146818时钟部分
MC146818芯片是摩托罗拉公司生产的一种可编程的时钟芯片,该系统中用它来读写恒星时,其中一些主要的操纵就是芯片的初始化,读时间操纵,写时间操纵几大部分,在使用该芯片进行执行读/写时间操纵时,必须得留意,要首先查询它的状态看它是否正在刷新数据,假如是,必须等刷新数据动作完成之后再对芯片进行读/写操纵,否则轻易出错,MC146818的初始化部分程序如下:
MOVDPTR,#0BFCAH;A寄存器口地址
MOVA,#26H;命令字
MOVX@DPTR,A
INCDPL;B寄存器口地址
MOVA,#1AH;命令字
MOVX@DPTR,A
RET;返回
读时间子程序:
MOVDPTR,#0BFCAH
AA:MOVXA,@DPTR;读取状态字
ANLA,#80H
JNZAA;芯片是否正在刷新?否,读取数据
MOVDPTR,#0BFC0H;读秒单元
MOVXA,@DPTR
MOV@R1,A
INCR1
MOVDPL,#0C2H;读分单元
MOVXA,@DPTR
MOV@R1,A
INCR1
MOVDPL,#0C4H;读时单元
MOVXA,@DPTR
MOV@R1,A
RET;返回
写时间的子程序同上类似,不再多述。
(3)串行通讯子程序
W77E58实现双串口通讯,初始化完毕后进进主流程,逐个查询串口是否有通讯数据请求,假如有则进进通讯子程序执行并返回,否则程序直接往下执行,把下位机的数据分别发送给把手盒和工控机,等待接收控制命令。具体的初始化程序如下:
MOVTCON,#50H;定时器/计数器状态设置
MOVTMOD,#21H;定时器/计数器方式设置
MOVPCON,#00H;电源控制器设置
MOVSCON,#53H;串行口0工作方式设置
MOVTL1,#0FDH;计数常数设置
MOVTH1,#0FDH
MOVSCON1,#53H;串行口1工作方式设置
MOVTH0,#3CH;计数常数设置
MOVTL0,#0B0H
RET;返回
(4)标定子程序流图
(5)自动找星子程序
首先根据输进的目标星的赤经值,取出当地的地方恒星时S,通过计算,换算成目标星的时角值to,然后读取看远镜此时的实时位置值tt,根据他们赤经时角所处的天区差异来选择不同的找星路径,具体情况可以分为以下几种:
1)假如看远镜与目标星的时角处于同一天区(以看远镜的中柱为轴线,分为东西两大天区,人为设定),则先驱动赤纬轴,再驱动赤经轴,直到找到目标星,进进跟踪。
2)假如看远镜与目标星的时角处于不同天区,即跨天区找星,则先驱动赤纬轴,让赤纬指向北极,再驱动赤经轴,然后再驱动赤纬轴,直到找到目标星,进进跟踪。
另外,由于我们的位置反馈信息是来自增量式圆光栅编码器,而赤纬的度数始终在(-90,90)区间,因此还需要进行一下特殊处理。
剩下的就是典型的追击题目,以赤经为例,具体流程图如下:
四结束语
经过一个多月的实际使用观测,看远镜系统运行良好,平稳无噪音,找星定位正确,精度高,能适用于各种大中小型的看远镜。
参考文献:
[1]苏宜.天文学新概论(第二版).武昌:华中科技大学出版社,2002
[2]张毅刚,彭喜源,谭晓昀.MCS-51单片机应用设计.哈尔滨:哈尔滨产业出版社,1997