陈亚龙2010 发表于 2014-3-15 17:26

DIY花费不到一千元的电控轨道,一样用,一样抗造。

本帖最后由 陈亚龙2010 于 2014-3-15 17:32 编辑

最近看到很多朋友都在自己做电控轨道,自己也腾出了点时间做了一套,主要是为了自己使用方便,但是也有一些小体会,今天就把制作过程录制的视频片段放出来和大家分享,一段视频是用手机拍的,晃动比较厉害还请大家不要介意,
喜欢diy的朋友都应该能够深深的体会到自己动手制作过程的乐趣,但是也有失败时的沮丧,不断的尝试不断的改进,最终成功的喜悦只有自己能够深深的体会。今天我就给大家带来一段本人自己做的一套电控轨道的制作全过程,希望对喜欢自己动手的朋友有所帮助吧。先说一下一共花费的价钱:所有用到的东西到最后出成品一共花费了不到1000元。很多不足之处请多多包含。
下面是视频演示。


视频一:使用程序加单片机来控制电机

http://player.56.com/v_MTA5MDgyMTc0.swf

视频二:电机接线和安装更换电机

http://player.56.com/v_MTA5MDg1OTEx.swf



拍摄片段小效果

http://player.56.com/v_MTA5MDQzODM2.swf

冰欲牛仔 发表于 2014-3-15 20:30

LZ 是用照片延时还是把帧率减低拍的视频?

陈亚龙2010 发表于 2014-3-15 21:33

冰欲牛仔 发表于 2014-3-15 20:30 static/image/common/back.gif
LZ 是用照片延时还是把帧率减低拍的视频?

帧率减低拍的

haoys12 发表于 2014-3-15 23:25

效果不错!单片机是那买的,神马型号?

有竹居 发表于 2014-3-15 23:50

赞一下DIY高手!^24^

Tin-wong易小天 发表于 2014-3-16 00:21

想问驱动单片的那段代码要去哪里找呀?LZ能分享一下么?

bg4jj 发表于 2014-3-16 13:54

同问,记号.

陈亚龙2010 发表于 2014-3-16 17:39

haoys12 发表于 2014-3-15 23:25 static/image/common/back.gif
效果不错!单片机是那买的,神马型号?

板子我不知道是什么型号的,我是在电子城买的,芯片是STC 12C2052AD的型号。这个板子是做高端一点的遥控汽车用的。

陈亚龙2010 发表于 2014-3-16 17:45

本帖最后由 陈亚龙2010 于 2014-3-16 17:47 编辑

Tin-wong易小天 发表于 2014-3-16 00:21 static/image/common/back.gif
想问驱动单片的那段代码要去哪里找呀?LZ能分享一下么?
代码复制过来的话起头有很多空格,不知道论坛里可不可以看的到,后缀的//加汉字都是简单的中文描述。

------------------------------------------------------*/
#include<STC12C2052AD.H> //头文件
#define KeyPort P3      //定义P3为键盘端口
sbit A1=P1^0;      //定义直流电机A正端口
sbit A2=P1^1;      //定义直流电机A负端口
sbit B1=P1^2;      //定义直流电机B正端口
sbit B2=P1^3;      //定义直流电机B负端口
#define DCOUT_A1   {A1=1;A2=0;}//A电机正转
#define DCOUT_A2   {A1=0;A2=1;}      //A电机反转
#define DCOUT_B1   {B1=1;B2=0;}//B电机正转
#define DCOUT_B2   {B1=0;B2=1;}      //B电机反转
#define DCOUT_AOFF{A1=1;A2=1;}//A电机停
#define DCOUT_BOFF{B1=1;B2=1;}//B电机停
unsigned int b=2000;      //中断初值变量
unsigned char PWM_ON;   //定义速度等级
#define CYCLE 10      //周期
bit Flag1;      //启停标志位
bit Flag2;      //正反转标志位
void DelayMs (unsigned int a)      //大致1ms延时
{
      unsigned int i;                        //无符号整型局部变量
      while(a--!=0)                        
      {
                for(i=0;i<600;i++);      
      }
}
unsigned char KeyScan(void)//按键扫描函数,返回扫描键值
{
      unsigned char Keyvalue;      //无符号字符型变量
      if(KeyPort!=0xff)                        //判断P3口是否有按键按下
      {
                DelayMs(10);                        //按键去抖
                if(KeyPort!=0xff)                //再次判断
                {
                        Keyvalue=KeyPort;                //赋值
                        while(KeyPort!=0xff);//等待按键松开
                        switch(Keyvalue)                //读取按键,提取返回值
                        {
                              case 0xfe:return 1;break;      //第一个键按下,返回1
                              case 0xfd:return 2;break;      //第二个键按下,返回2
                              case 0xfb:return 3;break;      //第三个键按下,返回3
                              case 0xf7:return 4;break;      //第四个键按下,返回4
                              default:return 0;break;                //条件不符合,返回0
                        }
                }      
      }
      return 0;      //没按键按下返回0      
}
void Init_Timer0(void)      //初始化定时器0
{
      TMOD=0x01;                              //定时器0,使用模式1,16位定时器
      TH0=(65536-b)/256;      //给定初值
      TL0=(65536-b)%256;
      EA=1;                //打开总中断
      ET0=1;      //打开定时器中断
      TR0=1;      //开定时器
}
void main()      //主函数
{
      unsigned int num;      //无符号整型变量
      Init_Timer0();                //初始化定时器0
      DCOUT_AOFF                              //全部断电
      DCOUT_BOFF
      PWM_ON=5;
      while(1)                              //大循环
      {
                num=KeyScan();      //循环调用按键扫描
                if(num==1)                //启停按键
                        Flag1=!Flag1;      //取反
                else      if(num==2)      //正反转按键
                                        Flag2=!Flag2;                //取反
                                 else if(num==3)//第三个按键,速度等级增加
                                    {
                                                   if(PWM_ON<CYCLE)
                                                   PWM_ON++;
                                          }      
                                           else if(num==4)//第四个按键,速度等级减小
                                              {
                                                         if(PWM_ON>0)
                                                         PWM_ON--;
                                                }                                                      
      }
}
void Timer0_isr(void) interrupt 1      //定时器中断子程序
{
      static unsigned char count;                //静态局部变量
      TH0=(65536-b)/256;      //重新赋值
      TL0=(65536-b)%256;
      if(Flag1==0)                        //停转标志
                {
                        DCOUT_AOFF                              //全部断电
                        DCOUT_BOFF
                }
      else if(Flag1==1&&Flag2==1)                //正转
                        {
                              if (count==PWM_ON)
                            {
                                     DCOUT_AOFF
                                        DCOUT_BOFF
                            }
                                  count++;
                              if(count == CYCLE)   
                            {
                                    count=0;
                                        if(PWM_ON!=0)
                                        {
                                                   DCOUT_A1
                                                DCOUT_B1
                                        }      
                            }
                        }
                        else if(Flag1==1&&Flag2==0)                //反转
                        {
                              if (count==PWM_ON)
                            {
                                     DCOUT_AOFF
                                        DCOUT_BOFF
                            }
                                  count++;
                              if(count == CYCLE)   
                            {
                                    count=0;
                                        if(PWM_ON!=0)
                                        {
                                                   DCOUT_A2
                                                DCOUT_B2
                                        }      
                            }
                        }
}

结束恢复初始状态

haoys12 发表于 2014-3-17 11:44

我是用TC5510做的,操控相对复杂些。

你这个控制器下来要多少钱?

陈亚龙2010 发表于 2014-3-17 18:47

haoys12 发表于 2014-3-17 11:44 static/image/common/back.gif
我是用TC5510做的,操控相对复杂些。

你这个控制器下来要多少钱?

你用的是步进电机控制器,做的是延时间断式的方法,电机也是步进电机。我这个是用的直流电机,用的就是stc的芯片,我的这些件都是散的,用单片机控制的,操作比较简单,就是控制加速减速 正反转限位,其他的功能也没有,我做完后盒子上面就做了三个键,一个调速的编码器,一个启停限位键,一个正反转,单片机98元,控制版30元。

haoys12 发表于 2014-3-18 10:47

我也是慢速长时间拍延时的。你不是说也可以控制步进电机吗?是不是要换芯片或软件才能控制。

陈亚龙2010 发表于 2014-3-18 20:25

haoys12 发表于 2014-3-18 10:47 static/image/common/back.gif
我也是慢速长时间拍延时的。你不是说也可以控制步进电机吗?是不是要换芯片或软件才能控制。

不用换芯片,直接烧一下程序就可以了,插上线10秒钟搞定。

陈亚龙2010 发表于 2014-3-18 20:29

haoys12 发表于 2014-3-18 10:47 static/image/common/back.gif
我也是慢速长时间拍延时的。你不是说也可以控制步进电机吗?是不是要换芯片或软件才能控制。

我试了一下步进电机的控制,和直流电机差不多,只是比直流电机的可操控功能更多一些,比方说限制转多少圈就反转,反转多少圈后就正转,或者重复,或者重复多少次后停止断电。

haoys12 发表于 2014-3-18 21:36

那这款单板机还真不错呢。

其实太多功能真没什么用。

ytf356 发表于 2014-3-23 18:11

不错 不知道你有没有考虑再改进一下功能,比如加个快门同步

Ardoncg 发表于 2014-4-1 09:18

求教控制器的配件做法

Ardoncg 发表于 2014-4-1 09:32

陈亚龙2010 发表于 2014-3-18 20:25 static/image/common/back.gif
不用换芯片,直接烧一下程序就可以了,插上线10秒钟搞定。

烧一下是怎么烧?我用的也是步进电机

Ardoncg 发表于 2014-4-1 09:35

不知道怎么烧哎我现在的控制器巨大,想重新改一下不知道怎么改,能加你QQ吗

Ardoncg 发表于 2014-4-1 09:35

595480780

☆冰軒杰少☆ 发表于 2014-4-1 17:56

冰欲牛仔 发表于 2014-3-15 20:30 static/image/common/back.gif
LZ 是用照片延时还是把帧率减低拍的视频?

咳咳,弱弱的问下帧率减低是什么意思?跟抽帧相同吗?

陈亚龙2010 发表于 2014-4-3 14:42

☆冰軒杰少☆ 发表于 2014-4-1 17:56 static/image/common/back.gif
咳咳,弱弱的问下帧率减低是什么意思?跟抽帧相同吗?

跟抽针不相同,就像延时照片一样,只是是动起来连续的。

☆冰軒杰少☆ 发表于 2014-4-3 17:37

陈亚龙2010 发表于 2014-4-3 14:42 static/image/common/back.gif
跟抽针不相同,就像延时照片一样,只是是动起来连续的。

谢谢你的答案^28^

笑天天 发表于 2014-9-23 01:15

楼主厉害

神浮拍客 发表于 2014-9-23 11:27

相同的问题。您的延时是后期抽帧吗?
页: [1]
查看完整版本: DIY花费不到一千元的电控轨道,一样用,一样抗造。