电子快门线制作

  一、快门线工作原理

  现在的单反或者数码相机拍照需要完成对焦和开启快门关闭快门这两个操作。通常人在机器旁边时,使用相机上的机械按钮就可以实现对焦和按下快门的操作。如果不在机器旁,就需要借助相机的定时器,或者一些外部设备了,比如说快门线。

  所谓快门线就是一种开关,它连接着相机的三条信号线:地、对焦、快门。快门线通过控制这三条信号线的通断,相机就执行相应的操作。例如当地和对焦导通时,相机就执行对焦操作。当地和快门导通时相机就会按下快门从而拍照。因此网上有很多DIY快门线的教程都是使用的耳机线加机械开关制作的,暂且将其称之为机械快门线。那么如果使用一块单片机或者模拟电路来控制电子开关的通断,这样不就是电子式的快门线吗?

二、电子快门线整体方案设计

  电子快门线目前有两种方案,一种方案采用比较器,另一种方案采用单片机实现。

  首先电子快门线需要一个输入量,这个量可以是小型的按键、大一点的开关或者是红外遥控等等一些信号量的输入。以遥控PPM信号为例,通常遥控PPM信号会输入三种脉宽的PWM信号:1ms、1.5ms,2ms。那么电子快门线就需要能够分辨这些信号。如果是比较器信号,那就是分辨输入的电压,当然由于占空比很低,前级还需要设计信号调理电路。如果使用单片机实现的话,那就是通过单片机的外设来捕获脉宽。能够识别信号之后,就是输出了。比较器电路很简单,输入和电路设计值匹配,就会输出高电平。单片机则需要在程序里判断从而控制对应引脚输出高低电平。有了输出,还要控制电子开关的关断导通。电子开关可以考虑使用光耦或者固态继电器来做。光耦的频率较高,带负载能力差一些;固态继电器频率低,带负载能力强。根据实际来选择就行了。直接使用IO驱动这些电路肯定是不行的,还要设计一个开关的驱动电路,像这种场景使用8050三极管即可。

三、电子快门线硬件设计

  这里采用更加灵活的单片机方案,按照上面的分析可以设计出以下电路:

  单片机电路:

 

  电子开关驱动电路:

 

 

 四、单片机程序设计

  目前实现了两个小功能:根据脉宽捕获来控制电子开关通断以及定时器模式实现自动拍照。单片机使用的是STC8G1K08A。

  以下代码可供参考:

 1 /********************* Timer0中断函数************************/
 2 void timer0_int (void) interrupt TIMER0_VECTOR
 3 {
 4     if(State_Flag)
 5   {
 6         cnt++;
 7     
 8         if(cnt == 50)
 9         {
10             cnt=0;
11             P33 = 1;
12             
13         }
14     
15         if(cnt == 25)
16         {
17             P33 = 0;
18         }
19     }
20 }
21 
22 void    PCA_Handler (void) interrupt PCA_VECTOR
23 {
24     
25     if(CCF2)    //PCA模块2中断
26     {
27         
28         CCF2 = 0;        //清PCA模块2中断标志
29         _nop_();
30         _nop_();
31         _nop_();
32         _nop_();
33         _nop_();//空五个机器周期约2us 等待电平稳定
34         
35         while(P54)
36         {
37                     
38             delay_15Us();
39             
40             Us_Cnt++;  //用来记录过了多少个15Us
41             
42         }
43         
44         Time_Peroid = (15 * Us_Cnt) + 2 ; //单位微秒
45         
46         Us_Cnt = 0;                        //CNT清零
47         
48         if(!State_Flag)
49         {
50                 if( Time_Peroid < 1300)                                                  //检测到脉宽为1ms
51                 {
52                     P33 = 0;
53                     P32 = 0;
54                 }
55          
56                 if(Time_Peroid>1300 && Time_Peroid < 1800)      //检测到脉宽为1.5ms
57                 {
58                     P33 = 1 ;
59                     P32 = 0 ;
60                 }
61         
62                 if(Time_Peroid>1800 )                                                        //检测到脉宽为2ms
63                 {
64                     P33 = 1 ;
65                     P32 = 1 ;
66                 }
67         }
68     }
69 }

五、实物展示

  

 

  

posted @ 2021-02-06 11:19  LyricsWu  阅读(2485)  评论(0编辑  收藏  举报