yuersthe1 发表于 2015-3-19 11:43

发一个星野赤道仪52单片机C语言控制代码

本帖最后由 yuersthe1 于 2015-3-19 19:52 编辑

如题,实现的功能为:开机时以地球旋转速率追星,当按下P3.2管脚的按键时,P0.4的脉冲速率加快,P0.5电平拉低,赤道仪快速反转。本实例配合42步进电机,100:1减速箱和128细分驱动来用,若细分数和减速比不同,请各位大神们自行修改参数。。。继续附上本人使用的单片机:http://item.taobao.com/item.htm? ... 0801&_u=i3knvfu353f
本人使用的128驱动:http://item.taobao.com/item.htm? ... &abbucket=13#detail
以及本人使用的减速箱:http://item.taobao.com/item.htm? ... &abbucket=13#detail
还有protel连线图:

代码如下:
#include<reg52.h>
#define uchar unsigned char
#define uintunsigned int
#define FOSC12000000L
#define TSTEP0(65536-FOSC*16875/12000000)//16875*1us计时

sbit KEY0=P3^2;//反向加速按键
//sbit KEY2=P3^3;
sbit POUT=P0^4;
sbit POUT1=P0^5;
uchar Count0 = 0;
uint s;
uint s1;
//uchar Count1 = 0;

void delay500ms(void)
{
    uchar i,j,k;
    for(i=15;i>0;i--)
      for(j=202;j>0;j--)
         for(k=81;k>0;k--);
}

void delay1(uint del1)//延时del1X0.1ms 函数
{
    uint i,j;
    for(i=0;i<del1;i++)
      {
            for(j=0;j<10;j++);
      }
}

/*void Time0_Init()
{
      TMOD = 0x01;          //定时器0选用方式1
      TH0= TSTEP0;          //初值的计算
      TL0= TSTEP0>>8;      
      TR0= 1;                  //启动定时器
      ET0= 1;                  //打开定时器中断允许位
}

void Time0_Int() interrupt 1
{
      TH0 = TSTEP0;
      TL0 = TSTEP0>>8;
      Count0++;                        //长度加1
}*/

void Time1_Init()
{
//      TMOD = 0x10;          //定时器1选用方式1
      TH1= TSTEP0;          //初值的计算
      TL1= TSTEP0>>8;      
      TR1= 1;                  //启动定时器
      ET1= 1;                  //打开定时器中断允许位
}

void Time1_Int() interrupt 3
{
      TH1 = TSTEP0;
      TL1 = TSTEP0>>8;
      Count0++;                        //长度加1
}

void Outside_Init0(void)
{
      IT0 = 0;//低电平触发
      EX0 = 1;//外部中断0允许
//      IT1 = 0;//低电平触发
//      EX1 = 1;//外部中断1允许
}

void Outside_Int0(void) interrupt 0           //高速反转中断函数
{
    delay500ms();//延时500ms给步进电机反向旋转缓冲
        POUT1=0;//反向
        s=250;
        s1=1;//改s1可以修改反转速率
    while(1)
    {
          if(KEY0==0&&25000/s>s1)
      {                          
                  delay1(25000/s);//缓慢加速至高速
                        s++;
                  POUT=!POUT;
                }
                else if        (KEY0==0&&(25000/s<=s1))
                {
                  delay1(s1);
                  POUT=!POUT;
                }
                else
                {
                        delay500ms();
                        POUT1=1;
                        return;
                }
    }                               
}

void Main(void)
{
    Time1_Init();
      Outside_Init0();
      EA = 1;                //打开总中断
      POUT1=1;//正向
      while(1)
    {
      if(Count0==10)
      {
            Count0=0;
                        POUT=!POUT;
      }
    }
}




阿呆 发表于 2015-3-19 12:17

顶!

火星蒙面侠 发表于 2015-3-19 12:20

好。

feinanchen617 发表于 2015-3-19 12:47

这个程序开发环境是啥?汇编还是C?

feinanchen617 发表于 2015-3-19 12:48

KeilC?

xiaoguilink 发表于 2015-3-19 13:10

太详细了,点一下赞

马铃鼠 发表于 2015-3-19 13:22

赞一个,软件代码功能还可以丰富,硬件投入有点大,不过谐波减速的精度很好,驱动我的星野的没用细分模块,感觉那个对干扰太敏感。
看了下你的作品,不知道那个谐波减速箱的输出轴可不可以拆下来,那样的话,安装云台会方便不少。我还在拆解中,因为买了两个这个减速箱,想做赤道仪。。。

qiazi 发表于 2015-3-19 13:59

额,外行完全不懂

是不是买下这3个东西,这个代码烧进去
线连好就能用了…………

有内涵的豆沙包 发表于 2015-3-19 14:18

哈哈,好东西,手上还有一块51单片机,等下就做一个

有内涵的豆沙包 发表于 2015-3-19 14:20

feinanchen617 发表于 2015-3-19 12:48
KeilC?

应该是的

有内涵的豆沙包 发表于 2015-3-19 14:22

qiazi 发表于 2015-3-19 13:59
额,外行完全不懂

是不是买下这3个东西,这个代码烧进去


{:3_208:}要买很多种东西

火星蒙面侠 发表于 2015-3-19 14:49

马铃鼠 发表于 2015-3-19 13:22
赞一个,软件代码功能还可以丰富,硬件投入有点大,不过谐波减速的精度很好,驱动我的星野的没用细分模块, ...


一般都是100减速比的谐波减速,加上128细分的驱动器,加上最小单片机系统,加上材料,至少300以上。我曾经想过用一般的减速步进电机加上蜗轮蜗杆减速,至少可以省一半的成本,但是不知道蜗轮蜗杆精度怎么样,另外单片机也半知半解,一直没有行动。马铃鼠兄有什么好的意见{:5_281:}

yuersthe1 发表于 2015-3-19 14:59

有内涵的豆沙包 发表于 2015-3-19 14:20
应该是的

是的,用keil编译的

yuersthe1 发表于 2015-3-19 15:13

马铃鼠 发表于 2015-3-19 13:22
赞一个,软件代码功能还可以丰富,硬件投入有点大,不过谐波减速的精度很好,驱动我的星野的没用细分模块, ...

我用铝板做了一个平衡套件安在谐波减速箱法兰盘上面,那根中轴都不用锯掉了,嘿嘿

yuersthe1 发表于 2015-3-19 15:26

qiazi 发表于 2015-3-19 13:59
额,外行完全不懂

是不是买下这3个东西,这个代码烧进去


还要买铝盒,铝块,要钻孔加工,还要买极轴镜,很折腾的。不过有空闲自己做一个也不错哈。贴代码出来也是为了方便大家少走弯路。

ke-pler 发表于 2015-3-19 16:40

以前也做过电机驱动,看了下代码,感觉那个ISR中缓慢加速至高速调用delay不合适,可直接修改定时器的TH,TL寄存器的值实现软启动。

yuersthe1 发表于 2015-3-19 17:01

ke-pler 发表于 2015-3-19 16:40
以前也做过电机驱动,看了下代码,感觉那个ISR中缓慢加速至高速调用delay不合适,可直接修改定时器的TH,TL ...

谢谢,高手们自己修改哈,本人能力有限,只是实现需求罢了,没有想太多。

马铃鼠 发表于 2015-3-19 17:22

yuersthe1 发表于 2015-3-19 15:13
我用铝板做了一个平衡套件安在谐波减速箱法兰盘上面,那根中轴都不用锯掉了,嘿嘿
...

锯掉了?好锯吗,看着材料挺硬的。。。

马铃鼠 发表于 2015-3-19 17:36

火星蒙面侠 发表于 2015-3-19 14:49
一般都是100减速比的谐波减速,加上128细分的驱动器,加上最小单片机系统,加上材料,至少300以上。我曾 ...

谐波减速可以用,但是在星野赤道仪这里就有点大材小用,毕竟不是goto,不用考虑回差的问题,就算是谐波减速,也不可能没有空程,只是比较小罢了,更何况是这种二手的。减速步进电机很多人不喜欢估计是考虑到了齿轮箱的空程问题,我也挺忌讳,加上速度太慢,所以在goto系统中不用。星野赤道仪中精度最好的据说是剪刀脚,其实原因很简单,一般用蜗轮减速的,都有周期误差,这是蜗轮的加工精度决定的,也是几乎不可避免的。细分模块可以软件操作这点在goto中特别重要,程序可以随时设置细分达到变速,这是齿轮减速箱不具备的优点,所以,用在星野赤道仪这里感觉也是有点大材小用了。
我感觉性价比最高的,业余条件也最容易加工的,就是类似剪刀脚(门板)结构的赤道仪,毕竟星野拍摄时间不会太长,那个螺纹行程足够了,软件配合操作,达到行程让电机回转很容易实现。
北京天文同好会有一篇文章专门介绍了改良版的“剪刀脚”,可以减小剪刀脚为了精度而增大的臂长,可以找来看下,感觉做星野非常合适,而且投入应该非常小。如果为了提高精度,可以采用廉价的16细分模块,某宝5块钱搞定。。。

火星蒙面侠 发表于 2015-3-19 17:46

马铃鼠 发表于 2015-3-19 17:36
谐波减速可以用,但是在星野赤道仪这里就有点大材小用,毕竟不是goto,不用考虑回差的问题,就算是谐波减 ...


这个好,有空了试试。
页: [1] 2
查看完整版本: 发一个星野赤道仪52单片机C语言控制代码