查看: 366|回复: 1
打印 上一主题 下一主题

单片机在赤道式天文望远镜控制系统中的应用

[复制链接] qrcode

580

主题

638

帖子

1860

积分

金牌会员

Rank: 6Rank: 6

积分
1860
楼主
跳转到指定楼层
发表于 2015-12-24 03:18 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机在赤道式天文望远镜控制系统中的应用

 一 前言
  纵观当前国内的望远镜市场,大大小小的望远镜都配上了电脑,实现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)区间,因此还需要进行一下特殊处理。
  剩下的就是典型的追击问题,以赤经为例,具体流程图如下:

  四 结束语
  经过一个多月的实际使用观测,望远镜系统运行良好,平稳无噪音,找星定位准确,精度高,能适用于各种大中小型的望远镜。
回复

使用道具 举报

107

主题

677

帖子

1519

积分

金牌会员

Rank: 6Rank: 6

积分
1519
沙发
发表于 2015-12-27 02:21 PM | 只看该作者
思路还可以                                                                                                                                                                       
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表