2021年04月10日

PIC32MX+Harmony3+MSD(USB Host)設定ポイント

ここ5年くらいはSTM32マイコンを中心に開発、展開していました。しかし、昨今の半導体供給不足で主要なSTM32マイコンが入手困難となっています。運よく在庫がある場合でも価格が上がっている場合が多々あります。STM32マイコンがこれまで通りに安定して入手可能になるには少なくとも半年(2021年末)、長くて数年(2022~23年以降)は要すると思われます。

このような状況を受けて、STM32マイコンの代替として今更ながら古巣のPICマイコンに少し戻ってきました。PICマイコンも半導体供給不足の影響を多少受けていますが、STM32マイコンほど長納期化していません。主にdsPIC33F、30Fを使用していた10年近く前に比べると自動コード生成ツール(Harmony Configurator)、内部可視化(Data Visualizer)等のツール群が充実してきています。

今回はPIC32MX250F128BをターゲットにMPLAB X v5.45+Harmony3を使用してUSBメモリへの書き込み(MSD:Mass Strage Device)を行いました。その際にポイントとなる設定について紹介します。なお、ターゲットへの書き込みはPickit3を使用しました。


全体の手順については既にMicrochipのgithubサイトに詳しく書かれているため、設定のポイントに絞って紹介します。
MPLAB Xには予め、MPLAB Harmony 3 Launcher(旧名称 MPLAB Harmony Configurator 3)をインストールしてあります。


@File System設定
Use File System Auto Mount Featureにチェックを入れます。また、Media TypeにSYS_FS_MEDIA_TYPE_MSDを選択します。この設定を忘れるとSYS_FS_EventHandlerSet関数やSYS_FS_MEDIA_MANAGER_EventHandlerSet関数が生成されず、app.cのサンプルプログラムのビルドで失敗します。


filesystem_setting.jpg


AHeap Size設定
こちらのMicrochipのgithubサイトでは500byte以上とありましたが、500byteでは動作しませんでした。1024byte程度が良さそうです。

system_heap_setting.jpg


BCrystal設定
PIC32MX2XXの場合はこちらのMicrochipのgithubサイトとは異なり、クロック設定箇所はシンプルです。一方でUSBを使用する場合は外付け発振子が必須となります。最終的に設定上部のUSB Clockが48000000Hz(48MHz)になっていればOKです。USB Clockが0Hzといった48MHz以外の場合は設定を見直す必要があります。

crystal_setting.jpg


以上の設定を終えた段階で、プロジェクトフォルダsrc内のapp.c、app.hを下記のサンプルコードに置き換えます。
Harmony3\usb_apps_host\apps\msd_basic\firmware\src

置き換え後、USBメモリをPIC32マイコンに接続し、ファームを書き込むとUSBメモリにサンプルファイルが保存されれば成功です。

result.jpg

今回のコード、プロジェクトファイルは
です。

STM32マイコンのCubeMXのようにMPLAB Harmonyによって最初のセットアップの敷居が下がっていることを実感できました。一方でMPLAB Harmonyの情報が少なく、バージョンによってUIや設定項目が異なるため、情報収集に苦労する面がありました。今後、CubeMXの様に洗練されたUIになることに期待です。
posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2021年04月03日

フォトカプラを使ったUART通信

電圧レベルが異なる場合やノイズ環境といった場合に安全に信号を伝える方法の1つとしてフォトカプラを使用することがあります。フォトカプラでON、OFFといった単純な信号のやりとりの場合はフォトカプラと適切な抵抗のみで信号のやり取りが可能です。一方でUARTやSPIといったある程度高速な信号をやり取りする場合、フォトカプラと抵抗のみでは安定した通信ができません。

下記はフォトカプラと抵抗のみを使用した場合のボーレート38400bpsのUART通信をフォトカプラの入力と出力のTXの電圧波形の比較です。赤がフォトカプラ入力電圧、黄色がフォトカプラ出力の電圧です。

uart.jpg

汎用フォトカプラTPC817を使用し、フォトカプラの入力には直列に330Ω抵抗、フォトカプラの出力には120Ωでプルアップしています。フォトカプラのOFF状態でも1.6V程度出ており、ピークで3V出ています。波形も鈍っており、安定してUART通信できません。

フォトカプラの受光側のフォトトランジスタに流せるコレクタ電流は最大50mA程度です。実際は定格最大が50mA程度であって、発光側の光量によっては数mA以下となります。駆動できる電流が数mA程度の場合、フォトカプラのフォトトランジスタやマイコンの入力端子、ケーブル等の静電容量の影響によって波形が鈍ってしまいます。UARTやSPIといったある程度高速な信号をやり取りする場合はトランジスタやバッファIC等で電流を増幅して伝達することが必要となります。

uart_relay_with_tr.jpg

フォトカプラの出力部分をトランジスタC1815で増幅すると上記のように波形が鈍りを低減させることができました。

BOMコスト低減のためにトランジスタやバッファICを使用したくない場合は、ADuM1200ARZといった信号用デジタルアイソレータIC、大電流対応のフォトカプラTLP250等を使用することで追加回路なしで波形の鈍りを低減できます。なお、TLP250の動作電圧10V以上ですが、仕様範囲外の3.3Vでも動作します。


uart_photo_high_current.jpg

TLP250を用いたフォトカプラの入力と出力のTXの電圧波形の比較です。


uart_photo_fet.jpg

参考になりますが、こちらはフォトカプラの出力を手持ちのパワーMOSFet、IRLU3410PBFで増幅した波形です。信号の鈍りはないものの、MOSFetのゲートの静電容量の影響を受けて波形のON、OFFの長さが完全に変わっています。これでは正しく通信できません。フォトトランジスタの出力電流や増幅回路の静電容量を考えて設計することが重要だと分かります。


フォトカプラは単純な機構なので理想的に動くと勘違いしがちです。特に通信を絶縁する場合のアプリケーションでは波形を見ながら抵抗値や増幅回路等を決定することが重要です。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする