====== AI(Analog IN) を利用する (IIO subsystem) ======
A/D Converter を搭載した下記機種では、AI(Analog IN) 4チャネルを利用できます。
* [[https://www.centurysys.co.jp/products/linuxserver/mae350klad.html|MA-E350/KLAD]]
* [[https://www.centurysys.co.jp/products/linuxserver/mae350nad.html|MA-E350/NAD]]
* [[https://www.centurysys.co.jp/products/linuxserver/mae350nlad.html|MA-E350/NLAD]]
{{:mae3xx_ope:ai_with_iio_subsystem:ai_connector_sw.jpg?600|AIN コネクタと AIN MODE スイッチ}}
\\
===== ハードウェア仕様 =====
==== 電気的仕様 ====
^ 項目 ^ 内容 |
|A/D Converter IC 型式|[[http://www.linear-tech.co.jp/product/LTC1859|LTC1859 (Linear Technology)]]|
|変換方式|[[http://en.wikipedia.org/wiki/Successive_approximation_ADC|マルチプレクサ式逐次変換型(SAR)]]|
|ポート数|差動入力 4CH|
|絶対最大入力|DC ±25V|
|入力レンジ (電圧モード)|DC 0V 〜 +5V|
|:::|DC 0V 〜 +10V|
|:::|DC -5V 〜 +5V|
|:::|DC -10V 〜 +10V|
|入力レンジ (電流モード, スイッチ切替)|DC 0mA 〜 20mA|
|許容コモンモード電圧|DC 0V 〜 +5V (DC 0V 〜 +5V レンジ)|
|:::|DC 0V 〜 +1V (DC 0V 〜 +10V レンジ)|
|:::|DC -5V 〜 +5V (DC -5V 〜 +5V レンジ)|
|:::|DC -1V 〜 +1V (DC -10V 〜 +10V レンジ)|
|入力インピーダンス|電圧入力モード 2MΩ 以上|
|:::|電流入力モード 250Ω ± 0.1%|
|分解能|16bit|
|変換精度|±0.1% (-20℃ 〜 +60℃, フルスケール)|
|絶縁方式|ディジタルアイソレータ絶縁|
|絶縁耐圧|DC500V 1分間, 外部端子〜内部回路間|
|コネクタ|ハーフピッチ 20 ピンコネクタ [[http://www.mmm.co.jp/electrical/connector/square_connector/|3M 社製 MDR タイプ: 10220-52A2PL]], [[http://www.mmm.co.jp/electrical/connector/square_connector/pdf/g45.pdf|Datasheet]] (PDF)|
{{:mae3xx_ope:ai_with_iio_subsystem:ai_cable_mdr.jpg|MDR コネクタ}}
\\
==== ピンアサイン ====
{{:mae3xx_ope:ai_with_iio_subsystem:manual_ma-e300_ain_connector_pinnumber.jpg|}}
|< 64em 6em 6em 14em 0.2em 4em 10em 10em >|
^ PIN No. ^ 名称 ^ 機能 ^ ^ PIN No. ^ 名称 ^ 機能 |
| 1| AIN COM | アナログコモン | | 11| NC | 未使用 |
| 2| AIN0 (+) | アナログ差動入力 CH0 | | 12| NC | 未使用 |
| 3| AIN0 (-) |:::| | 13| NC | 未使用 |
| 4| AIN1 (+) | アナログ差動入力 CH1 | | 14| NC | 未使用 |
| 5| AIN1 (-) |:::| | 15| NC | 未使用 |
| 6| AIN2 (+) | アナログ差動入力 CH2 | | 16| NC | 未使用 |
| 7| AIN2 (-) |:::| | 17| NC | 未使用 |
| 8| AIN3 (+) | アナログ差動入力 CH3 | | 18| NC | 未使用 |
| 9| AIN3 (-) |:::| | 19| NC | 未使用 |
| 10| NC | 未使用 | | 20| NC | 未使用 |
\\
==== AIN MODE スイッチ設定 ====
アナログ差動入力の電圧/電流モードの切り替えを行うためのスイッチです。\\
アナログ入力を電流モード([[http://www.cqpub.co.jp/term/420macurrentloop.htm|4~20mAカレント・ループ(4-20mA current loop)]]) で使用する場合、
AIN MODE スイッチを **"CURRENT"** に切り替えて使用します。\\
電流モードに切り替えると、AINx(+) 〜 AINx(-) 間に 250Ω の抵抗が接続されます。\\
電流モードを使用する場合は、分解能を最大にするため入力レンジを 0V 〜 +5V に設定して使用してください。
|< 40em 4em 6em 6em 6em >|
^ SW NO. ^ AIN Channel ^ Switch Position ^^
^:::^:::^ VOLTAGE ^ CURRENT ^
| 0 | CH0 | 電圧モード | 電流モード |
| 1 | CH1 |:::|:::|
| 2 | CH2 |:::|:::|
| 3 | CH3 |:::|:::|
\\
==== 等価回路 ====
{{:mae3xx_ope:ai_with_iio_subsystem:ai_等価回路.png?800|AI 等価回路}}
\\
==== 便利なツール ====
{{: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]]
\\
==== 接続例 ====
=== 電流モード使用 4-20mA ===
{{:mae3xx_ope:ai_with_iio_subsystem:plum_ain.png?800|}}
※ マイナス(-)側を COM(GND) に接続するのを忘れると、入力値が不安定になり計測できません。
\\
==== よくある質問 ====
* Q. 入力が差動入力となってるが、シングルエンドの電圧が出力されるセンサを接続したい
* A. AIN(-) とアナログコモンを接続し、センサ側共通 GND と接続する
\\
===== 使用方法 (ソフトウェア) =====
IIO subsystem 上に実装しています。\\
参考:
* [[https://archive.fosdem.org/2012/schedule/event/693/127_iio-a-new-subsystem.pdf|IIO, a new kernel subsystem]] (PDF)
* [[http://wiki.analog.com/software/linux/docs/iio/iio|LINUX INDUSTRIAL I/O SUBSYSTEM - Analog Devices Wiki]]
sysfs の、/sys/bus/iio/devices/iio:deviceN ディレクトリ経由でアクセスします。
root@plum:/sys/bus/iio/devices/iio:device1# ls -l
total 0
drwxr-xr-x 2 root root 0 Sep 8 12:01 buffer
-r--r--r-- 1 root root 4096 Sep 8 12:01 dev
-rw-r--r-- 1 root root 4096 Sep 8 12:02 in_voltage0_range
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage0_raw
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage0_scale
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage1_range
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage1_raw
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage1_scale
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage2_range
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage2_raw
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage2_scale
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage3_range
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage3_raw
-rw-r--r-- 1 root root 4096 Sep 8 12:01 in_voltage3_scale
-r--r--r-- 1 root root 4096 Sep 8 12:01 in_voltage_ranges_available
-r--r--r-- 1 root root 4096 Sep 8 12:01 name
drwxr-xr-x 2 root root 0 Sep 8 12:01 power
drwxr-xr-x 2 root root 0 Sep 8 12:01 scan_elements
lrwxrwxrwx 1 root root 0 Sep 8 12:01 subsystem -> ../../../../../../../bus/iio
drwxr-xr-x 2 root root 0 Sep 8 12:01 trigger
-rw-r--r-- 1 root root 4096 Sep 8 12:01 uevent
root@plum:/sys/bus/iio/devices/iio:device1#
Kernel のメジャーバージョン((IIO module の初期化順が異なります))により、ディレクトリが異なります。\\
/sys/bus/iio/devices/iio:deviceN/name の内容で確認可能です。
root@plum:~# uname -a
Linux plum 4.19.73+ #137 PREEMPT Wed Sep 18 08:55:58 JST 2019 armv7l armv7l armv7l GNU/Linux
root@plum:~# for dev in /sys/bus/iio/devices/iio*; do echo $dev; cat $dev/name; done
/sys/bus/iio/devices/iio:device0
ltc185x <---- AI channel: 0〜3
/sys/bus/iio/devices/iio:device1
ltc185x <---- AI channel: 4〜7 (AI 8chのボードのみ使用可能、4chのボードでアクセスした場合値は無効)
/sys/bus/iio/devices/iio:device2
TI-am335x-adc.0.auto
\\
==== 基本的な使用方法 ====
各 AIN のチャネル (0 〜 3) に対して、下記のノードがあります。
^ 名称 ^ 内容 ^ 例 ^ 備考 |
|in_voltagex_range|現在の入力レンジ設定| -10Vto+10V |初期設定は "0Vto5V" (DC 0V 〜 +5V)|
|in_voltagex_scale|スケール(1bit あたりの電圧)| 0.000305175 |入力レンジ "-10Vto+10V" 時|
|in_voltagex_raw|AD 変換値| 13607 |13607 x 0.000305175 ≒ 4.152 [V]|
\\
各チャネルで共通なものは下記となります。
^ 名称 ^ 内容 ^ 例 ^ 備考 |
|in_voltage_ranges_available|入力レンジとして設定可能な値一覧|-5Vto+5V -10Vto+10V 0Vto+5V 0Vto+10V| |
\\
入力レンジの切り替えには、"in_voltage_ranges_available" で表示されるテキストから選択し、"in_voltagex_range" へ書き込むことで行います。
\\
=== 入力レンジ一覧表示 ===
root@plum:/sys/bus/iio/devices/iio:device1# cat in_voltage_ranges_available
-5Vto+5V -10Vto+10V 0Vto+5V 0Vto+10V
\\
=== 入力レンジ切り替え (DC 0V 〜 +5V) ===
root@plum:/sys/bus/iio/devices/iio:device1# echo 0Vto+5V > in_voltage0_range
root@plum:/sys/bus/iio/devices/iio:device1# cat in_voltage0_range
0Vto+5V
root@plum:/sys/bus/iio/devices/iio:device1#
\\
=== スケール 読み出し ===
root@plum:/sys/bus/iio/devices/iio:device1# cat in_voltage0_scale
0.000076293
root@plum:/sys/bus/iio/devices/iio:device1#
\\
=== AD 変換値 読み出し ===
== 入力値が 正の値 の場合 ==
root@plum:/sys/bus/iio/devices/iio:device1# cat in_voltage0_raw
54392
root@plum:/sys/bus/iio/devices/iio:device1#
この例では、スケールとして読み出した値 x AD 変換値 が、AIN に印加されている電圧値となります。
0.000076293 x 54392 = 4.1497 [V]
\\
== 入力値が 負の値 の場合 ==
AINx(+) よりも AINx(-) のほうが電圧が高い場合、プラス電圧のみ対応の入力レンジのままですと 0V にクリップしてしまいます。\\
0V を中心として正負に電圧が振れる入力の場合、もしくは入力の極性を間違えているケースです。
root@plum:/sys/bus/iio/devices/iio:device1# cat in_voltage0_range
0Vto5V
root@plum:/sys/bus/iio/devices/iio:device1# cat in_voltage0_raw
0
root@plum:/sys/bus/iio/devices/iio:device1#
\\
その場合、- から + まで対応のレンジに切り替えを行う必要があります。
root@plum:/sys/bus/iio/devices/iio:device1# echo -10Vto+10V > in_voltage0_range
root@plum:/sys/bus/iio/devices/iio:device1# cat in_voltage0_raw
-13597
root@plum:/sys/bus/iio/devices/iio:device1#
スケールは in_voltage0_scale から読み出します。
root@plum:/sys/bus/iio/devices/iio:device1# cat in_voltage0_scale
0.000305175
この例では、スケールとして読み出した値 x AD 変換値 の下記の値が AIN に印加されている電圧値となります。
0.000305175 x (-13597) = - 4.1495 [V]
\\