ユーザ用ツール

サイト用ツール


mae3xx_ope:use_di_do:start

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
mae3xx_ope:use_di_do:start [2015/06/29 10:12]
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 クラスドライバと同様に使用することができます。
mae3xx_ope/use_di_do/start.1435540376.txt.bz2 · 最終更新: 2015/06/29 10:12 by admin