2

仲間の SO ユーザー、

ADC から値を読み取っている抵抗湿度センサーを調整しようとしています。ADC は 8 ビット値を出力します。私は 5V の Vref 値を使用しています。

キャリブレーションの最初のステップは、数値を 255 で割り、Vref 値を掛けることです。したがって、校正値 = (出力 / 255) * Vref.

さて、VHDL で、2 つの数値を除算する VHDL コードに出くわしました。私が持っているものは、2 つの符号なし数値を除算するので、問題にはなりません。ここです。 VHDL 除算 2 つの符号なし数値

ここで、VHDL ファイルに 8 ビットの ADC 値 (湿度) があり、max_val (11111111 = 255) と Vref (00000101 = 5) の 2 つの定数を両方とも符号なしとして定義しました。最初に unsigned(umidity) を使用して湿度を unsigned に変換し、次にこの値と max_num 値を除算関数に渡します。その結果、Vref を掛けています。

さて、私の質問は次のとおりです。

  1. これは良いアプローチですか?すなわち; 割り算と掛け算の方法です。
  2. unsigned 値を std_logic_vector に変換するにはどうすればよいですか?

敬具。

4

1 に答える 1

1
  1. 256で割るべきだと思いますか?または、255を使用すると、結果はほぼ同じになると思います(最大距離は255/256と255/255の間であることに注意してください:= 0.00390625)。結果は固定小数点数になります。5を掛ける:右にシフト2 = 4を掛けてから、この数値(A * 5 = A * 4 + A)を足すと、コードは次のようになります。

    A_Multiply_4 <= A& "00";
    A_Multiply_5 <= A_Multiply_4 + A;

  2. unsignedからstd_logic_vectorに変換するには(std_logic_1164に存在することを覚えています):

    slv_array <= std_logic_vector(unsigned_number);

255で除算したい場合は、数値を256で除算し、シフト後に少し数値を追加する必要があると思います。

1/255 = 1/256 + 1 / x

x=2の場合は何かになります。シフターが最良の方法です。

私は1/3で試してみましたが、この方法を快適にする必要があります。

P / sx = 2 ^ 16で、2つのケースの差は5.9838388480392156862745098039216e-8です。しかし、私はあなたが望む数がポイントの後に8ビット以上あるとは思いません。

于 2012-10-11T07:02:39.667 に答える