====== 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] \\