ひよこからの報告です。
macさんのアドバイスのとおり、ほぼ直してみたのですが、
未解決の問題がまだまだあり、原因究明中です。
(身の回り不明なことだらけです)
改善点
①LPFを設けたのでセンサーからCPUに入る直前の電圧に、
以前のようなピリピリしたノイズがなくなっています。
②オリンピック方式!でサンプル5つの中から最大最小を
除いて平均しているので、値はしっかり確保しているはず。
残る問題
①電源のコイル1mHまだ買っていません。
②モーターが動いているときの加速度センサーの出力が変。
③センサーの出力が変なのにもかかわらず、ちゃんと水平を
保つときが多い。
②についてご説明します
停止中の傾きセンサーの電圧は水平でだいたい2.250Vで、
左に少し傾けると2.255V
右に少し傾けると 2.245V
というふうに、ほんの0.2%くらいの違いを判別したいのですが、
モーターが回りだしたとたん、2.306V
などという法外な(2.3%)値になります。それで、せっかく手にした
初期値を改ざんせざるを得ません。
ちなみにこのとき、センサーの電源電圧は、
停止中・・・4.96V、始動後・・・5.03V、
というように1.4%程度変動します。(コイルがないせい?)
モーターの逆起電力がかなり効いているとおもうのですが。
この辺をなんとかしたいです・・・・。
> macです。
>
> <concon@xxxxxxxxxxxxxxx> wrote:
>
> > 水平を保つための加速度センサーACB302をつんだ
> > 自動車模型が磁石で黒板に張り付いており、約2mの
> > ケーブルでH8/3687につながれています。
>
> 意外と難しいことなのですが、
> これを最初の質問に書いておけば、
> 答えるほうはすごく楽です。
>
> でも、質問する時点では「当面の壁」の、
> 直近から見ているので、うまく書けないのですよね。
>
> > まず、こういう配線でよいのかな?ということと、
> > モーターのpwm信号のノイズが乗っているせいなのか、
> > 左に傾いても、右のモーターが動いてしまう場合があり、
> > それでも全体としては、なぜか正常に動きます。
>
> ノイズの影響と見るのが妥当でしょう。
>
> > センサーの電源電圧が変化しないように1000μF
> > のコンデンサをつけて、電源が安定するまで始動するの
> > を待つようにしているのですが、始動前のセンサーの値より、
> > 始動後の値のほうが、2%から2.5%大きくなるので、
> > プログラム上で初期値を捏造(ねつぞう)しています。
> > これもなんだか生き物を扱っているようでしっくりきません。
>
> 1000uFは明らかに過大です。
> ケミコンは大きくなればなるほど、
> 高周波特性が悪くなり、デジタル回路から発生する、
> 高周波ノイズを除去しにくくなります。
>
> +V --Coil--+---+--->Sensor
> | |
> === ===
> | |
> +---+--GND
> コンデンサは10uF + 0.1uF程度が適当です。
> Coilは1mH程度でよいでしょう。
>
> 次に、H8のAD側です。
> 簡単なものでかまわないので、
> LPF (Low Pass Filter)を入れます。
>
> From sensor ---R--+---ADC
> |
> C
> |
> GND
> Cut off freqは、
> fc = 1 / (2πRC)です。
> R=1kΩとして、
> C=0.1uF
> C=1/(2π*1e3*1e-6)
> fc = 1591Hz
>
> おまけに、AD変換を数回やって、
> 最大最小は捨てます。
>
> #define N_AD 5
> int GetAd(int ch)
> {
> int n, min, max, sum
>
> min = 0x7fff;
> max = - min;
> int n = N_AD;
> sum = 0;
>
> while(n--) {
> sum += (ad = adc(ch));
> if (ad > max) {
> max = ad;
> }
> if (ad < min) {
> min = ad;
> }
> }
> return((sum - max - min) / (N_AD - 2));
> }
>
> オリンピックの体操などの得点計算ですね。
> サンプル数が少ないときのノイズ除去に、
> ただ平均するより、かなり効きます。
>
> できれば中央値(median)を採りたいところですが、
> 組み込み用だとメモリーリソースや、
> 並べ替えの処理の負荷が気になるし、
> サンプル数が少ないときは、
> 「オリンピック」方式と大差ありません。
>
> -- mac
>
>
>
>