牧夫天文网

 找回密码
 加入牧夫(请注明天文爱好者,否则无法通过审核)

QQ登录

只需一步,快速开始

[自制DIY] 菜鸟如何自制通过stellarium来控制赤道仪goto--基本功能完成

  [复制链接]
 楼主| 角落里的烟嘴 发表于 2013-1-6 15:37 | 显示全部楼层 来自: 江苏省苏州市 联通
@wolfbeard  的 VB 程序 解剖一下, 不会VB的人只要稍微有点编程基础就能看懂为目的。虽然本帖就一直是我自己再回复。。。希望能给想要折腾的同学们 有点帮助
以下的VB代码的作用只有一下几个
1、建立TCP服务器,获得stellarium发出的数据
2、处理获得的数据,按标准的 RA  DEC 来显示
3、处理获得的数据,使得能进一步处理成为可以驱动单片机的数据

VB代码如下:

Public DEC As Double, RAinD As Double
'声明公共变量 DEC 是赤纬轴数值  RAinD是代表赤经轴值单位是°, 这两个变量都是 Double型数据,带小数点后面的小数的
Private Sub Form_Load()
'窗体加载时,就立马执行下面的命令

tcpserver.LocalPort = 10001
'tcpserver是在VB里面建立的winsock控件的名字,另取的原名叫winsock1(此空间是用来处理TCP协议的数据的,具体用法请百度吧)
'上面语句的意思是设置tcpserver的监听端口号为10001
tcpserver.Listen
'开启控件开始监听,等于是软件一打开,就开始监听了
End Sub


Private Sub tcpserver_ConnectionRequest(ByVal requestID As Long)
        '定义winsock控件时间函数,有连接请求时触发
        If tcpserver.State <> sckClosed Then
                  '当tcpserver的状态不等于关闭时
                tcpserver.Close                   '这里要先关闭,要不会报错
                tcpserver.Accept requestID        '在ConnectionRequest
                                                                  '中用Accept方法来接收客户端的连接请求
        End If
End Sub

Private Sub tcpserver_DataArrival(ByVal bytesTotal As Long)
        
' 控件事件函数,一旦接受到数据则执行下面的代码 ,bytesTotal 是用来存储S发送过来的数组的长度

'获取并处理DEC的值        
Dim i As Long                    
Dim ti As Long                  
Dim DECd As Long            ’ DEC°
Dim DECm As Long          ’DEC分
Dim DECs As Long            ’DEC秒  都是角度单位

Dim ByteArray() As Byte                ' 定义一个比特型数组
ReDim ByteArray(bytesTotal - 1)    '  ReDim是过程级别中使用,用于为动态数组变量重新分配存储空间
                                                       ' 如果bytesTotal是20,则ByteArray分配19个储存空间

tcpserver.PeekData ByteArray, vbByte, bytesTotal
'控件属性,用来获得从Stellarium发送过来的数据,以字节数组 存储到 ByteArry里面,数据长度存储到bytesTotal中
'下面开始处理获得数据
For i = 1 To 4
ti = 8 - 2 * i
DEC = DEC + ByteArray(bytesTotal - i) * 16 ^ ti        
'将St发送过来数组处理成十进制,DEC的数据是最后四个数据,当i等于1时,ti=6,DEC=DEC+ByteArray(20- 1)*16
                                                                                                                                        '=0+ 第20位数据*16
Next
DEC = DEC / 1073741824 * 90                           'Stellarium的 TCP协议规定0x40000000 = 90degrees
If DEC > 90 Then DEC = DEC - 360                     '如果大于90度,就需要360-dec
'   此处得到的 DEC 值是 单位为 ° 的一个十进制值 ,比如 23.345°
'   需要处理成步进电机转多少个步距角
        
        
'获取并处理RA的值,类似上面的
Dim j As Long
Dim RAinH As Double

Dim RA As Double
Dim tj As Long
Dim RAh As Long
Dim RAm As Long
Dim RAs As Long
For j = 5 To 8
tj = 8 - 2 * (j - 4)
RAinH = RAinH + ByteArray(bytesTotal - j) * 16 ^ tj
Next
RAinH = RAinH / 1073741824 * 6                            '根据协议换算
RAinD = RAinH * 15                                       '一小时等于15°


Timer1.Enabled = True: Timer1.Interval = 50    '延迟了50ms? 我是这么理解的啊不知道准确不准确

'将DEC\RA的值处理成我们常看到的格式 :   xx° xx’ xx”, xxH xxM xxS
DECd = Fix(DEC)          '取整,算多少°

DECm = Fix((DEC - DECd) * 60)  '   小数点后面计算成多少 '    (分)

DECs = Int(((DEC - DECd) * 60 - DECm) * 60 + 0.5)    ' 计算多少秒,这里加了0.5,这是为什么呢 ??

Text7.Text = DECd             ' DEC 度
Text8.Text = Abs(DECm)    ' 整数的绝对值
Text9.Text = Abs(DECs)       '整数的绝对值

'同理处理 RA的值来 显示
RA = RAinH

RAh = Fix(RA)
RAm = Fix((RA - RAh) * 60)
RAs = Int(((RA - RAh) * 60 - RAm) * 60 + 0.5)

Text1.Text = RAh
Text2.Text = RAm
Text3.Text = RAs

End Sub

回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-1-10 12:19 | 显示全部楼层 来自: 江苏省苏州市 联通
单片机 步数 和 转动方向 已计算出来 继续学习 串口 和 单片机 如何通信 VB空间 MScomm
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-1-10 12:21 | 显示全部楼层 来自: 江苏省苏州市 联通
v1.jpg
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-1-10 12:55 | 显示全部楼层 来自: 江苏省苏州市 联通
xwxwwx 发表于 2012-12-25 18:51
虽然我没有完全理解你的思路,但是还是觉得你的思路有问题。

stellarium 发送的信号我没有记错的话应该是 ...

第二是根据stellarium 的数据流方式来解析数据,转换成单片机能够执行的单个命令。
VB来解释 stellarium 的数据流,并转成单片机能够执行的命令, VB 从串口向 单片机发送数据
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-1-11 01:01 来自手机 | 显示全部楼层 来自: 江苏省南京市 联通
不会软件编程,伤不起,不懂的地方一个接着一个
回复 支持 反对

使用道具 举报

wujingping 发表于 2013-1-11 10:31 | 显示全部楼层 来自: 上海市浦东新区 电信
用的啥牌号的赤道仪啊,你们不知道有个ascom赤道仪通用平台吗?不知道有个Stellarium Scope已经干了你们想干的事情吗?

点评

赤道仪是 EQ3D , 电机是自己做的 单片机 和 步进电机  详情 回复 发表于 2013-1-11 12:15
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-1-11 12:15 | 显示全部楼层 来自: 江苏省苏州市 联通
wujingping 发表于 2013-1-11 10:31
用的啥牌号的赤道仪啊,你们不知道有个ascom赤道仪通用平台吗?不知道有个Stellarium Scope已经干了你们想 ...

赤道仪是 EQ3D , 电机是自己做的 单片机 和 步进电机
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-1-25 12:29 | 显示全部楼层 来自: 江苏省苏州市 联通
停了一段时间, 小孩生病 晚上一直没太多时间整,不过抽空拍了拼接月亮,这个星期家里又有事情。
现在的问题:1、 PC 单片机串口通信 单字符 成功, step 数传送不成功
            2、 赤纬轴电机未上
            3、 步进电机 无法高速转动
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-2-13 01:49 | 显示全部楼层 来自: 江苏省苏州市 电信
我一直在折腾了呢
终于总算吧 单片机部分的代码 改好,程序写的是 菜鸟中的菜鸟,各种抄袭,各种不效率的写法 ,但是功能总算初步出来了。
现在 VB写的外挂程序可以从星图软件中抓出数据给到单片机, 单片机可以控制两个步进电机分别按照需要的角度进行转动。
发帖留念!
继续还有其他的问题需要解决,就折腾!!天气不好,只能吓折腾了。
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-2-14 23:08 来自手机 | 显示全部楼层 来自: 江苏省南京市 联通
1:50 的减速电机 获得不了 太高的速度 最高只有 20 rpm 左右,goto的速度太慢了呐,郁闷
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-2-22 01:17 | 显示全部楼层 来自: 江苏省苏州市 电信
v1.JPG
VB 外挂 功能全有了,既能goto赤道仪(DEC 控制正确,RA轴算法在改,而且齿轮比也换了,大->小 传动了,为了获得更高的goto速度,而减少电跟时的精度,精度下降多少还没计算),也能手动控制赤道仪 RA \DEC 的转动了。
剩下
1、再需要把 RA轴的goto控制算法重新弄弄
2、VB 外挂 把物理键盘 按键加上来,baidu了好几个,都不对,是不是 笔记本不一样?
3、赤道仪的姿势问题,镜子在东侧还是西侧的。。。这个好像不难区分,稍微手动一下看看是怎么弄的,再看看能不能靠软件计算
4、看看 导星这个功能怎么加进来, 是通过VB走,还是 直接用GM导星大师,从并口输出信号,直接连到单片机上,在单片机里再写段程序,给导星用。。。。
还有。。。。其他的还没有想到
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-2-22 01:25 | 显示全部楼层 来自: 江苏省苏州市 电信
这段时间 好几位都做了goto啊 我列一下啊 我制作时需要了解些什么东西
1、硬件DIY 主要是 电机、齿轮并安装到赤道仪上
2、51单片机、步进电机、相关知识,得懂点C语言,还有要懂点数电、模电
3、编程 51中基础知识、串口通信知识、中断、定时器。VB编程 TCP协议、串口通信 、基础知识
4、天文知识, 天体坐标体系的认识,星体运动规律,
还有。。。。
回复 支持 反对

使用道具 举报

tbb1 发表于 2013-2-22 09:50 | 显示全部楼层 来自: 上海市 东方有线
楼主有图片、源代码共享下哈。正在折腾。
关于GOTO速度的问题,不必纠结。我的想法很简单,单片机算出目标星与望远镜的指向之间的差距,显示出来,这个差距太大就解除赤经赤纬锁定,手动掰之。距离小么,就慢慢导吧。呵呵。
回复 支持 反对

使用道具 举报

v2500 发表于 2013-2-22 10:00 | 显示全部楼层 来自: 广东省深圳市 电信
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-2-22 13:27 | 显示全部楼层 来自: 江苏省苏州市 联通
v2500 发表于 2013-2-22 10:00
还是用的你先前买的单片机来做的?

是的啊
回复 支持 反对

使用道具 举报

emc 发表于 2013-2-22 23:27 | 显示全部楼层 来自: 浙江省杭州市 联通
wolfbeard的程序楼主注释的很详细,当初花了很长时间才看懂的。系统减速比控制在1000以内,goto速度才合适。HEQ5减速比是705.

点评

哈哈 自己琢磨 希望对看帖的人有用, 系统减速比是指所有的减速组算出来的? 包括 涡轮蜗杆? 我是换齿轮了,40齿装载电机上,30装蜗杆上 电机 7.5/50 goto时 4拍,全步, 跟踪时 半步  详情 回复 发表于 2013-2-23 01:30
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-2-23 01:30 | 显示全部楼层 来自: 江苏省苏州市 电信
emc 发表于 2013-2-22 23:27
wolfbeard的程序楼主注释的很详细,当初花了很长时间才看懂的。系统减速比控制在1000以内,goto速度才合适 ...

哈哈 自己琢磨 希望对看帖的人有用, 系统减速比是指所有的减速组算出来的? 包括 涡轮蜗杆?

我是换齿轮了,40齿装载电机上,30装蜗杆上
电机 7.5/50   goto时 4拍,全步, 跟踪时 半步

点评

emc
系统减速比是指涡轮蜗杆135*减速电机变比47/9=705,64细分。 你没有用步进电机控制芯片?建议用专用芯片驱动,10多元一片,编程方便,驱动性能好,有的可以16细分。  详情 回复 发表于 2013-2-23 07:34
系统减速比是指涡轮蜗杆135*减速电机变比47/9=705,64细分。 你没有用步进电机控制芯片?建议用专用芯片驱动,10多元一片,编程方便,驱动性能好,有的可以16细分。  详情 回复 发表于 2013-2-23 07:30
回复 支持 反对

使用道具 举报

magichero 发表于 2013-2-23 07:30 | 显示全部楼层 来自: 浙江省杭州市 联通
本帖最后由 magichero 于 2013-2-23 07:32 编辑
角落里的烟嘴 发表于 2013-2-23 01:30
哈哈 自己琢磨 希望对看帖的人有用, 系统减速比是指所有的减速组算出来的? 包括 涡轮蜗杆?

我是换齿 ...

很好啊,硬件软件都很精通。
回复 支持 反对

使用道具 举报

emc 发表于 2013-2-23 07:34 | 显示全部楼层 来自: 浙江省杭州市 联通

系统减速比是指涡轮蜗杆135*减速电机变比47/9=705,64细分。
你没有用步进电机控制芯片?建议用专用芯片驱动,10多元一片,编程方便,驱动性能好,有的可以16细分。

点评

没有,简单的驱动板 L298N 不带细分的,便宜,只要20多, 带细分的板子 我觉得我不会弄,而且最便宜要49元,TB6560的芯片,带16细分的  详情 回复 发表于 2013-2-23 10:42
回复 支持 反对

使用道具 举报

 楼主| 角落里的烟嘴 发表于 2013-2-23 10:42 来自手机 | 显示全部楼层 来自: 江苏省南京市 联通
emc 发表于 2013-2-23 07:34
系统减速比是指涡轮蜗杆135*减速电机变比47/9=705,64细分。
你没有用步进电机控制芯片?建议用专用芯片 ...

没有,简单的驱动板 L298N 不带细分的,便宜,只要20多, 带细分的板子 我觉得我不会弄,而且最便宜要49元,TB6560的芯片,带16细分的
回复 支持 反对

使用道具 举报

本版积分规则

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