2017年05月12日

コードプロテクト機能

今回はSTMマイコンのリードプロテクト機能(RDP)について紹介します。


製品などにSTMマイコンを組み込んで出荷する場合に
JTAGやSWD端子を介してマイコン内部のデータを取り出して、
解析やコピーされてしまうことを防止するためにリードプロテクト機能を利用します。


F4やL4ではPCROPという更に強化されたプロテクト機能があります。
第三者のコードをCPUに実行させて内部のコードを取り出す操作を防止します。
ただ、F3ではPCROPに対応していません。


他に意図しない書き込みを防止するための書き込みプロテクト機能(WRP)もあります。


今回は一般的なリードプロテクト機能についてのみ紹介します。


リードプロテクト機能には3つのレベルがあります。

◆読み出し保護レベル0
 コードプロテクトなし、書き込み、読み込み可能、初期状態。

◆読み出し保護レベル1
 JTAG、SWD等で読み込み不可、書き換え可。
 また、読み出し保護レベル0へ変更も可

◆読み出し保護レベル2
 JTAG、SWDの認識を不可にさせるため、
 読み込み書き込み完全に不可。
 また、読み出し保護レベル2から他のレベルは変更不可。

今後、ファームをアップデート等に対応させるためには、
最大でも読み出し保護レベル1が適当なようです。
読み出し保護レベルを2にしてしまうと
マイコンを丸ごと載せ替えない限り何も変更できません。


上記の読み出し保護レベルの変更方法は
ST-Link Utilityから行う方法とコード内から行う方法の2種類あります。



◆ST-Link Utilityから行う方法

ST-Link Utilityの「Target」から「OptionByte」を選択します。

readprotect-btn.jpg

上部の「Read Out Protection」の項目のレベルを変更します。
FlashSectorProtectionを必要に応じて解除、もしくは選択して
「Apply」をクリックすると
現在の書き込まれたファームに対して保護が適用されます。

readprotect.jpg



◆コード内から行う方法
 コード上に埋め込む場合はSTコミュニティー内のこちらで紹介されていました。



毎回行うのは面倒という場合はコードに埋め込んだ方が良さそうです。

ただ、更新ファームを配布する場合はファイルとして配布されてしまうため、
あまりプロテクトを掛ける意味は薄くなってしまいます。


製品のコピーを避ける場合は
コードプロテクト&OTAアップデートなどを利用する他に
Apple製品のように基板の色を黒色等にして、
配線パターンを見にくくするなど多面的に対策する必要がありそうです。


ラベル:部品 HAL STM32
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2017年05月07日

圧電マイクロブロア

先日から秋月電子で取扱を始めた
圧電マイクロブロアについて紹介します。


モータや電磁石等を使用するブロアと異なり、
圧電素子を使用しているため、
消費電力かつ動作音がほぼ無音です。

piezo_pump.png



村田製作所のwebサイトでは
圧電マイクロブロアの応用例が色々紹介されていました。


空気やシリンジ等を動かすポンプ以外にも
ホバークラフトのエア駆動源など思った以上にパワフルです。


駆動回路としては
初期の仕様書にはオペアンプで発振回路を作成し、
PNPとNPNのトランジスタで切り替えするような回路でしたが、
秋月電子のサイトにN555で駆動させる回路例があったため、
N555で実際に回路を作成して実験してみました。

N555.jpg


駆動回路と関係ない部品も一部ありますが、
N555は電圧も最大15V程度まで、電流も200mA程度取り出せるため、
PNP、NPN等のトランジスタは不要でそのまま駆動できます。


共振周波数が約26kHz前後なようで、
駆動回路の周波数を共振周波数に合わせる必要があります。


実際に上記の回路に9V電源を最初に供給したところ、
駆動回路の周波数が10kHz程度だったため、
完全に「ピー」というブザーのような音が鳴り驚きました。

考えたら駆動源は圧電素子なので、
ブザーになるのは当たり前ですが...

駆動回路の可変抵抗を調整し、
周波数を上げていくと、
超音波となり、
あるところで急に「シー」という
エアの音が出ます。

丁度、その点が共振周波数約26kHzなようです。

共振周波数に一致して「シー」という音が鳴ると
穴の部分からエアが出ていることが唇等に近付けることで分かりました。

指先では少し分かりずらい感じでした。
電圧を上げればはっきり分かると思います。


それ以外の周波数では、共振周波数に一致しないため、
穴からはエアは全く出ず、単なるスピーカという感じです笑


熱収縮チューブを加工して、
繋いでコップの水にエアを供給してみました。




電圧が9Vと少し低いことと、
熱収縮チューブに少し隙間があるため、
弱いですが、エアが連続して出ていることが確認できました。


エアの出る部分の突起が小さいため、
チューブ等の取り付けが少し面倒です。


ただ、これまでのポンプやブロアに比べ、
消費電力が少なく、無音なため、
簡単な昇圧回路とマイコンを組み合わせて、
PWMでパワーの調整ができれば、
ON/OFFではできないような面白い制御ができそうです。


簡単に使えることが分かったので、
今後は圧電マイクロブロアを使って
何かしらの面白いデバイスを考えてみたいと思います。

ラベル:部品
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2017年05月01日

3Dプリンタ導入

今回はGWを利用して自作3Dプリンタの導入について紹介します。


都内のファブ施設等で3Dプリンタを何度か利用したことはありましたが、
今回、初めて3Dプリンタを自作しました。


モーションコントロールやロボット系の研究、開発をしていると、
モータ周りの固定やエンコーダの固定など可動部があるため、
汎用部品での固定には限界を感じていました。

だからといって外部に3Dプリントを依頼すると
小さい部品1個でも1万弱します。
CNC削り出しも選択肢の1つですが、
アルミブロックを買うのがコストが掛かります。


ということで3Dプリンタを導入することにしました。


購入した自作3Dプリンタは
です。


この機種を選定した理由としては、
・PLAだけでなくABSも印刷できる
・Reprap系でソフトや部品、ノウハウが豊富
ヒートベッド搭載
・PCなしでSDからオフラインでプリントできる
・メンテナンス部品も入手が容易
という点です。

購入から1日程度で届きました。

unbox.png



unbox2.png


部品は思った以上にたくさんあります。


unlabel.png

1時間程度かけてすべての部品のアクリル保護シートを外します。
比較的外しやすいものの、
部品数が多いため、思った以上に時間が掛かりました。



diy2.png

今回購入した3DプリンタはSDカード内に組立動画が入っていたため、
タブレットPCで動画を見ながら組立。

部品の向きなどざっくりとしか説明がなく、映像のみで音声がないため、
動画を戻したり、進めたりして、部品の向きなどを確認しながら組み立てます。

on1.png

一通り組み立てして電源投入。
アース付き3ピン電源のため、家庭用のコンセントへ接続するには
別途、電源変換アダプタは必須でした。


初印刷は完全に高さ調整を間違い、
完全に失敗。

ヘッドがヒートベッドに激突してヒートベッドに傷が。
Z軸を適当に調整すると次は隙間が多すぎて空中にプリント笑
他にも組立時に少し歪みがあったようで、
Z軸の回転が少し渋く途中でステッピングモータが脱調するなど...




Z軸周りのネジを一旦緩め、再度固定し直し、ボールネジ部分にグリスを塗布。

スムーズに動くことを確認してから、
Z軸のリミットスイッチを少し動かしては印刷具合を見て高さ調整をしました。

first-print.png

printed.png

調整前が右。調整後が左。
まだ要調整ですが、なんとか3Dの形が印刷できました。


自作3Dプリンタは組立後の調整が重要です。
今後もいろいろ試行錯誤してみたいと思います。



試しにProjectionBallの上下の球体を止めるアダプターを設計して、
印刷してみました。

pb-3d.png

球体側面の白いライン状のパーツです。
なかなかいい感じに印刷できました。


結局、組立には比較的スムーズに行ったものの、
8時間程度要しました。
自作PCのように3時間程度で組立できると考えていましたが、
細かい部品が多く、思った以上に時間を要しました。

組立等に慣れていない方だと2日間は見た方がよいと思いました。



付属で白色PLAが0.5kgほど付属しており、
いくつか部品をプリントしても大して減らないため、
いろいろ試せそうです。

ただ、ロボット系の部品のプリントを考えると、
PLAは粘りがあまりなく、
力を加えるとパリッと割れてしまうため、
粘りのあるABSのフィラメントを購入して
部品のプリントをしてみたいと思いました。

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

2017年04月25日

MakerFaireBayArea2017 プロジェクトページ紹介

今回は5月開催のイベントについて
プロジェクトページが公開されたため、
ご紹介させていただきます。


17年5月19日~21日にアメリカベイエリアで開催の
に参加します。


各プロジェクトのページが公開され、
ProjectionBallについても
こちらで公開されました。



こちらの検索画面でピックアップされているプロジェクトは
どれもスケール感が日本とか比べ物にならない感じです。



今回のイベントでは
現在、開発中の最新の
ProjectionBall IoT(仮名称)を展示予定です。

WifiモジュールESP-WROOM-02を搭載することで
スマートフォンやPCから遠隔で操作、
好きな英数字の文字列や時刻などを表示することが可能です。

また、サイズも従来の直径12cmから直径10cmとなり、
更に小型化しました。


協力会社を介して、
数か月程度で販売を開始する予定です。
現在、ファームウェアのデバッグや資料、
販売準備を進めております。




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

2017年04月19日

I2S使用方法

今回はPDM出力のデジタルマイクSPH0641LU4Hを
I2S接続で読み込んでみました。



最近のデジタルマイクはMEMSマイクのため、
一般的なマイクに比べ、
高感度かつ広帯域で感度も帯域に癖がなく、
非常にフラットな感度を持ちます。


特に今回紹介するMEMSマイクは
超音波帯域のマイクとしても使用でき、
80kHzまで拾うことができます。

一般的な超音波受信器は共振型のため、
36kHzと書いてあれば36kHz前後周辺の超音波しか拾うことができません。

一方、MEMSマイクは36kHz以外でも拾うことができるため、
例えば、amazonのDashButtonの初期設定のように
普通のマイクとしても、
超音波を使って自在にスマートフォンと機器の間で通信することもできます。



超音波に対応したMEMSマイクはKnowlesから
デジタル版MEMSマイクSPH0641LU4H以外に
アナログ版MEMSマイクSPU0410LR5Hも出ています。


ただ、アナログ版はご存じのようにオペアンプ増幅回路など
周辺回路が必要です。
一方、デジタル版はそのままマイコンに接続できるため、
周辺回路が不要です。
また、アナログ部がセンサ内部のみとなるため、
ノイズにも強い回路にできます。

一般的にはデジタルマイクはPDM出力となっており、
I2S接続でオーバーサンプリングで取得します。



環境は
・STM32F401RENUCLEO
 +SW4STM32(System Workbench for STM32)
 +STM32CubeMX(HAL ライブラリ、F4 ver. 1.15.0)
です。


CubeMXの設定は次の通り。

I2S-setting.png

Data and Frame FormatとSelected Audio Frequency
は試しに設定した値です。
ポイントはHalf-Duplex Masterに設定し、
ModeをMaster Recieveに設定することです。


接続は
I2S2_CKをマイクCLK
I2S2_SDをマイクDATA
に接続します。

今回はモノラルで使用するため、
I2S_WSは未使用です。


コードは下記の通り
実際には音を安定して連続に取り込む必要があるため、
DMA転送等を利用すべきですが、
動作確認のため、必要なデータ数を読み込みました。

    uint32_t I2S_RX_BUFFER[24];


  while (1)
  {
     
      int8_t res=HAL_I2S_Receive( &hi2s2,
                            (uint16_t*)&I2S_RX_BUFFER,
                            24,1000);
      HAL_Delay(200);
      //printf("Res: %d ", res);
      printf("Data: %" PRIu32", %"PRIu32", %"PRIu32" , %"PRIu32" \n",
              I2S_RX_BUFFER[0],
        I2S_RX_BUFFER[1],
        I2S_RX_BUFFER[2],
        I2S_RX_BUFFER[3]);
  }
 


今回、テストで使用したKnowles社の
デジタルマイクSPH0641LU4Hは
入力するクロックによってモードが切り替わります。

Low-Power Mode           :351 kHz ≤ fCLOCK ≤ 815 kHz
Standard Performance Mode  :1.024 MHz ≤fCLOCK ≤ 2.475 MHz
Ultrasonic Mode            :3.072 MHz ≤ fCLOCK ≤ 4.8 MHz


HALライブラリのI2Sの設定では
オーディオサンプリングの帯域設定しかありません。
実際に設定によってどのようにクロックが変化するか
確認してみました。


I2Sバスクロック96MHz設定の場合のI2Sクロック結果は下記の通り。

I2S_CLK.png

なお、クロック4.8MHz以上はデジタルマイクSPH0641LU4Hの動作保証外です。
一応、DATA出力としては6MHzまでは出ましたが...


実際にUART出力してみた例は下記の通り。

uart.png

音によって値の桁が変化するため、
正常に読み込んでいると思われます。

今度は読み込んだ値をFFT化したりして、
意図した周波数の信号がとれるか確認してみたいと思います。


なお、I2S_WSは16B幅の場合は
16bit毎にHIGH、LOWが入れ替わり、
それ以外では32bit毎にHIGH、LOWが入れ替わるようです。

96k,16B
16B_96k-WS.png

96k,32B
32B_96k-WS.png


96k,24B
24B_96k-WS.png

96k,16BEX

16BEX_96k-WS.png


1番目がCLK、2番目がDATA、3番目がWSです。


HALライブラリを利用したI2Sの場合、
HALの設定でオーディオサンプリング周波数に応じて
いい感じにクロックを出力してくれることが分かりました。
ただ、今回のセンサのようにクロックによって動作が変わる場合、
I2Sクロック周波数が直感的に分からないため、
オシロスコープ等で確認する必要がありそうです。


ラベル:STM32 HAL
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする