角落里的烟嘴 发表于 2013-1-6 15:37

把 @wolfbeard的 VB 程序 解剖一下, 不会VB的人只要稍微有点编程基础就能看懂为目的。虽然本帖就一直是我自己再回复。。。希望能给想要折腾的同学们 有点帮助
以下的VB代码的作用只有一下几个
1、建立TCP服务器,获得stellarium发出的数据
2、处理获得的数据,按标准的 RADEC 来显示
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

角落里的烟嘴 发表于 2013-1-10 12:55

xwxwwx 发表于 2012-12-25 18:51 static/image/common/back.gif
虽然我没有完全理解你的思路,但是还是觉得你的思路有问题。

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

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

角落里的烟嘴 发表于 2013-1-11 01:01

不会软件编程,伤不起,不懂的地方一个接着一个

wujingping 发表于 2013-1-11 10:31

用的啥牌号的赤道仪啊,你们不知道有个ascom赤道仪通用平台吗?不知道有个Stellarium Scope已经干了你们想干的事情吗?

角落里的烟嘴 发表于 2013-1-11 12:15

wujingping 发表于 2013-1-11 10:31 static/image/common/back.gif
用的啥牌号的赤道仪啊,你们不知道有个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


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 static/image/common/back.gif
还是用的你先前买的单片机来做的?

是的啊

emc 发表于 2013-2-22 23:27

wolfbeard的程序楼主注释的很详细,当初花了很长时间才看懂的。系统减速比控制在1000以内,goto速度才合适。HEQ5减速比是705.

角落里的烟嘴 发表于 2013-2-23 01:30

emc 发表于 2013-2-22 23:27 static/image/common/back.gif
wolfbeard的程序楼主注释的很详细,当初花了很长时间才看懂的。系统减速比控制在1000以内,goto速度才合适 ...

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

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

magichero 发表于 2013-2-23 07:30

本帖最后由 magichero 于 2013-2-23 07:32 编辑

角落里的烟嘴 发表于 2013-2-23 01:30 static/image/common/back.gif
哈哈 自己琢磨 希望对看帖的人有用, 系统减速比是指所有的减速组算出来的? 包括 涡轮蜗杆?

我是换齿 ...
很好啊,硬件软件都很精通。

emc 发表于 2013-2-23 07:34

角落里的烟嘴 发表于 2013-2-23 01:30 static/image/common/back.gif
哈哈 自己琢磨 希望对看帖的人有用, 系统减速比是指所有的减速组算出来的? 包括 涡轮蜗杆?

我是换齿 ...

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

角落里的烟嘴 发表于 2013-2-23 10:42

emc 发表于 2013-2-23 07:34
系统减速比是指涡轮蜗杆135*减速电机变比47/9=705,64细分。
你没有用步进电机控制芯片?建议用专用芯片 ...

没有,简单的驱动板 L298N 不带细分的,便宜,只要20多, 带细分的板子 我觉得我不会弄,而且最便宜要49元,TB6560的芯片,带16细分的
页: 1 2 [3] 4 5
查看完整版本: 菜鸟如何自制通过stellarium来控制赤道仪goto--基本功能完成