3

私は Beaglebone に不慣れで、この奇妙な問題が発生するまで、かなり良いクリックで進んでいました。ここに投稿する前に、週末中ずっとそれを理解しようとしていました.

Angstrom 3.2.5+ のビーグルボーンから複数のセンサーを使用してアナログ入力を読み取ろうとしていますが、ハードウェアの問題であると思われる問題があります。

このPython スクリプトAlexander Hiam の PyBBIOを使用して、フォトレジスタを成功裏にテストすることができました (値は多かれ少なかれ偶発光に反応します)。

# Import PyBBIO library:
from bbio import *

# Create a setup function:
def setup(): pass # Nothing to do here

# Create a main function:
def loop():

  print "-----"

  print "AIN0 [P9.39] - " + str(analogRead(A0))
  print "AIN1 [P9.40] - " + str(analogRead(A1))
  print "AIN2 [P9.37] - " + str(analogRead(A2))
  print "AIN3 [P9.38] - " + str(analogRead(A3))
  print "AIN4 [P9.35] - " + str(analogRead(A4))
  print "AIN5 [P9.36] - " + str(analogRead(A5))
  print "AIN6 [P9.33] - " + str(analogRead(A6))
  print "AIN7 [P9.39] - " + str(analogRead(A7))

  delay(500)

# Start the loop:
run(setup, loop)

しかし、上記のスクリプトで読み取った他のアナログ入力 (AINx(2-7)) は常に、AIN1 にプラグインしたフォト レジスタと同じ値を示します。

また、関連する可能性がありますが、cat を使用して AINx(1-7) をエラーで読み取ることができません。

cat /sys/bus/platform/devices/tsc/ain1
Segmentation fault

何か案は?私は本当に立ち往生しています。前もって感謝します。

PS: 詳細...

私の回路は、10k の抵抗器とフォトレジスターで構成されています。私のピン接続は次のとおりです。

  • ヘッダー P9 ピン 32 (VDD_ADC(1.8V)) からフォトセルの一端へ
  • ヘッダー P9 ピン 34 (GNDA_ADC) を抵抗のもう一方の端に接続
  • ヘッダー P9 ピン 39 (AIN0) をフォトセルの反対側に、プルダウン抵抗の一端に接続

私自身の回路に一致する画像は次のとおりです。 ここに画像の説明を入力

すべての AINx(1-7) の結果といくつかの...

# cat /sys/bus/platform/devices/tsc/ain0 
cat: /sys/bus/platform/devices/tsc/ain0: No such file or directory 
# cat /sys/bus/platform/devices/tsc/ain1 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain2 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain3 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain4 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain5 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain6 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain7 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain8 
Segmentation fault 
# cat /sys/bus/platform/devices/tsc/ain9 
cat: /sys/bus/platform/devices/tsc/ain9: No such file or directory

更新 1

analog_test_simple.pyファイルを編集して、BeagleBone のすべての ADC ポートを表示しました。これは、センサーがプラグインされていないシェルの結果です。

-----
AIN0 [P9.39] - 3948
AIN1 [P9.40] - 4016
AIN2 [P9.37] - 4002
AIN3 [P9.38] - 3934
AIN4 [P9.35] - 4001
AIN5 [P9.36] - 3935
AIN6 [P9.33] - 3968
AIN7 [P9.39] - 4005
-----
AIN0 [P9.39] - 3946
AIN1 [P9.40] - 4005
AIN2 [P9.37] - 3945
AIN3 [P9.38] - 3957
AIN4 [P9.35] - 4018
AIN5 [P9.36] - 3945
AIN6 [P9.33] - 3967
AIN7 [P9.39] - 3955
...

センサーを再度接続すると、値が変化しますが、すべて同じです。

-----
AIN0 [P9.39] - 2836
AIN1 [P9.40] - 2836
AIN2 [P9.37] - 2837
AIN3 [P9.38] - 2831
AIN4 [P9.35] - 2840
AIN5 [P9.36] - 2837
AIN6 [P9.33] - 2837
AIN7 [P9.39] - 2837
-----
AIN0 [P9.39] - 2834
AIN1 [P9.40] - 2834
AIN2 [P9.37] - 2829
AIN3 [P9.38] - 2825
AIN4 [P9.35] - 2826
AIN5 [P9.36] - 2817
AIN6 [P9.33] - 2815
AIN7 [P9.39] - 2815
...
4

2 に答える 2

5

OK、答えは 2 つの別々の問題があるということです。どちらも PyBBIO ライブラリを使用することによって引き起こされます。読む...

問題 1: センサー値の不一致/不正確さ

私の質問に対するコメントの提案により、元の PyBBIO ベースのスクリプトに遅延を追加するようになりました。これはセンサーなしです:

# python PyBBIO/examples/analog_test_simple.py
-----
AIN0 [P9.39] - 3955
AIN1 [P9.40] - 4015
AIN2 [P9.37] - 4012
AIN3 [P9.38] - 3950
AIN4 [P9.33] - 3998
AIN5 [P9.36] - 4007
AIN6 [P9.35] - 3984
-----
AIN0 [P9.39] - 4007
AIN1 [P9.40] - 3953
AIN2 [P9.37] - 4005
AIN3 [P9.38] - 3941
AIN4 [P9.33] - 3956
AIN5 [P9.36] - 3934
AIN6 [P9.35] - 3946
...

センサーをプラグインした後の結果は次のとおりです。

# python PyBBIO/examples/analog_test_simple.py
-----
AIN0 [P9.39] - 2888
AIN1 [P9.40] - 2894
AIN2 [P9.37] - 2899
AIN3 [P9.38] - 2907
AIN4 [P9.33] - 2914
AIN5 [P9.36] - 2912
AIN6 [P9.35] - 2914
-----
AIN0 [P9.39] - 2912
AIN1 [P9.40] - 2905
AIN2 [P9.37] - 2901
AIN3 [P9.38] - 2891
AIN4 [P9.33] - 2896
AIN5 [P9.36] - 2890
AIN6 [P9.35] - 2896
...

センサーのプラグインは、遅延に関係なく、すべての値に影響を与えることがわかります。

これについて少し考えた後、PyBBIO を使用せずにスクリプトで結果を繰り返そうとすることにしました。Pythonモジュールを使用して、 BeagleBoneの各アナログ入力ピンからの読み取り値をテストして印刷するために、新しいPythonファイルを作成しましたos。ファイルはos.system('cat ...')値を出力するために使用され、それぞれの間に短い遅延が含まれます。コードは次のとおりです。

import os,time
i = 1

while(True):
    os.system("cat /sys/bus/platform/devices/tsc/ain" + str(i))
    print " - AIN" + str(i-1)
    if i==7: 
        i=1
        time.sleep(.5)
        print "------"
    else:
        i+=1    
    time.sleep(.1)

BeagleBone にプラグインされたコンポーネントがない場合の結果は次のとおりです。

# python analog-test-all-pins.py
------
3943 - AIN0
3819 - AIN1
3955 - AIN2
2018 - AIN3
2093 - AIN4
3583 - AIN5
3658 - AIN6
------
3947 - AIN0
3746 - AIN1
3959 - AIN2
2034 - AIN3
2123 - AIN4
3547 - AIN5
3644 - AIN6
...

上記のフォトレジスタ回路を AIN0 に接続した結果は次のとおりです。

# python analog-test-all-pins.py
------
2915 - AIN0
3347 - AIN1
3556 - AIN2
1478 - AIN3
1602 - AIN4
2393 - AIN5
2402 - AIN6
------
2913 - AIN0
3337 - AIN1
3560 - AIN2
1487 - AIN3
1606 - AIN4
2350 - AIN5
2489 - AIN6

そして、フォト レジスタ回路のデータ リードを AIN2 に接続した結果を以下に示します。

# python analog-test-all-pins.py
------
3939 - AIN0
3792 - AIN1
2881 - AIN2
1986 - AIN3
2089 - AIN4
3462 - AIN5
3543 - AIN6
------
3923 - AIN0
3791 - AIN1
2866 - AIN2
1960 - AIN3
2055 - AIN4
3528 - AIN5
3615 - AIN6
...

AIN3:

# python analog-test-all-pins.py
------
3951 - AIN0
3764 - AIN1
3933 - AIN2
2899 - AIN3
2134 - AIN4
3606 - AIN5
3737 - AIN6
------
3960 - AIN0
3823 - AIN1
3957 - AIN2
2910 - AIN3
2118 - AIN4
3635 - AIN5
3645 - AIN6
...

フォトレジスターとTMP36センサー

フォトレジスタのデータ リードを AIN0 に接続し、TMP36 温度センサーを AIN3 に接続した場合の結果は次のとおりです。

# python analog-test-all-pins.py
------
2866 - AIN0
3340 - AIN1
3540 - AIN2
885 - AIN3
1591 - AIN4
2348 - AIN5
2389 - AIN6
------
2872 - AIN0
3339 - AIN1
3551 - AIN2
884 - AIN3
1560 - AIN4
2383 - AIN5
2434 - AIN6
...

他のピンに影響を与えずにセンサーが読み取られていることを確認するために、AIN5 の TMP36 を示します。

# python analog-test-all-pins.py
------
2897 - AIN0
3338 - AIN1
3557 - AIN2
1464 - AIN3
1578 - AIN4
888 - AIN5
2459 - AIN6
------
2901 - AIN0
3344 - AIN1
3561 - AIN2
1460 - AIN3
1579 - AIN4
889 - AIN5
2395 - AIN6
...

これにより、これを引き起こしている PyBBIO ライブラリに問題があると結論付けることができます。方法はわかりませんが、2番目の問題も引き起こしています...

問題 2: セグメンテーション違反エラー

エラーで発生した問題Segmentation faultは、PyBBIO ライブラリの何かが原因です。たとえば、BeagleBoard を再起動して実行すると、次のようになります。

# cat /sys/bus/platform/devices/tsc/ain1
3953
# cat /sys/bus/platform/devices/tsc/ain2
3818

モジュールを使用して、Python スクリプトから上記の出力に一致する値を取得しosます。

しかし、AIN ピンにアクセスする PyBBIO スクリプト (上記の例) を実行し、catもう一度実行すると、エラーが発生します。

# cat /sys/bus/platform/devices/tsc/ain1
Segmentation fault
# cat /sys/bus/platform/devices/tsc/ain2
Segmentation fault

ボードを再起動すると(電源を抜いて差し込む)、cat再び使用できます:

# cat /sys/bus/platform/devices/tsc/ain1
2890
# cat /sys/bus/platform/devices/tsc/ain2
3366

また、このファイルを使用して、代わりにMatt Richardson の mrBBIO ライブラリを使用してみました:

from mrbbio import *

def setup():
    #pinMode("P9.36", INPUT)
    pass

def loop():

    print "-----"

    for key, value in analogPinDef.items():
        # There is currently an error in mrBBIO, as the analogPinDef dict points to:
        # ain[0-6] in /sys/devices/platform/tsc/ while it should point at: ain[1-7]
        if key=="P9.39": 
            print analogRead(key) + " - " + value
            delay(100)

    delay(1000)

run (setup,loop)

これを取得するには:

# python mrbbio/analog-test-all-pins.py
-----
2005 - ain4
3636 - ain6
3812 - ain2
2114 - ain5
3872 - ain3
3950 - ain1
-----
2002 - ain4
3530 - ain6
3787 - ain2
2059 - ain5
3895 - ain3
3952 - ain1
...
Cleaning up. Unexporting the following pins:

そして、結果を取得する能力を台無しにしないことがわかりましたcat-おそらく、最後にピンをエクスポートするためです。

# cat /sys/bus/platform/devices/tsc/ain1
3960
# cat /sys/bus/platform/devices/tsc/ain2
3830
于 2012-05-17T15:33:20.057 に答える