单片机系统多任务多线程机制的实现
单片机在赤道式天文望远镜控制系统中的应用
本人主要就这一方面作了一些粗陋的研究,用单片机的汇编语言编制了望远镜自动找星的程序,实现了把手盒自动找星的功能。
本控制系统的核心部分是采用双串口的CPU,可以同时和上位机及把手盒通信,也可以单独和他们通信,一片XC95108-84负责计数分频等工作,一片MC146818时钟芯片,用来产生恒星时,附加一些外围接口电路,具体详情见,因为本文着重介绍的是算法部分,因此硬件部分不再细述。
我们应该明确该设计的目的,即实现望远镜自动找星的功能,具体地说,首先得给望远镜进行位置的准确标定,即选中天空中的某一颗已知星,由把手盒手动操作,把它找进望远镜视场的正中央,放在主镜的十字线的中心,此时把这颗星的坐标位置由把手盒输入进去,定标替换望远镜原来的位置,然后以这颗星为基本点,根据时角和赤纬去找寻天空中的任意一颗未知的星,由于系统在程序中做进了掉电保护模块,因此,对望远镜而言,调试完毕之后只需要标定一次,以后每次关机之前系统都会自动保存望远镜当前的实时位置,给用户带来了极大的方便,自动找星时,我们给望远镜输入天空星体的天文坐标之后,望远镜根据当前自身指向的天区位置以及待寻目标星所处的天区位置选择一条合适的路径,驱动赤经、赤纬电机转动使其指向目标星,让目标星体落入望远镜视场,找星结束后自动转入跟踪,望远镜的指向与天体的坐标是通过恒星时联系起来的,因此我们需
显然我们可以把望远镜的时角和星体的时角对应起来,在跟踪状态时,为了克服地球自转的影响,时角在以每时秒15个角秒的速度沿着反地球自转方向匀速运动,因此在赤经方面主要是实时地采集当地的地方恒星时,不停的刷新显示,计算目标星的时角,最终让望远镜的动态时角值等于目标星的时角,这样赤经找星完毕;在赤纬方面,因为恒星的赤纬是不变的,所以我们只需要将望远镜的动态赤纬显示值不断的靠近目标星的赤纬值,不过对赤道式望远镜而言,得需要考虑望远镜的所处天区的位置以及目标星的位置,选择合适的找星路径,确保望远镜的镜筒的姿势正确,至于限位部分,可以根据客户要求自行设定。
MC146818芯片是摩托罗拉公司生产的一种可编程的时钟芯片,该系统中用它来读写恒星时,其中一些主要的操作就是芯片的初始化,读时间操作,写时间操作几大部分,在使用该芯片进行执行读/写时间操作时,必须得注意,要首先查询它的状态看它是否正在刷新数据,如果是,必须等刷新数据动作完成之后再对芯片进行读/写操作,否则容易出错,MC146818的初始化部分程序如下:
软件设计中,首先要对AVR单片机ATMega8与实时钟器件DS3231进行初始化。给DS3231准确的日期和时间。不论主控模式还是被控模式,都应当将TWI控制寄存器TWCR的TWEN位置为1,从而使能TWI模块。TWEN位被置位后,I/O引脚PC5和PC4转换成SCL和SDA,对TWI控制寄存器TWCR的操作可在总线上产生START和STOP信号,从START到STOP认为是主控模式的行为。将TWI地址寄存器TWAR的第一位TWGCE置为有效,同时将TWI控制寄存器TWCR的TWE(应答允许)位置1,TWI模块就可以在总线上对其寻址做出应答,并置状态字。