NXPほか(EtherCATなど)

NXP(mbed)・EtherCATあなどのページです。
興味があるところを読む

微少電流計2(INA226版)

微少電流計(RL78版)
改めてINA226で作ってみた。

ちょい仕事の方でバッテリー駆動の製品を作っていて、これの間欠動作時の消費電流をグラフで見たいんで作ることにした(貧乏人なんで電流プローブを買えない)。
んでRL78に移植するのが面倒なんでLPC1114で作っちゃった。

ハード
どれも仕事で余った手持ちの部品なんでやっつけです(計測する電流が小さいので、全体的に細い線を使ってる)。
このINA226のシャント抵抗を外して、1Ωと10Ωのシャント抵抗(3Wで1%誤差)をくっつけた。
こちらは高級品の金属箔抵抗
1Ω0.3W:誤差0.5%  15ppm/°C    OLINAS
10Ω0.3W:誤差0.1%  5ppm/°C   OLINAS
もっと精度が必要ならINA226のVSに電圧リファレンスICの出力を使うとか?

で、抵抗の切り替えにリレーを入れてみた。これでパソコン側から抵抗を切り替えられるんで便利じゃん。うむ~こんな素晴らしいアイデア見たことない(^^;
ところでINA226はAliExpressなら$1程度で売ってるんで、時間があるならこれで良いかも。

USBCDC部分は秋月の例のFT232RLを使い、3.3V電源もここから貰ってる。
この3.3V電源はFT232内蔵のレギュレータからの出力で、秋月の資料にはMAX24mAとか書いてあったと思うけど本家の資料には50mAと書いてあるような?んま、リレーを50mAで動かしても平気みたいなんで気にしないって事で・・・仕事じゃないし(^^;

開発環境

LPC1114側のファーム作りには、mbedとμVision5+ULINK2を使用。

mbedはOS2って言うのかな?今のRTOSじゃない昔のバージョンを使ってる。
ソースを全部持ってるんで、いざという時にはμVisionでポートの入出力までソースレベルで追いかけられるってのは良いよね。これが出来ないと怖くて仕事じゃとても使えないもん・・・今回は仕事じゃないけど。

CPUのクロックは遅くする必要がないんで、system_lpc11xx.cの #define CLOCK_SETUPはいじらずにそのままなんで、CPUは48MHzで動いてる ← ソースがあるとこう言うことが出来て好き。

μVisionは高級品の有料版を使用・・・顧問先の会社で買ってもらったんだけど凄い値段なんだよね。でもやっぱ出来が良くて、これを使ってるとCS+がイヤになるのだ。CS+はタダだから使うけど有料だったらかなり文句が出ると思う。e2studioなんてもっと文句あり。

ULINK2は中華製で$12~15なのだ。これで高速デバッグが実現する。mbedのUSBデバッグは遅くてイライラするけど、ULINK2で直に接続しちゃえば高速にデバッグ出来て最高でっせ。しかもCPU直接続だから秋月でCPUを¥400で買えば済む。

<PCとの通信ボーレート>
INA226の電圧サンプリング速度はマニュアルを見ると最高で140μSらしいんで、この時間内にバス電圧とシャント抵抗の電圧をパソコンに送信する必要が有る。

それぞれ16bit=2byteだから合計で4byte、念のためにチェックサムをくっつけて5byteを140μS以内に送信するんだから、500,000(50万)bps出てればOKっしょ?

※9600(約1万)bpsは1秒間に約1,000byte送信だから1mSに1byte送信、10万bpsなら100μsで1byte送信、50万bpsなら100μsに5文字送信・・・だよね?

<I2Cの通信速度>
I2Cは400Kで接続した。
mbedのデフォルトのままだと遅いんで、忘れずにi2c.frequency設定で速度を上げること。1Mも試してみたけど、INA226は対応してるらしいけどCPU側が追いつかない雰囲気 。

※I2C速度400K、変換速度140uS(最高速度)で2個のREGの読み出し(2byte書き込み+4byte読み出し)をしたら、50,000回の読み出しに15秒ぐらいかかるから、一度の変換結果を取り出すのに300uSかかってる。

I2C速度を800Kにすると11秒、I2C速度を1600Kにすると8秒程度になるけど、CPUが追いつかず読み取れない。ってことなんでI2C速度は400Kで行く。

試しにCVRF(AD変換終了フラグ)を読み出してみたら50,000回で15秒かかる。つまりもっと高速なI2Cを使わないとINA226の最高変換速度の140μSに追いつかないって事のようだ。いずれは別のCPUにしないとだろうな。

ってことなんで、INA226のサンプリング速度(変換速度)は最高でも588μS迄にすることにした(ってわけでデフォルトが1.1mSになってるのかもね)。
なおコードはmbedなんで相変わらず簡単。数行書けば終わり。やっぱmbedは良いよね~

<パソコン側のアプリ>
パソコン側は例によってVisualStudioでC#。
C#を使っちゃうと他は使えねっす。TurboCやらModula2やらMS-CやらDelphiで食ってきたけど、C#はとてもエエっす。VBみたいにダサくなく、C++ほどの気遣い不要、しかも情報がいくらでも落ちているんで、自分で考える必要が無い。落ちてるコードをコピペするだけ・・・バカでもアプリが作れる(^^;

INA226のレジスタ

INA226マニュアル
INA226から電流(電力)を読み出すためには、CalibRegへの設定が必要なんだけど、今回のように1Ωとか10Ωのシャント抵抗を使うと割り切れない値を設定しないとならずで、そうなると誤差が出るんで使ってない。

INA226のバス電圧レジスタを読み出して電圧を取得し、INA226のシャント電圧レジスタを読み出して、パソコン側で計算で電流と電力を出してるんで、そのつもりで読んでください。

<レジスタ0>
INA226のレジスタにアクセスするときは、レジスタ番号を指定しておいてR/Wする。
レジスタ0は、Configuration  Registerで測定方法を設定するためのレジスタ。
D15-12:無視
D11-9:平均化の回数指定・・・INA226が内部で勝手に平均化してくれるけどアプリでやるから不要
D8-6:バス電圧の計測時間指定・・・意味不明だけど変化させると値が安定する感じ
D5-3:シャント電圧の計測時間指定・・・上のバス電圧と同じにしてる
D2-0:常に連続で電圧を読み出すからデフォルトのままでOK
<レジスタ6>
それと割と大事なのがこれ。
要するにAD変換終了フラグみたいなものらしいんで、これが「1」になったら電圧を読み出すようにする。「1」になる前に読み出しても前回と同じ値なんで無駄みたいよ。
※なおALARMピンに変換終了の結果を出すことも出来るみたいなんで、CPUで変換終了割込みを使いたいならCNVR(D10)をセットしておくみたいだ(試してない)
<レジスタ1>
シャント抵抗の両端の電圧をAD変換して、その結果がこのレジスタに入る。
読み出せばOK。
<レジスタ2>
バス電圧が入るから読み出す。
<他のレジスタ>
無視。使うのはレジスタ0、1,2,6だけ。

ファーム側のコードはMbedなのでちょー簡単
int main(void)
{   
    //void test(void);
    //test();

    top:
    rsel = 0;           // リレーOFF:1Ωのシャント抵抗を使用(MAX 81mA)
    pc.baud(500000);
    _SetN(0, _GetPc()); // PCからの開始CMD待ちだが、この値をConfigRegにセットする
    while (1) {
        // PCからのCMD受信
        if (pc.readable()) {
            ushort rv = _GetPc();
            switch (rv) {
                case 0xffff :goto top;      break;  // 終了
                case 0xff00 :rsel = 0;      break;  // リレーOFF 1Ωシャント抵抗
                case 0xff01 :rsel = 1;      break;  // リレーON  10Ω  ”
                default     :_SetN(0, rv);  break;  // それ以外ならConfigRegに転送する
            }
        }
        // 変換完了待ち
        while ((_GetN(6) & BIT03) == 0);
        // 電圧の取得
        char v[2],c[2];
        ina.voltRead(v);    // バス電圧 2byte
        ina.shntRead(c);    // Shunt電圧 2byte
        // PCへ送信
        pc.putc(v[0]);
        pc.putc(v[1]);
        pc.putc(c[0]);
        pc.putc(c[1]);
        // csum 1byte
        char csum = v[0] + v[1] + c[0] + c[1];
        pc.putc(csum);
    }
}

パソコン側のコード

こっちもちょー簡単。
SerialPortから5byteずつ読み出して、CHKSUMを調べてOKならWORDにし、doubleに変換してChart配列に入れるだけ。コードはだらだらと長いんで書かないけど簡単っす。

間欠動作時の消費電流や平均電流が見えるんでとても結構です。
<キャリブレーションする>
電圧によって電流値に誤差が出るので、CALIBRATIONボタンを追加した。
電圧を変更したら無負荷の状態で平均値が安定するのを待ち、その後でCALボタンを押すと、平均値の分だけ実電流値からマイナスして表示する(再度押すと生値を表示)。
精度は三和のテスターCD771と比較してトントンだから0.1μAレベルに近いかも。

スポンサーリンク

LAP-CをWindows10で使う

マイコン目次
※2019/8にアップした記事を加筆・訂正しました。

G10で微少電流計を作るときに、SPIの確認に ZEROPLUSのLAP-C 16064 を使った。
Windows10で動かなかったんで暫くほっといたんだけど(2012に購入)、動くとの情報を見付けたんで引っ張り出してきた。
ここのWEBから最新版をDLした(FTPでもWEBでも同じ物だと思う)。
インストールするときにLAP-C付属のCDは不要になった。
インストール前に旧バージョンをアンインストールしておくこと。
インストール画面ではAPPLICATIONボタンを押す(自動的にドライバも入る)。
前のように自分でいちいちプロトコルを組み込む必要はない(デフォルトで入ってる)。
ハードウエア・トリガは別売なので自分で設定する必要がある。
まだバグがあるようで、私の環境では時々ロックしてタスクマネージャのお世話になってます。

900円のアナライザ

RL78の記事一覧(目次)
※2019/9にアップした記事を加筆・訂正しました。

中華製の900円(正確には送料込みで869円)プロトコル・アナライザを動かしてみた。
最高サンプリング周波数は24MHzなので、その範囲内で使うって事で。
結論:十分に使える。特に長時間のサンプルを見たいときには便利。

インストール

インストールは全く簡単で、トラブルも発生せずに組み込めた。
こちらを参考にさせて頂いたけど、自分の環境では更に簡単にインストール出来た。
ソフトは Saleae  PulseView  の両方を使ってみたけれど、Saleaeはパルス幅を測るのがイマイチやりにくく、自分としてはPulseViewの方が好きなのでこちらを残した。
※他のUSB機器を繋いでると、たまに動かないことがあるが、接続の順番を変えたりして誤魔化す。

試し計測

試しにUARTを計測してみた。快調、使いやすい、それになんか画面が綺麗。
ソフトはLAP-Cよりも使いやすい感じだけど、プロトコル・アナライザ・トリガは無いので、例えばSTARTビットを受信したらサンプリングを開始するような使い方は出来ない。

大量のサンプリング実験

12MHzで1G個のサンプリングを実行してみた。
1分20秒を越えるサンプリングを行える(最大は1T個のサンプリングが可能)。
本体側はタイマーでGPIOを読むだけで、そのポート値をUSBで片っ端からPCに送信してるだけなのかも。
PC側のアプリではポート値をため込んでおき、一杯になったら停止・・・そんな動作をしてる雰囲気。
長時間のサンプリングと解析には向いてそうだ。なにか使い途が有ると思う。
※組合せによっては怪しい動きをするし、たまにタスクマネージャーのお世話にもなることもあり。
スポンサーリンク

EtherCAT調査

2023/01/12 リンク切れを修正
初めてのEtherCAT・・・初心者丸出し(^^;
EtherCATとは何者?
ベッコフ?マスター?スレーブ?TwinCAT?EC-1?R-IN32M3?
知らない言葉だらけだと、まずは第一歩。

その1 その2 その3

その3

2020/11/3
あちこちに親切な記事が出てきたのでリンクを追加。
EtherCATって素性が良いから、必ずメジャーになると思ってる。
なんだかんだで4年かかったけど、待ってたらやっぱり記事が出始めた。

ラズパイでマスターを作る:OMRONのスレーブを使う例など
こちら:開発用の実記事が多数
 SOEMをDLL化してC#から使う Wiresharkでパケットを覗き見 RX72MはESC内蔵 
 GR-SAKURAでEtherCAT Arduinoで開発の2020/11最新記事
 ここ(Arduinoで動かす記事)やここも同じで、ここではテスト用のボードを売ってる。
ベッコフの日本語の記事:これによるとマスターアプリの開発環境がVisualStudioに統合されているようだ(インストール方法などもある)
  マスターアプリの開発ツール名は”TwinCAT XAE”(VisualStudioに統合されている)と言う名前だ。なおこいつはリアルタイムのLANドライバを使うので要注意。
”EtherCAT スレーブ 自作”の検索結果

その2

2016/12/17
真っ暗闇だったのが、なんとはなしに見えてきたのでベッコフのスレーブ実装ガイドを読んでまとめてみる。
間違いだらけなはずだから、分かったら書き直すつもり。
  • TwinCAT
    ベッコフのマスターアプリの名前 
  • ESIファイル(EtherCAT Slave Information)
    スレーブの身上書でXML形式で記述してあるファイル(スレーブ作成者が作る)。 ベッコフのESIファイルの仕様書DL 
  • ENIファイル
    上記のESIをマスターアプリが使う用に変換したファイル。
    マスターアプリは先にこのファイルを読み込んで、スレーブと通信するための情報を得る。
    ESIをENIに変換するツールのことを「設定ツール(Configuration Tool) 」と呼んでいる(TwinCATは内蔵してるので不要) ベッコフの変換ツールET9000 
  • コンフォーマンステスト
    スレーブがちゃんとマスターに繋がるかどうかを公式認証テストすること。 ベッコフの詳細ページ
    ルネサスのミドルウエアを使えば、このテストで落第することが減るらしい。 
    ESIファイルの正当性を含め、テストで落第しないかを事前に確認するためのWindowsツールがある。 ベッコフのCTT 
  • ESC(EtherCAT Slave Controller)
    スレーブに内蔵されている、マスターとの通信を司るハードウエア。
    これがリアルタイムで通信を処理し、GPIO/SPIやDPRAMなどに結果を出すらしい。
    ルネサスではベッコフからライセンスを導入して自社のワンチップCPUに載せてると言う事だ。  
  • SSCTool(EtherCAT Slave Stack Code Tool)
    スレーブ用のC言語のソースを出力するツールらしい ベッコフのSSC(ET9300)
    もしかしたらこれの使い方を覚えるのが先って話かも? 
  • スレーブに使うコードを販売したりもしてるようだ  
  • 続く
スレーブとマスターはこんな感じで繋がる。
「スレーブ機器を作る」と言う事は緑色景部分を作ることだ。
EC-1にてスレーブ開発の練習をするのに必要な機材など(ここのP8に記述有り)。
ベッコフ社のツールを使うので事前にETGに会員登録しておく必要がある。
なおベッコフサイトのアカウントはETGとは別なので、ETG入会後に取得する必要がある。

IDE
IARのARM版のIDEを使う(EC-1はCPUコアがARMのCortex-R4)。
このページのARMをDL(コードサイズ制限版でOK) インストール方法
 
デバッガ
デバッガもIARのものを使う。
I-Jet 取説 
 
スレーブとして使う評価ボード
ルネサスの最新型(2016/10サンプル発売、2017/5量産予定)
EC-1評価ボード 販売店 
 
ルネサスのスレーブソフトウエアなど ドキュメントTOPページ
スレーブ作成方法PDF(R01AN3326JJ0100) プロジェクト一式 
コード自動生成ツールSlave Stack Code(SSC) Tool
 
マスタソフトウエアなど
TwinCAT3を使うが、このソフトは無茶をしてるソフトなんで、開発とは別のPCに専用にインストした方が安全だと思う。
スレーブ作成方法PDF内のP24の指示に従って実際にコンパイルしてみた。
事前にSSCとIARのIDEの無料版(32KB制限付きの方)をインストールしておいた。
ワーニングが一つ出ただけで無事にコンパイル完了した。
と言う事は32KB以内に収まってるって事だと思う。
後は実物の評価ボードとデバッガが無いと進めないんで、取り敢えずここまでで一段落。

その1

  • 2016/11/2
  • ドイツのベッコフ社が作った。
    日本に支社がある。
  • メッセージの往復回数は最大毎秒8000回(最短送出間隔は125μ秒)、65535スレーブ、スレーブ間距離100m以内、最長36.4km。
    イーサネットフレームをバッファリング(ため込み)もルーティグ(振り分け)もせず、受け取ったビットを隣のスレーブに渡すことで高速なデータ転送を可能とした。
    これは最長のイーサネットフレームが送出を開始して完了するまでの時間(121.44μ秒)とほとんど同じ。つまりEtherCATはこれ以上高速にできないというところまでチューンされている。ちなみに送出間隔125μ秒の時、マスタはスレーブに1秒間に8000回(1秒÷125μ秒)の命令を出せることになる。
    情報系ネットワークの常識(アドレス通信、プロトコル処理、バッファリング、ルーティング)を採用せず、逆転の発想で超高速なリアルタイム通信を実現している。
  • 1μs同期。
    スレーブ機器はデータが伝送されてくる時間差を計測してタイミングを調節する。このDistributed Clocksメカニズムにより1μsという機器間の同期性能を実現している。
  • EtherCATスレーブではデータの送受信処理をEtherCAT Slave Controller(ESC)がハードウエアで行っているため、ネットワークパフォーマンスはスレーブのマイコンの性能に依存しない。なおESCとCPUはDPRAMで接続する。 アルテラ 
  • スレーブ構成の自動検出。
    スレーブを入れ替えたり追加しても自動で認識する。
  • 電源配線が不要なEtherCAT P。
    1本の標準的な4線のEthernetケーブルで電源供給(24V DC)も可能とした。
EtherCATとは ここ ここ トヨタが採用 ベッコフ社の詳細ページ 
 単純な制御ではFPGAだけで良いようだ。FPGA詳細(32bitDIO/SPIなど内蔵) 
  「EtherCAT ASICを使うことでマイクロコントローラを必要としないシンプルな電子モジュールや、処理装置を内蔵したインテリジェントデバイスを実現できます。」
 それなりの動作をする機器を作るならFPGA+CPU(またはワンチップ)の構成になる。
 なお開発した物はテストに合格しないとならないらしい(色んなメーカーの機器が数珠つなぎになるから当然か)。

現時点でのスレーブ開発用製品 ETGへの入会が必要
 現時点ではベッコフ製のFPGAにCPUを組み合わせたタイプと、ルネサスのESC内蔵ワンチップタイプがある。
 ベッコフのトレーニング 
 今後は値段の点からもESC内蔵ワンチップが主流になると思われる。 
 疑問1:ベッコフで行くかルネサスで行くか? → ベッコフのトレーニング?ワンチップのルネサス?
 疑問2:ルネサスの新旧のどちらで行くか? → 新製品のEC-1は資料が少ない

<ESC内蔵ワンチップ製品群>
結論
EC-1はドキュメントが少ないのと、量産が2017/5からなので不安だが、取り敢えずこれで始めてみよう。
<ESC内蔵ワンチップCPUであるEC-1でやる>
 ここまで数日にわたって調べてきて、この宣伝文句の意味が理解出来たと思う。
 理解出来るようになってみると、EC-1で行くのが一番無難そうだ。
 EC-1にはベッコフのテストに合格済みのサンプルソフトがついてるのがでかい。
 なお現時点では開発キットに付属のサンプルはIARを使ってる。

<その他の手段>
 ベッコフ製品でやる? → ベッコフのトレーニング → ベッコフで作成 → ルネサスに移す
 結局、ESCとCPUをDPRAMで接続して、コンフィグデータ用のEPROMがあれば良いみたいだ。
 まずはWindows版のマスタを入れて、市販品のスレーブを動かしてみるのが第一歩だと思う。OMRONのスレーブ製品 その他 
 ネットワークアナライザやらVisualStudioでデバッグ実行すれば少しずつでも進むでしょう。

マスタとしては以下の物がある。
 マイクロネット RSW-ECAT-Master デバッグツールRSI-ECAT-Monitor コンフィギュレータ
 ベッコフ製のEtherCATマスタTwinCAT3(これは7日ごとに更新すればずっと使えるらしい) コンフィギュレータ(TwinCAT使用時は不要らしい)
 Windows版フリーライブラリSOEM

参考記事
 江端さんのDIY奮闘記
  これを読めば一発で分かる。
  SOEM(オープンソースのEtherCATマスタのWindows版ライブラリ)で作るEtherCATマスタとEtherCATスレーブの記事
スポンサーリンク
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


興味があるところを読む