やりたいこと
ESP32のUARTでKONDO ICSシリアルサーボを制御したい。
要件
- ESP32のI/Oポートは3.3Vレベルであり、かつ5Vトレラントではない。
- KONDO ICSシリアルサーボの信号は5Vレベルである。
- KONDO ICSシリアルサーボの信号は半二重化された1線式のUARTである。
- ESP32のソフトウェアは起動に数百msecオーダーの時間を要する。
設計
- 受信信号(RxD)は、5V→3.3Vにレベル変換が必要である。74LVC1G125を3.3V電源で用いレベル変換する。LVCは5Vトレラントである。
- 送信信号(TxD)は、3.3V→5Vにレベル変換が必要である。74HCT1G125を5V電源で用いレベル変換する。HCTはVIH=2.0Vなので3.3V入力でも動作する。
- 半二重化のため、送信信号はオープンドレイン出力となるように、TxDは74HCT1G125の負論理イネーブルに入力する。
- 半二重化のため、送信信号と受信信号を結合し、プルアップする。
- シリアルポートを2個使う場合には、74LVC1G125に代えて74LVC2G125を、74HCT1G125に代えて74HCT2G125を用いる。
ICSサーボの暴走対策
ICSサーボは、ノーマルモードでは電源起動時に信号が500msにわたってHighならシリアル通信モード、LowならPWMモードになる。(シリアル専用モードに設定すれば無条件にシリアル通信モードになる。)
電源投入時に、ESP32のTxDポートが500msec以上ハイインピーダンス状態のままだと、その間LOWレベルの信号がサーボに出力され、サーボがノーマルモードの場合にはPWMモードに入ってしまい、シリアル信号を送信すると暴走する。この対策として、TxDポートを外部でプルアップする。