安定性の改善

 前回の実験で、レンズとコントローラ間の配線を短くすると動作の安定度が改善することがわかりました。そこで、さらなる改善を期待してRS232Cの信号レベルに変換するICを利用してみました。3本のSPI信号をAMD3202で信号レベルを変換します。スペックを見るとAMD3202は460kbpsまでのデータレートに対応しています。同様な機能を持つMAX232は140kbpsまで。オシロで信号を観測したらMAX232の場合、立上がり、立下りともに波形がなまってNGな印象です。AMD3202では、きれいな矩形波となりました。うまく動作すれば、レンズ側にはレベル変換のICだけを搭載すれば良いので、実装が楽になります。手作業の配線のため、DIPサイズのICを利用しましたが、プリント基盤を作れば、小さく実装できそうです。ノイズを気にせずにコントローラからのケーブルを延長できるので、操作も楽になります。

 コントローラから出力する、D13/SCKとD11/MOSIの信号をRS232Cレベルに変換して出力し、レンズ側から出力される応答信号をRS232CレベルからTTLレベルへ変換して受信します。両者を接続するコネクタ/ケーブルには、入手が容易なRJ45/LANケーブルを利用しています。

EF-lens-control

RS232Cレベルに変換することで、長いケーブルでも動作することが確認できました。

EF 70-200mm 2.8Lなど大型のレンズ(?)の場合、モータ電圧は5Vでは厳しいようです。Arduino NANOの電源としてVinに6Vを加え、この電源をレンズのモータに供給するよう検討中。仕様上Vinは7V〜12Vとなっているので、問題があるかもしれません?


回路図(参考)

Schematic_EF-lens-controller_Sheet-1_20190106181512

ソフトウェアの変更
  最初はスイッチのクリックでフォーカスや絞りを変更する仕様で作りましたが、使い勝手が悪そうなので、次のように変更しました。

 SWの押下で、制御対象を交互に切り替え:
  赤LED ONでフォーカスを変更
  緑LED ONで絞りを変更

 ロータリーエンコーダの回転で、フォーカスまたは絞りを変更
  時計回りの回転で、プラス側に
  半時計回りの回転で、マイナス側に

 エンコーダの回転で変化する値
  フォーカスの変更時:設定した±ステップ値
  絞りの変更時:常に±1

 ステップ値の変更
  SWを長押し(2個のLEDがONとなるまで)でステップ値の変更モード(両LED ON)
  ロータリーエンコーダの回転でステップ値を増減
  希望のステップ値となったら、SWの押下。赤LEDが点灯しフォーカスの変更モードに移行

ソースコード
https://github.com/crescentvenus/EF-Lens-CONTROL