goto的思路及一些经验和思考
本帖最后由 xwxwwx 于 2012-12-26 19:31 编辑本月初的时候,完成了自己的goto程序,并且上传到了牧夫,反响方面还行,就只有两位朋友提出了第一版存在错误,后来改正后居然没有人提出什么问题和建议了......这里先谢谢这两位朋友!
心下很纳闷,我说能不能用大家也得反馈一声呀,不然怎么完善呢?后来一想,大部分朋友都是使用单片机来驱动电机的,我这种省掉中间层的方式好像属于非主流......并且由于并口现在实在太少,应用方面所受的限制太大,因此没什么人用也是情理之中。另外,觉得但凡经常蹲这里的朋友都是喜欢自己动手,心气比较高。今天就不说软件的事情了,谈谈编程思路和经验,希望能够对有志于这方面的朋友有所助益,哪怕是少走点弯路也是好的。
程序的思路和一些经验:
1,跟踪方面,这个在去年就做出来了,当时我也是初学者,什么都不懂,看到很多朋友都成功的diy出了自己的goto系统,心下羡慕呀,于是自己也想干。按照当时的主流结构,goto系统是由单片机加上步进驱动板构成,由单片机来完成所有控制,奈何单片机基于C语言,我的完全不懂,于是上网找了些资料,学了学,发现C也不是很难,但是纸上谈兵不行,必须实践,于是上网找学习板和步进驱动板,找呀找的,终于找到了,一看,原来单片机也是通过并口和电脑连接,并且和步进驱动板也是通过并口,于是我就想,既然都是并口,为什么不使用电脑并口直接驱动呢?这样一来就绕过了我不懂单片机的短处,于是我的软件就直接省掉了中间层。跟踪其实在整个goto系统中是最简单和最容易实现的,原理方面就是利用计数的方法获知步进电机转动的行程,而这个行程必须和赤道仪的赤经轴跟踪星体的单位时间里面的行程一致,说起来麻烦,其实很简单,就是步进电机带动赤经轴转动的角度和天赤道中你要跟踪星体由于地球自转造成星体转动的角度一致就ok了。
2,goto方面,在完成跟踪之后,由于我软件结构设计方面的原因,goto方式的选择相对灵活,既可以直接在windows中获取其他软件的数据来goto,也可以自己写goto。综合的考虑后,我选择自己写goto。原因如下,别人的东西再好也是别人的,一旦别人软件升级,很可能我的程序必须重写,这个太麻烦了,还是靠自己吧。于是,开始了自己的设计,要goto星体,首先必须知道goto目标的坐标,这个也就是平时我们说的星表,上网找了下,晕,各种各样的一堆,可是就没有一个规范的,格式都不相同,甚至数据也存在出入!心下犹疑,于是找到一个著名的星图软件,想不劳而获直接获取星体数据库,分析了这个软件的所有文件,倒也!没有明确的数据库文件,找到几个疑似的,使用各种方式打开一看,总有不正常的项目,再分析了下其他文件,发现涉及到SQL的动态库中有十几条专用的SQL函数,晕,直接获取没有可能了,起码是我没能力直接获取了。还是自己制作星表吧,找了个最简单的access,自己编星表,好在我的这个是开放的,随便编辑。目标数据解决了,就剩下一个最重要的参数了,就是地方恒星时,得到了地方恒星时就差不多等于得到了星体的实时坐标,别看这个地方恒星时名字简单,但是要实时的计算出来,还真不简单!花了我差不多半个月才搞定,要计算实时的地方恒星时,首先要计算出儒略日,在根据根据儒略日计算出格林威治恒星时,再根据格林威治恒星时计算出地方恒星时,其中种种曲折一言难尽,我这个天文盲到现在才知道天文计算的复杂性。算好了地方恒星时,goto的计算就简单了,加减而已。
3,精度方面,我想,要保证goto精度,硬件方面只能努力,而软件方面必须尽善尽美,那么上面说的地方恒星时就必须实时计算到小数点后面第三位,并且和其他软件能够相互印证,这样才能保证精度。还有一个3分56秒的问题,当时我发了帖子请教了,这个对精度的影响也是比较大的。
4,驱动步进电机,当时我觉得这个问题非常的简单,给脉冲就行了,没想到的是,到后来成了大麻烦,为此彻底改了核心程序。问题出在哪里呢?有经验的朋友知道,步进电机存在一个启动频率,如果给出的脉冲高于这个启动频率,那么就别怪电机不给面子,直接罢工,而goto的时候,为了加快goto的速度,输出脉冲就非常之密集,到什么程度了呢?到步进电机把几十个脉冲当成了一个脉冲执行......这样一来,程序和电机始终不能同步,后来有做过这方面的达人指点了一句,我通过实验才明白,原来高速率的单脉冲如果超出了步进驱动板或者步进电机的分辨率的话,会直接罢工的,没办法,只有从头修改了核心程序,将单脉冲换成了方波脉冲才解决了这个 问题。
一些想法:
并口看来是非主流,但是要改成USB口的话,程序方面没有问题,硬件方面就必须加入信号放大电路,电子方面我基本小白,有达人是否能够指教?
不能使用USB口的话,那么常用的只剩下串口了,可是串口也是数据流,没法直接形成脉冲,还是得加电路。
另外,有兴趣的朋友最好提出建议和看法,或者想法,说不定就开辟了一条新路。
最新的想法是把我的程序放到linux下编译,争取支持安卓系统。到时候用手机驱动赤道仪也不是梦想了。
目标数据解决了,就剩下一个最重要的参数了,就是地方恒星时,得到了地方恒星时就差不多等于得到了星体的实时坐标,别看这个地方恒星时名字简单,但是要实时的计算出来,还真不简单!花了我差不多半个月才搞定,要计算实时的地方恒星时,首先要计算出儒略日,在根据根据儒略日计算出格林威治恒星时,再根据格林威治恒星时计算出地方恒星时
我在S中抓出来的20位的数据 其中就包含了 你所说的地方恒星时了? 是不是? 还有RA 和 DEC , 之后就可以计算出实时的坐标了?
实时坐标就是 ALTAZ这两个值? 是不是 ? 我看星图软件里面 这两个值是一直在变的 所以这里还有一个误差就是 goto到目标的过程中, ALT 和AZ的值变化了
头像好邪恶 角落里的烟嘴 发表于 2012-12-26 16:52 static/image/common/back.gif
目标数据解决了,就剩下一个最重要的参数了,就是地方恒星时,得到了地方恒星时就差不多等于得到了星体的实 ...
不好意思,对Stellarium没有研究,回答不了你的问题。
网络时代, 资料很容易找。建议还是学学单片机吧~~
goto精度除了跟软件,还跟硬件(电机等),机械安装垂直校准有关。
特别是 机械安装的垂直度,diy在这个方面往往是弱项 山脚落 发表于 2012-12-26 19:22 static/image/common/back.gif
网络时代, 资料很容易找。建议还是学学单片机吧~~
goto精度除了跟软件,还跟硬件(电机等),机械安装垂 ...
说实话,我真的不明白,为什么提到goto,总要使用单片机?直接驱动就不行吗?我真的不相信单片机还能比windows平台能够提供更丰富功能。
xwxwwx 发表于 2012-12-26 19:02
不好意思,对Stellarium没有研究,回答不了你的问题。
不管是 自建的 星图数据库 还是从星图软件里 取得RA DEC 的值, 最后都是要转换成 ALT AZ 值, 然后 利用 ALTAZ相对值是这样吗?
角落里的烟嘴 发表于 2012-12-26 21:36 static/image/common/back.gif
不管是 自建的 星图数据库 还是从星图软件里 取得RA DEC 的值, 最后都是要转换成 ALT AZ 值, 然后 利用 ...
星体的RA和DEC值在某种意义上来说可以看作是不变的,也就是说星体的坐标是个定量,为什么我们goto的时候星体的坐标每时每刻都会有变化?这其中是什么发生了变化?这些变化互相之间是什么关系?而什么条件会对这些变化产生影响?这些是goto的基础问题,而不管是Stellarium还是其他的goto程序都是以此为基础的。如果你真正弄清楚了这些问题,那么goto该怎么做也就很清楚了,并且你会马上理解这些goto程序为什么会这样处理。 xwxwwx 发表于 2012-12-26 22:33 static/image/common/back.gif
星体的RA和DEC值在某种意义上来说可以看作是不变的,也就是说星体的坐标是个定量,为什么我们goto的时候 ...
我知道RA DEC可以理解为几乎是不变的 ,天球坐标。 而 RA ALT 是 可以理解为是一组 地球和天球 两个变量产生的数值,而天球是不变的, 地球是在自转和公转,所以RA 和ALT是随着时间一直变化的。从计算过程就可以看到,计算过程中需要加入时间参数。
角落里的烟嘴 发表于 2012-12-27 08:36 static/image/common/back.gif
我知道RA DEC可以理解为几乎是不变的 ,天球坐标。 而 RA ALT 是 可以理解为是一组 地球和天球 两个 ...
不仅仅是时间,看看这个帖子http://www.astronomy.com.cn/bbs/thread-113566-1-1.html
楼主解决了星表,以后我等就可以轻松点了。
单片机的应用,主要是可以甩掉电脑,扛着个电脑不是件快乐的事。
理想的设备,单片机模块式。单片机其实只要管驱动电机就好了。goto加个模块,wifi加个模块,无线遥控加个模块,摄像头驱动加个模块。可以按照定时控制单反快门开启。现在用摄像头视频叠加的多,但我直觉上觉得用高品质单反如无敌兔单张连续拍摄其精度将远远超过所谓冷冻ccd
tbb1 发表于 2012-12-27 15:04 static/image/common/back.gif
楼主解决了星表,以后我等就可以轻松点了。
单片机的应用,主要是可以甩掉电脑,扛着个电脑不是件快乐的事 ...
呵呵,星表问题其实没有解决,现在只是在windows系统下能够使用,单片机是没法用的。
至于模块化的单片机,我觉得8位或者16位的cpu单一负责一个模块都有点吃力吧,按你的思路好像需要好几个单片机才能完成,并且之间的协调还存在问题,但是pc就不同了,一个pc能够完成你所说的所有功能还有富余,我的设想是一台pc或者笔记本完成所有模块,控制、采集、传输一个设备就完成了,岂不是更简单实用?
单片机其实只负责usb通信和发脉冲给电机是最好。电脑带并口还是有些问题,并口太少了,如果是usb或wifi,你用手机,平板,电脑都可以控制 tbb1 发表于 2012-12-27 18:44 static/image/common/back.gif
单片机其实只负责usb通信和发脉冲给电机是最好。电脑带并口还是有些问题,并口太少了,如果是usb或wifi,你 ...
电脑和51单片机实时通信 是不是串口 对串口 最方便?
tbb1 发表于 2012-12-27 18:44 static/image/common/back.gif
单片机其实只负责usb通信和发脉冲给电机是最好。电脑带并口还是有些问题,并口太少了,如果是usb或wifi,你 ...
用单片机来接收USB信号、发脉冲的话,我又觉得大材小用了,其实goto软件使用USB口输出信号不难,难就难在把USB中的数据流转换成可驱动步进驱动板的脉冲,可惜我是电子小白,但是觉得在USB下面接个晶振,再加上信号解析电路来驱动步进驱动板也不是太难的事情,论坛有电子方面的达人还请指教一下! 角落里的烟嘴 发表于 2012-12-27 21:05 static/image/common/back.gif
电脑和51单片机实时通信 是不是串口 对串口 最方便?
串口对串口应该最简单。
但是通用性不好。
你换了个机器,比如哪天买了个笔记本,原来的程序就没法用,你还得买USB转串口电缆。
现在设备的趋势,USB/WIFI/蓝牙是最通用的接口,因此,如果你5年后还想用GOTO,建议直接用这几个接口。
xwxwwx 发表于 2012-12-27 23:07 static/image/common/back.gif
用单片机来接收USB信号、发脉冲的话,我又觉得大材小用了,其实goto软件使用USB口输出信号不难,难就难在 ...
你说的这个其实就是步进电机驱动板干的活啊。
步进电机驱动需要大电流,对电路设计和元器件使用还是有要求的,
费劲自己搭,不如去买成品的板子,几十块钱就搞定了。
单片机加驱动板的好处是你这两个东西都可以随时拆下来干别的,比如弄个自动窗帘啥的。呵呵
tbb1 发表于 2012-12-28 10:18 static/image/common/back.gif
你说的这个其实就是步进电机驱动板干的活啊。
步进电机驱动需要大电流,对电路设计和元器件使用还是有要 ...
应该不是步进驱动板干的活呀,步进驱动板上面没有晶振,没有信号解析和放大电路,步进驱动板只是一个给步进电机提供控制和电源的电路,而我说的意思并不是要自己做步进驱动板,而是要做PC和步进驱动板之间的接线,现在能够用的接线只有并口,我的想法是利用USB口加电路的方式来取代并口。
tbb1 发表于 2012-12-28 10:05 static/image/common/back.gif
串口对串口应该最简单。
但是通用性不好。
你换了个机器,比如哪天买了个笔记本,原来的程序就没法用,你 ...
1、usb单片机和 PC 之间 用usb来通信 这个。。。还没去找资料看
2、蓝牙目前的笔记本上木有蓝牙。但是买单片机和 PC的蓝牙组件 很方便能买到现成的单片机教程里好像很好找
3、wifi还需要一个无线路由器。。。在家里还好,如果在室外的话,可以手机来做一个 路由器 这样就能用tcp了也要找资料学习呢
不过为啥如果串口对串口 ,跟换笔记本电脑就不能用呢 ?com口数字不能对应么 还是什么原因 ?
角落里的烟嘴 发表于 2012-12-28 12:48 static/image/common/back.gif
1、usb单片机和 PC 之间 用usb来通信 这个。。。还没去找资料看
2、蓝牙目前的笔记本上木有蓝牙。但 ...
因为,现在出的笔记本,都已经木有了串口。呵呵
并且可靠性,我印象中串口是比较烂的。
USB有数据校验,串口虽然也有,但传输码流太慢了,所以和USB没法比。
而且,现在USB转IO的方案现在应该非常成熟加便宜。
象楼上某位说的USB转并口,一根线不过几块钱,虽然是转打印机的,但我想转其他接口也不会太复杂
WIFI也有现成模块,价格现在都很便宜,但是你一旦软件搞好了,那可就太省心了。用笔记本、手机都可以控制。
页:
[1]
2