Conception d'un système de pesage par micro-ordinateur à puce unique

1. Présentation du capteur

    Les systèmes de pesage sont largement utilisés dans la vie industrielle quotidienne, des petites balances électroniques aux grandes balances. La plupart des capteurs sont des capteurs de pression de déformation à résistance. Le pont Huygens est généralement composé de quatre jauges de contrainte à résistance, qui sont installées sur un corps élastique. Lorsqu'il y a une pression, la jauge de contrainte se déforme avec le corps élastique, la résistance change et le pont génère une tension déséquilibrée. Généralement, la pression est linéairement proportionnelle à la tension déséquilibrée du pont.

       La tension de sortie du capteur est généralement relativement faible, au niveau mV. Cela dépend de la tension d'excitation et de la sensibilité du capteur. Les sensibilités courantes sont 1 mV / V, 2 mV / V et 3 mV / V. Pour un capteur 2mV / V, lorsque la tension d'excitation est de 5V, la tension de sortie à pleine échelle est de 2mV / V * 5V = 10mV.

2. Conception matérielle

    Le signal du capteur est relativement petit et doit être amplifié avant la collecte AD. Actuellement, il existe de nombreuses puces AD dédiées aux systèmes de pesage avec amplificateurs intégrés, ce qui simplifie grandement la conception des circuits matériels. Tels que l'ADS1231 de TI, le CS1231 de Chipsea Technology, le HX710 de Haixin Technology, etc. Ces puces sont toutes des AD 24 bits et un amplificateur 128 fois intégré (certaines puces peuvent être réglées pour grossir). Cet article prend HX710 comme exemple à présenter. Le schéma du circuit est le suivant:

    Consultez le manuel et vous verrez que les performances de la puce alimentée en 5V sont meilleures que celles en 3V. Cependant, il convient de noter que l'AVDD du HX710 ne peut pas être supérieur à celui du DVDD.À l'heure actuelle, la plupart des micro-ordinateurs monopuce sont alimentés par 3,3V, donc 3,3V est utilisé ici. L'ADS1231 n'a pas cette restriction, c'est-à-dire que DVDD peut être 3,3 V et AVDD peut être 5 V.

    La plage de tension d'entrée en mode commun de la puce va de AGND + 0,9 V à AVDD-1,3 V, ce qui doit être pris en compte dans d'autres applications.

    La plage de tension d'entrée différentielle de la puce est de ± 0,5 VREF / facteur de grossissement (128) ≈ ± 12,89 mV. Pour un capteur avec une tension d'excitation de 3,3 V et une sensibilité de 2 mV / V, la tension de sortie maximale est de ± 6,6 mV, ce qui est dans la plage requise de la puce. La différence entre les deux valeurs est presque doublée et environ 1 bit de résolution est perdu. Plus la tension d'excitation est élevée, plus la tension de sortie du capteur est proche de la plage d'entrée de AD, plus la résolution de AD peut être utilisée. Mais considérez également la conception de l'ensemble du système d'alimentation.

    De plus, la tension d'excitation du capteur doit utiliser autant que possible la même alimentation que le VREF de la puce, de sorte que certaines interférences de mode commun puissent être supprimées.

3. Conception de logiciels

    L'interface entre la puce et le microcontrôleur est simple, avec une broche de sortie de données DOUT et une broche d'horloge SCK.

    Lorsque la conversion AD est terminée, DOUT passe de haut en bas. À ce moment, la broche SCK entre 25 ~ 27 impulsions d'horloge, et le front montant de chaque horloge lit les données de DOUT. Le chronogramme est le suivant. La synchronisation des données de lecture des autres puces est fondamentalement la même que celle de cette puce.

La programmation

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;
}

Calibration du capteur

    La lecture ci-dessus est la valeur originale de AD, le capteur doit être calibré avant d'être converti en poids. Généralement, l'étalonnage du capteur nécessite au moins deux points: le point zéro et la plage complète (bien sûr, deux points quelconques sont également possibles, car deux points déterminent une ligne droite). Pour certaines occasions à forte demande, plusieurs points sont nécessaires pour un étalonnage segmenté, voire des plages de température différentes. Cet article prend comme exemple l'étalonnage en deux points. Les données d'étalonnage comprennent la valeur d'étalonnage du point zéro, la valeur AD du point zéro, la valeur d'étalonnage pleine échelle et la valeur AD pleine échelle.

    Le calcul de la valeur de pesée est relativement simple, c'est-à-dire pour déterminer une ligne droite passant par deux points d'étalonnage, et trouver le poids correspondant à la valeur AD sur la courbe. La procédure est la suivante:

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]);
       }
}

    Une fonction importante du système de pesage est la tare. Le programme ci-dessus inclut la fonction de tare, la tare consiste à ajouter la valeur AD de la tare à la valeur AD étalonnée d'origine et à la calculer comme la nouvelle valeur AD étalonnée.

    Valeur de tare AD = valeur AD actuelle-étalonnage du point zéro Valeur AD.

ZeroValue = ad_val - CaliADCValue[0];

 

Cet article décrit simplement un schéma de conception de système de pesage courant. Dans certaines situations de forte demande, il peut être nécessaire de compenser le fluage du capteur, en utilisant des méthodes telles que l'excitation CA.

 

Bienvenue à faire attention au compte officiel "Développement de la technologie intégrée", vous pouvez me laisser un message en arrière-plan pour la communication. Si vous pensez que ce compte officiel vous est utile, vous pouvez également le recommander à d'autres.

Je suppose que tu aimes

Origine blog.csdn.net/zhang062061/article/details/113061057
conseillé
Classement