マイコンカーラリー用センサボードのテスト(続続)

マイコンカーラリー用センサボードのテスト(続)の続きです。

入力回路に100pFのコンデンサを取り付けて波形を見てみました。
多少波形がなまっていますが1mSのサイクルのLED ON/OFF切り替えになんとか間に合っているように見えます。

R8CのAD変換結果をグラフ表示したのが次の図です。
波形の変化はLED ON/OFFではなく白と黒の境目でセンサーを左右に振った結果です。
センサー裏面には2mmのスペーサーを張り付けています。
デジタルセンサとして見ると2mm以下の隙間であれば問題ないでしょう、アナログセンサとしての使い方では横に4mmの移動で信号レベルの上端から下端に変化します。

次に照明をあててセンサの出力変化を確認するために強力な白色LEDライトを照射してみました。

明るさは6360ルクスで日の出1~2時間後の屋外相当の明るさです。
(参考)照度と明るさの目安

ライン検出のためのアナログセンサは可視光カットフィルターのついた赤外域を使ったセンサのため白色LED照明の外乱に対しては非常に強くなっています。
下の図はセンサの位置は動かさずに照明の光を手で繰り返し遮った状態で、
グラフが多少波打っているのがLED照明の影響によるものです。

室内照明には有効な赤外センサですが太陽光にはかなり影響を受けます。
下の図はブラインド越しに漏れる太陽光を上と同じように手で遮ってみたものです。
明るさはLED照明の方が遥かに明るいのですが太陽光には赤外成分が含まれているため大きく影響を受けている様子がわかります。
ただ、オレンジ色の差分のグラフは殆ど揺れていないことからLED ON/OFFの結果から差分を取るノイズ対処法が有効であることが判ります。

一方、前方を見るスタートバーセンサの方はLED照明に負けてしまいました。
スタートバーに見立てたティッシュBOXの裏面に当たるLED照明の光を手で遮ってみたものですが光があたるとLED ON/OFFの両方ともAD変換値がほぼゼロに近づいてしまいスタートバーの検出が出来なくなっています。
実際にはこれほど強い照明が直接スタートバーに当たることは無いでしょうが安全のためにスタートバー検出用のセンサも赤外タイプに変更することにします。

 

BeagleBone black に NHD-5.0-800480TF-ATXLを接続

目標

Yoctで構築したKernel 4.4 で5インチLCDのNHD-5.0-800480TF-ATXLを動作させる。
表示は出来るがタッチスクリーンの入力が動作しない。

構成

タッチパネルはi2c2-1を使用
  SDA : P9.18   gpio 0[4]
  SCL : P9.17    gpio 0[5]
  INT : P9.23   gpio  1[17]

  UART1
    TX : P9.24   gpio 0[15]
    RX : P9.26   gpio 0[14]

  UART4
    TX : P9.13    gpio 0[31]
    RX : P9.11    gpio 0[30]

※このトピックは作業途中の備忘録で、随時情報を追加します。 

解決しました :-D 

カーネルコンフィグレーションの設定が出来ていなかった模様

bbb/meta-bbb/recipes-kernel/linux/linux-stable-4.4/beaglebone/defconfig で次の設定がコメントになっていた。

CONFIG_TOUCHSCREEN_FT5X06=y
TSLIB_CONSOLEDEVICE=none
TSLIB_FBDEVICE=/dev/fb0
TSLIB_TSDEVICE=/dev/input/touchscreen0
TSLIB_CALIBFILE=/etc/pointercal
TSLIB_CONFFILE=/etc/ts/conf

Yoctを使ってdtbをコンパイルする

(ツールの準備)
上のリンクでWorking outside of Yocto のところを参照してツールを構築する

workdir/bbb/build/conf/local.conf を編集して SDKMACHINE = “x86_64” のコメントを外して有効にする

workdir$ source poky-morty/oe-init-build-env ~/workdir/bbb/build
workdir/bbb/build$ bitbake -c populate_sdk console-image

構築(1~2時間かかる)が終わったら次のスクリプトでインストールする

$ workdir/deploy/sdk/poky-glibc-x86_64-console-image-cortexa8hf-vfp-neon-toolchain-2.1.sh

ツールは /opt/poky/2.xに出来る

(カーネルソースを取ってくる)

$ cd workdir/bbb 
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
$ cd linux-stable
$ git checkout -b linux-4.4.y origin/linux-4.4.y

パッチをあてる

~$ cd workdir/bbb/linux-stable
workdir/bbb/linux-stable$ checkout -b work
workdir/bbb/linux-stable$ git am ../meta-bbb/recipes-kernel/linux/linux-stable-4.4/*.patch

Kernel configをコピー

cp workdir/bbb/meta-bbb/recipes-kernel/linux/linux-stable-4.4/beaglebone/defconfig workdir/bbb/linux-stable/.config

dtsからdtbを作る

workdir/bbb/linux-stable$ make bbb-xxxx.dtb
  DTC     arch/arm/boot/dts/bbb-xxxx.dtb

最初はKernel configの確認メッセージがたくさん出てくるが全てEnterでOK(たぶん?)、次からはDTCが直ぐに終わる。

ソースファイル bbb-xxxx.dts はworkdir/bbb/linux-stable/arch/arm/boot/dts にあるものが対象、dtbも同じところに出来る。 dtbが出来たら scpコマンドでBBBへコピーする

$ scp bbb-xxx.dtb root@192.168.0.xxx:/boot

BBBのuEnv.txtを書き換えてリブートすれば変更が反映される

i2c1が inputに反映されないので 比較検討用にKernel Ver3.8でうまく動作しているものの状態を記録

/dev/input/by-path にi2c-0, i2c-1に対応するデバイスが出来ている

 

画面にタッチしたときに/dev/input/event1から吐き出されるデータ

root@beaglebone:~# cat /dev/input/event1 | hexdump
0000000 e7e8 58b7 08ba 0005 0003 0039 0195 0000
0000010 e7e8 58b7 08ba 0005 0003 0035 01b7 0000
0000020 e7e8 58b7 08ba 0005 0003 0036 00f1 0000
0000030 e7e8 58b7 08ba 0005 0001 014a 0001 0000
0000040 e7e8 58b7 08ba 0005 0003 0000 01b7 0000
0000050 e7e8 58b7 08ba 0005 0003 0001 00f1 0000
0000060 e7e8 58b7 08ba 0005 0000 0000 0000 0000
0000070 e7e8 58b7 920b 0005 0003 0039 ffff ffff
0000080 e7e8 58b7 920b 0005 0001 014a 0000 0000
0000090 e7e8 58b7 920b 0005 0000 0000 0000 0000

.

root@beaglebone:~# cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="tps65217_pwr_but"
P: Phys=
S: Sysfs=/devices/ocp.3/44e0b000.i2c/i2c-0/0-0024/input/input0
U: Uniq=
H: Handlers=kbd event0 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="EP0980M09"
P: Phys=
S: Sysfs=/devices/ocp.3/4802a000.i2c/i2c-2/2-0038/input/input1
U: Uniq=
H: Handlers=mouse0 event1 
B: PROP=0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=2608000 3

.

root@beaglebone:~# cat /proc/bus/input/handlers
N: Number=0 Name=kbd
N: Number=1 Name=sysrq (filter)
N: Number=2 Name=mousedev Minor=32
N: Number=3 Name=joydev Minor=0
N: Number=4 Name=evdev Minor=64

.

マイコンカーラリー用センサボードのテスト(続)

マイコンカーラリー用センサボードのテストで紹介したプログラムでLEDをON/OFFしてアナログセンサの信号を観測したのが下の写真です。
アナログセンサと白色面の距離は2㎜くらいで出力がほぼ0まで振り切れます。
デジタルセンサとして使うにはこの状態がベストと思われますがステアリング制御用アナログセンサとしてはもう少し距離を長くしてセンサの視野を広げたほうが良いような気がします。

横軸は400uS/divなので約500uSで出力がON/OFFを繰り返しているのが判ります。

上図がドライブボードのアナログセンサ入力回路です。
コンデンサの値は100pFに変更しますが観測したのは最速の応答を見るためにコンデンサを外した状態の信号です。
アナログクロックを遅くしたのでコンデンサなしでもそれほど大きなノイズは発生していません。