トホホな疑問(18) Jetson Nano、GPIO 入力、pull-up

JosephHalfmoon

年甲斐もなく疑問続きの今日この頃です。今回疑問は、Jetson NanoのGPIO入力の件。8月の投稿でJetson NanoのGPIO出力、ラズパイのGPIOに似せてあって簡単に使えて嬉しい、などと書いておりました。当然、GPIO入力など以下同文、と思っていたらハマりました。これまた8月の別の投稿でラズパイに接続してみたPIRセンサ(人感センサ)をJetson Nanoに繋ぎ変えてみようとした時です。

一応、計画としては、PIRセンサの「人を検出した」という信号を割り込みで受けて、何か動かそうというのであります。とりあえず、ハードがちゃんと動くかどうか、単なるGPIO入力として読んでみることにいたしました。GPIO読むだけです。結線さえ間違えずに接続すれば問題ない筈。以前の投稿見ていただければいろいろ書いてますが、ニッセラ製のPIRセンサ、電源、グラウンド以外に信号線は1本だけ、デジタル、ロウアクティブ、

オープンドレイン、ウイークプルアップ(47kΩ)つき

です。電源電圧は3-5V対応ですが、SoC側が3.3V系IOなので、3.3V電源で使用。ラズパイのGPIO端子に接続すれば、人を検知しないときはハイ、人を検知すればロウが返ります。まったく問題ない。

これをJetson Nanoに接続し、

/opt/nvidia/jetson-gpio/samples

の中のプログラム simple_input.py で読み取ることにいたしました。このプログラム、ボードピン12(ラズパイ互換のピン番号18)を入力に設定し、その値を毎秒1回読み取り続け、変化があったら報告する、というだけのもの。さっそくピン番号12(Jetson Nanoにはちゃんとピン番号が印刷されているので間違いますまい。なお、印刷されているのはラズパイ互換番号ではなく、Jetson Nano固有の方)に接続して動かしてみます。

ロウに張り付いたまま、動きませぬ

おかしいので、変化に関わらず毎秒出力とした上で、ピンも40番に換えてみました。修正したプログラムの一部

しかし、駄目です。ロウべったり。もしかするとピン違い?40番ピン(ラズパイ互換番号21)に確実にハイになる信号(3V3)を乱暴にもダイレクトに接続してみると

ハイ

になります。センサ出力に接続するとロウ。人はいないのにロウ。これは、いけません。しかたがないので、信号をオシロで眺めることにいたしました。

ロウです。しかし、人がいる(実際には手をセンサの前にかざしている)ときのロウと、人がいない時のロウのレベルが微妙に違います。コンマ数Vくらいですが、信号がペコペコしている。たまたま、I2Cバスの実験用のプルアップがボードに実装されていたので、これをつかってセンサの信号をプルアップしてみました。人が居ない時のレベルが1Vくらいまで上がりました。

  • センサ内蔵のプルアップ(47kΩ)でコンマ3Vくらい
  • それに10kΩのプルアップを追加すると1Vくらい

これは、入力設定にしてもハイ・インピーダンスとか、ウイーク・プルアップとかになるわけではなくて、Jetson NanoのIO端子には、数kΩ相当のプル・ダウンついているんじゃないか、と思いいたりました(詳しいことは次回をご参照くだされ)。

とりあえず、空中に2kΩのプルアップを設置!その様子がこちら、

そうして、センサの前にかざした手を引っ込めました。その様子がこちら、

ロウであった信号が、ちゃんとハイに戻るようになりました。オシロで眺めていても、レベルが復活しとります。なんだ、プルアップ抵抗の値が小さすぎたんかいな。Jetson NanoのSoCのデータシートのピンの仕様も読まずにやっておるから、こういうことになるのね。

こんどちゃんとデータシート読みましょ。

トホホな疑問(17) ラズパイi2cの速度 へ戻る

トホホな疑問(19) Jetson Nano、GPIO 入力つづき へ進む