2013年3月10日 星期日

用 AVR 控制 Canon EF 鏡頭

本文在 2013/03/10 21:06 發表於 Yahoo!奇摩部落格
因Yahoo!奇摩部落格將於2013年12月26日終止服務故遷移至此


為了搞轉接所以又去找了些資料
結果第一季都還是在玩相機, 雖然玩法是不同了些XD
老鏡玩得差不多, 就想碰新鏡了
手邊有的新鏡就 Canon EF 系列, 由於都是電子式的, 光圈無法手動
這種鏡轉接後就不太有用了, 少了光圈可調可缺大了
拍賣上有人賣光圈做在轉接環上的版本, 看起來根本不靠譜
光圈的位置可以隨便放的麼, 又不是有就好, 一顆還要一張小朋友
上網搜尋使用評價也發現幾乎都是負面的, 不能用
這或許是為什麼轉接 EF 的不多, 因為沒法用
於是我就找了些資料看看有沒有人解決此問題, 而很高興的是... 有 !

1. The EF lens mount - Technical aspects of the Canon EF lens mount
2. Pick and Place - Canon EF-S Protocol and Electronic Follow Focus

玩法很硬 ! 不過是我們同業的, 沒問題
上面第一個是資料蒐集, 統合許多技術資料合在一篇
而第二個則是本次的重點, 一位熱血漢拿了 PIC 控制器修改一個延長接環
那應該是微距攝影在用的, 把相機輸出接到 PIC, 然後再用 PIC 輸出給鏡頭
接著把所有相機輸出和鏡頭收到的通通存起來分析, 整理出指令集
底下回應裡還有人拿邏輯分析儀讀
Canon 相機不僅韌體給人拆了 (magic lantern), 連鏡頭協定也有
真是超好玩的相機, 適合學術研究XD
其實這東西應該早就都有人破了, 看看市面上那堆合焦晶片就知了
只是因為有商業價值所以都沒公開吧



該網站上公佈的並不是完整的指令集, 該作者也提到有許多指令不知道是在幹麻的
不過沒關係, 光圈和 AF 馬達的部分有, 對我做轉接來說就足夠了
我所需要做的就是站在巨人的肩膀上把他們的成果重現並修改符合我需求, 如此而已

先記錄下操作要點, 首先是鏡頭接腳定義
老外的網頁只有寫接腳名稱, 並無寫方向, 一開始搞得我好亂

AF VCC : AF 馬達的電壓源, 根據老外測試通常只有需要動時相機才會給電
GND : 接地, 靠近 AF VCC 那裡和 AF 馬達是一組, 最左那個是數位接地
Logic VCC : 數位控制器的電壓源, 5V
DCL : data from camera to len, 鏡頭的資料輸入
DLC : data from len to camera, 鏡頭的資料輸出 (傳輸時需 pull-high, 可並顆 10K 電阻至 5V)
CLK : 同步 clock, 詳細可參考 SPI 傳輸方式

推測的傳輸時序

僅供參考, 我沒邏輯分析儀, 不過我的程式是照這概念去寫的
老外分析後提供的資訊重點有兩條 : 上升緣觸發以及 ACK
上升緣觸發從圖就可看出, 而 ACK 則是方向改變
老外發現 CLK 產生都是由相機產生, 鏡頭並不會產生, 平常都是單向的
但是當每一個 byte 傳完後, 會有一小段時間傳輸方向改為鏡頭回給相機
所以標準的 SPI 傳輸硬體不太適用, 因此我選用 GPIO 拉高低去傳
相機會每個 byte 都檢查鏡頭有沒有 ACK 回來, 若沒有會立刻停止操作鏡頭
此時若反光鏡抬起則會放下, 假設鏡頭被移除
因此如果想要做一個假鏡頭對相機傳輸, 這 ACK 一定要在固定時間內回應
這對於搞轉接環轉給 EOS 相機或是合焦晶片的人比較重要
我們若只是要拿去接別家的機身就不必太關心它
至於強行用 SPI 硬體去跟它衝會不會造成損壞並不清楚
不過如果要長時間操作我想還是安份點, 就 GPIO 拉一下, 不會太複雜
根據老外測試, Canon 的 EOS 傳輸速率會落在 80KHz, 不過 125KHz 也能動
這容錯範圍應該挺寬的, 隨便用個 delay 模擬一下應該都能動, 差不多就好XD


指令集

懶得重打, 自行比較XD
送指令時看 len response 那欄寫幾 byte, 就把指令加上一堆零填滿即可
例如 : 查詢鏡頭資訊 0x97 0x01, 傳回 7 bytes
那就要送 : 0x97 0x01 0x00 0x00 0x00 0x00 0x00 這樣, 總共 7 bytes
後面的是 dummy bytes, 用來把資料 shift 出來, 這是 SPI 特性

接著我們就可以動手實驗, 為了這我特地買了顆鏡頭



經過閃燈的經驗, 我不打算拿服役中鏡頭實驗, 不小心玩壞就頭痛了
買個二手的超低價品來蹂躪比較好XD
於是就選上了這當受害者, 這是最便宜的自動鏡, 全塑膠製不可變焦
它唯一的優點就是可以自動對焦, 其他特性都很糟糕, 這最適合實驗了


用 AVR 去控制, 電源用 18650 鋰電池, 適合戶外操作
這 18650 鋰電池最近因為行動電源很頻繁的被採用, 容易取得
不過使用上必須注意, 它雖然長得像一般乾電池, 但這是完全不同的東西

既然是鋰電池, 就有鋰電池的特性 : 不可過充, 不可過放, 不可任意串聯並聯
過充可能會爆炸, 過放則會損壞, 串並聯須考慮其狀態
不同使用條件的電池並聯會效能低下, 進入自充放迴圈
這和耐操的鎳氫充電電池是不一樣的, 不要看它長得像乾電池就把它當乾電池用

整組就是 18650 電池輸出, 接上升壓板讓電壓穩定維持在 5V
然後把這 5V 接給 AVR 以及鏡頭, AF 和 Logic 都共用 5V
結果示範影片 :

用 AVR 控制 Canon EF 鏡頭


附上程式供參考, GPL 協議 !
ef-len-ctrl.c

接下來以這程式為基礎, 加些按鈕外部控制, 就可以實現及時改光圈
轉接任何機身都不是問題, 不過接點部分材料還要再想辦法, 總不能都用焊死的吧XD
接點部分目前還在想辦法, 最近案子吃緊, 比較沒閒玩, 要抽時間一點一點做

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。