Class CMCP3424
La classe CMCP3424 est dédiée au support par la librairie cpp2835 des composants MICROCHIP MCP3424 pour des mesures analogiques. Cette classe hérite de la classe CI2CDevice.
Cette classe a été testé via une carte ERE I2C-AI418S : https://www.ereshop.com/shop/index.php?main_page=product_info&cPath=143_179&products_id=805
Cette carte est équipée d'un ampli d'instrumentation qui limite le choix possible de gains à 1 et 2 pour des gammes de tension de 0-5.585V (Gain = 2) et 0-11.170V (Gain = 1). Cependant, selon la façon dont le signal est cablée, Elle permet également la mesure de boucles de courant en 0-20 mA, 4-20 mA (Gain = 2) et 0-40 mA (Gain = 1). Cette carte ne fonctionne qu'en unipolaire (ie : Elle ne mesure pas de tension négative). De ce fait le bit de signe est toujours à 0. La résolution réelle est soit de 11, 13, 15 ou 17 bits.
Si cette classe est utilisée avec une implémentation du MCP3424 sur une autre carte, il faudra vérifier le bon fonctionnement de cette classe. Dans ce cas on se limitera à des mesures de tension comprises entre -2.048 V et +2.048 V en gain 1, -1.024 et 1.024 V en gain de 2, etc...
Dans les 2 cas, à ce jour cette classe fonctionne exclusivement en mode one shot du MCP3424. (Vu la fréquence d'acquisition relativement faible du composant).
Attention : Si les lignes d'adresse A0 et A1 sont reliées à la masse, l'adresse sur le bus I2C sera 0x68 car les bit 2 à 7 sont réglées de manière interne à la valeur binaire 11010, hors avec A0 at A1 à 0, cela conduit à 1101000, ce qui correspond à l'adresse 0x68. Hors cette adresse est normalement attribuée aux composants horloge temps réel comme le DS3231. Si on utilise une horloge temps réel, il faudra prendre garde à attribuer une autre adresse que 0x68 au composant MCP3424.
Exemple d'utilisation
Cet extrait de code est un pseudo code, il regroupe dans un même flot des opérations normalement disséminées dans diverses parties d'un programme.
C2835Driver* m_pDriver;
CI2CBus* m_pI2CBus;
CMCP3424* m_pMCP3424;
// Initialisation des pointeurs vers les objets requis à un pointeur nul
m_pDriver = nullptr;
m_pI2CBus = nullptr;
m_pMCP3424 = nullptr;
// Création et vérificaation de création des objets requis
if((m_pDriver = new C2835Driver()) == nullptr) return false;
if((m_pI2CBus = new CI2CBus(m_pDriver)) == nullptr) return false;
if((m_pMCP3424 = new CMCP3424(m_pI2CBus, MCP3424_ADR_0X6E)) == nullptr) return false;
// Initialisation de la librairie et ouverture du bus I2C
if(!m_pDriver->Initialize()) return false;
if(!m_pI2CBus->Open(I2C_CLOCK_DIVIDER_65536)) false;
// Initialisation du MCP3424
m_pMCP3424->SetParameters(MCP3424_RESOLUTION_18, MCP3424_GAIN_1);
// Prise de mesure et récupération des valeurs mesurées
int32_t Raw;
if(!m_pMCP3424->Measure(MCP3424_CHANNEL_1, &Raw)) return false;
double V = m_pMCP3424->ToVoltage(Raw);
// En fin de programme, fermeture du bus I2C et arrêt de la librairie
if(m_pI2CBus != nullptr) m_pI2CBus->Close();
if(m_pDriver != nullptr) m_pDriver->Terminate();
// En fin de programme, effacement des objets utilisés
if(m_pMCP3424 != nullptr) delete m_pMCP3424;
if(m_pI2CBus != nullptr) delete m_pI2CBus;
if(m_pDriver != nullptr) delete m_pDriver;
Fonctions publiques
| CMCP3424(CI2CBus* pI2CBus, const MCP3424_ADR& Address) | |
| void | EnableAI418SMode(const bool& tf) |
| MCP3424_GAIN | Gain() |
| bool | IsAI418SModeEnabled() |
| bool | Measure(const MCP3424_CHANNEL& eChannel, int32_t* pRaw) |
| bool | MeasureCurrent(const MCP3424_CHANNEL& eChannel, double* pCurrent) |
| bool | MeasureVoltage(const MCP3424_CHANNEL& eChannel, double* pVoltage) |
| MCP3424_RESOLUTION | Resolution() |
| void | SetParameters(const MCP3424_RESOLUTION& eResolution, const MCP3424_GAIN& eGain) |
| double | ToCurrent(const int32_t& nRawValue) |
| double | ToVoltage(const int32_t& nRawValue) |
Description : Contructeur. Instancie un objet de la classe CMCP3424.
Paramètre : pI2CBus - type CI2CBus* - Pointeur vers l'objet CI2CBus auquel est connecté ce composant. L'objet pI2CBus aura été instancié et ouvert en amont de cet appel.
Paramètre : Address - type MCP3424_ADR& - Adresse du composant sur le bus I2C.
Description : Active ou désactive le mode de fonctionnement adapté à la carte ERE AI418S. Ce mode est actif par défaut. Lorsque ce mode est actif, les paramètres de llinéarisation en tension sont adaptés à cette carte.
Paramètre de sortie : tf - type bool& - Active le mode ERE AI418S si ce paramètre est placé à true. Sinon désactive ce mode.
Description : Retourne la valeur de gain réglée via la fonction SetParameters.
Valeur de retour : MCP3424_GAIN
Description : Retourne un booléen indiquant si le mode pour carte ERE AI418S est actif ou non.
Valeur de retour : Booléen indiquant si le mode pour carte ERE AI418S est actif ou non.
Description : Cette fonction déclenche une mesure sur une des voies du composant et retourne la valeur brute issue du convertisseur. Cette valeur pourra être covnertie en tension ou courant via les fonctions ToCurrent ou ToVoltage.
Paramètre : eChannel - type MCP3424_CHANNEL& - Désigne la voie sur laquelle effectuer la mesure.
Paramètre de sortie : pRaw - type int32_t* - Pointeur vers un entier contenant en retour de la fonction la valeur brute de la mesure directement issue du convertisseur.
Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.
Description : Cette fonction déclenche une mesure sur une des voies du composant et retourne la valeur convertie en courant.
Paramètre : eChannel - type MCP3424_CHANNEL& - Désigne la voie sur laquelle effectuer la mesure.
Paramètre de sortie : pCurrent - type double* - Pointeur vers un double contenant en retour de la fonction la valeur en courant de la mesure.
Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.
Description : Cette fonction déclenche une mesure sur une des voies du composant et retourne la valeur convertie en tension.
Paramètre : eChannel - type MCP3424_CHANNEL& - Désigne la voie sur laquelle effectuer la mesure.
Paramètre de sortie : pVoltage - type double* - Pointeur vers un double contenant en retour de la fonction la valeur en tension de la mesure.
Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.
Description : Retourne la valeur de Resolution réglée via la fonction SetParameters.
Valeur de retour : MCP3424_RESOLUTION
Description : Définie la résolution et le gain à appliquer pour convertir les mesures en tension et/ou courant.
Paramètre : eResolution - type MCP3424_RESOLUTION& - Résolution à appliquer.
Paramètre : eGain - type MCP3424_GAIN& - Gain à appliquer.
Description : Cette fonction convertie une valeur de mesure brute retournée par la fonction Measure en valeur de courant en fonction des paramètres de résolution et gain définies par la fonction SetParameters.
Paramètre : nRawValue - type int32_t& - Valeur brute retournée par la fonction Measure.
Valeur de retour : Valeur convertie en courant.
Description : Cette fonction convertie une valeur de mesure brute retournée par la fonction Measure en valeur de tension en fonction des paramètres de résolution et gain définies par la fonction SetParameters.
Paramètre : nRawValue - type int32_t& - Valeur brute retournée par la fonction Measure.
Valeur de retour : Valeur convertie en tension.