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) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2022年11月12日

BLE5モジュールV2

プログラミングなしで簡易なコマンドを用いてBLE通信をすることが可能なモジュールがSilicon Labs社からWireless Xpress BGX13シリーズとして2018年から提供されていました。しかしながら先日、2022年8月に生産完了予定(生産終了は2023年3月予定)が発表されました。

BGX13シリーズは発売から4年程度経過しており、生産完了もやむを得ずという状況ですが、BGX13シリーズの上位として発売されたBGX220シリーズは2021年に発表されてから1年ほどでBGX13シリーズと一緒に生産終了となりました。WiFiモジュールでも生産完了になっており、方針変更で無線系のXpressシリーズから撤退となったようです。上位版のBGX220シリーズも生産完了となり、後継機種も販売されないことから既存のユーザに対する影響を考慮し、BGXシリーズについてはLaird社からLyraシリーズとしてBGXシリーズと同じハードウェアとXpressファームウェアが提供されることが分かりました。今回はBGXシリーズとLyraシリーズの違いについて調査した結果(アンテナ内蔵Pシリーズを対象)を紹介したいと思います。

BGXシリーズとLyraシリーズの違いについてはLyraシリーズの公式サイトにBluetooth Xpress (BGX) Migration Guideとして公開されています。詳細はそちらを参考にしてください。

lyra.jpg

■ハードウェア
ハードウェアとしてフットプリントは同じため、そのまま同じフットプリントとして利用できます。一方、ピンアサインはBGXシリーズとLyraシリーズで互換性がありません。LyraシリーズのピンアサインはBGX220に合わせたようで、BOOTピンが異なります。BGX13とはBOOTピンの他、電源やUARTのピンも異なります。

電源電圧については1.8V~3.3Vとなっており、最低2.4VのBGX13よりもより低電圧で動作できる仕様となっています。

■ソフトウェア
ソフトウェアについては互換性有ということのようです。ただ、BGXシリーズでは出荷時から既にXpressファームウェアが書き込まれた状態でしたが、Lyraシリーズは出荷時にXpressファームウェアは書き込まれておらず、ユーザ側で公開されているXpressファームウェアを書き込む必要があります。

ファームウェアはBOOTピンをGNDにした状態で電源投入させることでUARTから書き込むことが可能です。Github上でWindowsのコマンドラインからシリアルUARTを介してファームを書き込むための書き込みツールuart_dfu.exeが公開されています。uart_dfu.exeはUART-DFU_XXX-XXXXX.zipとして圧縮ファイルとして提供されています。

コマンドライン上から例えば下記のようにコマンドを実行するとファーム書き込みが可能です。

uart_dfu.exe COM8 115200 LYRA-P_Bluetooth_Xpress_UART.gbl

実際にファーム書き込みした際に分かった点として、書き込みツールuart_dfu.exeはUSBシリアル変換のGND, TX, RXの他にCTS、RTSの配線も必要な点です。通常のマイコンとの通信等ではGND, TX, RXだけでも十分ですが、uart_dfu.exeの書き込みツールはCTS、RTSの信号変化も確認しているようで手持ちのGND, TX, RXだけのUSBシリアル変換アダプタでは動作しませんでした。GND, TX, RXの他にCTS、RTS端子も備えた別のUSBシリアル変換アダプタを使用するとすんなり書き込むことができました。

Wireless XpressシリーズはUARTシリアルで設定変更できるため、プロトコル実装なしでマイコン側のファーム書き換えのみで様々な機能を実現できるというのは非常に魅力的です。BGXシリーズは生産完了になったものの、Laird社からLyraシリーズとして今後もある程度入手できるようで安心しました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2022年08月13日

1-WireマスタコンバータDS2485

1-WireはGNDと電力を兼ねた信号線1本だけで低速なデータ転送を行うシリアルインターフェイス規格です。I2CやSPIと違って基板内や基板同士の通信でなく、外部に延長することを目的としていたシリアル通信規格のため、最長で数百m以上ケーブルを伸ばしてセンシングすることが可能です。

今回、紹介するのはI2Cから1-Wireデバイスを制御するための1-Wireマスタコンバータ、DS2485です。126Byteのバッファ、0.75kbit(32Bytex3)のEEPROMを搭載しています。I2Cから1-Wireに変換するコンバータとして、従来のDS2482、DS2483、DS2484等がありますが、DS2485は細かいタイミング調整やバッファ、EEPROM等を備えています。一方、コマンド等は従来と互換性がなくなっています。また、標準では3.3V系専用で5V系には対応していません。5V系で動作させるためにはレベル変換が必要です。なお、DS2485に備えられたGPIOはユーザ側でオープンドレインIOとして利用可能ですが、データシート内のP.38のP-Channel Enableビット等があることから仕様上はストロングプルアップのP-FET制御用のIOを想定しているようです。


マイコンから直接、1-Wireを制御する場合に比べて、1-Wireマスタコンバータを使用するとI2Cからコマンドを書き込んだり、値を読み込んだりするだけで通信できるため、マイコン側の負荷が低減できます。特に1-Wireはタイミングにセンシティブなため、一般的なマイコンで実装すると1-Wireの通信中は処理が占有されてしまいがちです。そのような場合に便利なのが1-Wireマスタコンバータです。

1-Wireマスタコンバータ、DS2485の変換基板を作成して、有名な1-Wire温度センサ、DS18B20を接続してみました。


1Wire.jpg

1-Wireで必要なコマンドが1-Wireマスタコンバータに予め実装されているため、簡易に1-Wire機能を実装することが可能です。実装後の動作確認ではすんなり動作せず、原因を追ったところ、初期設定が必要なレジスタがあることが分かりました。1-WireマスタコンバータDS2485として電源投入後、Master Reset 62hコマンドくらいで、その他のタイミング等はデフォルト値で問題ありません。ただ、RPUP/BUFコマンドについてはエラッタなのか、デフォルト値から変更が必要なことが分かりました。RPUP/BUF Registerの初期値は803Chとなっており、一般的な条件では0006hに設定変更が必要です。他のレジスタはデフォルトで0006hになっているにも関わらず、RPUP/BUFだけは0006hに変更が必要なため、分かりづらく、注意が必要だと思いました。

1-Wireは省配線でありながら、1-Wire温度センサ、DS18B20の他、熱電対やEEPROMメモリ、I2C/SPIブリッジ等の様々なデバイスがあることから、色々試してみたいと思いました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2022年07月23日

ST製気圧センサLPS25HB注意点

ST製気圧センサLPS25HBを使っていて、うまく気圧データを取得できないという問題に遭遇したため、その対処方法について紹介したいと思います。今回は秋月電子で販売されているLPS25HBの変換基板を使用しました。

現象としては一般的なI2Cデバイス同様にアドレス、レジスタを指定して、データをまとめて読み出すという流れでLPS25HBから気圧データを3byte分読み出すと同じ値のデータが3つ読み出され、意図した値が読み出せてないということが分かりました。データシートをよく見るとLPS25HBは一般的なI2Cデバイスと異なり、まとめてデータを読み出す際の自動アドレスインクリメントがデフォルトで無効化されているということが分かりました(データシートP.25)。自動アドレスインクリメントを有効化する場合はレジスタの最上位ビットに1をセットして読み出すと記載があります。自動アドレスインクリメントとは、2バイト以上のデータを読み出す際に先頭のレジスタのみ指定すると自動的にレジスタをインクリメントして一括で2バイト以上のデータを読み出せる機能です。

つまり、LPS25HBで気圧データ等を取得する場合、個々のレジスタを指定して1つずつ読み出すか、レジスタの最上位ビットに1をセットして読み出す必要があります。

例えば気圧データの場合、レジスタはPRESS_OUT_XL 0x28、PRESS_OUT_L 0x29、PRESS_OUT_H 0x2Aとなり、0x28を指定して3回読み出しするのでなく、レジスタの最上位ビットに1をセットした0xA8を指定して3回読み出しする必要があります。同様に温度の場合は0x2Bでなく、0xABを指定する必要があります。


他のST製気圧センサをざっと調べてみたところ、自動アドレスインクリメントがデフォルトで無効化されているのはLPS25HBのみということが分かりました。



製品名アドレスインクリメント有無
ILPS22QS
LPS22CH
LPS22DF
LPS22HB
LPS22HH
LPS25HB×
LPS27HHTW
LPS27HHW
LPS28DFW
LPS33K

LPS25HBを使用する際は自動アドレスインクリメントがデフォルトで無効化されていることに注意してください。一般的な多くのI2Cデバイスはアドレスの自動インクリメントが有効化されていますが、ごく稀に自動アドレスインクリメントがデフォルトで無効化されているデバイスがあります。LPS25HBに限らず、I2Cデバイスの読み出しで同じ値が読み出されるという場合は自動アドレスインクリメントの設定がどうなっているか確認した方が良いと思いました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2022年04月23日

USBカメラ変換基板

 今回は昨年から試行錯誤しながら取り組んでいるプロジェクト(USBカメラ変換基板プロジェクト)について紹介します。組込系でカメラ機能を利用する場合、昨今ではOpenMVやM5Camera、ESP32-Cam等を利用することが多いと思います。マイコンとカメラを接続する場合、一般的に下記の接続方法があります。


接続方法メリットデメリット製品例
SPI
伝送が高速
ローエンドマイコン対応
機種によってコマンド互換なし
低解像度
Arducam等
UART
省配線
コマンド互換少し有
ローエンドマイコン対応
伝送が低速
低解像度
シリアルカメラ等
NTSC+SPI
伝送が高速
汎用NTSCカメラ対応
NTSCカメラ自体の入手性
バッファメモリ必須
解像度固定
TVP5150等でSPI変換
パラレル
伝送が高速
高解像度
配線が多い
ハイエンドマイコンのみ対応
カメラモジュール等
MIPI
伝送が超高速
高解像度
専用IF必須
ハイエンドマイコンのみ対応
HDMI
伝送が超高速
高解像度
変換IC必須
ハイエンドマイコンのみ対応
TFP401等で変換
カメラユニット
低コスト
筐体ケース付きがある
別途ファーム書き込み必要
OpenMV
M5Camera
ESP32-Cam
HuskyLens
USBカメラ
USB汎用接続
ケーブル延長容易
入手性が良い
UVCホストの実装が複雑
USB1.1では動作しないカメラ有
解像度の制約が多い
Logicool C270、C920等


 SPI接続やUART接続の場合、予めバッファがカメラ側に内蔵されていることが多いため、マイコン側に大容量メモリがなくても最低限の処理が可能です。一方、パラレル接続やMIPI接続の場合はイメージセンサからほぼそのまま出力されるため、それに対応した高速なインタフェースと読み出しデータを保持するための大容量メモリが必須となります。ユニットとして販売されているものは公開されているファームを書き込むだけで簡単に動作確認や実装できるために便利ですが、生産終了やロットによる機能差等が生じる場合が多々あります。多くのカメラモジュールで使用されるイメージセンサは主にスマートフォン向けのため、カメラモジュールの生産終了や型式変更等が頻繁で継続した安定入手に難があります。

 上記の方法の中でUSBカメラやNTSCカメラを使用する場合、汎用的なIFで継続して安定入手が可能です。ただ、そのままでは容易に使うことが難しいのが課題です。そのため、単体や小規模のマイコンでも簡単に処理できるUSBカメラ変換基板を開発することにしました。
コンセプトは下記の通りです。

・汎用的なUSBカメラから画像取得(jpeg、bmp対応)
・単体でSDカード等に画像ファイルを保存
・簡易的なタイムラプス撮影ができる
・UARTやSPIを介した低解像度の画像取得


実際に開発したUSBカメラ変換基板です。

img1.JPG


もともとはSTM32マイコンで実装予定でしたが、HALライブラリではIsochronous転送に失敗してうまく転送できない、昨今の半導体不足で入手困難であるため、断念。FTDIのVinculumではRTOSのオーバーヘッドが無視できず、SPIの転送速度が遅すぎて断念しました。最終的にPIC32MZマイコンを用いて実装しました。PIC32MZはUSB2.0 High Speedに対応しているため、多くのUSBカメラに対応できます。

SPIを介してLCDを接続してBMPデータを描画させてみました。

img6.gif

カメラや設定によって異なりますが、1秒間に10フレーム弱程度で比較的スムーズにLCDに表示させることができました。


img7.gif

また、10秒間隔でのタイムラプス撮影をして後からコマ送りで動画に編集してみました。今後はサンプルコードや利便性の向上、対応カメラの追加、機能追加等を検討したいと思います。随時こちらに更新情報を追加したいと思います。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする