2017年03月27日

STM32 Studio

今回はSTMマイコンで便利なツールについて紹介します。

マイコンのツールというと、
開発環境と書込みソフトの2つがあれば十分という感じですが、
STMマイコンではSTM32 Studioというツールがあります。


STM32 Studioでは
・グローバル変数のモニタリング
・グローバル変数のグラフ化
・グローバル変数の値書き換え
などができます。

つまりprintfやLCDなどで出力しなくとも簡単に
デバッグを進められます。



使い方は
1. STM32 Studioのダウンロードとインストール

2. ソフト立ち上げ
 ※javaの関連付けができていない場合は
   java binaryへ開くプログラムを変更する

3. マイコン書込み
 マイコンにプログラムを書き込み
 ※書き込み後は接続を解除してください。

4. 設定ファイル読込
  開発環境で生成したバイナリファイルの1つ.elfファイルを読込ます。

set1.png

5. 設定
 「Expand table elements」にチェックを入れて、
 「select all」、「Import」をクリックして、変数をインポートします。
 ※「Expand table elements」にチェックで配列の先頭以外も表示できます。


set3.png

6. 接続先設定
 画面上のプルダウンメニューから
 「STLink SWD」を選択して、
 横の「Start」ボタンを押すと取り込みが開始されます。
 ※書込みツールの接続が維持されていると取り込みでエラーが出ます。
   接続を解除してから「Start」してください。 

set5.png

7. グラフ表示
 左の窓から変数を右の窓へドラッグ&ドロップすると
 変数の変化がほぼリアルタイムに表示されます。

set4.png



ロボット制御のゲイン調整など
Uartや可変抵抗を利用して何度も設定し直すことが一般的でしたが、
これで簡単にリアルタイムに調整ができます。


パラメータ調整やゲイン調整などをSTMマイコンで行う際は
STM32Studioは必須ツールだと思いました。


posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2017年03月22日

I2C Device Search サンプルコード

今回はI2Cデバイスのアドレスを検索して、
一覧を表示するデバイスサーチについて紹介します。


環境はこれまで同様、
・STM32F303K8
 +SW4STM32(System Workbench for STM32)
 +STM32CubeMX(HAL ライブラリ、F3 ver. 1.60)
です。


raspberryPIやArduinoなどでは
I2Cデバイスサーチのコードが公開されており、
I2Cデバイスのアドレス確認や正常動作の確認に使えるので
非常に便利です。

ただ、STM32のHALライブラリで書かれたものがなかったので、
作成してみました。


void I2C_Dev_Search(){

    uint8_t FindNum=0;
    uint8_t FindDev[128];

    printf("*** I2C Device Search Start! ***\n\r");
    for(int i=0; i<0xff;i=i+2){

        uint8_t res=HAL_I2C_Master_Transmit(&hi2c1, i,(uint8_t*)0x00,0,50);
        if(res==HAL_OK){
            FindDev[FindNum]=i;
            FindNum++;
            printf("[0x%X] \t",i);
        }
        else{
            printf("0x%X \t",i);
        }

        if((i+2)%10==0)printf("\n");
        HAL_Delay(1);
    }
    printf("\nDevice Found: %d \n",FindNum);
    for(int i=0; i<FindNum; i++){
        printf("Device No. %d  Address: 0x%X (0x%X)\n",i+1,FindDev[i],FindDev[i]>>1);
    }
    printf("*** I2C Device Search Finished! ***\n\r");
    HAL_Delay(100);

}


上記の関数をmain関数内で実行するとデバイス名が一覧で表示されます。

i2c-search.png

上記では加速度、ジャイロセンサが一体の
MPU6050を接続した際のアドレスが表示されています。

0xD0がHALライブラリで使用するアドレスとなります。
データシートでは読込書込みビットを除いた0x68が
アドレスとして説明されています。

Githubにプロジェクトファイル含めてアップしました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2017年03月17日

シリアルプロッター

今回はシリアルCOMポートの数字列をグラフ化する
シリアルプロッターについて紹介させて頂きます。


以前からデバッグ等で使用していたシリアルプロッターに機能を加えて、
最近、リリースできる形にしました。


ArduinoのIDEには
デフォルトでシリアルCOMポートからグラフ化する機能がありますが、
他のIDEにはありません。

オープンソースで世の中に様々なシリアルプロッターがありますが、
データの平均化処理や表示数変更、保存機能などがないため、
それらの機能を実装したシリアルプロッターを作成しました。



センサのデバッグやモータ制御などのゲイン調整等で役立ちます。
数字の並びよりも視覚的に判断できます。


serialplotter.png



既にGithubにて公開しています。

折角なので更に使いやすくなるように今後も少しずつ、改良する予定です。


ラベル:ソフトウェア
posted by Crescent at 00:00| Comment(3) | TrackBack(0) | モノづくり | このブログの読者になる | 更新情報をチェックする

2017年03月12日

ハードボタンやNTPを使わない時刻設定方法

次世代のProjectionBallの開発で時計を
プロジェクションできる機能の実装で
時刻の設定方法の工夫について今回は紹介します。



次世代のProjectionBallでは
遠隔での操作やスマートフォンからの操作を実現するため、
Wifiモジュール、ESP-WROOM-02を搭載する予定です。



また、ESP-WROOM-02では
時刻をプロジェクションするためのRTCを搭載していないため、
ProjectionBall側の本体マイコンでRTC機能を実装し、時刻を管理します。


この場合、どこから本体マイコンRTCの時刻設定をするか悩む点です。


一般的な方法としては
@本体に時刻設定ボタンを作る
  ×→ボタン数が増え、表示インタフェースが必要
AESP-WROOM-02経由でブラウザから時刻を打ち込んでもらう
  ×→時刻を打ち込むのが面倒
BESP-WROOM-02経由でNTPを使用して時刻を取得
  ×→インターネットに接続されていない場合の時刻設定ができない、海外対応が面倒

といった感じでどれもProjectionBallでは非現実的な感じです。


そこで工夫した点として、
「Aブラウザ経由で時刻を打ち込む」の方法を改良し、
「端末上のブラウザ画面でブラウザから時刻を取得する」という方法です。
つまり、javascriptで端末の時刻取得を行い、
ESP-WROOM-02へ時刻文字列を送信する方法です。


この場合、時刻設定のハードボタンが不要、
NPTサーバから取得する必要もありません。
また、ESP-WROOM-02自体が
インターネットに接続されていなくても時刻設定可能です。


ほとんどのユーザーがスマートフォンやPCからアクセスするため、
スマートフォンやPCの時刻をブラウザ経由で取得してしまえば、
夏時間でも海外でもスムーズに時刻取得できます。



自動的にブラウザから取得した時刻が表示されるため、
ユーザーは設定ボタンを押すだけです。



wifi.png

スマートフォンやPCのブラウザ画面から
ESP-WROOM-02へアクセスする画面に
時刻取得のスクリプトが書かれており、
自動的に時刻や日付の文字列が更新されます。



「Send」ボタンを押すことで
時刻や日付が文字列としてESP-WROOM-02へ送信されます。


ESP-WROOM-02は時刻情報を受けると、
そのままProjectionBall側の本体マイコンへ時刻情報を送り、
本体マイコンがRTCを設定します。



実際に表示される画面に入れたスクリプトは下記の通り。


  t=0;           
  function dsptime() {
     DD = new Date();
     Year = ('00'+ DD.getFullYear()).slice(-2);
     Month =('00'+ (DD.getMonth() + 1)).slice(-2);
     Day    = ('00'+ DD.getDate()).slice(-2);
     Hours = ('00'+ DD.getHours()).slice(-2);
     Minutes = ('00'+ DD.getMinutes()).slice(-2);
     Seconds = ('00'+ DD.getSeconds()).slice(-2);               
     document.getElementById("settimetext").value
                    = ""+Hours + Minutes + Seconds;
   document.getElementById("setdatetext").value
                    = ""+Year + Month + Day;
 }
 t = setInterval("dsptime()", 500);

0.5秒ごとに自動的に時刻や日付の欄を更新する。


実際にESP-WROOM-02へ組込んで使用しているプログラム例は
Githubへアップしてあります。



このような工夫で低コストで汎用的な時刻設定が実現できました。
ウェブアプリ、ブラウザベースならではの設定方法だと思います。
ぜひ、WifiモジュールとRTCを使用した機器の組み合わせの場合に活用してみてください。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2017年03月08日

Kicad プロジェクトレスキューヘルパー

電子回路設計ツールのKicadについてメモ書き。


電子回路設計ツールとしてKicadの他にEagleやQuadceptなど
使用しています。



先日、古いKicadプロジェクトから転用して
新しいプロジェクトとして別回路を設計、委託製造しました。


届いた基板の火入れすると、動作がおかしく、Fetのピンアサインのミスが発覚。
古いKicadプロジェクトでも同じFetwo使用していましたが、
そちらではピンアサインは正しく設計されていました。


ERCチェックにも問題がなかったにも関わらず、
一体、どこでピンアサインがおかしくなったのかと調査すると...


そいう言えば、あるタイミングで回路図エディタを開いた際に下記のようなメッセージが出ていました。


kicad.png

「プロジェクトレスキューヘルパー」
ライブラリの情報とキャッシュの情報が一致しない場合に表示されます。
この画面で「OK」をクリックすると、
ライブラリの情報を優先し、
回路図エディタのコンポーネントが更新されてしまうようです。


この画面で左下「再度表示しない」or「キャンセル」を押すと
勝手に更新されずに元のコンポーネントが維持されるようです。


原因としては
無精して適当にライブラリの情報を追記しながら使用していたためです。
ライブラリとキャッシュで同じコンポーネント名にも関わらず、
異なるピンアサインのため、このような画面が出たようです。



ライブラリを追記せすに別名で作成することが正しい使い方ですが、
もし「プロジェクトレスキューヘルパー」が表示された場合は
「再度表示しない」or「キャンセル」で
コンポーネントが更新されてしまうという問題が回避できます。




今回は基板委託製造後の火入れで気付いたため、
手遅れでした、残念。
まあ、試作基板で1つや2つのミスは良くあることですが笑

無精なKicadユーザーさんは「プロジェクトレスキューヘルパー」に要注意です。
ラベル:KiCad
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする