電子快門線制作


  一、快門線工作原理

  現在的單反或者數碼相機拍照需要完成對焦和開啟快門關閉快門這兩個操作。通常人在機器旁邊時,使用相機上的機械按鈕就可以實現對焦和按下快門的操作。如果不在機器旁,就需要借助相機的定時器,或者一些外部設備了,比如說快門線。

  所謂快門線就是一種開關,它連接着相機的三條信號線:地、對焦、快門。快門線通過控制這三條信號線的通斷,相機就執行相應的操作。例如當地和對焦導通時,相機就執行對焦操作。當地和快門導通時相機就會按下快門從而拍照。因此網上有很多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 }

五、實物展示

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM