2023年02月25日

RTC用MEMS発振器

今回は安価に高精度を実現するMEMS発振器を紹介したいと思います。RTCの精度が悪い場合、RTCの時刻が頻繁にずれ、時刻調整やネットワークから時刻を取得する頻度を多くする必要があります。

マイコンで時刻や日付を保持するためのRTCを利用する場合、内蔵RTC機能を使用するか、外付けRTCを利用することになります。外付けの場合はRV-8803-C7やDS3231といった温度補正があるRTCを利用することで高精度に時刻保持することが可能ですが、部品が増え、コストが高くなりがちです。内蔵RTCの方が通信ラグがなく、比較的安価に実装することが可能です。ただし、精度は一般的な32.768kHz水晶発振子では20ppm前後とあまり期待できません。また、水晶発振子の外部負荷容量によっては更に精度が悪化する場合があります。一般的な水晶発振子の精度と時刻ずれの関係は下記の通りです。実際は昼夜の温度変化、季節の温度変化の影響、負荷容量によって更に大きくずれることが想定されます。

20ppmの場合、1年で11分前後
5ppmの場合、1年で3分前後
1ppmの場合、1年で30秒前後

今回は内蔵RTCで安価に高精度を実現する方法として、温度補正機能内蔵のMEMS発振器、SiT1552を紹介したいと思います。23年2月時点で1個200円~300円で温度補正機能を内蔵し、5ppmの精度を実現しています。データシートを見る限り、SiT1552AC-JEでは5ppm以内を謳っており、実力値としては1~2ppm前後あるようです。また、1.5V~3.63Vの広い電源範囲と1uA以下の消費電力でRTC用途にも最適です。

32.768kHzの水晶発振子を接続する代わりにXINにSiT1552のクロック出力を接続し、電源を供給して使用します。XOUTは未接続にします。マイコン側に水晶発振子か、発振器の設定パラメータがある場合は発振器に変更します。水晶発振子と異なり、MEMS発振器はそのままクロックが出力されます。そのため、負荷容量の調整や配線長を水晶発振子ほど考慮しなくてもよく、設計負荷が減ります。

SiT1552はCSPパッケージで非常に小さく、そのままでは扱いにくいため、ブレイクアウト基板を設計してみました。

osc1.jpg

osc2.jpg

実際にSiT1552を実装して、使い勝手が良ければまた、製品として提供を開始する予定です。今回は温度補正機能付きのMEMS発振器を利用することで比較的安価に内蔵RTCで高精度を実現する方法を紹介しました。内蔵RTCで安価に高精度を実現する方法として、今回紹介した方法の他にマイコン内蔵の温度計を使用して温度補正する方法もありますが、水晶発振子毎の温度特性のばらつきもあるため、調整が難しいのが難点です。RTCの部品を減らしつつ、より低コストに高精度を実現したいという場合に最適だと思いました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2023年02月04日

メモリ空き領域確認方法 PICO-SDK版

以前にSW4STM32環境でのメモリ領域を確認方法を紹介しましたが、今回はRP2040のPICO-SDK環境でビルド時にメモリ領域を確認する方法を紹介します。

簡単なプログラムであれば、FlashやRamの領域を気にする必要はありませんが、大量にメモリを使用する場合はどれくらい既に占有しているのか気になると思います。リンカの設定を少し追加することで詳細情報をビルド時のコンソールに表示することが可能です。

デフォルトではFlashやRamの領域の情報は表示されません。表示させる場合はプロジェクトフォルダ内の「CMakeLists.txt」のtarget_link_libraries以降に下記のスクリプトを追記します。下記のスクリプトのPROJECT_NAMEの部分はプロジェクトに応じて変更してください。

target_link_options(PROJECT_NAME PRIVATE "LINKER:--print-memory-usage")

実際にプロジェクト名がProjectionBallの場合で追加した際のイメージは下記の通りです。

option_image.png


追記すると下記のようにビルドの度にFLASHとRAMの占有率が表示されるようになります。

Memory region Used Size Region Size %age Used
FLASH: 43380 B 2 MB 2.07%
RAM: 79212 B 256 KB 30.22%
SCRATCH_X: 2 KB 4 KB 50.00%
SCRATCH_Y: 0 GB 4 KB 0.00%

なお、STM32等にはない、SCRATCH_X、SCRATCH_Yの領域はマルチコア利用時の振り分けに使用される領域なようです。


memory_usage.png


RP2040でも大量にメモリを使用するプロジェクトの場合にはぜひ、このような設定を有効化してみてください。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2023年01月14日

YOXO FESTIVAL 2023 出展

半導体不足が多少改善しつつも、依然として影響が残ってプロジェクトが停滞気味ではありますが、本年も宜しくお願い致します。

1月早々ではありますが、1月27日(金)、28日(土)に横浜みなとみらいにて開催されるYOXO FESTIVAL 2023に出展します。横浜みなとみらい21プレゼンテーションルームにて展示予定です。ProjectionBall等の展示を行う予定です。

YOXO FESTIVAL 2023は横浜の街を舞台にイノベーターやクリエーターが「未来」に向けた新しいアイデアや技術を持ち寄り、領域を越えて交流することで、ひらめきを得たり、ワクワクを体験できるお祭りです。スタートアップによる技術実証、企業や学校、個人、イノベーター、クリエーターによる「未来」をテーマとした展示(ロボット、モビリティ、XR等)、デモやワークショップなどの未来技術の展示や体験ができます。

■開催日
2023/01/27 (金) 〜 2023/01/28 (土)
■時間
11:00〜20:00(最終日は17:00まで)

詳細は展示一覧PDFをご参照ください。

RP2040を使用した新バージョンのProjectionBallを展示予定でしたが、半導体不足影響で他の部品が入手できず、開発が停滞しているため、従来のProjectionBallの展示を行うことになりました。ご都合よろしければぜひお越しください。宜しくお願い致します。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | イベント | このブログの読者になる | 更新情報をチェックする

2022年12月17日

プログラマブルデバイスGreenPak

気が付いたら12月に入ってしまいました。今回はプログラマブルデバイスGreenPakを紹介したいと思います。デジタルの論理回路やアナログのコンパレータ、カウンタ、遅延、タイマといった比較的簡易な機能を実現するために特化したデバイスです。1個200円弱で16bit/32bitのマイコンよりも安く実現することが可能です。1個100円前後の8bitマイコンと比べると少し高いですが、アナログ系とデジタル系の簡易な機能が備わっているため、8bitマイコン単体+論理ICやアナログICを組み合わせる場合にはGreenPak1つで代替できる可能性があります。また、マイコンの周辺回路をGreenPakで統合するといったことが可能です。


greenpak.jpg

GreenPakシリーズ内ではAD搭載モデルやロードスイッチ搭載モデル、レギュレータ搭載モデル等、他にも様々ありますが、多くのモデルは製品への組込を目的としており、書き込みが1回のみの焼き切りタイプ(OTP)です。ホビーユースや試作目的では何度も書き換え可能な下記のタイプ(MTP)に制限されます。

 電源電源2コンパレータCNT/DLYLUTSDFF
SLG468242.3-5.51.71-5.5281917
SLG468262.3-5.51.71-5.5481917
SLG470042.4-5.5372018


SLG4682Xは2電源タイプのため、電圧レベル変換ICとしても利用できます。SLG46826のみ温度センサを搭載。SLG47004はオペアンプ、プログラマブルな基準電圧を搭載しています。

開発環境は無料で利用可能な専用のGo Configure Software Hubというソフトウェアを用いて設定します。ノーコードでGUI画面からモジュールを組み合わせて実装します。書き込みは専用のデバッガを介してI2C経由で書き込みを行うことが一般的ですが、昨今の半導体不足でデバッガが長期間在庫なし状況です。デバッガの代替としてArduinoを介して書き込みを行うことが可能です。

ide.jpg

sim.jpg

Go Configure Software Hubは設定の他、信号のシミュレーションもすることが可能なため、書き込み前に意図した信号処理ができているか確認することが可能です。

実際に使ってみると、コンパレータやLUT等の各モジュールで利用可能なポートの制約等ですべてのモジュールをフルに使うことはできないため、実装には工夫は必要であると分かりました。玉に瑕な点として、SLG4682Xは設定データ書き換え時のメモリ削除処理にエラッタがあり、I2Cに準拠しない挙動をします。その対処としてシステム内で書き換えを行う場合、書き換え時I2Cエラー処理が必須である点です。また、設定メモリの書き込みや削除は1ページ16byte単位となっており、1ページ毎に書き換える必要があります。8byteとか1byteとか細かく書き換えできればより便利だと思いました。

デバッガは入手しにくいものの、GreenPakIC自体は半導体不足の環境下でも在庫が豊富なため、今後はGreenPakを使ってちょっとしたデバイスを検討してみたいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2022年11月26日

組込系機械学習ライブラリ

今回はマイコン等に組込可能な機械学習ライブラリを調査してみました。マイコン等の組込系で使用するため、C/C++で利用可能な代表的なライブラリの特徴を調べてみました。

 最も良く使用される組込系機械学習ライブラリです。ただ、組込系の場合、ARMのライブラリと依存関係があるため、ARM以外のPICやAVRといったCPUではそのままでは利用できません。RISCV等をターゲットにしたARM以外に実装した例もありますが、ライブラリが非常に大きく、ポーティングに難ありなようです。

 STM32マイコンに実装する場合にCubeMXと統合されたUIで利用できる機械学習ライブラリです。KerasやTensorFlow等の学習結果を簡単に組み込むことが可能です。また、学習結果の圧縮やテスト等が容易にできるため、STM32マイコンであれば非常に便利です。一方でSTM32マイコン以外では使用できなく、昨今の半導体不足の影響をモロに受けているため、当面は安定した入手が難しい可能性があります。

 scikit-learnもしくはKerasの学習結果をC/C++に変換することができます。Pythonで学習結果を読み込ませると自動的にC言語でヘッダーファイルが生成され、そのままマイコンのプロジェクトソースに組み込むことが可能です。1つのヘッダーファイルをプロジェクトソースに組み込むだけて利用できるため、他のライブラリのように複数のソースコードをプロジェクトに追加する必要もなく、非常に簡単に組み込むことが可能です。また、ライブラリ自体非常に軽量なため、小規模なモデルであれば8ビットマイコン等にも組込可能です。ただし、利用可能なモデルに制約があります。

ELL
 マイクロソフトが提供する組込向けの機械学習ライブラリです。主にC++で実装されています。組込向けといってもマイコン等ではなく、raspberry piといったSBC等をターゲットにしているようです。ここ数年の開発ペースは落ちているようです。

その他

DLib
FANN

 実際にSTM32 Cube AI、Tensorflow Lite、emlearnを使ってみました。印象として、ターゲットとなるマイコンでサンプルがあれば、Tensorflow Liteはネット上に情報が多く、利用しやすいと思いました。初心者でも簡単に効率よく、推論結果を評価したりできる点ではSTM32 Cube AIがお勧めです。また、利用可能な機械学習モデルに制約があるものの、どのようなマイコンにも簡単に組み込むことができ、C言語で移植性が高いという面ではemlearnがお勧めでです。個人的にはSTM32、RP2040、PIC32マイコン等の様々な環境で利用することを想定し、今後はemlearnをより使ってみたいと思いました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする