2020年12月19日

絶縁コンバータノイズ対策

今回は絶縁コンバータのノイズ対策について紹介します。絶縁コンバータは非絶縁コンバータに比べて、ノイズ対策に工夫が必要です。


非絶縁コンバータの場合、入出力でGNDが共通のため、主にディファレンシャルモードのノイズを考慮した設計が必要です。出力とGNDにコンデンサを並列に挿入したり、出力部にインダクタを直列に挿入することでディファレンシャルモードのノイズは容易に抑制することが可能です。なお、非絶縁コンバータの場合はコモンモードノイズはGNDや入出力を介してそのまま伝搬するため、入力段にコモンモードノイズフィルタを挿入して対策することが一般的です。

一方、絶縁コンバータの場合は当然ながら入出力でGNDが絶縁されているため、GNDが共通ではありません。GNDを入力と出力で分けることができるため、鉄道や自動車、産業用途などのノイズが多い環境下で多く使用されています。GNDが絶縁されているため、入力側のノイズを受けにくくなりますが、絶縁コンバータを使用すれば、ノイズの影響を受けない、ノイズが少ないという訳ではありません。絶縁コンバータに適切なノイズ対策をすることで絶縁によるノイズ抑制効果を発揮します。

dcdc_only_diff.jpg

絶縁コンバータに適切なノイズ対策とはコモンモードノイズ対策です。ディファレンシャルモードのノイズ対策は非絶縁コンバータ同様の対策で比較的容易に対策できますが、コモンモードノイズの対策はディファレンシャルモードのノイズに比べると容易ではありません。

絶縁コンバータは絶縁トランスを介して、入力側と出力側が接続されています。絶縁トランスが理想的にインダクタ成分のみであれば問題ありませんが、実際の絶縁トランスは入出力間に数10pF~100pF程度の静電容量を持っています。この静電容量と入力側のスイッチング(200kHz~1MHz程度)によってコモンモードノイズを発生させます。負荷や回路構成によって異なりますが、入力側のスイッチングが1MHz程度と高い場合であっても、コモンモードノイズに低い周波数(10k~100kHz程度)のピークが発生する場合があります。


コモンモードノイズは対象機器内部だけでクローズされた回路であれば、対象機器内部全体が揺れるため、比較的問題を受けにくい傾向があります。一方で信号を他の機器から受ける、他の機器へ信号を出すという場合には考慮が必要です。例えば、外部のセンサ信号を機器が受けて、増幅する場合にコモンモードノイズが影響します。外部のセンサ信号をアンプ(差動アンプでない)で増幅することで信号のインピーダンスとGNDのインピーダンスに差が生まれます。このインピーダンス差からコモンモードノイズがアンプ出力側にノイズとして表れることがあります。コモンモードノイズフィルタや差動アンプといった対策が必要です。電源系の至るところに様々な容量のコンデンサを追加してもノイズの現象が改善しないしない場合の多くはコモンモードノイズの影響が疑われます(それ以外は放射ノイズを受けている可能性がある)。外部のAC電源から入るノイズと切り分けをする場合は電池で駆動させてノイズを見ます。電池でもコモンモードノイズが発生する場合は絶縁コンバータがノイズ源か疑います。


このような絶縁コンバータによって生じるコモンモードノイズは下記のような対策で改善できる場合があります。回路設計や機器構成によってコモンモードノイズはノイズの出方や対策が異なるため、対策については参考に紹介します。

@絶縁入出力間のリターン回路
絶縁トランスの容量によって出力側に発生するコモンモードノイズに対して、リターン回路をつくることでコモンモードノイズを低減できます。具体的には入力側と出力側(もしくは基準となる端子)を数1000pFのコンデンサで接続させます。トランスの容量よりも同じor大きければコモンモードノイズ対策としては十分です。この容量を更に増やすと漏れ電流が大きくなり、ノイズ環境下で漏電ブレーカが頻繁に作動するといった不具合が発生します。この問題を防ぐため、数1000pF程度に抑える必要があります。また、コンデンサの耐圧は絶縁コンバータの絶縁耐圧に合わせた電圧を選定します。多くは1kV以上の耐圧を選択します。


dcdc_diff_and_simple_common.jpg

絶縁入出力間のリターン回路は入力側のスイッチング素子がない方と出力側のダイオードがない方を結合させます。絶縁コンバータの内部構成が不明な場合は必要に応じて両側にリターン回路を実装します。リターン回路は絶縁コンバータに可能な限り近い場所に実装します。


Aコモンモードノイズフィルタ
絶縁入出力間のリターン回路の対策@ではコモンモードノイズのピークを抑えることができますが、全体的なコモンモードノイズを低減させるためにはコモンモードノイズフィルタを入出力の両側に実装します。片側のみの場合はコモンモードノイズがもう片方から出てしまうため、両側かつ絶縁コンバータから近い場所に実装することが理想的です。


dcdc_diff_and_fully_common.jpg


コモンモードノイズは対策が難しく、発生源の特定も難しい場合が多々あります。ポイントはコモンモードノイズ対策が不十分な場合、絶縁コンバータ自体もコモンモードノイズの発生源になり得るということです。それらを踏まえた上で回路設計、ノイズ評価を行うとスムーズに対応できます。

posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2020年12月12日

STM32 UARTパリティ設定 注意点

STM32マイコンのUARTでパリティを使用する際の注意点について紹介します。通信相手によってはパリティビットを使用する場合があります。STM32マイコンのUARTにもパリティ設定項目があり、パリティなし、偶数パリティ、奇数パリティに対応しています。ただ、パリティを使用する際に注意点があり、注意点に気づかずに設定すると意図したデータが送受信されません。

パリティを使用する際の注意点として、パリティビットを含めたデータ長を設定する点です。具体的には8bitの送受信データでパリティビット有効にした場合はデータ長は9bitとして設定します。8bitのままの場合、パリティビットを含めて8bitとなり、送受信のデータ長は7bitとして扱われ、0x00~0x7Fまでのデータしか送受信されません。

parity.jpg

STM32CubeMXの設定項目をよく見ると「including Parity」と記載があり、パリティビットを含めたデータ長を設定することが分かりますが、あまり考えずに設定すると見落としがちです。特にCubeMXから生成した後にコード上で変更すると設定項目の注意書きにも気づかないため、特に注意が必要です。

posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2020年12月05日

iPhone/iPadとのシリアル通信

今回はiPhone/iPadを使用して簡易的なシリアル通信(UART)を使用する方法について紹介します。残念ながらTypeCを介したUSBシリアルアダプタはMacOSのみでiOSには対応していません。今回はSiliconLabs製BLE5モジュールBGX13PとiOSアプリBGXCommanderを用いてBLEを介して簡易的なシリアル通信(UART)を行います。

文字列以外のバイナリデータの送受信やボタンといったUIを実装することはできませんが、文字列の送受信といった一般的なデバッグ用途の使用であれば容易に実現可能です。SiliconLabs製BLE5モジュールBGX13Pを実装したBLE5モジュール変換基板を使用しました。

BLE5モジュールBGX13PのUARTをマイコン等に接続し、3.3V電源を供給します。TX、RXはマイコン側とBLE5モジュールBGX13P側でクロスさせて接続します。BLE5モジュールBGX13Pのシリアル通信(UART)のボーレートはデフォルトで115,200bpsとなっています。必要に応じて下記のコマンドをiOSアプリBGXCommander か、UARTを介してTeraterm等のPCから事前に設定を変更します。

ボーレートを変更する場合はコマンドモードで
>set ua b 9600
>uartu
という感じでコマンドを入力することでボーレートを変更できます。uartuコマンドで実際に設定が有効化されます。一度設定するとフラッシュに設定が書き込まれるため、電源再投入でも再度、設定を変更する必要はありません。

なお、ボーレートを取得する場合は
>get ua b
コマンドで取得できます。

iOSアプリBGXCommanderをSTREAMモードにするとマイコンから出力されたシリアルデータの文字列をiOSデバイスからマイコンのシリアル通信のデータを確認することができます。

iphone.jpg

iPhoneからだと上記のような感じです。

ipad.jpg

iPadからでも同様に確認することができます。

文字列を入力する欄から文字を入力すると受信だけでなく、送信もすることができます。今回はマイコンとして先日販売を開始したエアクオリティセンサ基板の専用変換基板と接続しました。デバッグ用ポートJ4の出力をBLE5モジュールBGX13Pと接続してiOSで受信させました。UARTをRS232Cに変換するアダプタを使用すれば、RS232C接続の機器でも接続できます。ちょっとした遠隔でのデバッグ等で大活躍できそうです。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2020年11月28日

CO2モニタツール

以前にZMOD4410のCO2センサCO2センサの比較について紹介しました。その際に紹介したZMOD4410とHS3001を組み合わせた環境センサ基板はエアクオリティセンサ基板として専用変換基板を組み合わせてスイッチサイエンスで販売を開始しました。

今回はZMOD4410の応用事例として、現在、開発中のCO2モニタツールを紹介します。ZMOD4410とHS3001を組み合わせた環境センサ基板にOLEDとLEDを実装した基板を組み合わせてCO2の状態や推移を可視化できるツールです。

今後は家庭や事務所等の使用を想定して、下記のような機能を実装してみました。

・温度、湿度、CO2、IAQ(ドイツ環境庁屋内空気質基準)表示機能
・グラフ表示機能
・USBシリアルポートを介したログ出力機能
・夜間のOLED表示、LED点灯の輝度自動減少機能
・ボタン切り替えによるメイン表示項目切り替え機能


sensor_1.jpg

sensor_2.jpg

開発中のため、上部からピンヘッダが複数出ていますが、最終的にはスティック状にする予定です。今後は筐体となるフレーム設計やファームの作りこみを行い、来年以降に提供開始を検討したいと思います。ZMOD4410はファームウェアを入れ替えることでCO2以外にも臭気や硫黄といった状態を計測することが可能です。他の状態に対応したファームウェアの開発も行ってみたいと思います。エアクオリティセンサ基板と組み合わせて自作モニタツールをぜひ開発してみてください。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2020年11月21日

STM32 USB CDC応用

以前、STM32 USB CDC注意点について紹介しました。今回はUSBの接続有無確認やCOMポートのオープンといった確認する方法を応用編として紹介します。

■USB接続有無確認方法
ステートを確認することでPC等のホスト側とのUSB接続有無を確認することができます。STM32 HALライブラリのUSB CDC以外でも利用できます。USBデバイスのハンドルのdev_stateから確認できます。dev_state が USBD_STATE_CONFIGURED の場合はUSBがPCと接続されている状態です。例えば下記のような使い方ができます。

if(hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED)
{
   //USBが接続されている場合
}
else
{
  //USBが接続されていない場合
}

■COMポートオープン有無
CDCの場合、USB接続の有無だけでなく、COMポートのオープン有無を確認したい場合が多々あると思います。通信で確認する他に間接的ではありますが、CDC_GET_LINE_CODINGの呼び出しイベントから確認できます。電源ON後のUSB認識時とCOMポートオープン時にそれぞれ2回から3回、CDC_GET_LINE_CODINGのイベントが発生します。このイベント発生をカウントすることでCOMポートのオープンを確認することが可能です。

usbd_cdc_if.cファイル内のCDC_Control_FS関数のCDC_GET_LINE_CODING条件を下記の様に書き換えます。必要に応じて下記の様にカウンタとフラグを設定して確認できるようにします。

case CDC_GET_LINE_CODING:
{
  USBD_SetupReqTypedef * req = (USBD_SetupReqTypedef *)pbuf;
  if((req->wValue & 0x0001) != 0) //ドライバによっては不要
  {
    comOpenCount++;
    if(comOpenCount>3)IsComPortOpen=true;
  }
}


STM32マイコンのUSB関連のHALライブラリについても、最低限の機能は実装されているため、少しコードを追加することで応用することが可能です。他にも便利な機能等あれば、また紹介したいと思います。
posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする