2020年09月19日

STM32G030J6 注意点

STM32G0シリーズは従来のSTM32F0シリーズに比べてクロックが向上し、価格も安くなっています。さらに新しいラインアップとしてG0**Jが登場し、SO8パッケージも追加されています。特にF0やG0といった低価格帯かつ小さいパッケージでI2Cを2つ搭載しているものはG0シリーズしかないため、I2Cを複数使用したい場合には非常に魅力的です。

ただ、SO8パッケージはSTM32マイコンのペリフェラル機能を8ピンに凝縮しているため、様々な犠牲が出ています。その1つとして困った現象が生じたため、今回紹介します。


STM32G030J6.jpg

主なSTM32G030J6、STM32G031J6のパッケージ起因犠牲点
@NRST、BOOTといったシステム関連のピンも他のピン機能と共用
AVBATが使用できない
BHSE(高速外部クロック入力)が使用できない

A、Bは用途によっては全く問題ありませんが、@がペリフェラル設定によっては厄介な問題を引き起こします。

データシートを見るとP.34 Table 12. Pin assignment and descriptionの注釈に「For the device in SO8N package, the PA0, PA1, and PA2 GPIOs are bonded with NRST on the pin 4. In order not to interfere with device functions, they must not be set in alternate function or in output but remain at all times in input configuration.」と記載がありました。

デバイスの機能と干渉を防ぐためには4番ピンは他の機能ピンや出力ピンとして設定禁止ということです。他の機能割付けや出力として設定するとリセットが効かなくなり、ファームの書き換え等ができなくなります。

また、PA14、PA13をSWCLK、SWDIOとして設定しない場合も注意が必要です。一度、I2CやUARTとして設定したファームを書き込みすると以降はST-Link Utility等からボタン操作1つでは認識できず、ファーム書き換えが簡単にはいきません。今回、困った現象としてPC14、PA14をUartに設定したところ、ST-Link Utilityから認識できない現象が発生し、ファームの書き換えができなくなってしまいました。

この現象はSO8パッケージ以外でもSWD端子に他の機能を割り付けると発生する問題ですが、従来のSTM32シリーズではBOOTピンがあったため、BOOTピンをHighにすればファームがロードされずに起動させることでファーム書き換えができました。STM32G0シリーズのパッケージによってはBOOTピンが除かれているため、従来の方法が使えません。

Cube1.jpg
このような場合にファーム書き換えをする場合は4番ピンをGNDにつないだリセット状態で電源を投入します。ST-Link Utility等のConnectボタンを押してすぐに4番ピンをGNDから外すと再び認識し書き換えできるようになります。4番ピンを他の機能割付けや出力ピンとして設定するとこの方法も使用できないため、完全にファーム書き換えができなくなります。

Cube2.jpg
STM32G030J6では4番ピンは未使用にした上で、ピンの制約はありますが、可能な限りPA14、PA13はデバッグ、書き込み用としてSWCLK、SWDIOを確保して設定した方が良さそうです。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2020年09月05日

CCDラインセンサ

今回はCCDラインセンサTCD1304(PDFリンク)を紹介します。CCDラインセンサはバーコードスキャナ等に搭載されるフォトダイオードアレイセンサでTCD1304の場合は1x3648の解像度で光の強度を取り込むことができます。バーコードスキャナ以外の用途としてはプリズムと組み合わせて自作の分光スペクトル測定装置を作る例があるようです。

TCD1304_1.JPG

一般的なイメージセンサの場合、画素が多く、ArduinoやSTM32マイコン等で処理できなくはありませんが、メモリや処理能力が制限される中で複雑な処理が難しいです。一方、CCDラインセンサは画素が1x3648でマイコンでも十分処理が可能です。また、接続インタフェースはタイミング信号に合わせてアナログで各画素が出力されるため、同様に扱いやすいです。

Arduinoを使ってTCD1304を試食してみました。

TCD1304_2.JPG

TCD1304で取り込んだ各画素の光強度をエクセルの条件付き書式で色付けしてみました。
横軸が各画素、縦軸が時間経過です。光の強い左側が反応していることが分かります。

TCD1304_3.JPG

こちらの例のようにきれいなオブジェクト検出になっておらず、光の強さと露光時間の調整が必要なようです。TCD1304は画素の検出部が30mmと長いため、分光スペクトル測定装置の他、高分解能なラインセンサや位置センサ等、いろいろマイコンと組み合わせて応用できそうなセンサだと思いました。接続インタフェースが特殊なため、SPIやI2Cといった汎用シリアルで通信できる変換基板を作成しようかと思います。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2020年08月15日

AC電流センサ基板

今回は非接触(電流を検出したいケーブルを加工しない)電流センサ基板について紹介します。一般的にAC電流を検出するためにはシャント抵抗を挟んで電圧差を増幅させるか、片側をクランプ式の電流センサ(CT)を挟んで電流を検知する方法があります。他にはロゴスキーコイルを用いた方法などがあります。

その中でもクランプ式電流センサ(CT)は構造が容易で非接触(電流を検出したいケーブルを加工しない)で電流を検出できることから電流センサとして多く使用されています。クランプ式電流センサ(CT)は理論的には片側の電源ケーブルのみをクランプする必要があります。電源ケーブル2本をクランプすると180度位相が互いに打ち消すため、近接した2本の電源ケーブルから電流を検出することはできません。分電盤などでは片側のみをクランプすることが容易であっても多くの家庭用電源ケーブルは2本合わせて1つの束となってるため、ケーブルを加工しない限り、片側のみをクランプすることが難しい場合が多いと思います。

sensor.jpg


家庭用電源ケーブルの多くは被覆で覆われている中で2本平行に並んでいるため、ミクロでみると個々に磁界が発生しています。この2つの磁界の差を利用して、近接したホール素子で磁界を検出することで非接触かつ、多くの家庭用電源ケーブルで検出可能な電流センサ基板を設計してみました。

accs0.JPG


この電流センサ基板は電源ケーブルの2本の線から発生する磁界を2つの近接して配置したホールセンサで検出します。検出した磁界の差を増幅してピークをホールドさせることで電源ケーブルの電流を電圧として出力します。電源ケーブルの2本の線に対するホールセンサの位置や電源ケーブルの被覆厚によって検出できる電流の範囲は異なりますが、電流センサ基板上のゲインを調整することで100Vの場合、数10w〜1kw程度までの電流を検出することが可能なことが確認できました(照明とエアコン、ドライヤーで検証)。

accs.JPG

電流の絶対値を知りたい場合にはクランプ式電流センサの方が優れます。一方で電流が既知の場合や大まかに電流の変化を知りたい場合には市販の電源ケーブルを加工せずに使用可能なため、電流センサ基板は使いやすいと思います。

なお、磁界変化をピークホールドさせるため、急激な電流変化や微小な電流変化の検出はできません。また、同じ電流であっても電源ケーブルの種類や取り付け位置によっても磁界の大きさが変化し、出力も合わせて変化します。電源ケーブルと電流センサ基板の取り付け位置は固定させる必要があります。

センサ位置やゲイン調整の検証をして問題なければ、諸情報を公開したいと思います。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2020年07月25日

CO2センサ

混み具合や換気状態を監視する用途としても昨今、CO2センサが注目されています。

一般的なCO2の検出方式としてはNDIR(Non Dispersive Infrared)方式とMOX(Metal Oxide)方式の2種類があります。精度面ではNDIRの方がMOXよりも優れています。MOXは空気中の有機物を検出することで間接的にCO2を推定するため、直接CO2濃度を光学的に検出するNDIRに比べて精度では劣ります。一方でNDIRは光学機構を備えるため、コストがMOXに比べると高く、大きさも比較的大きくなります。一方、MOXは半導体素子として構成されるため、非常に小さく、コストも安い特徴があります。

今回はMOXのセンサを紹介します。MOXセンサとして有名なセンサは下記の通りです。

・AMS製 CCS811 (生産終了)

AMS製は最近、生産終了のようでメーカのサイトからも情報が消えていました。Arduino等で簡単に使いたい場合はSGP30の方が情報が豊富でおすすめです。ただ、個体差なのか、値のドリフトが大きく少し不満がありました。最近、改良版のファームが発表され、さらに精度が上がったということでIDT製ZMOD4410を試してみました。

残念ながらZMOD4410のレジスタ情報が非公開であり、IDTのサイトからユーザー登録して取得する必要があります。また、CO2換算処理アルゴリズムについても非公開でバイナリファイルとして配布されているため、Arduino IDE等では使用できません。バイナリファイル(libファイルやaファイル)を組み込むことができる開発環境が必須です。今回はSTM32F303KとSW4STM32を使用しました。

試しの基板としてZMOD4410とHS3001を組み合わせた環境センサを作成してみました。温度、湿度、TVOC、CO2等を測定することが可能です。

env-sen.jpg


実際に使用してみたところ、換気直後は400ppm以下(下限400ppmでそれ以下は測定できない)となり、夜部屋を閉め切った寝室では朝方にかけて800ppm以上となり、換気をすると400ppm以下に収まることが確認できました。以前の改良前のZMOD4410 - 1st GenではSGP30同様に値のドリフトが多少気になりましたが、ZMOD4410 - 2st Genでは学習にニューラルネットワークが適用された変換アルゴリズムでドリフトが低減したように感じました。


zmod_test.jpg


ZMOD4410はバイナリファイル(libファイルやaファイル)を組み込むことができる開発環境が必要で、データシートも公開されていません。さらに変換アルゴリズムライブラリのコードサイズやメモリ使用量が大きく、敷居が高いセンサです。今後はI2CでArduino等からも簡単に扱うことができるZMOD4410専用の変換基板も開発してみたいと思います。また、ZMOD4410、SGP30、NDIRとの同時計測で比較してみたいと思います。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2020年06月20日

RMD Servo Motor

今回は海外で話題になっているRMD Servo Motorについて紹介します。

RMD Servo Motorはブラシレスモータ本体、磁気エンコーダ(12bit以上、4096/回転)、モータ制御ドライバ、RS485orCAN通信ドライバが一体になったモータで電源と通信線だけでモータを制御することができます。ここまでは普通のプロポサーボモータ等と同じような仕様ですが、位置制御、速度制御に加えてトルク制御(電流制御)が可能です。トルク制御に対応したドライバ一体のブラシレス小型モータはほとんどありません。一部のプロポサーボモータはトルク制限(トルク制御でない)に対応していますが、トルク制御とは違います。ちょっと残念なのはトルク制御はオープンループな点ですが...電流センサを内蔵してフィードバックしてほしい気もします。

なお、各制御系の制御周期はオープンループトルク制御32kHz、クローズド速度制御4kHz、クローズド位置制御2kHzとなっており、32bitマイコンを搭載したメリットを存分に活かす仕様です。専用のソフトウェアで制御ゲインの他、モータIDや動作テストをすることができます。モータIDを書き換えることでRS485ラインorCAN通信ラインに最大32台のモータを同時に接続することができます。



今回はRMD Servo Motorの中でも最も小さいRMD-S-24を試食してみました。購入はAliexpressで行いました。

IMG_0089.JPG

設定ソフトウェアRMDconfigを用いて設定や動作確認を行いました。PCとの接続はUSB-RS485変換ケーブルが手元になかったため、LTC485AE-FT2232を用いて接続しました。配線は下記の通りです。ポイントはTXDEN出力があるシリアルICを選択する点とRMDへモータ電源のVCCとは別に制御系と通信系の電源となる5Vも外部から供給が必要な点です。

rmd_con.jpg

モータ電源とは別に5V電源の供給が必要なことに気づかず、通信できない問題に時間を要してしまいました。5V電源を供給するとRMDモータ内部の基板の緑LEDが点灯し、無事通信とモータ制御できることが確認できました。


RMD Servo Motorは様々な出力の種類が用意されており、最も小さいRMD-S-24では4000円前後(送料別)となっています。プロポサーボモータに比べると高いものの、12bit以上の高精度な磁気エンコーダを搭載して制御系も一折実装されており、安価な産業機器のサーボモータレベルの機能でこの価格は驚きです。時間を見つけて次はArduinoやSTM32マイコン等から制御してみたいと思います。

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