2020年04月11日

正負昇圧コンバータ回路

オペアンプやAD変換、オーディオアンプといった回路では正負電源が必要になることが多々あります。そのような場合には方法として、昇圧コンバータ回路を使用する方法、仮想GNDを生成する方法(レールスプリッタ、オペアンプ)が考えられます。

仮想GNDを生成する方法では最大数mA~数10mA程度とあまり電流をとれません。一方、昇圧コンバータ回路を使用する方法では回路によって大電流をとれるものの、昇圧系部品のコストとスイッチングノイズが課題となります。MAU109といった絶縁型の昇圧コンバータは部品を減らして実装できますが、スイッチング周波数が100kHz前後とあまり高くありません。100ksps以上のAD変換用途やハイレゾオーディオ用途ではスイッチングノイズの影響を避けられません。電解コンデンサやインダクタ等のノイズフィルタが別途必要になります。スイッチング周波数を外部のノイズフィルタで除く場合、負荷変動によってノイズフィルタが十分機能しない場合があります。ノイズフィルタの他に昇圧させたあとにリニアレギュレータICでノイズリップルを除去するといった対策を行う場合もあります。

絶縁型ではありませんが、スイッチング周波数が高い2ch以上の昇圧回路を内蔵したスイッチングICを使用(例1例2)して正負電源を生成するとスイッチング周波数によるノイズリップルの影響を低減させることができます。スイッチング周波数が1.2MHz前後と非常に高いため、インダクタ等でノイズ除去も容易です。ただ、問題点として2ch以上の昇圧回路を内蔵したスイッチングICは1個800円~1000円近くするものも多く、コストが課題となります。


そこでいろいろ調査すると1chの昇圧回路で正負の電源を生成する回路例がありました。AD変換ICのADAS3023の電源回路として紹介されており、1chの昇圧スイッチングICとしてADP1613が使用されています。ADP1613であれば200円前後で販売されており、2ch以上の昇圧回路を内蔵したスイッチングICに比べてコストが1/4以下です。当該回路の弱点として正側の電圧しかフィードバックしていないため、正負で偏った負荷を与えると電圧変動してしまう点とカップルインダクタが2つ必要な点があります。オペアンプやAD変換、オーディオアンプ用途であれば正負で偏ることは少なく、カップルインダクタのコストアップもスイッチングICのコストアップに比べれば小さいため、メリットは十分ありそうです。

ADP1613_DualOutput.jpg
AD変換IC ADAS3023データシートから抜粋(左側が正負昇圧回路)


1chの昇圧回路で正負の電源を生成回路を実際に実装してみました。


ADP1613_Board.JPG

カップルインダクタのフットプリントpinアサインを間違えたため、ちょっと残念な実装になってしまいましたが、±15V前後の出力を確認することができました。正負対称電圧なら思いつかなくはないですが、1chの昇圧回路で正負の電源を生成するのはなかなか面白いと思いました。フットプリントpinアサインの修正とインダクタ、コンデンサのパラメータを調整してから基板公開や昇圧モジュールとしての販売を検討したいと思います。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2020年02月01日

Node-Redを用いた赤外線グリッドセンサ制御と可視化

前回紹介したNode-RedからのI2Cデバイス制御する方法に続いて、応用例を紹介します。

Node-Redはノードを結び付けてフローを作成してプログラミングできる他にNode-Red-dashboardを使用することで簡易的にUIを作って可視化することも簡単にできます。

今回はPanasonic製 赤外線グリッドセンサAMG8833とUSB-I2C変換アダプタを使用して取得したデータをNode-Red-dashboardで可視化してみました。Node-Red-dashboardに加えてNode-Red-ui-heatmapを追加しています。

Panasonic製 赤外線グリッドセンサAMG8833は8x8の赤外線アレイセンサです。画素は粗いものの比較的低価格で非接触でサーモカメラを実現できます。

Node-Redのフローは下記のように作成してみました。

Node-Red_AMG8833.png

全体のコードはこちらにアップしています。



指を横向きに近づけると下記のように温度変化を取得することができました。

AMG8833_finger.jpg


赤外線センサなので物の材質によって放射率が異なるため、接触温度計に比べると温度精度は期待できません。ただ、非接触で温度をざっくり測定できるのはやはり面白いセンサだと思いました。

Node-Red-dashboardはチャート(折れ線グラフ)、ゲージなど様々なUIが用意されているため、センサデータの可視化も容易に実現できます。他にもボタンやスイッチといったUIも用意されているので、USB-I2C変換アダプタと組み合わせた応用例を紹介したいと思います。

※追記
USB-I2C変換アダプタで使用しているSC18IM700のFIFOは16byteですが、16byteを超えるデータを要求して受信することができました。順次シリアルでデータを送信する仕様なようです。ただ、通信設定やデバイスによって受信できない場合もあると思われます。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2020年01月25日

Node-RedからのI2Cデバイス制御

今回はNode-RedからのI2Cデバイス制御する方法を紹介します。

Node-Redからセンサ等のI2Cデバイスを制御する場合、SBC(Raspberrypi等)にNode-Redをインストールして専用のノード(BME280VL53L0)でI2Cデバイスにアクセスすることが一般的です。他の方法としてArduinoを経由する方法などもあります。

専用ノードの場合はNode-Redを実行するハードウェアに依存するため、WindowsやMacではそのままのノードが使えません。

先日紹介したUSB-I2C変換アダプタを使用するとハードウェアの依存度を下げることができます。USB-I2C変換アダプタはシリアルCOMポートとして認識されるため、Node-Redのシリアルポートノードを使用することでSBC(Raspberrypi等)の他、WindowsやMacでもそのまま同じノード、フローを使用することができます。

なお、Node-RedのシリアルポートノードをWindowsで使用するためにはオンプレミス版Node-Redを使用する必要があります。こちらの記事を参考にしてください。



USB-I2C変換アダプタを使用してI2C接続タイプのLCDのAQM1602をNode-Redから制御してみました。



Node-Red_AQM1602.jpg

実際のNode-Redフローはこちらで公開しています。


I2CLCD.JPG

任意の文字列が表示できました。


また、I2Cデバイスのアドレスを取得してデバイス検索するコードも作成してみました。I2Cデバイスと通信できない場合にデバイスの動作確認やアドレスの確認として非常に便利です。

Node-Red_I2Cdevicesearch.jpg

実際のNode-Redフローはこちらで公開しています。

USB-I2C変換アダプタの応用例を今後、紹介してみたいと思います。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2020年01月04日

UART I2Cプロトコルブリッジ

あけましておめでとうございます。
2020年も電子工作をはじめとした活動を発信していきたいと思います。

以前からシリアル変換ブリッジIC(I2C/SPII2C/Uart)を紹介しましたが、今回はUARTからI2Cを制御できるUART I2CプロトコルブリッジSC18IM700を紹介します。

SC18IM700を使用するとUARTからI2Cデバイスを制御することができます。SC18IM700がI2Cデバイスマスタとなって様々なI2Cデバイスを制御することができます。

UARTをUSBシリアル変換アダプタに接続すればパソコンのTeraterm等からI2Cデバイスを制御することが可能となります。

また、スピードは期待できないものの、SC18IM700は汎用GPIOの8つを利用することも可能です。


プロトコルブリッジSC18IM700とUSBシリアル変換IC PL2303SAを組み合わせてUSB-I2C変換アダプタを作成してみました。

I2CUSB_1.jpg

I2CUSB_2.jpg

I2CにGrove互換コネクタを搭載することで様々なGroveデバイスを制御することができます。特にTeratermはマクロ機能があるため、マクロ機能を活用することで簡易なドライバ作成ができます。ちょっとしたI2Cセンサのアドレス確認や動作確認、部品の出荷テスト等でパソコン単体でセンサを接続する際の治具として活躍できそうです。

試作基板の動作確認して問題なければteratermのサンプルプログラムをいくつか準備して販売したいと思います。
追記 2/7からスイッチサイエンスにて販売を開始しました。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2019年12月28日

磁気エンコーダMLX90316

Melexis社製の14bit磁気エンコーダMLX90316を試食してみました。

先日紹介した3線式SPI通信を使用して磁石の角度情報を読み込んでみました。
結論から言うとMLX90316はダイヤルといったインターフェース向けのエンコーダでモータ制御にはあまり向いていないようです。

Arduinoのサンプルプログラムでは動作しますが、STM32マイコンのSPI通信で実装すると思うように位置情報が読み込めない不具合に遭遇しました。原因を追うとデータシートにその答えがありました。

MLX90316_1.jpg
 MLX90316データシートP.33から抜粋

データシートをよく見るとt1が最小2.3usということで最大クロックは300kHz程度です。さらにt2で1バイトごとに10us以上待機する必要があり、SPI通信で連続してバイトの読み書きができません。また、t5でCS=1状態で300us以上待機する必要があることが書かれています。数MHzのクロックで通信できるSPI通信のメリットがありません。

つまり、位置データ読み込みは数msに1回程度しか読み込めないということになります。MLX90316の仕様でSPI通信対応ということで細かい部分を見逃していました…

CubeMX上でClock Phaseを2Edgeに設定し、SPIのプリスケーラを256に設定してSPIのボーレートを31.25Kbit/sに設定すると正常に位置情報を読み込むことが確認できました。

MLX90316_2.jpg


 uint8_t sdata[4];
 uint8_t rdata[8];
 uint16_t dat[4];

 uint16_t res;
 uint8_t halres; 
 sdata[0]=0xAA;
 sdata[1]=0xFF;


 SPI_1LINE_TX(&hspi1);
 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
 halres=HAL_SPI_Transmit(&hspi1,sdata,2,0x1000);
 if(halres !=HAL_OK) printf("Transmit Err:%d \n\r",halres);
 SPI_1LINE_RX(&hspi1);
 halres=HAL_SPI_Receive(&hspi1,rdata,8,0x1000);
 if(halres !=HAL_OK) printf("Receive Err:%d \n\r",halres);
 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
 dat[0] = (rdata[0]<<8) + rdata[1];

 if((dat[0]&0x03)==2){
   // Err Data
  if ( dat[0] & (1 << 4)) {
   //printf("Magnetic Field is Too Strong!\n\r");
  }
  else if ( dat[0] & (1 << 5)){
   //printf("Magnetic Field is Too Weak!\n\r");
  }
 }
 else if((dat[0]&0x03)==1){
  res=(dat[0]>>2);//16bit Angle Data
  printf("RES: %d \n\r",res);
 }



MLX90316_SPI_Wide.jpg




磁気エンコーダをモータ制御として使用する場合、少なくとも1msに1回、理想は100usに1回読み込みたいのでMLX90316の仕様は満足しないことが分かりました。ダイヤルといったインターフェース向けのエンコーダとしては低コストかつシンプルなコマンドで通信できるため、非常によいと思いました。

14bi磁気エンコーダとして癖がなく、高速な処理に対応しているのはやはりAMS社のAS5048Aが個人的にベストな磁気エンコーダだと改めて思いました。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする