MSP430 / eZ430-F2013

IMAGE11.GIF - 980BYTES  
初めに
IMAGE11.GIF - 980BYTES  進捗報告(なるべく頻繁に)  2006年10月1日  10月1日以降、活動を休止しています
IMAGE11.GIF - 980BYTES  進捗報告 PART1(過去)
IMAGE11.GIF - 980BYTES  初めての完結プロジェクト( sample_0 project )
IMAGE11.GIF - 980BYTES    2つ目の完結プロジェクト ( sample_1 project )
IMAGE12.GIF - 2,801BYTES

変更履歴
2006年10月1日 追加
2006年9月11,16,18,19,23,24,25,26日 追加
2006年9月10日 構成変更

MSP430関連の開発を再開しました(2011年4月4日)


注意:下記の多くの写真に写っているカッティングシートには、黄色の線が引かれていますが、間隔が1インチ幅になっています。注意してください。

記述内容には、思い込みによる記述や十分な検証をしていない部分が存在します。十分に注意してください。
誤り等ありましたら、ご指摘いただけると幸いです。 新井健司 / JH1PJL    E-mail : MAIL12_006.PNG
延長ケーブルで引出しました 引出し先は、丸ピンのソケットを流用しています
MSP430F2013側の基板も引出す必要があります 引出し結果です。最初、引出し線を長くしたのですが、上手く動作しませんでした。途中にパスコン等を入れればもう少し長く出来るかもしれません。尚、波形は未確認です






MSP430 ----- 初めに
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

MSP430リファレンスガイド(小倉康司著、技術評論社)の書籍を、日本T.I.が今年1月に実施した「MSP430 リファレンスガイド プレゼント」の企画で、頂きました。
QRPもそうですが、最小限のエネルギーで最大限の効果が発生する分野は興味あり、MPUとしてH8やPICと比べてどのくらいの性能を持っているのか興味が湧いたのですが、貧乏性で今までほとんど無償の開発環境しか相手にしていなかったので、新しく投資しないといけないMP430の開発は少し敷居が高く、躊躇していました(これも私流の省エネです)。しかし、eZ430F2013が発売されたのを機会に、開発をスタートしてみたくなり、キット購入を申し込みました。

Webでの発表は、今まである程度の内容がまとった時点で発表するようにしていましたが、それは既に諸先輩方が多くのアイデアをまとめて高い成果を発表しているので今更初歩的な内容だけではと思い、少しでもまとめてからとの方針で対応していました。
しかし、現時点ではMSP430に関する製作事例が少なく、ましてやeZ430-F2013を取り扱った事例がほとんどないことから、思いきって現在進行形で成果の出ていない時点から発表することにしました。進捗報告の項目になるべく多くの内容を書いて行きたいと思いますので、たまに見に来ていただければ幸いです。







MSP430 ----- 進捗報告(なるべく頻繁に)
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES


10月1日
9月10日から始めたMotion Detectorのハードウェアとソフトウェアの開発を、ここに2つ目の完結プロジェクト ( sample_1 project )としてまとめた


9月26日
TIから「MSP430 e-Newsletter Vol.11 9/25/2006」のメールを受け取る。久しぶりにTIのWebにアクセスした。

2つの発見:
1.F2013のエラッタシートが更新されている。
http://focus.ti.com/lit/er/slaz026e/slaz026e.pdf
この中に、気になる記述を発見。
SDA2 SD16_A Module
Function Internal reference generator performance is beyond the specification limits
Description The SD16_A reference generator may not meet the maximum temperature coefficient specification of 50 ppm/K.
Workaround The SD16_A internal reference can be adjusted to operate within the specification by writing 0x61 to memory location 0xBF. This will correct the temperature coefficient of the internal reference and center the typical voltage to 1.20V.
と書かれている。
1.2V の内部Ref電圧がカタログ値内に納まっていない可能性があるので、0xbfのアドレスに0x61を書き込むようにと言っている。
これを下記のように、初期設定コードとして実現してみた。

/* -----< Define >------------------------------------------- */
#define VREFCMP_  (0x00bf)     /* Internal Vref (1.2V) Compensation */
DEFC( VREFCMP , VREFCMP_)


void main( void ){
    //省略
    P2OUT = 0x40;        // All P2.x reset, LED off, Pull-up ->P2.6
    P1DIR = 0xff;          // all port1.x are outputs
    P1OUT = 0;            // All P1.x reset
    VREFCMP = 0x61;   // Vref compensation
    //     Use for ADC from P1.0 to P1.6
    //     A3+         A2-           A2+           A1-          A1+           A0-          A0+
    SD16AE =
       SD16AE6 + SD16AE5 + SD16AE4 + SD16AE3 + SD16AE2 + SD16AE1 + SD16AE0;
    //以下省略
}

コンパイラは、下記のコードを出力した。
638        VREFCMP = 0x61;         // Vref compensation
      00003C    F2406100BF00      MOV.B    #0x61, &0xbf


この補正を実施した結果、Vccの測定値は下記のように変化している。
補正前データ 補正プログラム実施後
 生データ 16117 15643
換算値[V] 3.25 3.16

2. IARシステムズ社 Embedded Workbench for MSP430 (EW430) オンラインデモ
この中で、「統合開発環境」の、
①ファイル内にある関数を探し出す機能(f()の左クリック)
②キーワードを選択してF1キーを押すと、オンラインヘルプに飛んでいく
は使えると思う。




9月25日
昨日の設定で、改めて加速度センサー及び各種入力値を測定してみた。測定データは、このようになった
色々と問題点がある。何よりも従来の測定値とは明らかに違う傾向を示している。特に電源電圧(Vcc)の測定値が、0.4V程度低い値を示している。
VR入力のデータ測定結果を、ここに示す。9月23日の測定値と比較すると誤差が大きくなっている。
例えば、
600mS変換時間の場合:        Vin = 576.0 [mV]  換算値 = 579.4 [mV]  差分 = 3.4 [mV]
2.05mS変換時間の場合:        Vin = 572.9 [mV]  換算値 = 518.9 [mV]  差分 = -54.0 [mV]
となる。誤差は、入力電圧が大きくなるほど拡大している。




9月24日
速度度センサーのADC変換値は、3軸それぞれの数値を独立して使わず合成して使うことを考える。そうすると各データの同時性を改めて考える必要がある。
そこで、改めて現在のADC変換時間を考察する。

条件:
    fM = 500 [KHz]
    OSR = 1024
    fS = fM/OSR = 500 / 1024 = 0.488 [KHz]
変換時間:
  Tconv = 1/fs x 4 = 8.19 [mS]     (4回変換後に確定の為)

早速、現状確認すると、どうも動作がおかしい。LEDの点滅プログラムを埋め込みADC変換時間を測定すると、
601mSec
という値となった。
ベースクロックが違うようだ。初期設定コードを見直して見ると、
    SD16CTL = SD16XDIV_2 + SD16REFON;
を、
    SD16CTL = SD16XDIV_2 + SD16SSEL_1 + SD16REFON;
とすべきことを発見する。ACLKを基準に変換が行われているので、クロックをSMCLKとしなければならなかった(但し、MCLKを設定していて、MCLKはDCOベースとなっているはずで、基の設定でもOKでは? →まだ充分納得いかず)。

改めて修正済み初期設定コードを動作させた結果を、下記に示す。

次のチャンネルへの
移行時間
変換開始から
データ格納まで

コードは下記のようになった。

    BCSCTL1= CALBC1_16MHZ;     // DCO set to 16MHz
    DCOCTL = CALDCO_16MHZ;
    // 省略
    // Use for ADC from P1.0 to P1.6
    //      A3+         A2-           A2+          A1-           A1+          A0-           A0+
    SD16AE =
         SD16AE6 + SD16AE5 + SD16AE4 + SD16AE3 + SD16AE2 + SD16AE1 + SD16AE0;
    //             1/16              SMCLK          1.2V ref on
    SD16CTL = SD16XDIV_2 + SD16SSEL_1 + SD16REFON;
    //  MCLK=16M -> No1 Div = 1/1,No2 Div=1/16 -> f=1MHz,OSR=512
    //                  Buf disabl    Bip.   512OSR         Single       conv. 2's comp.
    SD16CCTL0 = SD16BUF_0 + 0 + SD16OSR_512 + SD16SNGL + SD16DF;
    //                       Delay(4)          Gain x1         channel 0
    SD16INCTL0 = SD16INTDLY_0 + SD16GAIN_1 + SD16INCH_0;

変換条件:
    fM =  1 [MHz]
    OSR = 512
    fS = fM/OSR = 1000 / 512 = 1.953 [KHz]
変換時間:
  Tconv = 1/fs x 4 = 2.05 [mS]

測定した変換時間は、2.130mSとなっているが、測定は、
[adc_run()関数の最後の部分でLED点灯(adc_run()はCY1内で起動)]
     →[ADC変換終了でED0起動]
           →[ED0内でLED消灯]
なので、実際の変換時間より長くなる。

ADC変換シーケンスは、

// ADC schedule table
const unsigned char adc_schdl[17] = {
    0,1,2,5,    // acc_x,y,z & Vcc
    0,1,2,6,    // acc_x,y,z & Temp.
    0,1,2,7,    // acc_x,y,z & offset
    0,1,2,3,    // acc_x,y,z & Vin_set
    0xff        // termination
};

となっているので、加速度センサーの3軸のデータは、一巡するのに19mS(4.76mS x 4)を要することになる。




9月23日
加速度センサーを応用した具体的な製作例として、Motion Detectorを構築してみることにする。

機能:
1.加速度(含む重力)がある閾値以上もしくは以下の場合に、ブザーを一定期間鳴らす
  (加速度は3軸の合成値に対する変化を捉え、取り付け軸がどのようになっていても対応できること)
2.閾値はADCの1つのチャンネルに印加する電圧を用いる。印加電圧は可変抵抗器で自由に設定できる様にする
3.一度でも閾値を越えた場合には、LEDを間欠点灯し、過去に加速度変化が大きい状態があったか否かを確認できること

回路構成:
先のテスト用回路に対して、
1.ブザー駆動回路追加
2.VRによるADC入力回路追加(A3+)
によって、この様な回路構成とする

基本機能確認:
1.P2.6へ接続したスイッチの入力回路とそのプログラム
今まで、スイッチ入力回路の検証をしていないことが判明した。
プログラムは、下記のように初期化を行っていたがこれでは不十分である。

    P2SEL = 0;         // Use as input or output
    P2DIR = 0xbf;      // P2.6 is input, others are outputs
    P2OUT = 0;        // All P2.x reset, LED off

そこで、下記のように行う。

    P2SEL = 0;         // Use as input or output
    P2DIR = 0xbf;      // P2.6 is input, others are outputs
    P2REN = 0x40;    // Enable pull-up/down resister
    P2OUT = 0x40;   // All P2.x reset, LED off, Pull-up ->P2.6


すなわち、P2.6端子の内蔵プルアップ抵抗を有効にする。
このMPUは、よく考えられていると思われるのが、
① プルアップもしくはプルダウンを許可するためのレジスタであるPxREN
② プルアップするかプルダウンを選択するためのレジスタとしてPxOUT
の構成で、特にPxOUTで入力端子のプルアップかプルダウンを選択することは非常に上手い考えだと思う。これは、PxOUTとPxINのレジスタが分離されているために出来るワザである。
上記設定に対して、下記のようなテストプログラムで機能確認した。

#define     CTL_BUZ_ON (P1OUT |= 0x80)      // Buzzer on
#define     CTL_BUZ_OFF (P1OUT &= ~0x80)   // Buzzer off

void cy0_main( void )
{
    if  ((P2IN & 0x40) == 0) {
        CTL_BUZ_ON;
    } else {
        CTL_BUZ_OFF;
    }


見ての通り、スイッチ(ノーマルオープン)が押されている時に、ブザー(P1.7)を鳴らすだけのプログラムである。

2.ADC入力の追加
ブザーを鳴らす閾値設定用のチャンネルを確保する。
加速度センサーの3軸データの入力用に、既にP1.0からP1.5を使用している(A0±、A1±、A3±の合計6端子)が、P1.6を利用してもう1チャンネルを追加する。2013の入力インターフェイスの等価回路(この資料のPage77/86参照)を見ていて気づいたのだが、差動入力ではあるが、片方の入力(この場合A3-端子)をレジスタの設定でGNDに落とすことが出来る。この設定だとADCのch3を使用しても、P1.6の1端子のみで入力することが出来き、P1.7は別の目的に利用できる。
この為の初期設定は、

// Use for ADC from P1.0 to P1.6
//               A3+          A2-          A2+            A1-          A1+          A0-          A0+
SD16AE = SD16AE6 + SD16AE5 + SD16AE4 + SD16AE3 + SD16AE2 + SD16AE1 + SD16AE0;

とし、SD16AE7を追加しないだけで可能となる。
入力は、510KΩの抵抗とVR(100KΩ)を直列として、入力電圧範囲を、600mV以下に制限した。

Vinmax = 100K/(100K+510K) x 3.6 = 0.590 [V]

早速測定したデータを下記に示す。

P1.6
端子電圧
デジボル測定
[mV]
ADC
生データ
生データに
基ずく
換算値
補正前[mV]
換算値
補正後[mV]
換算式
前提条件
0.0 -330 -6.0 -0.1 VR 最小位置
10.3 266 4.9 10.7 換算式(補正前)
= Vbit * (生データ)/1000
= 18.311 * (生データ)/1000

Vbit = 18.311[μV]

換算式(補正後)
= Vbit * ((生データ) - Offset + Comp)/(1000 x Gain)
= 18.311 * ((生データ)-(-24)+300/(1000 x 1.01)

Offset = -24 (今回の実測値)
Comp = 300 (謎のオフセット、ここを参照のこと
Gain = 1.01 (同じく、ここを参照のこと

24.7 1051 19.2 24.9
49.9 2528 46.3 51.7
74.5 3932 72.0 77.2
100.1 5350 98.0 102.9
200.0 10928 200.1 204.0
294.6 16000 293.0 295.9
399.1 21873 400.5 402.4
499.9 27498 503.5 504.4
576.0 31644 579.4 579.6 VR 最大位置

注目しなければならないのは、0V入力の際に値がマイナス値になる点である。そこで、9月16日に考察した謎のオフセットを代入して補正すると、ほぼデジボル値と一致することがわかる。
ちなみに、本日よりSMCLKを16MHzに設定した(従来は8MHz)。但し、ADCは分周比を変更して、従来と同じ状態となっている。

要望:
このMPUは上手く出来ていると思う。こんなすばらしいMPUを作る賢いTIのハードウェア設計者(もしくはシステム設計者)に対して、是非お願いしたいことがある。
14PinのF2013を実際の製品などに応用しようとすると必ず突き当たるのが、Pinの不足とROM/RAMサイズの不足である。折角上手く出来ているMPUの活用範囲を広げる意味で、下記を考えて欲しい。

1.Pin不足
今回の回路でもムダが生じている。加速度センサーの3軸入力に6Pinを使用しているがAx-は今回の使用条件だと全て同じ様にVcc/2が入力されている。もしも、これを共通の1Pinで済ますことが出来れば、2Pinが他の用途に使用できる。
また、空いたPinに内部にある有効な機能で必要とする機能が自由に割り付けられたら、どんなに便利だろうか?
実は、全くの夢物語ではないはずである。
以前、C8051F300 (Silicon Laboratories)のプロジェクトを検討した際に、11PinたらずのMPUのハードウェアにすばらしい仕掛けがあることを知った。
その仕掛けは、「Digital Crossbar」と呼ばれる機能で、C8051F30xのData Sheetのこの20/176ページでFig.1.7に説明されている。簡単に言えば、各機能の入出力を各Pinに割り付けるための切替用マトリックスがあり、その交点をプログラムにより接続するか分離するかを選択できる機能である。
パテントなどの難しい問題があるのかもしれないが、少数ピンタイプMPUには是非付けてほしい機能である。

2.ROM/RAMサイズ
少数ピンタイプMPUは、何故ROM/RAMサイズを小さくしてしまうのか?
多分、コストとプライスのバランスからくる必然的な結論なのだろうが、例外を作ってもよいのではないか。今回、既にROMがきつい。I2C等のコントロールルーチンをインプリメントして、その上でユーザープログラムを作成しようとすると2KB で本当に実用的なプログラムが書けるのだろうか?
また、longで乗除算を行うとLibが呼び出され、直ぐに2KBがいっぱいになってしまう。それともアッセンブラを使用して、時間をかけて最適化して使用くださいという制限付のMPUに位置づけているのだろうか?
せめて①ROM=8KB,RAM=512B、出来れば② ROM=16KB,RAM=1KB、ベストは③ROM=32KB,RAM=2KBくらいの規模を確保してほしい。勿論チップサイズの上昇でTSSOPのパッケージに収まらないのでは困るが。




9月19日
ACLKをP1.0(Pin2)に出力するように、初期設定コードを下記の様に書き換えた。

void main( void )
{
    // 省略
    P1DIR = 0xff;  // all port1.x are outputs  (OUTPUT指定)
    P1OUT = 0;    // All P1.x reset
    // Use for ADC from P1.0 to P1.5
    //         A2-       A2+      A1-       A1+     A0-     A0+
    // SD16AE = SD16AE5 + SD16AE4 + SD16AE3 + SD16AE2 + SD16AE1 + SD16AE0;
    //????????????for debug purpose only?????????????????????????
    P1SEL = 0x01;  // ACLK output (ACLK機能指定)
    SD16AE = SD16AE5 + SD16AE4 + SD16AE3 + SD16AE2 + SD16AE1; // SD16のP1.0使用禁止
    //                1/16          1.2V ref on
    SD16CTL = SD16XDIV_2 + SD16REFON;
    // 省略
}

このプログラムを動作させた時のP1.0のACLK出力波形を下記に示す。
 74.34μS→13.45KHz

   周波数は、LED点灯時にも安定していた。

従って、昨日の仮定である、
1.LED電流をMPUチップから供給すると、VLOの発振周波数が高いほうに変化する
2.VLOは、発振周波数が変化していないが、MPUがActive Modeになってしまう
のVLO発振周波数の変化は完全に否定されたことになる。しかし、何故MPUがActive Modeになるかは、依然として不明。

夕食後、RTMの起動周期測定を実施。RTMは下記備忘録にあるように、4.76mS毎に起動できているはず。RTMは、WDT割込みによってMPUがActive Modeになったことで、mainルーチン内のrtm_coreから更にrtm_msp430が呼ばれることになる。rtm_msp430は、WDTからの起動であることを条件に動き出すので、入り口でポートをONとし、出口でOFFとする事で観測状態を作ることにする。
下記のようにコードを埋め込む。

#define CTL_RTM_ON    (P1OUT |= 0x80)
#define CTL_RTM_OFF   (P1OUT &= ~0x80)


void rtm_msp430( void )
{
    // for Debug ????????????????
    CTL_RTM_ON;   // PORT on
    if( !--tim_cyc0 ){
        tim_cyc0 = cyclic_period[0];
        r.req.cy0 = RTM_ON;
    }
           // 省略
   if( tim_usr0 )
        --tim_usr0;
           //  省略
    if( tim_usr3 )
        --tim_usr3;
    // for Debug ????????????????
    CTL_RTM_OFF;   // PORT off

}

結果は、下記の写真の通り。

RTM起動周期 = 4.748mS
補助カーソルが邪魔で見難いので、リンク先を参照方

ここまでの結果から、
  VLOは、正常に動作している
  WDTは、VLOをクロックソースとして設計通りの周期で割り込みを発生させている
  RTMの起動周期は、WDTの割込みタイミングで設計通りに動作している

ことが確認できた。電源電流の変化が不規則なことから、当初はVLOの発振周波数変動やRTMの不規則起動を疑ったが、少なくともその心配はない事が判明した。電源電流の変化に関しては、残念ながら少し棚上げとするしかない。


備忘録:
上記問題を考えるにあたり、もう一度(しつこいが)VLOとRTMの起動周期の関係について、整理しておく。

設定目的 Cソースコードでの表現 実施内容
1 VLOをACLKのクロックソースとして選択  BCSCTL3 |= LFXT1S_2; BCSCTL3内  SELMx=10
2 ACLKの分周比を1/1に設定  BCSCTL1 |= DIVA_0; BCSCTL内    DVAx=00
3 WDTをInternal Timer モードで使用  WDTCTL = WDT_ADLY_1_9; WDTCTL内    WDTTMSEL=1
4 ACLKをWDTのクロックソースとして選択 WDTCTL内    WDTSSEL=1
5 カウントアップ値は64 WDTCTL内    WDTISx=11
6 カウントアップ時に割込み発生  IE1 |= WDTIE; IE1内           WDTIE=1

VLO ACLK WDT in WDT Time-up RTM Tick
今回の設定値
&測定値
74.34μS
(13.45KHz)
74.34μS
(13.45KHz)
74.34μS
(13.45KHz)
4.76mS 4.76mS




9月18日
疑問点:
16日に判明した、RTMの起動周期が設計目標(下記補足参照)になっていない点を継続調査する。
現象として、Morse信号用LED点滅に同期して、RTM起動周期が変化していることが判明。Morse制御がIDLE状態では、中心値が4.3mS程度であり、表示がONGOING状態では2.8mS程度であった。従って、LEDが点滅していない状況では設計値となっていることになる。
ソフトウェアを疑ってソースコードを調べたが、原因となるような部分が見つけられない。そこで、WorkbenchでDebugしながら検証することにして、LED点滅のポート操作する部分である、
      P2OUT |= 0x80;    // LED on
や、
      P2OUT &= ~0x80; // LED off
をコメントアウトして測定したところ、周期が安定する。更に、プログラムを基に戻して(すなわちLED点滅を実施)から、LED駆動の配線をはずしても周期が安定することが判明した。
以上の結果から、
  「LED電流をMPUチップから供給すると、VLOの発振周波数が高いほうに変化する」
が一番疑われる。本当だろうか?

午後追加でテストしてみた。
先ず、P2.7の特殊性を疑う。P2.7はXOUTでもあり、発振回路は勿論別だがVLOに何らかの関係があるかも知れない?
LEDをP1.7に接続できるようにプログラムを修正して対応させた。
結果はやはり、LEDを接続すると発振周波数が上昇する。そこで、1KΩをP1.7に接続すると更に発振周波数が上昇した。写真はまたまた上手く撮れないが、下記を見てもらうと良くわかる。グランドからのオフセットは、1KΩへ流れ込む電流によるものである。

1KΩ接続なし 1KΩを接続して、
電流を流した場合

この時点で、二つの可能性あり。
1.LED電流をMPUチップから供給すると、VLOの発振周波数が高いほうに変化する
2.VLOは、発振周波数が変化していないが、MPUがActive Modeになってしまう
P1.1にVLO発振の接続先であるACLKが出力できるので、それを観測することにする(何時測定出来るかは別問題)。

補足説明:
RTM起動周期の設計目標値に関して、少し補足説明する。内部発振器(VLO)仕様はこの資料に拠ると、
internal very low power, low frequency oscillator (VLO)
PARAMETER        TEST CONDITIONS TA   VCC       MIN TYP MAX
fVLO VLO frequency     -40−85°C       2.2 V/3 V     4   12  20kHz
とある。

RTMはWDTの割込みを利用していて、32KHzの際に1.9mSとなるような分周設定なので、12KHzを中心値と考えると、
32/12*1.9  =  5.06 [mS]
となる。逆に実測値4.3mSから発振周波数を算出すると、
1.9/4.3*32 = 14.14 [KHz]
となる。




9月16日
新しいハードウェア上で動作確認する。測定結果と正規化値をここに示す
表中のex1測定結果は下記のデジボルデータと対応する。

Vcc = 3.640V
A0- = A1- = A2- = 1.818V
A0+ = acc_x = 1.883V
A1+ = acc_y = 1.817V
A2+ = acc_z = 1.985V

従って、測定データとの関係は下記のようになる。

Vcc = 3.640V ←→ 17885 (3.64V)
A0 in = 1.883-1.818 = 0.065V  ←→ 3341 (0.066V)
A1 in = 1817-1.818 = -0.001V ←→ -492 (-0.003V)
A2 in = 1.985-1.818 = 0.167V  ←→ 9017 (0.169V)

となる。但し右端カッコ内電圧は、下記の条件とした。これはあくまでも測定した電圧を基準にADC変換値を(無理やり)合わせ込んだ結果としての補正値である。

ADC/PGA (Programable Gain Amp.)   Gain = 1.01 (表記101 カタログ値 0.97(min) 1.00(typ) 1.02(max))
何らかのオフセット値(原因不明)  Vnut-offset = -300 (-5.49mV)


電源電圧は、測定値が怪しいと言っていたが、思いきって9年前に買ったデジボルを換え買えた。新しいデジボルは、FLUKE社日本)の177日本)というモデルで今度の測定値はかなり信用できると思われるが、上記-5.49mVの説明は出来ない。

測定時の方向を下記に示す(加速度センサーは若干基板に対してオフセットしているので各軸は垂直にならない)。
ex1 ex2 ex3 ex4 ex5
X=手前
Y=右
Z=上
X=奥
Y=右
Z=下
X=左
Y=下
Z=手前
X=下
Y=右
Z=手前
X=上
Y=右
Z=奥

ついでに測定した電流値を紹介する。
前提条件は下記となる。

1.電源電圧をeZ430-2013の電源電圧と同じ3.64V に設定した。以前の基板では3Vであったが、測定データをそのまま使用できるようにDebug条件と同じ出力になるようMAX879の出力を調整した。
2.電源出力側(MAX879出力)に、実測25.1Ωの抵抗を直列に接続。
3.電源入力側(MAX879入力)にも、実測25.2Ωを接続。

FULKE-177の電圧測定レンジではMAX/MIN/AVE表示が可能なので、その値を示す。

項目 電源入力側 電源出力側
抵抗間電圧
(25.2Ω)
[mV]
電流換算値
[mA]
抵抗間電圧
(25.1Ω)
[mV]
電流換算値
[mA]
備考
MAX 97.3 3.861 51.1 2.036 MPU+センサー
=2.036-0.745
=1.291[mA]
MIN -31.8 -1.262 16.6 0.661 センサー(カタログ値0.1mA)

周辺抵抗分割(約35μA)
AVE 43.3 1.718 36.4 1.450
備考 電気二重層コンデンサ端子電圧
4.71[V]
平均電力 8.09[mW]
LEDへの電流は、上記MAX内で
0.745[mA]
(制限抵抗2.679KΩ、両端電圧1.997V)
電力換算
平均
5.22[mW]

この機会に、電流波形を手持ちのオシロスコープで観察してみた。写真がぼけているが、撮影が難しい!

402mV ピーク電圧(25.1Ω)
ピーク電流=16mA
RTMでの起動周期が約3mS

MPUが動作している条件下でピーク電流16mAで、やはりデジボルのMAXとは乖離がある(デジボルのサンプリングが275mSという記述があるが、詳細条件がいまいちわからないまま)。時間があるときに、電源電圧を3.6Vに変更したので、12MHzクロックにて再度測定することにする。
やはり手を抜かずに、節目には電流測定等にオシロスコープを使わないといけないと痛感した。当初の設計値ではRTM起動周期は、4.5mSであったが3mSとなっている。これは問題だ
反省。

最新回路図:
新しいハードウェアの回路図を公開




9月11日
昨日、ハードウェアの製作を実施。午前中から始めて約4時間程度、没頭する。その結果は、誤配線なしで動作OKの様子。出来上がりを下記に示す。

基板を一枚に集積。電源内蔵
MPUは加速度センサーの裏側
赤いのはラジペン 発電機も一緒に


何故今までのハードウェアではだめなのか?
だめではないが、変えたかった訳は、
①加速度センサーを変更。今までは、KXM52-1050モジュールを使って開始したが、スター精密ACB302秋月で以前に入手していたものを使う。KXM52では、ADC/SD16_Aの入力範囲より出力レンジが大きい。何とかしなければいけないが、ハードウェアで入力範囲を分割して入力すると何を基準にして考察を続けて行くのか判らない所を心配してしまい、挫折する(確かに抵抗分割して入力範囲を落とせば使えると思うが)。
②電源回路はMAX879を使用する。MAX878の3V固定がベストだが入手を考えると、879を選択。
これに電気二重層コンデンサと手回し発電機を組み合わせる。
省エネと言いながら、何も評価していないことを自覚する。省エネの実力を調べることも重要と判断。
③前の回路は、VRの塊りであまりにも大きい。好きになれなかった。
である。




9月10日
Webページの構成を変えた。
ページ編集が重くなって来た事。Sample0のプロジェクトが一段落したこと。
そして何よりも、次のステップに行くに際して軌道修正(せざるを得なかった)したことで、以前の内容との混乱を避ける意味での判断であった。
従来の内容は、ここを参照ください
よろしく。


TOP02_001.PNG - 934BYTES