シングルチップマイクロコンピューター計量システムの設計

1.センサーの紹介

    計量システムは、小さな電子はかりから大規模なはかりまで、産業の日常生活で広く使用されています。ほとんどのセンサーは抵抗ひずみ圧力センサーです。ホイヘンスブリッジは通常、弾性体に取り付けられた4つの抵抗ひずみゲージで構成されています。圧力がかかると、ひずみゲージが弾性体とともに変形し、抵抗が変化し、ブリッジが不平衡電圧を生成します。一般に、圧力はブリッジの不平衡電圧に直線的に比例します。

       センサーの出力電圧は、一般的にmVレベルで比較的小さいです。励起電圧とセンサー感度に依存します。一般的な感度は、1mV / V、2mV / V、および3mV / Vです。2mV / Vセンサーの場合、励起電圧が5Vのとき、フルスケールでの出力電圧は2mV / V * 5V = 10mVです。

2.ハードウェア設計

    センサー信号は比較的小さく、AD収集の前に増幅する必要があります。現在、アンプを内蔵した計量システム専用のADチップが多数あり、ハードウェア回路の設計が大幅に簡素化されています。TIのADS1231、Chipsea TechnologyのCS1231、HaixinTechnologyのHX710など。これらのチップはすべて24ビットADであり、128倍の増幅器が統合されています(一部のチップは拡大するように設定できます)。この記事では、紹介する例としてHX710を取り上げます。回路図は次のとおりです。

    マニュアルを確認すると、5V電源の場合のチップのパフォーマンスが3V電源の場合よりも優れていることがわかります。ただし、HX710のAVDDはDVDDを超えることはできないことに注意してください。現在、ほとんどのシングルチップマイクロコンピュータは3.3Vで動作するため、ここでは3.3Vを使用します。ADS1231にはこの制限はありません。つまり、DVDDは3.3V、AVDDは5Vにすることができます。

    チップのコモンモード入力電圧範囲はAGND + 0.9V〜AVDD-1.3Vであり、他のアプリケーションでは注意が必要です。

    チップの差動入力電圧範囲は±0.5VREF /倍率(128)≈±12.89mVです。3.3Vの励起電圧と2mV / Vの感度を持つセンサーの場合、最大出力電圧は±6.6mVであり、これはチップの必要な範囲内です。2つの値の差はほぼ2倍になり、約1ビットの解像度が失われます。励起電圧が大きいほど、センサーの出力電圧がADの入力範囲に近くなり、ADの分解能をより効果的に使用できます。ただし、電力システム全体の設計も考慮してください。

    さらに、センサーの励起電圧は、チップのVREFと可能な限り同じ電源を使用する必要があります。これにより、コモンモードの干渉を抑えることができます。

3.ソフトウェア設計

    チップとマイクロコントローラ間のインターフェースはシンプルで、データ出力ピンDOUTとクロックピンSCKがあります。

    AD変換が完了すると、DOUTがハイからローに変化します。このとき、SCKピンは25〜27クロックパルスを入力し、各クロックの立ち上がりエッジでDOUTからデータを読み取ります。タイミング図は以下のとおりです。他のチップの読み出しタイミングは基本的にこのチップと同じです。

プログラミング

int32_t ad_val=0;//AD值

void Get_HX710()
{
    HX710_SCLK_CLR;
    if(READ_HX710_DOUT_PIN)return ;

    for(i=0;i<24;i++)
    {
         HX710_SCLK_SET;
         ad_val=ad_val<<1;
         HX710_SCLK_CLR;
         if(READ_HX710_DOUT_PIN)
           ad_val++;
    }
    HX710_SCLK_SET;
    if(ad_val&0x800000)ad_val|=0xFF000000;
    HX710_SCLK_CLR;
}

センサーキャリブレーション

    上記の読み取り値はADの元の値であり、センサーは重量に変換する前に校正する必要があります。一般に、センサーのキャリブレーションには、ゼロポイントとフルレンジの少なくとも2つのポイントが必要です(もちろん、2つのポイントが直線を決定するため、任意の2つのポイントも可能です)。需要の高い場合には、セグメント化されたキャリブレーション、または異なる温度範囲でさえ、複数のポイントが必要になります。この記事では、例として2点キャリブレーションを取り上げます。校正データには、ゼロ点校正値、ゼロ点AD値、フルスケール校正値、フルスケールAD値が含まれます。

    計量値の計算は比較的簡単です。つまり、2つの校正ポイントを通る直線を決定し、曲線上のAD値に対応する重量を見つけます。手順は次のとおりです。

int32_t CaliADCValue[2];//校准的AD值
int32_t CaliSensorValue[2];//校准的传感器值
int32_t ZeroValue;//去皮AD值

void CalcWeight(int32_t AD_Value)
{
       int32_t Sensor_Value = 0;
       int32_t TempCaliADCValue[2];//校准AD值      

       TempCaliADCValue[0] = CaliADCValue[0] + ZeroValue;
       TempCaliADCValue[1] = CaliADCValue[1] + ZeroValue;//去皮
      

       if(AD_Value < TempCaliADCValue[0])//小于0点值
       {
              Sensor_Value = 0;
       }
       else if(AD_Value > TempCaliADCValue[1])//大于最大校准值
       {
              Sensor_Value = CaliSensorValue[1] + (float)(AD_Value - TempCaliADCValue[1])/(float)(TempCaliADCValue[1] - TempCaliADCValue[0]) * (float)(CaliSensorValue[1] - CaliSensorValue[0]);
       }
       else//在校准范围内
       {
              Sensor_Value = CaliSensorValue[0] + (float)(AD_Value - TempCaliADCValue[0])/(float)(TempCaliADCValue[1] - TempCaliADCValue[0]) * (float)(CaliSensorValue[1] - CaliSensorValue[0]);
       }
}

    計量システムの重要な機能は風袋です。上記のプログラムには風袋の機能が含まれています。風袋は、風袋のAD値を元の校正済みAD値に追加し、それを新しい校正済みAD値として計算することです。

    AD風袋値=現在のAD値-ゼロ点校正AD値。

ZeroValue = ad_val - CaliADCValue[0];

 

この記事で説明しているのは、一般的な計量システムの設計スキームです。需要が高い場合には、AC励起などの方法を使用して、センサーのクリープを補正する必要があります。

 

公式アカウント「EmbeddedTechnologyDevelopment」に注目してください。コミュニケーションのバックグラウンドで私にメッセージを残すことができます。この公式アカウントがあなたに役立つと思うなら、他の人にもそれを推薦することを歓迎します。

おすすめ

転載: blog.csdn.net/zhang062061/article/details/113061057