ユーザ用ツール

サイト用ツール


ja-jp_products:mpaino_x

MPAINOアナログ入力Xモジュール

MPAINO Seriesは、注文時にI/Oモジュール構成へアナログ入力Xモジュールを追加できます。

各チャンネルのDIPスイッチで、DC 0~5V、DC 0~10V、DC 0(4)~20mA、NTCサーミスタ温度センサ入力を選択できます。

アナログ入力モジュールとPT100Ω温度センサ入力モジュールの合計チャンネル数は20を超えることはできません。

DC 0~5V、DC 0~10V、DC 0~20mAには、analogRead()analogReadAvg()IanalogRead()を使用します。

DC 4~20mAには、analogRead2()analogRead2Avg()IanalogRead2()を使用します。

製品仕様書

Xアナログ入力モジュールの前面

項目 内容
製品区分 MPAINOアナログ入力オプションモジュール
オプションコード X, X2, X3, X4, X5
モジュール当たりの入力 4チャンネル — CH0、CH1、CH2、CH3
入力方式 DC 0~5V / 1~5V / 0~10V / 0~20mA / 4~20mA / NTC温度センサ
方式選択 チャンネル別DIPスイッチ設定
A/D変換IC ADS1118
有効分解能 15bit — 電圧・電流定格入力範囲の生値0~32767
NTCセンサ仕様 25°Cで10kΩ、B値(β)3950K
NTC戻り値の単位 ntcRead():温度×10の整数 / ntcReadf():°Cの浮動小数点値
NTC表示分解能 0.1°C — 測定精度の保証値とは異なります。
構成上限 Xモジュール最大5台、計20点。XとFを併用する場合も入力合計は最大20点。
使用環境 MPAINO用ILOGICSボードパッケージの内蔵コマンドを使用

分解能と精度は異なります。15bitは値を区別する段階数を示します。 実際の測定誤差は、センサ、信号源、配線、ノイズなどの影響を受けます。 このページの換算式は定格範囲に対する計算式であり、校正結果や絶縁・過電圧保護等級を意味するものではありません。

注文構成とモジュール数

オプション Xモジュール数 アナログ入力数 プログラムで使用する番号 ※
X 1個 4点 0~3
X2 2個 8点 0~7
X3 3個 12点 0~11
X4 4個 16点 0~15
X5 5個 20点 0~19

※ 表のチャンネル番号は、アナログ入力オプションをXモジュールのみで構成した場合です。 F(PT100入力)を混在させた製品では、出荷構成のモジュール順序とチャンネル表を確認してください。

  • 注文時に使用する信号の種類と必要な入力点数を確認してください。4チャンネルは1つの測定値を4回読む意味ではなく、異なる入力4点を意味します。
  • Xは入力モジュールです。電圧・電流を出力するにはYモジュール、PT100センサを読み取るにはFモジュールが必要です。
  • 選択したモジュールを組み立てて出荷します。ユーザーがモジュールを追加・取り外しする方式ではありません。
  • 他のオプションと組み合わせる場合は、注文製品でその構成が可能か確認してください。

MPAINO製品群とオプション構成を比較 →

入力方式とDIPスイッチ

以下の図は、4種類の入力モードごとにCH0~CH3を同じ設定にした例です。 左がON、右がOFFで、黄色はON位置を示します。 実際には、使用するチャンネルのDIPスイッチだけを該当する入力モードに設定します。

Xモジュール4台の電圧・電流・NTCモード別DIP設定とCH0拡大ガイド

センサ出力に合わせてチャンネル別に設定してください

各チャンネルには10V20mANTCGNDの設定があります。 入力方式に対応する組み合わせを選択し、GNDスイッチは常にONにしてください。 GNDは出荷時にONです。

接続する信号 10V 20mA NTC GND 読み取った値の解釈
DC 0~5V OFF OFF OFF ON 生値0~32767 → 0~5V
DC 1~5V OFF OFF OFF ON 0~5V方式で読み、1Vオフセットをプログラムで処理
DC 0~10V ON OFF OFF ON 生値0~32767 → 0~10V
DC 0~20mA OFF ON OFF ON 生値0~32767 → 0~20mA
DC 4~20mA OFF ON OFF ON analogRead2()で4mAオフセットを処理可能
NTC 10kΩ / β3950 OFF OFF ON ON ntcRead()またはntcReadf()で温度を読む

設定時の注意事項

  1. 製品と接続機器の電源を切り、入力信号を除去した状態で作業してください。
  2. 最初に、該当チャンネルのスイッチ群であることを確認してください。CH0を使用する際、CH1のスイッチを変更してもCH0の設定は変わりません。
  3. スイッチ本体に表示されたON方向を基準に設定してください。写真の左右方向だけで判断しないでください。
  4. 10V20mANTCを任意に同時ONにしないでください。上表の組み合わせを使用してください。
  5. 配線と設定を再確認してから電源を供給してください。

プログラムはDIPスイッチの位置を自動検出しません。 analogReadInit()も入力方式を変更する関数ではありません。 ハードウェア設定とプログラムの換算範囲を一致させる必要があります。

チャンネルごとに異なる入力を使用できますか?

入力方式をチャンネル別のスイッチで選択するため、CH0を0~10V、CH1を4~20mA、CH2をNTCなどに設定できます。 プログラムでも、各チャンネルに合った読み取り関数と換算式を使用してください。 NTCチャンネルに電圧・電流信号を印加しないでください。

信号別の接続方法

入力端子の確認

モジュール表示のチャンネル 入力端子 最初のXモジュールのプログラム番号
CH0 CH0 + / CH0 − 0
CH1 CH1 + / CH1 − 1
CH2 CH2 + / CH2 − 2
CH3 CH3 + / CH3 − 3

同じチャンネルの+と−を1組で使用してください。 以下の図は接続関係を説明する概念図であり、製品外形や端子の実際の位置・間隔を示す図面ではありません。 実際の製品のチャンネル名と極性を先に確認してください。

電圧出力の信号プラスとリターン、または受動NTCセンサをXモジュールの同じチャンネルのプラス・マイナスに接続する概念図

DC 0~5V / 1~5V / 0~10V

  1. センサのアナログ電圧出力+を使用するチャンネルの+に接続します。
  2. センサの信号リターン(−)を同じチャンネルのに接続します。
  3. センサ電源はメーカーの配線図に従って別途接続します。センサ電源+と信号出力+を混同しないでください。
  4. DIP設定表で電圧範囲を選択します。1~5Vセンサは0~5Vと同じスイッチ設定です。

例えば、測定範囲0~30000 L/min、出力0~10Vの流量計では、CH0を0~10Vに設定し、生値0~32767を0~30000 L/minに換算します。 以下の実行例でも同じ条件を使用します。

DC 0~20mA / 4~20mA

該当チャンネルの20mAGNDをONに設定します。 電流信号は、センサメーカーの配線図に従い、同じチャンネルの+/−を通って電流が流れるように接続する必要があります。

2線式ループ給電センサと3・4線式センサでは配線が異なります。まずセンサの給電方式、電流出力の極性、出力リターンを確認してください。 信号源の仕様が不明な状態で、電圧入力の例と同じ配線にしたり、チャンネル+/−に電源電圧を直接印加したりしないでください。 配線図がない場合は、センサの型式と資料を確認してから接続してください。

0~20mAと4~20mAのハードウェアスイッチ設定は同じです。 違いは、プログラムで4mAを測定範囲の開始値として扱うかどうかです。 analogRead2()はセンサに電流を供給したり、DIP設定を変更したりするものではありません。

NTC温度センサ

  1. NTC 10kΩ(25°C)、β3950の規格であることを確認します。抵抗値が同じでもB値が異なると温度換算が合いません。
  2. 給電しない受動NTCセンサの2本の線を、同じチャンネルの+/−に接続します。
  3. 該当チャンネルのNTCGNDをONに設定します。
  4. ntcReadf(ch)で°C値を、またはntcRead(ch)で温度×10の整数を読み取ります。

PT100、熱電対、電圧出力型温度トランスミッタは、このNTC設定の対象ではありません。 電圧・電流出力型の温度トランスミッタは、出力信号に合う電圧・電流モードで読み取り、センサの温度範囲に換算してください。

モジュール表示とプログラムチャンネル番号

各Xモジュールの前面にはCH0~CH3が繰り返し表示されています。 プログラムでは、モジュールごとに番号が連続します。

Xモジュール順序 ※ 前面CH0 前面CH1 前面CH2 前面CH3
1番目 0 1 2 3
2番目 4 5 6 7
3番目 8 9 10 11
4番目 12 13 14 15
5番目 16 17 18 19

※ Xモジュールのみで構成した場合の論理チャンネル表です。 モジュール順序は出荷構成を基準に確認してください。

例えば、X2製品の2台目のXモジュールのCH1を読むにはanalogRead(5)を使用します。 MPAINOではモジュール論理番号を使用します。このページの0をArduinoのA0に置き換えないでください。デジタル入力0番とアナログ入力0番も、異なる機能の番号です。

最大番号が19でも、すべての製品に20チャンネルが搭載されているわけではありません。 実際に搭載されているチャンネルだけを読み取ってください。 誤った番号や未搭載チャンネルの戻り値を、正常なセンサ値として使用してはいけません。

初めて測定する手順

  1. センサの確認:電圧・電流・NTCの信号種類と範囲、センサ電源、配線図を確認します。
  2. チャンネルの選択:最初は、最初のXモジュールのCH0だけを使用します。
  3. 電源を切って設定:上のDIP表に合わせてCH0を設定し、極性を確認して配線します。
  4. 開発環境の選択:Arduino IDEで、実際のMPAINOモデルに合うILOGICSボードとダウンロードポートを選択します。Analog Input Moduleメニューがあるボードパッケージでは、出荷構成に合うX / X2 / X3 / X4 / X5を選択します。他のオプションも実際の構成に合わせます。
  5. 生値の確認:以下の例1を書き込み、シリアルモニタを115200 baudで開きます。
  6. 入力変化の確認:定格範囲内の既知の信号を入力し、値が予想した方向に変化することを確認します。
  7. 物理量への換算:電圧・電流測定を確認してから、流量・圧力などセンサの測定範囲に換算します。
  8. チャンネルの追加:1チャンネルが正常に動作することを確認してから、残りを1チャンネルずつ追加します。

以下の各例は、それぞれ独立したArduinoスケッチです。 一度に1つの例だけを使用してください。 現在のMPAINO内蔵関数を基準としており、別途ILIB.hをインクルードしたり、IADCオブジェクトを直接作成したりする必要はありません。 関数が宣言されていないというエラーが出た場合は、選択したボードとインストールしたILOGICSボードパッケージを確認してください。

例1・まず生値を確認

最初のXモジュールのCH0に接続した電圧または電流信号を読み取ります。 入力方式は先にDIPスイッチで設定する必要があります。

const uint8_t inputChannel = 0;
 
void setup() {
  Serial.begin(115200);
  analogReadInit(IANALOG_SPS_64);
}
 
void loop() {
  const int raw = analogRead(inputChannel);
  Serial.print(F("CH0 raw = "));
  Serial.println(raw);
  delay(200);
}
設定入力範囲 開始入力 中間入力 終端入力
0~5V 0V → 約0 2.5V → 約16384 5V → 約32767
0~10V 0V → 約0 5V → 約16384 10V → 約32767
0~20mA 0mA → 約0 10mA → 約16384 20mA → 約32767
4~20mAを生値で読む場合 4mA → 約6553 12mA → 約19660 20mA → 約32767

表は理想的な換算基準であり、許容誤差の判定表ではありません。 4mAで生値が0ではないことは正常です。 4mAを0に合わせる場合は、例3を参照してください。 NTCには、この線形換算表ではなく専用の温度関数を使用します。

例2・0~10V流量計を読む

条件:最初のXモジュールのCH0、10V=ON / 20mA=OFF / NTC=OFF / GND=ON、センサ出力0~10V、測定範囲0~30000 L/minです。 別のセンサでは、fullScaleFlowをそのセンサの実際の範囲に合わせてください。

const uint8_t inputChannel = 0;
const float fullScaleFlow = 30000.0F;
 
void setup() {
  Serial.begin(115200);
  analogReadInit(IANALOG_SPS_64);
}
 
void loop() {
  const int raw = analogRead(inputChannel);
  const float voltage = raw * (10.0F / 32767.0F);
  const float flow = raw * (fullScaleFlow / 32767.0F);
 
  Serial.print(F("Voltage = "));
  Serial.print(voltage, 3);
  Serial.print(F(" V, Flow = "));
  Serial.print(flow, 1);
  Serial.println(F(" L/min"));
  delay(200);
}

5V入力時の計算値は約15000 L/minです。 小数点以下の表示桁数を増やしても、センサやモジュールの精度は向上しません。

他の信号範囲の換算式

目的 生値rawによる計算
0~5V電圧 raw * (5.0F / 32767.0F)
0~10V電圧 raw * (10.0F / 32767.0F)
0~20mA電流 raw * (20.0F / 32767.0F)
0から始まるセンサ測定量 raw * (sensorMaximum / 32767.0F)
1~5Vセンサの範囲比率 まずvoltage = raw * (5.0F / 32767.0F)、次にratio = (voltage - 1.0F) / 4.0F

1~5Vセンサの物理量は最小値 + ratio * (最大値 - 最小値)で換算します。 ratioが0未満または1を超える場合は範囲外のため、センサ仕様に従って別途処理してください。 無条件に0~1に制限して表示すると、異常状態が隠れる場合があります。 analogRead2()は4~20mA用です。1~5V信号には使用しないでください。

計算中の16bit整数オーバーフローを避けるため、例のように浮動小数点定数を使用してください。 例えば、raw * 30000を先に整数で計算してから割る方法は避けてください。

例3・4~20mA圧力計とエラー処理

条件:最初のXモジュールのCH0、10V=OFF / 20mA=ON / NTC=OFF / GND=ON、センサ出力4~20mA、測定範囲0~10barです。 センサの実際の圧力範囲が異なる場合は、fullScalePressureを変更してください。

analogRead2()は4mAのオフセットを処理し、測定範囲を0~32767に換算します。 エラー値65535を格納できるよう、uint16_tで受け取ってください。AVRの通常のintでは受け取らないでください。

const uint8_t inputChannel = 0;
const float fullScalePressure = 10.0F;
 
void setup() {
  Serial.begin(115200);
  analogReadInit(IANALOG_SPS_64);
}
 
void loop() {
  const uint16_t value = analogRead2(inputChannel);
 
  if (value == ANALOG_READ2_ERROR) {
    Serial.println(F("INPUT ERROR: check sensor, supply and wiring"));
    // この分岐では測定値を制御用の正常値として使用しないでください。
  } else {
    const float pressure = value * (fullScalePressure / 32767.0F);
    Serial.print(F("Pressure = "));
    Serial.print(pressure, 2);
    Serial.println(F(" bar"));
  }
  delay(200);
}

どの場合にエラーになりますか?

現在のMPAINO内蔵関数は、以下の基準で処理します。 これはソフトウェア上の判定基準であり、センサの診断規格に代わるものではありません。

analogRead基準の生値 analogRead2結果 意味
5898未満 ANALOG_READ2_ERROR = 65535 約3.6mA未満に相当する低入力エラー
5898~6554 0 4mA付近以下の許容範囲を開始値として処理
6554超~32767 0~32767に換算 4~20mA測定範囲の比率

そのため、4mAを少し下回っても必ずエラーになるわけではありません。 エラー時は断線だけでなく、センサ電源、極性、モード設定、チャンネル番号も確認してください。 正常範囲の戻り値だけでは、配線が正常であることや過電流がないことは保証されません。 安全制御には、設備に適した別途の診断と安全対策が必要です。

平均関数analogRead2Avg()はエラーを−1で返すため、int32_tで受け取り、ANALOG_READ2_AVG_ERRORと比較します。 通常の読み取りのエラー値65535と混同しないでください。

例4・NTC温度を読む

条件:最初のXモジュールのCH0にNTC 10kΩ(25°C)、β3950センサを接続し、10V=OFF / 20mA=OFF / NTC=ON / GND=ONに設定します。

const uint8_t temperatureChannel = 0;
 
void setup() {
  Serial.begin(115200);
  analogReadInit(IANALOG_SPS_64);
}
 
void loop() {
  const float temperature = ntcReadf(temperatureChannel);
  Serial.print(F("Temperature = "));
  Serial.print(temperature, 1);
  Serial.println(F(" C"));
  delay(500);
}

整数で扱うには、int temperature10 = ntcRead(0);を使用してください。 戻り値253は25.3°C、-55は−5.5°Cです。 ntcReadf()は同じ結果を°Cの浮動小数点数に変換するもので、より高い測定分解能を提供するものではありません。

現在の温度換算表は、値を−40.0~120.0°Cに制限します。 これは、接続するセンサや完成品の使用温度保証範囲ではありません。 断線・短絡専用のエラーコードは返しません。端点値が繰り返される場合は実際の温度と断定せず、センサと配線を確認してください。 誤ったチャンネル番号で返される0も正常な0°Cと区別できないため、実際に搭載されたチャンネルを正確に指定する必要があります。

値の変動と測定速度

移動平均で表示を安定化

analogReadAvg(0, 8)はCH0の新しい値を1回読み取り、直近最大8回分の値を平均します。 1回の呼び出しで8回連続測定する関数ではありません。繰り返し呼び出すことで平均履歴が蓄積され、開始時は実際に集まった値だけを平均します。

void setup() {
  Serial.begin(115200);
  analogReadInit(IANALOG_SPS_64);
}
 
void loop() {
  const int32_t average = analogReadAvg(0, 8);
  Serial.println(average);
  delay(100);
}

平均個数の最大値は20です。 0は平均しない新しい値を返し、20を超える指定は20に制限されます。 平均を増やすと表示が滑らかになる場合がありますが、変化への応答も遅くなります。 この例の呼び出し間隔は約100ms以上のため、8個の値が十分に蓄積されると、約0.8秒間にわたる測定が含まれます。 最初に配線と信号源を確認し、必要な分だけ平均処理を行ってください。

4~20mAにはanalogRead2Avg()を使用し、最初にエラー−1を確認してください。 平均フィルタは異常な配線を正常にする機能ではありません。メモリ確保に失敗すると、新しい生値が代わりに返される場合があります。

analogReadInitは速度設定

設定定数 要求する読み取り目標SPS
IANALOG_SPS_8 / IANALOG_SPS_16 / IANALOG_SPS_32 8 / 16 / 32
IANALOG_SPS_64 64 — 初期使用例の基準
IANALOG_SPS_128 / IANALOG_SPS_250 / IANALOG_SPS_475 128 / 250 / 475

analogReadInit()を省略した場合、標準の目標値は64 SPSです。 設定はMPAINOのアナログ入力モジュールに共通で適用されます。 SPSは1秒あたりのサンプル数を意味し、すべてのチャンネルが同時にその速度で更新されるという意味ではありません。

内部では、前のチャンネルの変換値が混入しないよう、1回の読み取りで2回変換します。 実際の速度には、変換待ち、SPI通信、チャンネル数、シリアル出力、delay()などが影響します。 特に475設定は、実際に毎秒475回読み取れることを保証しません。 内部最大860 SPSで2回変換するため、変換時間だけでも約430回/秒以下となり、他の処理時間がさらに加わります。

複数チャンネルを順番に読み取る場合の全体更新時間は、各読み取り時間の合計です。 高速設定を使用する前に、実際の入力条件で必要な応答時間と値の変動を確認してください。

症状別の確認事項

症状 最初に確認する項目
値が0または非常に小さい センサ電源、信号の有無、+/−極性、同じチャンネルの対か、DIPモード、実装チャンネルかを確認
値が最大付近で固定される センサ出力範囲と5V/10V設定の一致を確認。飽和値を正常な最大測定量と決めつけない
4mAで生値が約6553 正常な0~20mA基準の生値。4mAオフセット処理が必要ならanalogRead2()を使用
4~20mA測定で65535が返る 低入力エラーか確認。圧力・流量換算前にエラー分岐を処理
平均コマンドで−1が返る analogRead2Avg()のエラー値か確認。正常な生値と混ぜて平均しない
2番目のモジュール値が予想と異なる 前面CH0~CH3とプログラム4~7を区別。出荷モジュール順序を確認
値が変動し続ける センサ電源と信号リターン、端子締結、周囲のノイズ源を確認後、SPSと移動平均を調整
NTC温度が大きく異なる 10kΩ@25°C / β3950仕様、NTC・GNDスイッチ、チャンネル番号を確認
NTCが−40.0°Cまたは120.0°C付近で固定される 換算表の端値の可能性があるため、センサ断線・短絡と接続を確認。端値だけで故障種類を判定しない
コマンドのコンパイルエラー 実際のMPAINOボード選択とILOGICSボードパッケージのインストールを確認。旧ILIB例と内蔵コマンドを無造作に混在させない

使用前の最終確認

  • センサ出力範囲と該当チャンネルのDIP設定は一致していますか?
  • GNDスイッチはONで、入力+/−は同じチャンネルに接続されていますか?
  • センサ電源端子と信号入力端子を混同していませんか?
  • 実際に搭載されたモジュール順序とプログラムのチャンネル番号は一致していますか?
  • 4~20mAのエラー値を換算前に処理していますか?
  • NTCの端点値を正常温度や確定的な故障コードとして扱っていませんか?
  • 定格範囲内の既知の入力で、実際の測定と換算を確認しましたか?

入力範囲を超える信号を接続しないでください。 信号の給電方式、共通電位、絶縁の必要性が不明な場合は、接続前にセンサ資料と設備構成を確認してください。 このページの例は測定値を確認するためのもので、設備の安全インターロックを実装するものではありません。

関連コマンドと文書

目的 詳細説明
生値読み取り / 速度設定 analogRead · analogReadInit
移動平均 analogReadAvg · analogReadAvgf
4~20mA読み取り / 平均 analogRead2 · analogRead2Avg · analogRead2Avgf
4~20mA物理量換算 IanalogRead2 · IanalogRead2f
NTC温度の読み取り ntcRead · ntcReadf
製品構成 / 配線の基本 MPAINO Series · 配線ガイド

F PT100入力 · Yアナログ出力 · Kパルス出力

← MPAINO Seriesに戻る

ja-jp_products/mpaino_x.txt · 最終更新: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki