この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
mae3xx_ope:use_di_do:start [2014/08/20 14:27] admin |
mae3xx_ope:use_di_do:start [2024/02/28 11:06] (現在) サポート [割込サポート] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
+ | ====== DI/DO を利用する ====== | ||
+ | DI/DO コネクタが実装された下記機種では、DI/DO それぞれ 8ch/8ch が利用できます。 | ||
+ | |||
+ | * [[http://www.centurysys.co.jp/products/linuxserver/mae320d16.html|MA-E320/D-16]] | ||
+ | * [[http://www.centurysys.co.jp/products/linuxserver/mae350fd16.html|MA-E350/FD-16]] | ||
+ | |||
+ | {{:mae3xx_ope:use_di_do:mae3xx_dido_00.jpg|DI/DOコネクタ}} | ||
+ | |||
+ | DI/DO の利用方法を紹介します。 | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ====== ハードウェア仕様 ====== | ||
+ | |||
+ | ===== 電気的仕様 ===== | ||
+ | |||
+ | ==== DI (入力) ==== | ||
+ | |||
+ | |< 30em 8em 15em >| | ||
+ | ^ 項目 ^ 内容 | | ||
+ | |接点入力|電圧接点入力| | ||
+ | |ポート数|8ch (DIN A0〜A3, B0〜B3)| | ||
+ | |コモン|4ch/コモン| | ||
+ | |入力電圧|DC12〜24V±10% (DC10.8V〜26.4V)| | ||
+ | |入力閾値|ON : DC10V以上, OFF: DC3V以下| | ||
+ | |入力電流|約2.5mA〜5mA| | ||
+ | |入力インピーダンス|約6kΩ| | ||
+ | |絶縁方式|フォトカプラ絶縁| | ||
+ | |絶縁耐圧|DC500V1分間, 外部端子〜内部回路間| | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== DO (出力) ==== | ||
+ | |||
+ | |< 30em 8em 15em >| | ||
+ | ^ 項目 ^ 内容 | | ||
+ | |接点出力|オープンコレクタ出力| | ||
+ | |ポート数|8ch (DOUT A0〜A3, B0〜B3)| | ||
+ | |コモン|4ch/コモン| | ||
+ | |負荷電圧|DC26.4V(最大)| | ||
+ | |負荷電流|DC50mA(最大)| | ||
+ | |ON電圧|DC1V以下| | ||
+ | |OFF時漏洩電流|0.1mA以下| | ||
+ | |保護機能|過電流保護| | ||
+ | |絶縁方式|フォトカプラ絶縁| | ||
+ | |絶縁耐圧|DC500V1分間, 外部端子〜内部回路間| | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== ピンアサイン ===== | ||
+ | |||
+ | {{:mae3xx_ope:use_di_do:mae3xx_dido_01.jpg?640|}} | ||
+ | |||
+ | ^ △列No. ^ DO Group ^ ピン名称 ^ 機能 ^ ^ ◯列No. ^ DI Group ^ ピン名称 ^ 機能 ^ | ||
+ | | 1| A |NC|未使用| | 21| A |DIN A COM|コモン A| | ||
+ | | 2|:::|DOUT A0|DO_0| | 22|:::|DIN A0|port 0| | ||
+ | | 3|:::|DOUT A1|DO_1| | 23|:::|DIN A1|port 1| | ||
+ | | 4|:::|DOUT A2|DO_2| | 24|:::|DIN A2|port 2| | ||
+ | | 5|:::|DOUT A3|DO_3| | 25|:::|DIN A3|port 3| | ||
+ | | 6|:::|DOUT A COM|コモン A| | 26| B |DIN B COM|コモン B| | ||
+ | | 7|:::|NC|未使用| | 27|:::|DIN B0|port 4| | ||
+ | | 8|:::|NC|未使用| | 28|:::|DIN B1|port 5| | ||
+ | | 9|:::|NC|未使用| | 29|:::|DIN B2|port 6| | ||
+ | | 10|:::|NC|未使用| | 30|:::|DIN B3|port 7| | ||
+ | | 11| B |NC|未使用| | 31| - |NC|未使用| | ||
+ | | 12|:::|DOUT B0|DO_4| | 32|:::|NC|未使用| | ||
+ | | 13|:::|DOUT B1|DO_5| | 33|:::|NC|未使用| | ||
+ | | 14|:::|DOUT B2|DO_6| | 34|:::|NC|未使用| | ||
+ | | 15|:::|DOUT B3|DO_7| | 35|:::|NC|未使用| | ||
+ | | 16|:::|DOUT B COM|コモン B| | 36|:::|NC|未使用| | ||
+ | | 17|:::|NC|未使用| | 37|:::|NC|未使用| | ||
+ | | 18|:::|NC|未使用| | 38|:::|NC|未使用| | ||
+ | | 19|:::|NC|未使用| | 39|:::|NC|未使用| | ||
+ | | 20|:::|NC|未使用| | 40|:::|NC|未使用| | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== 等価回路 ===== | ||
+ | |||
+ | ==== DI (入力) ==== | ||
+ | |||
+ | DI部は、フォトカプラと電流制限抵抗により構成されています。\\ | ||
+ | A,Bグループともに共通コモンとなっています。 | ||
+ | |||
+ | {{:mae3xx_ope:use_di_do:equivalent_circuit_di.png|}} | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== DO (出力) ==== | ||
+ | |||
+ | DO部は、フォトカプラと過電流保護素子により構成されています。\\ | ||
+ | A,Bグループともに共通コモンとなっています。 | ||
+ | |||
+ | |||
+ | {{:mae3xx_ope:use_di_do:equivalent_circuit_do.png?500|}} | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== 端子台への変換 ===== | ||
+ | |||
+ | {{:mae3xx_ope:ai_with_iio_subsystem:p1000613.jpg?400|端子台変換器 PCV5-1H202(東洋技研製)}} | ||
+ | |||
+ | {{:mae3xx_ope:ai_with_iio_subsystem:pcv5-1h202_pinassign.png?800|端子台変換器 PCV5-1H202(東洋技研製)}} | ||
+ | |||
+ | 端子台変換器 [[http://www.togi.co.jp/products/details.php?main=interface&c=73|PCV5-1H202(東洋技研製)]] を接続することにより、DIO 及び AIN ポートをスプリング圧結線方式の端子へ\\ | ||
+ | 変換することができます。端子台変換器はオプションの DIO ケーブル、もしくは AI ケーブルにより一括接続が可能です。 | ||
+ | |||
+ | 購入先: [[http://jp.misumi-ec.com/vona2/detail/110500006010/|ミスミ]], [[http://www.amazon.co.jp/%E6%9D%B1%E6%B4%8B%E6%8A%80%E7%A0%94-TOGI-PCV5-1H202-%E3%82%B9%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%AD%E3%83%83%E3%82%AF%E5%BC%8F%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB-HIF3BA-20PA-2-54DSA%E7%94%A8/dp/B00P60F89W|Amazon.co.jp]] | ||
+ | |||
+ | \\ | ||
+ | ====== ソフトウェア ====== | ||
+ | |||
+ | ===== DI (入力) ===== | ||
+ | |||
+ | sysfs I/F でアクセスします。\\ | ||
+ | 参考: [[https://www.kernel.org/doc/Documentation/gpio/sysfs.txt|GPIO Sysfs Interface for Userspace]] | ||
+ | |||
+ | /sys/devices/ocp.3/50000000.gpmc/11000040.gpio/gpio/ 以下の gpiochip でアクセスします。\\ | ||
+ | ボード構成により、gpiochip の番号がずれますので、あらかじめ全 DI ポートを export してあります。 | ||
+ | |||
+ | DIポート一覧 | ||
+ | <code> | ||
+ | root@plum:~# ls -l /tmp/DI/ | ||
+ | total 0 | ||
+ | lrwxrwxrwx 1 root root 23 Jun 19 11:40 0 -> /sys/class/gpio/gpio456 | ||
+ | lrwxrwxrwx 1 root root 23 Jun 19 11:40 1 -> /sys/class/gpio/gpio457 | ||
+ | lrwxrwxrwx 1 root root 23 Jun 19 11:40 2 -> /sys/class/gpio/gpio458 | ||
+ | lrwxrwxrwx 1 root root 23 Jun 19 11:40 3 -> /sys/class/gpio/gpio459 | ||
+ | lrwxrwxrwx 1 root root 23 Jun 19 11:40 4 -> /sys/class/gpio/gpio460 | ||
+ | lrwxrwxrwx 1 root root 23 Jun 19 11:40 5 -> /sys/class/gpio/gpio461 | ||
+ | lrwxrwxrwx 1 root root 23 Jun 19 11:40 6 -> /sys/class/gpio/gpio462 | ||
+ | lrwxrwxrwx 1 root root 23 Jun 19 11:40 7 -> /sys/class/gpio/gpio463 | ||
+ | </code> | ||
+ | |||
+ | v2.2.0 より、GPIO に DeviceTree から命名する機能を入れましたので、このように見えるようになります。 | ||
+ | |||
+ | <code> | ||
+ | user1@plum:~$ ls -l /sys/class/gpio/DI_0* | ||
+ | lrwxrwxrwx 1 root root 0 Aug 31 10:25 /sys/class/gpio/DI_00 -> ../../devices/platform/ocp/50000000.gpmc/11000040.gpio/gpiochip13/gpio/DI_00 | ||
+ | lrwxrwxrwx 1 root root 0 Aug 31 10:25 /sys/class/gpio/DI_01 -> ../../devices/platform/ocp/50000000.gpmc/11000040.gpio/gpiochip13/gpio/DI_01 | ||
+ | lrwxrwxrwx 1 root root 0 Aug 31 10:25 /sys/class/gpio/DI_02 -> ../../devices/platform/ocp/50000000.gpmc/11000040.gpio/gpiochip13/gpio/DI_02 | ||
+ | lrwxrwxrwx 1 root root 0 Aug 31 10:25 /sys/class/gpio/DI_03 -> ../../devices/platform/ocp/50000000.gpmc/11000040.gpio/gpiochip13/gpio/DI_03 | ||
+ | lrwxrwxrwx 1 root root 0 Aug 31 10:25 /sys/class/gpio/DI_04 -> ../../devices/platform/ocp/50000000.gpmc/11000040.gpio/gpiochip13/gpio/DI_04 | ||
+ | lrwxrwxrwx 1 root root 0 Aug 31 10:25 /sys/class/gpio/DI_05 -> ../../devices/platform/ocp/50000000.gpmc/11000040.gpio/gpiochip13/gpio/DI_05 | ||
+ | lrwxrwxrwx 1 root root 0 Aug 31 10:25 /sys/class/gpio/DI_06 -> ../../devices/platform/ocp/50000000.gpmc/11000040.gpio/gpiochip13/gpio/DI_06 | ||
+ | lrwxrwxrwx 1 root root 0 Aug 31 10:25 /sys/class/gpio/DI_07 -> ../../devices/platform/ocp/50000000.gpmc/11000040.gpio/gpiochip13/gpio/DI_07 | ||
+ | </code> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | DIポート以下のノード | ||
+ | <code> | ||
+ | root@plum:~# ls -l /tmp/DI/0/ | ||
+ | total 0 | ||
+ | -rw-r--r-- 1 root root 4096 Jun 19 11:47 active_low | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:47 device -> ../../../11000040.gpio | ||
+ | -rw-r--r-- 1 root root 4096 Jun 19 11:47 direction | ||
+ | drwxr-xr-x 2 root root 0 Jun 19 11:47 power | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:47 subsystem -> ../../../../../../class/gpio | ||
+ | -rw-r--r-- 1 root root 4096 Jun 19 11:40 uevent | ||
+ | -rw-r--r-- 1 root root 4096 Jun 19 11:47 value | ||
+ | </code> | ||
+ | |||
+ | value ノードを読むことで、DIの値を読むことができます。 | ||
+ | |||
+ | <code> | ||
+ | root@plum:~# cat /tmp/DI/1/value | ||
+ | 0 | ||
+ | </code> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== 割込サポート ==== | ||
+ | |||
+ | v2.6.1α1 より、DI 回路の割込およびフィルタ機能をサポートしました。(([[https://www.centurysys.co.jp/products/linuxserver/mae350lad.html|MA-E350/LAD-20]] の 8bit ハードウェアカウンタ機能が実装された 前半 4channel 部の設定は [[mae3xx_ope:di_hardware_counter:start]] を参考。 | ||
+ | ))\\ | ||
+ | これにより、下記機能が利用できるようになります。 | ||
+ | |||
+ | * チャタリング除去フィルタ (1ms / 5ms / 20ms / なし) | ||
+ | * カウンタ | ||
+ | * 変化待ち (poll() による) | ||
+ | |||
+ | \\ | ||
+ | |||
+ | sysfs のエントリが下記のとおり拡張されます。 | ||
+ | |||
+ | <code> | ||
+ | root@plum:/sys/class/gpio/DI_00# ls -l /sys/class/gpio/DI_00/ | ||
+ | total 0 | ||
+ | -rw-r--r-- 1 root root 4096 Jun 26 15:10 active_low | ||
+ | -rw-r--r-- 1 root root 4096 Jun 29 09:42 counter | ||
+ | -rw-r--r-- 1 root root 4096 Jun 26 15:11 debounce | ||
+ | lrwxrwxrwx 1 root root 0 Jun 26 15:10 device -> ../../../11000040.gpio | ||
+ | -rw-r--r-- 1 root root 4096 Jun 26 15:10 direction | ||
+ | -rw-r--r-- 1 root root 4096 Jun 29 09:20 edge | ||
+ | drwxr-xr-x 2 root root 0 Jun 26 15:10 power | ||
+ | lrwxrwxrwx 1 root root 0 Jun 26 15:10 subsystem -> ../../../../../../class/gpio | ||
+ | -rw-r--r-- 1 root root 4096 Jun 26 15:10 uevent | ||
+ | -rw-r--r-- 1 root root 4096 Jun 26 15:10 value | ||
+ | root@plum:/sys/class/gpio/DI_00# | ||
+ | </code> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | 追加されたエントリは下表のとおりです。 | ||
+ | |||
+ | ^ entry ^ function ^ note | | ||
+ | | counter | カウンタ値 R/W | 任意の値((32bit unsigned long)) にセット可能 | | ||
+ | | debounce | フィルタ設定 R/W | 0 / 1 / 5 / 20 | | ||
+ | | edge | 割込極性 R/W | none / rising / falling / both | | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === counter === | ||
+ | |||
+ | カウンタ値の読み出しおよび設定(クリア)を行います。 | ||
+ | |||
+ | == 読み出し == | ||
+ | |||
+ | <code> | ||
+ | root@plum:~# cat /sys/class/gpio/DI_00/counter | ||
+ | 2841 | ||
+ | root@plum:~# | ||
+ | </code> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | == 設定(クリア) == | ||
+ | |||
+ | <code> | ||
+ | root@plum:~# echo 0 > /sys/class/gpio/DI_00/counter | ||
+ | root@plum:~# cat /sys/class/gpio/DI_00/counter | ||
+ | 0 | ||
+ | root@plum:~# | ||
+ | </code> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | == カウンタ利用上の注意 == | ||
+ | |||
+ | * 後述する "edge" 設定が、"rising" / "falling" / "both" の時に機能します。 | ||
+ | * 内部では **32bit unsigned long** で値を保持しています。 | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === debounce (チャタリング除去フィルタ設定) === | ||
+ | |||
+ | チャタリング除去フィルタの設定値を読み書きします。 | ||
+ | |||
+ | <code> | ||
+ | root@plum:~# cat /sys/class/gpio/DI_00/debounce | ||
+ | 0 ms | ||
+ | root@plum:~# echo 5 > /sys/class/gpio/DI_00/debounce | ||
+ | root@plum:~# cat /sys/class/gpio/DI_00/debounce | ||
+ | 5 ms | ||
+ | root@plum:~# | ||
+ | </code> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | == 設定方法 == | ||
+ | |||
+ | * 0 / 1 / 5 / 20 を書き込むことで設定します。 | ||
+ | * 他の値を書き込んだ場合、書き込んだ値より小さい値に設定されます。 | ||
+ | |||
+ | <code> | ||
+ | root@plum:~# echo 11 > /sys/class/gpio/DI_00/debounce | ||
+ | root@plum:~# cat /sys/class/gpio/DI_00/debounce | ||
+ | 5 ms | ||
+ | root@plum:~# echo 100 > /sys/class/gpio/DI_00/debounce | ||
+ | root@plum:~# cat /sys/class/gpio/DI_00/debounce | ||
+ | 20 ms | ||
+ | root@plum:~# | ||
+ | </code> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === edge (割込極性設定) === | ||
+ | |||
+ | 割込極性を設定します。\\ | ||
+ | rising (立ち上がりトリガ) / falling (立ち下がりトリガ) / both (両エッジトリガ) / none (割込を使用しない) のいずれかを書き込みます。 | ||
+ | |||
+ | <code> | ||
+ | root@plum:~# cat /sys/class/gpio/DI_00/edge | ||
+ | none | ||
+ | root@plum:~# echo rising > /sys/class/gpio/DI_00/edge | ||
+ | root@plum:~# cat /sys/class/gpio/DI_00/edge | ||
+ | rising | ||
+ | root@plum:~# | ||
+ | </code> | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== サンプルコード ==== | ||
+ | |||
+ | 割込を利用したプログラムのサンプルです。 | ||
+ | |||
+ | * [[mae3xx_devel:gpio_with_poll:start]] | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== DO (出力) ===== | ||
+ | |||
+ | LEDクラスドライバにマッピングしてあります。 | ||
+ | |||
+ | <code> | ||
+ | root@plum:~# ls -l /sys/class/leds/DO_* | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:41 /sys/class/leds/DO_0 -> ../../devices/leds_do.7/leds/DO_0 | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:41 /sys/class/leds/DO_1 -> ../../devices/leds_do.7/leds/DO_1 | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:41 /sys/class/leds/DO_2 -> ../../devices/leds_do.7/leds/DO_2 | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:41 /sys/class/leds/DO_3 -> ../../devices/leds_do.7/leds/DO_3 | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:41 /sys/class/leds/DO_4 -> ../../devices/leds_do.7/leds/DO_4 | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:41 /sys/class/leds/DO_5 -> ../../devices/leds_do.7/leds/DO_5 | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:41 /sys/class/leds/DO_6 -> ../../devices/leds_do.7/leds/DO_6 | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:41 /sys/class/leds/DO_7 -> ../../devices/leds_do.7/leds/DO_7 | ||
+ | </code> | ||
+ | |||
+ | 各 DO の下の構成はこのようになっています。 | ||
+ | <code> | ||
+ | root@plum:~# ls -l /sys/class/leds/DO_1/ | ||
+ | total 0 | ||
+ | -rw-r--r-- 1 root root 4096 Jun 19 11:50 brightness | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:50 device -> ../../../leds_do.7 | ||
+ | -r--r--r-- 1 root root 4096 Jun 19 11:50 max_brightness | ||
+ | drwxr-xr-x 2 root root 0 Jun 19 11:50 power | ||
+ | lrwxrwxrwx 1 root root 0 Jun 19 11:50 subsystem -> ../../../../class/leds | ||
+ | -rw-r--r-- 1 root root 4096 Jun 19 11:50 trigger | ||
+ | -rw-r--r-- 1 root root 4096 Jun 19 11:40 uevent | ||
+ | </code> | ||
+ | |||
+ | sysfs LED クラスドライバと同様に使用することができます。 |