2013年5月4日 星期六

用 8051 控制 Canon EF 鏡頭

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


續前篇 改造 EOS NEX 轉接環, 引出 EF 鏡頭控制線
現在我們有了可引出控制線的接環, 接著就是送資料了
一開始沿用更早文章 用 AVR 控制 Canon EF 鏡頭 裡面的控制板
把它加以擴充, 加上文字型 LCD 顯示更多訊息



使用各種攻擊法(?), 像是地毯式指令掃描, 從 0x00 送到 0xFF
連續送相同指令並轉動變焦環觀察傳回值變化
動手操作, 眼睛觀察, 腦袋猜測, 不斷循環 ! XD
這樣可以找出一些特殊功能的指令
由於不同鏡頭有不同裝備, 像是 STM, USM, IS, ...等
有些鏡頭對有些指令會有反應, 有些則不會, 要搞反向工程就需要很多案例來猜
最好還是像老外那樣攔截相機和鏡頭的通訊, 不過這工程太大了, 懶XD
所以我就只用試的, 剛好也都有試出我想要的功能, 這樣就足夠了

上面照片那台機器驅動 LCD, 也有點背光, 耗電速度意外的快
差不多三小時吧, 沒仔細算, 約三小時就把 2600mAh 的鋰電池抽光
整個開發階段充了幾次電, 這樣不行, 太耗電了, 攜帶出去不方便
於是進行裁減, LCD 換成七段顯示器, MCU 換成 8051 ! XD
做出第一版

本實驗室自製 8051 板外接七段顯示器, 用德州儀器 LM2577 升壓
這德州儀器的 IC 真的厲害, 輸出範圍大, 反應速度快
之前實驗時就發現, 如果拿一般電源供應器給 5V, 接在 power 的 LED 有時會閃爍
當轉動對焦環時馬達開始轉會抽去一些電, 一般電源時 LED 會變暗一下下, 不明顯
可是 LM2577 放下去完全不閃, 板上輸出電容也只掛 220uF, 非常厲害
不過當考慮到 cost 時還是算了吧, 這種馬達設備, LED 閃一下不會怎樣的XD
所以後面會抽料XD


就這樣, 綁在閃光燈後面出去拍XD
使用六小時後還有一半的電, 相當給力
發現可行以後就重新設計, 客製化板子, 使用雙面板

兩面壓克力, 曝光兩次
結果發生問題
雖然孔是對得還準, 但是孔太小, 要做穿孔導通太困難
找了一下資料才知道 PCB 板廠是有專用的料的

用類似鉚釘的細金屬管穿進孔, 然後熱壓合, 這樣就可以雙面導通
不過嘛...那種鉚釘有供應商報價一顆 0.001 元...
這意思就是沒買個一百萬顆大概不會想出貨吧
所以自己搞這個是行不通的, 於是又重新設計一片
一樣是雙面板, 不過穿孔只有三個, 剩下鋪銅接地或 VCC

雖然沒鉚釘, 但只穿三個孔用電線接到還容易 (不過還是很麻煩是真的, 孔很小!)
做出來的樣子

和上次的比一下尺寸, 少了 60%


背面 layout 看起來像彈幕遊戲畫面, 玩家在下面, 電阻是子彈, 8051 是魔王XD

接著開個模作電池槽


太薄了, 脫模時斷裂, 不過還是能再翻模, 用膠帶固定一下即可XD


翻矽膠模後上環氧樹脂, 順便測試某廠色膏
原樹脂是透明的, 混了一點點上圖左邊的色膏, 加了一粒米大小的量而已
整鍋都變白的, 相當厲害, 不愧是高濃度色膏, 染色力強

接著用迴紋針當頂針, 插在電池接點前方

就可以當電力源
升壓板換超廉價迷你版, 這一片只要 50 元台票

這升壓板還有電壓指示, 當輸入過低時熄燈
這樣我就可以偷掉鋰電池偵測的設計, 知道快沒電就換電池, 不須保護XD
和第一代比

體積更小, 而且這體積還是包含電池的, 第一代還不含電池
這顆電池容量為 800mAh, NOKIA 手機用電池
目前測試拍攝三小時連續開機, 持續的給 STM 電去移動對焦環
這樣用下來還有一半以上的電



這控制器主要作的事情有這些 :

1. 一開機喚醒鏡頭, 光圈全開, 記下光圈值
2. 啟動 STM 手動對焦, 啟動防手震 (兩功能均限部分鏡頭有效)
3. 按下 func 按鍵時切換設定模式, 可設定光圈, 顯示焦距, 關閉七段顯示器
4. 以線性內插方式推算光圈步進值, 將步進值轉為易讀的 F 值

STM 鏡頭不同於其它 EF 鏡頭, 舊式 AF 或是超音波是可以無過電對焦的
也就是關機狀態手動轉仍可對焦, STM 和它們不同
STM 對焦環只是個 "開關", 轉動它時要鏡頭有在 MF 模式鏡頭才會 "幫你用馬達移動鏡組"
如果斷電, 控制器沒工作, 鏡組就不動如山, 怎麼轉也沒用
而所謂 MF 模式並不是簡單的把鏡身開關從 AF 切到 MF
沒錯, 那開關也只是個對內部控制器的 "開關", 直接開沒有任何意義
要送一個指令 (0x0E) 進去叫它動, 它才願意驅動馬達幫你移動鏡組

IS (影像穩定) 也是需要啟動的, 以我對 Canon 相機的觀察
我認為 IS 只有在對焦 (半按快門) 時以及曝光時才啟動
可轉到 55mm 並睜大眼看鏡組XD 接著半按快門, 左右微晃一下鏡頭, 會有一鏡片往反方向移動
要啟動要送一個指令 (0xF0) 進去, 不過目前我不知道怎麼關閉
啟動有條件, 以 kit 鏡 18-55 來說, 鏡身的 IS 開關要開啟, 送指令才有效
現在 18-55 也有 STM 版了, 搞不好會和 40mm STM 一樣開關無效也說不一定, 要測才知

Canon 設定鏡頭採用移動步進值, 該值不等同光圈 F 值
只能告訴鏡頭應該關閉或開啟光圈 "幾步"
可是每顆鏡頭最大光圈均不相同, 要知道關了幾步等於 F 多少是需要計算的
目前我只能用我手邊三顆鏡頭讀出的值交叉比對
加上台灣經典的差不多精神寫出這韌體, 差不多就好, 不要太計較 ! XD
另外, 我測試發現如果光圈縮 5 步, 然後再開 5 步, 光圈不會回到原來位置 !
所以我的韌體操作方式只用縮小的, 和 Canon 相同, 也就是假設我要從 F2.8 開到 F5.6
我會先算從光圈全開到 F5.6 需要走幾步, 然後設定光圈全開, 再寫走的步數
而不是計算 F2.8 和 F5.6 差幾步然後就縮幾步, 這樣會每次不一樣, 不知道為什麼
Canon 機身只有曝光時才會縮光圈, 曝光後又放到全開, 我想可能和這策略有關

另外, 指令部分我測試和老外給的有些許落差
像是查詢相機資訊老外說要送 0x97 0x01
可是我用地毯式查詢發現 0x97 並不會有這回應
反而是在 0x80 會有這訊息, 觀察老外的 code 會發現可能是 SPI 的傳輸方式誤會
寫過 SPI 相關程式就知道, 第一個 byte 送出去, 下一個 byte 才會回應
所以有回應的那個 byte, 其實指令應是前一個 byte
而老外的程式把相機一開機交換訊息固定的送出, 可能是因為這樣導致誤判吧
因為每次都送這些, 裡面到底誰屬於誰就不重要了

接著, 我連續送 0xB0, 老外發現用來查詢最大和最小光圈值的指令
然後轉變焦環, 會發現最大光圈和最小光圈的值會變動
再觀察 18-55 這鏡的標示 : f3.5-5.6 所以我會推測 0xB0 應該不是傳資訊用
而比較像是傳回當前鏡組狀態, 真正的 "最大光圈值" 應該在別處

最後, 這裡附上設計資料: 原始碼, 電路圖, 曝光圖檔等資料
有興趣可自己做, 有任何新發現請務必回覆, 讓我們合力打造美好手動環境(?)XD

ef-ctl-8051-v2.zip

以及附上拍攝樣本

PF18 Cosplay Day 1

PF18 Cosplay Day 2

========================================================================
RELEASE NOTE:
========================================================================
使用機身: SONY NEX-5N
使用鏡頭: Canon EF 40mm f/2.8 STM
閃光燈: CHANGYIN CY-20 + WuKC Flash Adapter v2
延伸組件: EOS-NEX轉接環(改) + WuKC EF Len Controller v2 rev.B
對焦形式: 人體對焦 (峰值觀察)
曝光策略: 人體控制 (M模式)
轉載須知: 盡量避免直連圖以免被視為違規使用, 其餘無限制, 亦不須註明出處
照片命名規則: 於檔名字尾加上英文字母, 含c者為有調整顏色, 含f者為有修圖
顏色調整依據人體感覺, 調整方式為顏色重對應, 如不精確純屬正常現象;
修圖以明顯雜點為主, 無大幅度翻修;
========================================================================

丟 Google Plus 就不用擔心空間問題了
這是陰天拍攝, 加上沒調整白平衡, 顏色會有點偏綠
不過這是真實反映直接轉接的結果, 可參考檔名末端沒附加英文字母的, 那些都是無修圖的
要修正這顏色並不困難, 用 GIMP 的顏色平衡功能即可調整

借用一下西索XD 右邊未調整, 而左邊為調整後
把綠色減 15, 這樣就差不多了
之前那個調曲線方法也行, 但不夠好, 之後有測試再於舊文章補上

更新 :

另一版, 一樣是 SONY NEX-5N + Canon EF 40mm f/2.8 STM
不過閃燈加料, 白平衡調整, 顏色調整過的

FF22 Cosplay Day 1

FF22 Cosplay Day 2

沒有留言:

張貼留言

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