1. ホーム
  2. python

pythonは元のAD7606Bの補数データ配列を元のコードデータ配列に変換して処理します。

2022-02-21 09:46:43
<パス

pythonでAD7606Bの生補数データ配列を生コードデータ配列に変換し、電圧値として処理する。


まず、補完コードと元のコードとの変換がどのように行われるかを理解する必要があり、最初に

  • 正の数の補数は、元のコードと等しい
  • 負の数の補数は、符号ビットを変更せず、他のビットを反転させ、1を加えたものに等しい。
<テーブル 10の数 オリジナルコード 補完コード +15 0b 0000 1111 0b 0000 1111 -15 0b 1000 0000 0b 1111 0001

つまり、16ビットのAD補数値が与えられたら、まず、最初のビットが1かどうかで、そのAD値が正か負かを判断することができるのです

  • 符号ビットが0(正)に等しいので、元のコード=補数
  • 符号ビットが1(負数)に等しい場合、補数符号ビットは変更せず、残りのビットを反転させ、全体を1加算したものが補数の元符号の絶対値となる、この時、計算した元符号も負符号に加算して最終的なAD値となることに注意すること

によると AD7606データシート を使用することができます。

AD7606B のパラレル・データは 16 ビットで、すなわちデータ範囲は 0b 1000 0000 0000 ~ 0b 0111 1111 1111 1111 ~ であることがわかります。 <スパン ± 5 V \Ȃ 5V

<スパン <スパン <スパン ± 5

V
の範囲を例として挙げています。

import numpy as np
int_number_array = np.array([0xFFFF,0x1FFF,0X0FEE,0x15AC,0x159E,0x3C55,0x0001,0x0010])# array with 8 data, representing the complement data read by the eight channels of the AD7606B
index = np.argwhere(int_number_array & 0b1000000000000000 == 0b1000000000000000)# find the array of sign bits for 1 (negative), return the index array
int_number_array[index] = -((int_number_array[index] ^ 0b111111111111111111) + 1)# to complement the code into the original code (by bit iso or equivalent to inverse by bit) positive numbers remain unchanged, negative numbers to inverse plus 1, and finally add the negative sign
number_array = int_number_array / 32768 * 5 # the original hexadecimal code data into voltage values
print(number_array)


最終的な計算結果は

[-1.52587891e-04 1.24984741e-+00 6.22253418e-01 8.46557617e-01 8.44421387e-01 2.35671997e-+00 1.52587891e-04 2.44140625e-03] となる。

は各チャンネルのある瞬間の電圧値を表し、AD サンプルを一定時間連続処理すると、8 チャンネル分の波形をプロットすることができます。