====== DI/DO/RELAY OUT を利用する ======
DI/DO コネクタが実装された下記機種では、DI/DO/RELAY OUT それぞれ 8ch/4ch/4ch が利用できます。
* [[http://www.centurysys.co.jp/products/linuxserver/mae350klad.html|MA-E350/KLAD]]
* [[http://www.centurysys.co.jp/products/linuxserver/mae350nad.html|MA-E350/NAD]]
* [[http://www.centurysys.co.jp/products/linuxserver/mae350nlad.html|MA-E350/NLAD]]
* [[https://www.centurysys.co.jp/products/linuxserver/mae350lad.html|MA-E350/LAD]]
* [[https://www.centurysys.co.jp/products/linuxserver/mae350gl.html|MA-E350/GLAD]]
{{:mae3xx_ope:use_di_do_with_dcdc:mae3xx_dido_relayout_00.jpg|DI/DO コネクタ}}
DI/DO/RELAY OUT の利用方法を紹介します。
\\
====== ハードウェア仕様 ======
===== 電気的仕様 =====
==== 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 >|
^ 項目 ^ 内容 |
|接点出力|オープンコレクタ出力|
|ポート数|4ch (DOUT A0〜A3)|
|コモン|4ch/コモン|
|負荷電圧|DC26.4V(最大)|
|負荷電流|DC50mA(最大)|
|ON電圧|DC1V以下|
|OFF時漏洩電流|0.1mA以下|
|保護機能|過電流保護|
|絶縁方式|フォトカプラ絶縁|
|絶縁耐圧|DC500V1分間, 外部端子〜内部回路間|
\\
==== RELAY OUT (出力) ====
|< 30em 8em 15em >|
^ 項目 ^ 内容 |
|接点出力|フォト MOS リレー接点出力|
|ポート数|4ch (DOUT R0〜R3)|
|コモン|独立コモン|
|負荷電圧|DC30V(最大)|
|負荷電流|DC300mA(最大)|
|保護機能|過電流保護|
|絶縁方式|フォトカプラ絶縁|
|絶縁耐圧|DC500V1分間, 外部端子〜内部回路間|
\\
===== ピンアサイン =====
{{:mae3xx_ope:use_di_do_with_dcdc:manual_ma-e300_dio_connector_pinnumber.jpg|}}
^ △列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| RELAY |DOUT R0|DO_4| | 27|:::|DIN B0|port 4|
| 8|:::|DOUT R0 COM|リレー 0 コモン| | 28|:::|DIN B1|port 5|
| 9|:::|DOUT R1|DO_5| | 29|:::|DIN B2|port 6|
| 10|:::|DOUT R1 COM|リレー 1 コモン| | 30|:::|DIN B3|port 7|
| 11| - |NC|未使用| | 31| - |DC +24V|DIN 電源 +|
| 12|:::|NC|未使用| | 32|:::|DC -COM|DIN 電源 -|
| 13|:::|NC|未使用| | 33|:::|NC|未使用|
| 14|:::|NC|未使用| | 34|:::|NC|未使用|
| 15|:::|NC|未使用| | 35|:::|NC|未使用|
| 16|:::|NC|未使用| | 36|:::|NC|未使用|
| 17| RELAY |DOUT R2|DO_6| | 37|:::|NC|未使用|
| 18|:::|DOUT R2 COM|リレー 2 コモン| | 38|:::|NC|未使用|
| 19|:::|DOUT R3|DO_7| | 39|:::|NC|未使用|
| 20|:::|DOUT R3 COM|リレー 3 コモン| | 40|:::|NC|未使用|
\\
===== 等価回路 =====
==== DI (入力) ====
DI部はフォトカプラ及び電流制限抵抗により構成されています。接点入力専用電源を接続することにより、無電圧接点の入力が可能です。\\
また、電源の接続方法によりプラスコモン、及びマイナスコモンの機器との接続も可能です。
{{:mae3xx_ope:use_di_do_with_dcdc:equivalent_circuit_di_power.png|}}
※ 接点入力専用電源は接点入力への電源供給以外に使用することはできません。
\\
==== DO (出力) ====
DO部は、フォトカプラと過電流保護素子により構成されています。\\
A,Bグループともに共通コモンとなっています。
{{:mae3xx_ope:use_di_do:equivalent_circuit_do.png?500|}}
\\
==== Relay OUT (リレー出力) ====
リレー接点出力部はフォトMOSリレー及び過電流保護素子により構成されています。各チャネル独立したコモンとなっています。
{{:mae3xx_ope:use_di_do_with_dcdc:equivalent_circuit_relayout.png|}}
\\
===== 端子台への変換 =====
{{: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 ケーブルにより一括接続が可能です。
DIOコネクタと端子台ピン番号の対応表は下記PDFを参照ください。\\
{{ :mae3xx_ope:use_di_do_with_dcdc:ma-e300series_dio_ai_端子台ヒ゜ン配置_14.pdf |}}
購入先: [[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ポート一覧
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
v2.2.0 より、GPIO に DeviceTree から命名する機能を入れましたので、このように見えるようになります。
root@plum:~# ls -l /tmp/DI/
total 0
lrwxrwxrwx 1 root root 21 Aug 20 13:20 0 -> /sys/class/gpio/DI_00
lrwxrwxrwx 1 root root 21 Aug 20 13:20 1 -> /sys/class/gpio/DI_01
lrwxrwxrwx 1 root root 21 Aug 20 13:20 2 -> /sys/class/gpio/DI_02
lrwxrwxrwx 1 root root 21 Aug 20 13:20 3 -> /sys/class/gpio/DI_03
lrwxrwxrwx 1 root root 21 Aug 20 13:20 4 -> /sys/class/gpio/DI_04
lrwxrwxrwx 1 root root 21 Aug 20 13:20 5 -> /sys/class/gpio/DI_05
lrwxrwxrwx 1 root root 21 Aug 20 13:20 6 -> /sys/class/gpio/DI_06
lrwxrwxrwx 1 root root 21 Aug 20 13:20 7 -> /sys/class/gpio/DI_07
\\
DIポート以下のノード
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
value ノードを読むことで、DIの値を読むことができます。
root@plum:~# cat /tmp/DI/1/value
0
\\
==== 割込サポート ====
v2.6.1α1 より、DI 回路の割込およびフィルタ機能をサポートしました。\\
これにより、下記機能が利用できるようになります。
* チャタリング除去フィルタ (1ms / 5ms / 20ms / なし)
* カウンタ
* 変化待ち (poll() による((参照: [[mae3xx_devel:gpio_with_poll:start]])) )
\\
sysfs のエントリが下記のとおり拡張されます。
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#
\\
追加されたエントリは下表のとおりです。
^ entry ^ function ^ note |
| counter | カウンタ値 R/W | 任意の値にセット可能 |
| debounce | フィルタ設定 R/W | 0 / 1 / 5 / 20 |
| edge | 割込極性 R/W | none / rising / falling / both |
\\
=== counter ===
カウンタ値の読み出しおよび設定(クリア)を行います。
== 読み出し ==
root@plum:~# cat /sys/class/gpio/DI_00/counter
2841
root@plum:~#
\\
== 設定(クリア) ==
root@plum:~# echo 0 > /sys/class/gpio/DI_00/counter
root@plum:~# cat /sys/class/gpio/DI_00/counter
0
root@plum:~#
\\
== カウンタ利用上の注意 ==
* 後述する "edge" 設定が、"rising" / "falling" / "both" の時に機能します。
* 内部では **32bit unsigned long** で値を保持しています。
\\
=== debounce (チャタリング除去フィルタ設定) ===
チャタリング除去フィルタの設定値を読み書きします。
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:~#
\\
== 設定方法 ==
* 0 / 1 / 5 / 20 を書き込むことで設定します。
* 他の値を書き込んだ場合、書き込んだ値より小さい値に設定されます。
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:~#
\\
=== edge (割込極性設定) ===
割込極性を設定します。\\
rising (立ち上がりトリガ) / falling (立ち下がりトリガ) / both (両エッジトリガ) / none (割込を使用しない) のいずれかを書き込みます。
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:~#
\\
==== サンプルコード ====
割込を利用したプログラムのサンプルです。
* [[mae3xx_devel:gpio_with_poll:start]]
\\
===== DO (出力) =====
LEDクラスドライバにマッピングしてあります。
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
各 DO の下の構成はこのようになっています。
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
sysfs LED クラスドライバと同様に使用することができます。