2017年7月23日日曜日

nRF52モジュール比較

nRF52モジュールを複数種入手しました。
ANTに対応できないものがあることが判明しています。



左から
ーRigado製
ーsparkfun製
ーebay large version
ーebay mini version
ーDynastream製

すべてプログラムの書き込み方法は一緒です。
VCC, GND, SWDCLK, SWDIOの4線をST-LinkかnRF52-DKにつなげば書き込めます。




ただし、RigadoとDynastreamのモジュールは、あらかじめfirmwareが書き込まれ、かつプログラムが読みだせないようプロテクトがかけられています。
これを、nRFgo Studioかコマンドラインで、erase allやRecoverしたり、mbedフォルダにfirmwareを上書きすることで、消去する必要があります。

ST-Linkでは、この消去を行う機能がないため、RigadoやDynastreamのモジュールを使う際は、誰かにプロテクトを解除してもらう必要があります。

ST-Linkをj-linkに変身させるファームもリリースされていますが、なぜかST Microのチップをターゲットとしてのみ使用可で、他のチップに使うことは禁止する、絶対禁止すると表示されます。
実際は、技術的にはnRF52をターゲットとして使用可能にもかかわらず「使用するなよ、絶対するなよ」と言われるとダチョウ倶楽部を思いだいし「絶対するな=すぐにやってよい」と解釈してしまいがちですが、やはりまずいと思います。

nRF52モジュールにnRF52-DKから書き込みを行う場合、以下のように配線します。

ポイントは、ピンヘッダのVTGにVDDをGND DctにGNDを接続することです。
これにより、書き込みチップが、外付けのnRF52モジュールに書き込みを行うよう設定変更され、オンボードのチップに書き込まれなくなります。

私は、ボードの真ん中にDIPスイッチを付け、書き込み先を外付けnRF52モジュールとするか、オンボードのチップとするか、選択できるようにしています。




nRF52モジュールがnRFgo Studioに認識されると、以下のように表示されます。

この例では、Region1にSoftdeviceが書き込まれていることがわかります。
Addressが0x1f000までがSoftdeviceなので、s132(BLE用)のSoftdeviceが書き込まれてるとわかります。
Softdeviceを書き換えるには、右欄のProgram Softdeviceのタブから任意のSoftdeviceファイル(ANTの場合はS212)を選択し、ProgramボタンをせばOKです。
S212のSoftdeviceはwww.thisisant.comからダウンロードできます。



つづいて、Softdevice上で動くアプリケーションをプログラムします。
Program Applicationタブから書き込みアプリの.hexファイルを選択し、Programボタンを押せばOKです。

話を戻しますと、RigadoとSparkfunのnRF52モジュールは、ANT対応ではありません。

どうやら32khzの発振子の精度が悪いようで、BLEはなんとかOKですが、シビアなANTには対応できてませんでした。

Sparkfunのものは、32khzの発振子のパターンをカットできます。
パターンカットのうえ、秋月で買った水晶発振子に付け替えたところANTもOKとなりました。





2017年7月21日金曜日

DuraAce9000で手作りパワーメーター

Tiagraに続き、Dura Ace 9000をパーワーメーター化してみました。

パワー計、量産体制です。

完成図



コンピュータ・ユニットのアップです

不器用臭さがプンプンします。

臭いものには蓋をします。

3D印刷に失敗して隙間だらけなので、やり直しです。

なんか不細工ですが、本ブログのurlは、
D Grade DIY(D級工作)なので合格です。

ひずみゲージ貼り付け位置です。
スパイダーアームがチェーンにより反時計回り方向に引かれる歪を計測してます。


モジュール構成は、いつも通り以下の3点セットぽっきりで、お手軽です。

1. ひずみゲージ付きクランク
 お手軽な1000Ωひずみゲージ2枚構成(上の写真のピンク矢印の位置)で、他の2つの抵抗はひずみゲージでなく固定抵抗(1000Ω)です。 
2. コンピュータ(nRF52使用)モジュール
 ↓こちらで過去に公開したものです。
 https://dgradediy.blogspot.jp/2017/03/4999.html
3. 上記2.のソフトウェア
 ↓こちらで過去に公開したものです。
 https://dgradediy.blogspot.jp/2017/06/49-nrf-uart.html
 今回は、これをnRF5 SDKにあるANTパワーセンサーのサンプルコード(..\nRF5_SDK_12.1.0_0d23e2a\examples\ant\ant_plus\ant_bpwr\bpwr_tx
)に移植し、ANT+対応とし、ガーミンでパワー表示を可能にしてます。

以下、詳細です。
【①クランク】
 クランクにひずみゲージを貼る際、以前はクランクを耐水ペーパーで削り、アルミの地肌を出してましたが、面倒です。
今回は、お手軽に、脱脂してアルマイト加工?の上から100均の瞬間接着剤で貼り付けました。
これでも大丈夫そうです。
失敗しても、瞬間接着剤のはがし液で、きれいに剥がせます。
ひずみゲージは、以下のようにまずセロテープで貼り付け、位置決めをします。


次に、セロテープを半分剥がし、ピンクの矢印のひずみゲージ面に瞬間接着剤を適量付けます。









つけすぎるとクランクではなく、固形化した瞬間接着剤のひずみを拾うこととなるので、要注意です。

瞬間接着剤をつけたら、セロテープをもとの位置にもどし、むにゅー、と1分程度加圧します。
セロテープの半分はついたままなので、それがガイドとなり、元の位置にひずみゲージは張り付きます。こうして、面倒な位置決めを簡単にできます。

これは4iiiiのパワーメーターを開発されたエンジニアの方が、4iiiiと組む前に、個人のブログで公開して、教えてくれた方法です。


【②配線】
ひずみゲージ付きクランクとコンピュータモジュールは、以下の配線でVCC, GND, Sg+,Sg-を接続してます。



今回の電池はボタン電池CR2032を使用しました。
CR2032の最大連続放電電流は2mAなので、
消費電力を落とす必要があります。

マイコン(nRF52)とADコンバーター(AD7124)は余裕で2mAを下回りますが、
ひずみゲージ回路をつけると6mAを超えます。

どうするか・・・

ひずみゲージを読み取る時だけゲージ回路に通電し、読み取り終了後は直ちにスイッチを切ることにより、消費電力を2mA以下に落とします。

ADコンバータAD7124は、このひずみゲージ回路への通電を切るPSW(パワー・ダウン・スイッチ)が搭載されており、nRF52からソフトウェア・コマンドを発行することで、スイッチをON/Offできます。便利です。

これに伴い、ひずみゲージ回路のGNDをGNDから分離し、AD7124のPSWピンに接続します。

右下の紫色の線で示しています。



【②ソフトウェア】
上記のとおり、今回は、省電力化のため、PSW(パワーダウンスイッチ)をソフトでON/OFFします。

以下のプログラムでPSWを制御するも、ADCのデータをうまく読み取れないトラブル発生。
悩むこと2週間以上。
 m_tx_buf[0]=0x03;//アドレス3番地書き込み
 m_tx_buf[1]=0x00;
 m_tx_buf[2]=0x08;//PSWをONに設定
 m_tx_buf[3]=0x00;
          m_tx_buf[4]=0x42;//ADC読み取りコマンド発行
 m_tx_buf[5]=0xff;
 m_tx_buf[6]=0xff;
 m_tx_buf[7]=0xff;
 m_tx_buf[8]=0x03;//アドレス3番地に書き込み
 m_tx_buf[9]=0x00;
          m_tx_buf[10]=0x00;//PSWをOFFに設定
 m_tx_buf[11]=0x00;
    spi_xfer_done=false;
   nrf_drv_spi_transfer(&spi, m_tx_buf, 12, m_rx_buf, 12); // SPI経由でコマンド転送
       while (!spi_xfer_done)
        {
err_code = sd_app_evt_wait();
APP_ERROR_CHECK(err_code);
        }



正解は、こちらでした。
  m_tx_buf[0]=0x42;//読み取りコマンド発行
  m_tx_buf[1]=0xff;
  m_tx_buf[2]=0xff;
  m_tx_buf[3]=0xff;
   m_tx_buf[4]=0x42;//読み取りコマンド発行
  m_tx_buf[5]=0xff;
  m_tx_buf[6]=0xff;
  m_tx_buf[7]=0xff;
  m_tx_buf[8]=0x03;//アドレス3番地に書き込み
  m_tx_buf[9]=0x00;
   m_tx_buf[10]=0x00;//PSWをOFFに設定
  m_tx_buf[11]=0x00;
明示的にPSWをONにしなくとも、0x42で読み取りコマンドを発行すると自動的にONになるようです。0x03で強制的にONにすると、誤動作するようです。

最後に、ソーラーパネル&充電池で駆動できるヘンタイオリジナル仕様にしてみました。CR2032は万一のバックアップ電池とし、2系統電源で運用する予定です。

これで電池切れともおさらばできる・・・ハズ

昔つくった、手作りパワー計の試作1号機の写真を発掘しました。

これを作った当時は、DuraAceベースのパワー計は30万円ほどしてました。
今年は、中華ベンチャーが2万円程度でパワー計の販売を開始しました。
微妙な価格設定なので、すぐに値下げすると予想してます。
本自作パワー計とほぼ同じ構成のはずなので、ライセンス料を無視すれば、原価は、数千円と予想します。
販売価格が1万円程度まで下がれば、わざわざ自作するメリットはなくなるので、
自作パーワー計もそろそろ潮時かと思いました。