シリアルサーボ信号のレベル変換&半二重化回路

やりたいこと

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ポートを外部でプルアップする。

回路図