SE3Groupe2025-2

De projets-se.plil.fr
Aller à la navigation Aller à la recherche

Programmation des systèmes embarqués

Programmeur.

Carte électronique

Carte réalisée en utilisant le logiciel KiCAD : Fichier:2025-PSE-2-Prog.zip.

Schéma électronique de la carte :

Schéma électronique

Résultat du routage :

Routage

Résultat du routage en 3D:

3d

Photo de la carte soudée :

Front
Back


Vidéo très courte et en basse résolution de la carte en fonctionnement :

Programmation

Pour tester notre carte on a fait des codes simples.

led_blink

// Clignote les 3 LEDS
#include <avr/io.h>
#include <util/delay.h>
#define BLINK_DELAY 50 // en milli secondes

// PB 5, 6, 7 correspond respectivement aux leds 1 , 2 , 3

int main()
{
  // configurer les led en sortie :
  DDRB |= (1 << 5); // PORTB 5e bit pour la LED1
  DDRB |= (1 << 6); // PORTB 6e bit pour la LED2
  DDRB |= (1 << 7); // PORTB 7e bit pour la LED3

  for (int i = 0; i < 50; i++)
  {
    // led on
    PORTB |= (1 << 5); // OR
    PORTB |= (1 << 6);
    PORTB |= (1 << 7);
    _delay_ms(BLINK_DELAY);

    // led off
    PORTB &= ~(1 << 5); // AND + NOT
    PORTB &= ~(1 << 6);
    PORTB &= ~(1 << 7);
    _delay_ms(BLINK_DELAY);
  }
  return 0;
}

boutons

#include <avr/io.h>
#include <util/delay.h>

#define b7 0b10000000
#define b6 0b01000000

#define L5 0b11011111
#define L6 0b10111111
#define L7 0b01111111

void config()
{
    DDRB |= (1 << 5);
    DDRB |= (1 << 6);
    DDRB |= (1 << 7);

    DDRC &= 0x00;

    // Activation des résistances de Pull-Up internes sur le port C
    PORTC |= (b6 | b7);
}

int lire_bouton(int bouton)
{
    return (PINC & bouton) == 0;
}

void ecrire_LED(int LED, int etat)
{
    switch (etat)
    {
    case 0:
        PORTB &= LED; // Applique le masque avec le 0 pour éteindre
        break;
    case 1:
        PORTB |= ~LED; // Inverse le masque pour avoir un 1 et allumer
        break;
    }
}

int main()
{
    config();

    while (1)
    {
        if (lire_bouton(b6) && lire_bouton(b7))
        {
            ecrire_LED(L7, 1);
            ecrire_LED(L6, 0);
            ecrire_LED(L5, 0);
        }
        else if (lire_bouton(b7))
        {
            ecrire_LED(L5, 1);
        }
        else if (lire_bouton((b6)))
        {
            ecrire_LED(L6, 1);
        }
        else
        {
            // On éteint tout si aucun bouton n'est pressé
            ecrire_LED(L6, 0);
            ecrire_LED(L5, 0);
            ecrire_LED(L7, 0);
        }
    }
    return 0;
}

Bilan

Séance du 03/03

Soudure presque terminée. LEDs et résistances associées manquantes, 1 bouton poussoir traversant manquant.

Séance du 10/03

  • Problème : le programmateur n'est pas détecté en USB. Un erreur est détectée ce qui montre qu'il y a une connexion, mais n'apparaît pas dans lsusb.
  • Programmable : La connexion en ISP en revanche fonctionne. On pourra donc programmer les leds et les boutons avec une UNO. Voir dans le futur si on peut fixer le problème de l'USB pour rendre le programmateur fonctionnel.
  • ajout d'un premier blink_led.c (brouillon) au git
  • TESTS : Le code blink fonctionne mais pas le code boutons -> faut contact / pbs de soudure sur les pattes

Séance du 11/03

LEDS et boutons fonctionnent -> attente de réparation de notre USB par le prof ou fin de projet pour le programatteur.

08/04

Nouvelle carte imprimée et détéction de notre carte via lsusb.

BE2 lsusb.png
BE2 lsusb details.png

Eventuellement la vidéo brève du fonctionnement complet du programmateur : Média:2025-PSE-B2-PROG-final.mp4.

Premier système embarqué

Archive GIT

Notre archive GIT pour le projet KiCAD et pour les programmes : https://gitea.plil.fr/mterrier/2025_PSE_B2_mterrier_jramesh

Structure avec matériel (y compris production - gerber, bill of materials) / logiciel / documentation (e.g. documentation technique).

Description du système embarqué

Nous avons décider de réaliser BMO, un système comportant un écran affichant un visage minimaliste, munis d'un détécteur de mouvement et d'un buzzer.

Lorsque notre main s'approche de détécteur, le visage plisse les yeux (ou devient triste). Lorsque notre main s'écarte de celui ci, le visage réouvre les yeux (ou devient heureux).

Le système sera alimenté par une batterie, ou une alimentation USB en 5V.

Afin de valider l'utilisation du port USB, nous connecterons un ordinateur au système via USB et éffectuerons un transfert de données sonores (divers sons) qu'on ira stocker dans la flash.

On a ajouté 2 servos moteurs pour faire office de bras. On pourra s'en servir pour proposer plus d'interactions.

Historique des Scéances

S1 (17/02/26):

  • Modification initiale du wikicode
  • Brainstorming pour se décider sur un projet

S2 (03/03/26): Début de la schématique

  • Encodeur: voir si on peut en utiliser un pour régler le son/luminosité écran.
  • Connecteur ISP (le même que le programatteur)
  • USB-A, condensateurs de découplage, condensateur VUSB.
  • Chargeur Lipo (le même que celui du wiki donc à modifier selon notre schéma).
  • haut parleur : 8 entrée DAC.
  • Ecran : 11 entrée (8 affichage et 3 gestion).
  • Cerveaux moteur optionnels si on a pas assez de ports
  • Voir comment connecter la flash.

S3 (10/03/26):V1 schématique

    Push de la V1 sur le git.

S4 24/03/26): corrections + modification chargeur LIPO

  • Correction de la V1, et ajout des connecteurs pour le chargement de la batterie/ choix de l'alimentation / connecteur batterie
  • Routage : début, du placement des composants.
  • A FAIRE:
  • Demander les composants physique tel que le buzzer et le cerveau moteur
  • On a enlevé des pins sur l'AVR qui étaient pris inutilement par la batterie LIPO => voir si on ne peut pas rajouter un cerveau moteur et des boutons à la place.
  • Tension : Analyser les composants qui nécéssitent 5V de tension pour ajouter un booster de tension pour garder le 5V en batterie (3,3V). Inversement mettre un régulateur de tension sur les composants fonctionnant en 3,3V, lors de l'alimentation en 5v. Convertisseur : TPS61033-Q1

(29/03/26):push de la V2 de la schématique

  • Ajout du booster de tension TPS61033-Q1 pour l'écran, le LM386, le capteur ultrason et les 2 cervosmoteur.
  • Ajout d'un régulateur de tension pour la flash.
  • Ajout de la section "Détail schématique" et première explication du boost et régulateur de tension.
  • A FAIRE:
  • Demander les composants physique disponibles : buzzer et les cerveaux moteur
  • Demander une vérification de la V2 pour avancer sur le routage

S5 (31/03/26):Correction de la V2

  • Correction de la V2, changement de booster et du regulateur pour simplifier le comosant et la commande sur Farnell.
  • A FAIRE
  • Modifier la section "détail de la schématique" en conséquence et revoir le dimsensionnement des composants.

S5 ((04-05)/04/26):V1 Routage

  • Ajout du shifter pour la flash.
  • V1 routage : Alimentation en 0.8mm, pas d'angles droits, DRC au maximum, annotation avec du texte en silkscreen.

Carte électronique

Carte réalisée en utilisant le logiciel KiCAD : ma carte électronique.

Schéma électronique de la carte :

Mon schéma électronique

Résultat du routage :

Mon routage

Résultat du routage en 3D :


Photo de la carte soudée :

Vidéo très courte et en basse résolution de la carte en fonctionnement :

Média:2025-PSE-02-systeme-video.mp4

Détail de la schématique

Booster de tension

    Pour alimenter la logique (écran LCD, capteur ultra son, Haut parleur) et surtout les servomoteurs depuis la batterie de 3.3V, le choix s'est porté sur le régulateur boost TPS61033-Q1. La broche FB est reliée directement à l'entrée (VIN) pour fixer la tension de sortie à 5.0V en interne, rendant inutile l'usage d'un pont diviseur. La broche EN est maintenue à VIN pour un fonctionnement continu, tandis que la broche MODE est à la masse (GND) pour activer le mode Auto PFM. Ce mode garantit un excellent rendement énergétique à faible charge, ce qui est crucial pour économiser la batterie lorsque les moteurs sont à l'arrêt.
    Pour gérer la décharge lors de l'extinction, une résistance de 1kΩ (Rdummy) est placée sur la broche PG. Cela tire seulement 5mA (bien en deçà de la limite de 50mA imposée par le transistor à drain ouvert) et assure une chute de tension propre et rapide en un quart de seconde.
    Côté puissance, les servomoteurs SG90 imposent des pics de courant importants (estimés à 1.5A au total au démarrage). Pour éviter les chutes de tension critiques (brownouts), les capacités de filtrage ont été dimensionnées avec une marge de sécurité : 22µF en entrée et 47µF en sortie pour compenser la perte de capacité sous tension continue. Le cœur du convertisseur est une inductance de 0.47µH. En considérant un rendement (η), soit environ 40.6%. Le courant continu moyen demandé à la bobine se calcule via , soit environ 2.53A. En y ajoutant la moitié de l'ondulation crête-à-crête , le courant de crête absolu atteint , soit 3.12A. L'inductance choisie doit donc impérativement présenter un courant de saturation supérieur à 3.5A pour garantir la stabilité du système en pleine charge. C'est pour cela qu'on a choisi comme conseillé dans la datasheet l'inductance XGL4020-471MEC qui peut avoir un courant de saturation allant jusqu'à 6,1A.

Régulateur de tension

      Pour alimenter la mémoire flash AT45DB641E, qui requiert une tension de fonctionnement < 3,6V, le choix s'est porté sur le convertisseur LTC3531-3.3. Contrairement à un régulateur linéaire (LDO) qui dissiperait l'excédent de tension sous forme de chaleur, ce composant est un régulateur de type Buck-Boost synchrone. Cette topologie permet de maintenir une sortie de 3,3V parfaitement stable, que la tension d'entrée provienne du 5V ou directement de la batterie.
      Le dimensionnement des composants périphériques s'appuie sur les recommandations strictes du constructeur. L'inductance de puissance a été fixée à une valeur standard de 10 µH. Cette valeur est optimisée par le fabricant pour limiter l'ondulation du courant et maximiser le rendement énergétique à faible charge (la mémoire flash consommant au maximum ~25 mA lors des cycles d'écriture/effacement).
      En entrée, un condensateur CIN = 4.7 µF est chargé d'absorber le bruit haute fréquence et les appels de courant transitoires liés au hachage interne du régulateur. En sortie, un condensateur COUT = 10 µF est implanté au plus près de la broche VCC de la mémoire. Le respect de ces valeurs (L = 10 µH, CIN = 4.7 µF, COUT = 10 µF) garantit que les appels de courant soudains de la puce SPI ne provoqueront aucune chute de tension hors des tolérances logiques.

Bilan

Eventuellement la vidéo brève du fonctionnement complet du programmateur : Média:2025-PSE-B2-systeme-final.mp4.