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()を使用します。
| 項目 | 内容 |
|---|---|
| 製品区分 | 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種類の入力モードごとにCH0~CH3を同じ設定にした例です。 左がON、右がOFFで、黄色はON位置を示します。 実際には、使用するチャンネルのDIPスイッチだけを該当する入力モードに設定します。
各チャンネルには10V、20mA、NTC、GNDの設定があります。 入力方式に対応する組み合わせを選択し、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()で温度を読む |
設定時の注意事項
10V、20mA、NTCを任意に同時ONにしないでください。上表の組み合わせを使用してください。
プログラムは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組で使用してください。 以下の図は接続関係を説明する概念図であり、製品外形や端子の実際の位置・間隔を示す図面ではありません。 実際の製品のチャンネル名と極性を先に確認してください。
+に接続します。−に接続します。例えば、測定範囲0~30000 L/min、出力0~10Vの流量計では、CH0を0~10Vに設定し、生値0~32767を0~30000 L/minに換算します。 以下の実行例でも同じ条件を使用します。
該当チャンネルの20mAとGNDをONに設定します。 電流信号は、センサメーカーの配線図に従い、同じチャンネルの+/−を通って電流が流れるように接続する必要があります。
2線式ループ給電センサと3・4線式センサでは配線が異なります。まずセンサの給電方式、電流出力の極性、出力リターンを確認してください。 信号源の仕様が不明な状態で、電圧入力の例と同じ配線にしたり、チャンネル+/−に電源電圧を直接印加したりしないでください。 配線図がない場合は、センサの型式と資料を確認してから接続してください。
0~20mAと4~20mAのハードウェアスイッチ設定は同じです。 違いは、プログラムで4mAを測定範囲の開始値として扱うかどうかです。 analogRead2()はセンサに電流を供給したり、DIP設定を変更したりするものではありません。
NTCとGNDをONに設定します。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チャンネルが搭載されているわけではありません。 実際に搭載されているチャンネルだけを読み取ってください。 誤った番号や未搭載チャンネルの戻り値を、正常なセンサ値として使用してはいけません。
Analog Input Moduleメニューがあるボードパッケージでは、出荷構成に合うX / X2 / X3 / X4 / X5を選択します。他のオプションも実際の構成に合わせます。
以下の各例は、それぞれ独立したArduinoスケッチです。 一度に1つの例だけを使用してください。 現在のMPAINO内蔵関数を基準としており、別途ILIB.hをインクルードしたり、IADCオブジェクトを直接作成したりする必要はありません。 関数が宣言されていないというエラーが出た場合は、選択したボードとインストールしたILOGICSボードパッケージを確認してください。
最初の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には、この線形換算表ではなく専用の温度関数を使用します。
条件:最初の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を先に整数で計算してから割る方法は避けてください。
条件:最初の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と混同しないでください。
条件:最初の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を確認してください。 平均フィルタは異常な配線を正常にする機能ではありません。メモリ確保に失敗すると、新しい生値が代わりに返される場合があります。
| 設定定数 | 要求する読み取り目標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例と内蔵コマンドを無造作に混在させない |
入力範囲を超える信号を接続しないでください。 信号の給電方式、共通電位、絶縁の必要性が不明な場合は、接続前にセンサ資料と設備構成を確認してください。 このページの例は測定値を確認するためのもので、設備の安全インターロックを実装するものではありません。
| 目的 | 詳細説明 |
|---|---|
| 生値読み取り / 速度設定 | analogRead · analogReadInit |
| 移動平均 | analogReadAvg · analogReadAvgf |
| 4~20mA読み取り / 平均 | analogRead2 · analogRead2Avg · analogRead2Avgf |
| 4~20mA物理量換算 | IanalogRead2 · IanalogRead2f |
| NTC温度の読み取り | ntcRead · ntcReadf |
| 製品構成 / 配線の基本 | MPAINO Series · 配線ガイド |