DesignSpark Electrical Logolinkedin
Ask a Question

28 Nov 2018, 16:17

Expérimentation avec des périphériques et le Clicker 2 pour PSoC 6

Le dispositif PSoC 6 de Cypress Semiconductor est un microcontrôleur très puissant et flexible avec un large éventail de fonctionnalités très utiles. Ce qui est génial, sauf qu'il peut être assez intimidant de consulter toute la documentation (Cypress est très bon pour tout documenter) et d'évaluer à quel point votre courbe d'apprentissage va être raide pour pouvoir vous lancer avec un projet somme toute assez simple, en particulier si concevoir votre propre carte pour l'application est l'objectif ultime. C'est là où la Mikroelectronica Clicker 2 pour le PSoC 6 peut aider à rassembler les éléments d'un projet simple. Dans cet article, nous revenons à l'essentiel et nous préparons à expérimenter facilement avec des capteurs (ou d'autres périphériques) que nous pourrions vouloir utiliser dans un projet PSoC 6.

Présentation du Clicker 2 pour PSoc 6

Le Clicker 2 est une conception particulièrement minimaliste, surtout par rapport à la plupart des cartes de développement modernes qui tentent de montrer toutes les fonctionnalités du MCU, sur une seule carte. Si vous regardez le schéma, vous verrez un PSoC 6, un PSoC 5 (pour la programmation et le débogage du PSoC 6), un gestionnaire d'alimentation USB LTC3586 et des connecteurs pour monter deux cartes Mikroelectonica Click. En dehors des prérequis pour configurer et assurer le bon fonctionnement de nos appareils, il n'y a pas grand-chose d'autre. Mais ne vous inquiétez pas, vous recevez tout de même les interrupteurs et les voyants à LED essentiels à toute application…

Cette conception simplifiée vous permet de vous concentrer plus facilement sur ce que vous voulez tirer d'un projet de microcontrôleur sans l'encombrement de dispositifs et de fonctions que vous n'avez pas l'intention d'utiliser. Elle facilite également l'expérimentation avec des capteurs et d'autres dispositifs (en changeant simplement la carte Click) pour vous aider à décider si ce sont vraiment les pièces que vous voulez utiliser dans votre projet.  

Ce qui nous amène tranquillement à ce que nous faisons aujourd'hui. J'avais une carte Click de détecteur de monoxyde de carbone (CO Click) dans mon tiroir depuis des mois. Je pensais l'utiliser dans la création d'un système d'alerte IoT (ou Bluetooth), et cela semble être une excellente occasion de l'essayer avec un microcontrôleur qui va facilement gérer l'application complète.

Configuration

Une chose que les systèmes embarqués ne font pas beaucoup est de vous dire ce qui se passe à l'intérieur, et il peut être difficile de comprendre ce qui fonctionne et ce qui ne fonctionne pas lorsque vous développez une application. Nous allons résoudre ce problème en utilisant FreeRTOS, qui est intégré à PSoC Creator, pour rediriger STDOUT vers une fenêtre de terminal connectée via USB. Cela nous permet d'utiliser la fonction fidèle "printf" pour savoir ce qui se passe avec nos programmes. C'est une configuration simple qui peut être réutilisée au début de n'importe quel projet PSoC pour faciliter le débogage.

Ouvrez PSoC Creator 4.2 et sélectionnez "File -> New Project" (Fichier -> Nouveau projet). Il vous sera demandé de désigner un périphérique cible. Si vous avez déjà utilisé un PSoC 6, vous verrez quelque chose comme ceci :

Dans notre cas, nous utilisons le dispositif PSoC 63. Appuyez sur "Next" (Suivant), puis "Next" à nouveau pour ouvrir la fenêtre suivante (nous ne modifions pas les valeurs par défaut) jusqu'à ce que vous atteigniez "Select project template" (Sélectionnez un modèle de projet). Ici, nous voulons le schéma vide. Donnez un nom au projet et appuyez sur "Finish" (Terminer). Un espace de travail vierge vous sera présenté :

Nous utiliserons un UART pour nos communications, donc nous devons en obtenir un du catalogue de composants, "Component Catalog" à droite de la fenêtre principale. La façon la plus facile de trouver des composants est de taper ce que nous voulons dans la barre de recherche en haut de la fenêtre "Component Catalog". Puis il suffit de faire glisser le composant et le déposer sur notre fenêtre principale :

Nous allons laisser les réglages UART par défaut, donc nous n'avons pas besoin de double-cliquer dessus (pour afficher l'écran des réglages), mais nous devons connecter l'UART aux broches de sortie correctes, que nous pouvons trouver sur le schéma de la carte Clicker 2 :

Nous avons donc besoin de P12.1 et P12.0, que nous pouvons configurer en double-cliquant sur "pins" (broches) dans le "Workspace Explorer" (explorateur d'espace de travail, à gauche de la fenêtre principale) :

Bon. On dirait qu'il y a une différence entre ma version du schéma et celle de PSoC Creator en ce qui concerne l'attribution de la broche Rx (réception) et la broche Tx (émission), donc nous allons opter pour PSoC Creator.

À présent, nous devons redéfinir la cible de notre STDIO sur l'UART afin que nos retours de "printf" soient envoyés au terminal. Nous allons commencer par configurer FreeRTOS. Cliquez avec le bouton droit sur le nom du projet et sélectionnez "Build Settings..." (Paramètres de création) :

Puis nous descendons à "Peripheral Driver Library" (Bibliothèque de pilotes de périphériques) et nous cochons "Memory Management" (Gestion de mémoire) sous FreeRTOS (en utilisant le segment par défaut) et "Retarget I/O" (Recibler les E/S) :

À ce stade, nous pouvons aller à la barre de menu en haut et sélectionner "Build -> Generate Application" (Créer -> Générer l'application) pour nous assurer que nous avons tout configuré correctement. Super !

PSoC Creator a maintenant ajouté quelques fichiers dans notre projet, y compris FreeRTOS, stdio_user.c, stdio_user.h et retarget_io. Nous devons modifier stdio_user.h :

Nous ajoutons un :

#include <project.h>

En haut et en modifiant les définitions de l'UART :

#define IO_STDOUT_UART          UART_1_HW
#define IO_STDIN_UART           UART_1_HW

Puis nous ouvrons FreeRTOSConfig.h

Et nous supprimons le commentaire d'avertissement à la ligne 45 avant de modifier la taille du segment de la ligne 71 :

#define config_TOTAL_HEAP_SIZE      (48*1024)

Maintenant que nous en avons terminé avec les modules, nous pouvons aller à main_cm4.c (ouvert à partir de Workspace Explorer) et ajouter un code pour démarrer l'UART pour nos communications et transmettre des choses vers le terminal.

#include "project.h"
#include <stdio.h>
 
int main(void)
{
    __enable_irq(); /* Enable global interrupts. */
 
    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
 
    PWM_1_Start();
    UART_1_Start();
    
    printf("\033[2J\033[H"); // Clear Screen
    printf("Test\r\n");
    
    
    for(;;)
    {
        /* Place your application code here. */
    }
}

Il reste juste une chose à intégrer avant de pouvoir exécuter notre code : un émulateur de terminal tel que Putty ou Tera Term. Afin de le configurer, nous devons ouvrir "Windows Device Manager" (Gestionnaire de périphérique Windows) et voir sur quel port COM le KitProg2 USB UART est connecté :

Donc je suis sur COM12. Nous pouvons configurer cela dans nos paramètres de terminal. J'utilise Putty et mes réglages ressemblent à ceci :

Ouvrez le terminal, puis revenez à PSoC Creator et appuyez sur le bouton "Program" (juste au-dessus de Workspace Explorer). Une fois l'application créée et chargée sur le PSoC 6, nous pouvons revenir à notre terminal, et voilà ! Notre message s'affiche :

Ajouter le capteur

Maintenant que notre schéma de débogage est configuré, nous pouvons réellement commencer à expérimenter. En regardant le schéma de la carte CO Click, nous pouvons voir que nous avons une sortie analogique du capteur reliée à la broche AN :

Revenons à notre schéma de la carte Clicker 2 ; nous pouvons voir que la broche AN du site de carte Click 1 est connectée à la P10.4 du PSoC 6. Nous devons donc configurer un convertisseur analogique-numérique (ADC) pour lire la tension sur cette broche.

Si nous recherchons un ADC dans le catalogue des composants de PSoC Creator, nous trouvons l'ADC Scanning SAR que nous pouvons glisser sur notre conception de haut niveau :

Nous devons le configurer pour prendre une entrée unique avec une plage d'entrée suffisamment élevée pour notre dispositif 5 V :

Après avoir défini ces paramètres, nous avons besoin d'une broche analogique à laquelle connecter l'ADC. Nous pouvons la trouver dans le catalogue de composants. Déposez-la dans la conception et connectez-la à l'entrée de l'ADC :

Nous connectons alors cette broche à P10.4 dans la carte des broches :

Nous avons ensuite besoin d'un code pour commander notre collecte de données. J'ai trouvé une équation pour convertir la tension mesurée par l'ADC en une valeur de pièce par million (ppm) dans l'exemple de code pour le CO Click sur le site Web de code de Mikroelectronica. Nous l'utiliserons dans notre propre code :

/* ========================================
 *
 * Reading data from an MQ-7 CO sensor
 *
 * ========================================
*/
#include "project.h"
#include <stdio.h>
#include <math.h>

const double Rl       = 5000.0;              // Rl (Ohm) - Load resistance
const double Vadc_2x  = 0.0016113281;        // ADC step 2*Vref/4096 1.61mV (12bit ADC)
const double Vadc_33  = 0.0008056641;        // ADC step 3.3V/4096 0.81mV (12bit ADC)
double Vrl;                                  // Output voltage
double Rs;                                   // Rs (Ohm) - Sensor resistance
double ppm;                                  // ppm
double ratio;                                // Rs/Rl ratio

int16_t adc_rd, adc_V;
char txt[16];

//Calculation of PPM
void calculatePPM() {
  double lgPPM;
  Vrl = (double)adc_rd * Vadc_2x;            // For 3.3V Vcc use Vadc_33
  Rs = Rl * (5 - Vrl)/Vrl;                   // Calculate sensor resistance
  ratio = Rs/Rl;                             // Calculate ratio
  lgPPM = (log10(ratio) * -3.7)+ 0.9948;     // Calculate ppm
  ppm = pow(10,lgPPM);                       // Calculate ppm
}

int main(void)
{
    __enable_irq(); /* Enable global interrupts. */

    UART_1_Start();
    printf("\033[2J\033[H"); // Clear Screen
    printf("Terminal Output Running...\r\n");
    
    ADC_1_Start();
    
    printf("Conversion starting now...\r\n\n");

    for(;;)
    {
        ADC_1_StartConvert();
        Cy_SysLib_Delay(50);
        adc_rd = ADC_1_GetResult16(0);                // Connected to mikroBus1 AN pin/P10.4
        Cy_SysLib_Delay(50);
        adc_V = ADC_1_CountsTo_Volts(0, adc_rd);  
        Cy_SysLib_Delay(50);
        ADC_1_StopConvert();
        Cy_SysLib_Delay(50);
        
        calculatePPM();                               // Calculating PPM value
        printf("ADC value = %d, Volts = %f, ppm = %f\r\n", adc_rd, Vrl, ppm);
        Cy_SysLib_Delay(5000);
    }
}

/* [] END OF FILE */

Nous sommes maintenant prêts à programmer le PSoC 6. Lorsque nous chargeons tout ceci dans le dispositif et consultons notre terminal, nous obtenons des données – Super !

Double vérification : lorsque nous mesurons la tension entre les broches AN et de terre sur le CO Click (avec notre fidèle multimètre numérique RS Pro), nous voyons les mêmes niveaux de tension. Excellent, notre ADC fonctionne comme voulu.

Ainsi, si je veux que le PSoC 6 me prévienne quand j'ai un niveau élevé de CO dans l'air, la question devient alors : comment je modifie ma tension (avec le potentiomètre sur le CO Click) pour obtenir des mesures de PPM qui sont dans la bonne plage ? Il est temps de consulter la fiche technique du MQ-7.

OK, nous venons de remarquer quelque chose d'intéressant : il s'avère que le capteur a vraiment besoin d'une configuration plus complexe que celle que nous utilisons. Pour obtenir les relevés les plus précis, nous devons régler le chauffage interne du capteur pour fonctionner en cycles de chauffage élevé et faible, où (après avoir chauffé à 5 V pendant 48 heures) nous appliquons 5 V pendant 60 secondes et n'utilisons pas ces relevés. Puis nous appliquons 1,4 V pendant 90 secondes et utilisons ces relevés pour nos mesures de CO. La phase à haute température évapore le CO (et tout autre composé de gaz combustibles) de la plaque du capteur, pour la nettoyer en vue de la phase de mesure à plus faible température, permettant une mesure précise. Nous devons répéter ces cycles.

Notre CO Click n'est pas configuré pour fournir ce cycle, donc même si nous sommes quand même capables de détecter la présence de monoxyde de carbone, il semble qu'il nous faille repenser notre conception au-delà de ce que contient le module pour obtenir des mesures vraiment exactes.

Le mot de la fin

Bien que mesurer précisément le monoxyde de carbone avec le capteur MQ-7 s'est avéré plus complexe que je ne le pensais, la carte Clicker 2 pour PSoC 6 a permis de faire de cet essai une expérience très simple. Il serait aussi facile de simplement essayer une autre carte Click de monoxyde de carbone (CO 2 Click), bien que je devrais lire la fiche technique du capteur avant d'essayer !

En guise de carte de développement de PSoC 6 complètement vierge, j'aime la Clicker 2. Elle vous permet de vous concentrer clairement sur les capteurs ou d'autres périphériques que vous utilisez dans votre projet et je suis pressé de bricoler avec certains des autres modules Click sur cette carte à l'avenir.

Mark completed his Electronic Engineering degree in 1991 and went on to work in real-time digital signal processing applications engineering, later moving into technical marketing.

28 Nov 2018, 16:17

Commentaires