Version corrigée testée fontionnelle

This commit is contained in:
2026-07-01 22:43:25 +02:00
parent 18280e01ac
commit 5788f48001
37 changed files with 14353 additions and 4054 deletions

View File

@@ -39,37 +39,38 @@ Pour créer un PWM le code Arduino suivant va s'occuper de :
- Générer un PWM de sortie
```
// High-frequency PWM using Timer2 on pins 3 & 11 (31 kHz)
const int pwmPin1 = 11;     // OC2B
const int pwmPin2 = 3;    // OC2A
const int analogPin1 = A0;
const int analogPin2 = A1;
// High-frequency PWM using Timer2 on digital outputs D3 & D11 (31 kHz)
const int pwmPin1 = 11;     // OC2B, Pin 15 sur le 328P, pilote Q1
const int pwmPin2 = 3;    // OC2A, Pin 1 sur le 328P, pilote Q2
const int analogPin1 = A0; //J2 Manette Gauche, Pin 23 sur le 328P
const int analogPin2 = A1; //J4 Manette Millieu, Pin 24 sur le 328P
void setup() {
  pinMode(pwmPin1, OUTPUT);
  pinMode(pwmPin2, OUTPUT);
 
  pinMode(analogPin1, INPUT);
  pinMode(analogPin2, INPUT);
  // ----- Timer2 Fast PWM (8-bit), no prescaler -----
  TCCR2A = _BV(WGM20) | _BV(WGM21) | _BV(COM2A1) | _BV(COM2B1);
  TCCR2B = _BV(CS20);  // No prescaler → 31.37 kHz
 
  Serial.begin(9600);
}
void loop() {
  int adc1 = analogRead(analogPin1);
  int adc2 = analogRead(analogPin2);
  if (adc1 <= 100){ // pour éteindre lorsque la télécomande est relachée
  if (adc1 <= 100){
    adc1 = 0;}
  if (adc2 <= 100){ // pour éteindre lorsque la télécomande est relachée
  if (adc2 <= 100){
    adc2 = 0;}
  uint8_t pwm1 = map(adc1, 0, 1023, 0, 255);
  uint8_t pwm2 = map(adc2, 0, 1023, 0, 255);
  OCR2B = pwm2;   // Pin 3
  OCR2A = pwm2;   // Pin 11
  OCR2B = pwm1;   // D3, J2 Manette Gauche, Pin 1 sur le 328P, pilote Q3
  OCR2A = pwm2;   // D11, J4 Manette Millieu Pin 15 sur le 328P, pilote Q1
}
```
@@ -86,7 +87,9 @@ Pour miniaturiser le concept va retenir :
- Un port JTAG pour reprogrammer au besoin le processeur.
![](_docAssets/SchemaCircuitCarerra.jpg)
Pour valider que le Mosfet N-channel puisse bien être piloté, une simulation du circuit à été faite dans LTSpice:
![](_docAssets/SimulationLTSpice.jpg)
Le PCB sur lequel seront soudés les composants et qui reprends les pistes pour les télécommandes et le raccordement de puissance d'origine.
@@ -98,6 +101,33 @@ Et la commande qui arrivera bientôt :
![](_docAssets/PCBOrder.jpg)
La soudure à été réalisée avec de la pâte a souder, d'abord on met des gouttes sur toutes les pastilles, on y colle les composants et on fait fondre. Le circuit est fonctionnel, mais j'ai fait une erreur de positionnement qui va me déranger pour mettre le circuit en place : La diode D5 est à un endroit qui m'oblige à retirer un peu de plastique.
On voit aussi C1 qui est remplacé par un électrolytique car je n'ai pas commandé la bonne référence.
![](_docAssets/CircuitTerminé.jpg)
![](_docAssets/CircuitTerminé.jpg)
Pour programmer la carte ci-dessus j'utilise la méthode : Méthode #4 : programmation dun ATmega328P en ISP, avec un Arduino Uno transformé en programmateur décrite sur le site [https://passionelectronique.fr/programmer-atmega328p/#methode-4-programmation-dun-atmega328p-en-isp-avec-un-arduino-uno-transforme-en-programmateur]()
![](_docAssets/ArduinoAsISP.png)
Le montage réalisé avec à gauche le programmateur, et a droite le contrôleur à programmer.
![](_docAssets/Pasted%20image%2020260607220442.png)
Ensuite dans ArduinoIDE
Bon cette première version du contrôleur de circuit fonctionne mais n'est pas fiable...
Après quelques minutes de jeu sur le circuit je casse Q1 ou Q2. Jimagine que le problème viens de petit courts-circuits sur la piste lorsque les balais de la voiture viennent à toucher les deux rails. D'une part Q1 et Q2 sont limites pour ce moteur, d'autre part il n'y a aucune protection contre les sur-intensités sur ce circuit.
Dans la deuxième version, j'ai laissé passer une erreur dans la conception du PCB qui s'est retrouvée sur le circuit fabriqué...
![](_docAssets/Pasted%20image%2020260607234007.png)
Il a fallu gratter la piste pour rattraper le faux contact entre ADC3 et la piste U1-PD3. J'ai pu aussi trouver deux autres problèmes de design. Tout d'abord une piste bien trop petite :
![](_docAssets/Pasted%20image%2020260701220914.png)
Un condensateur permettant de réduire le bruit de mesure à ajouter :
![](_docAssets/Pasted%20image%2020260701220941.png)
Tout celà à été corrige dans le fichier KiCad mais non mis en production. Je garde le circuit "bricolé" à la main avec les erreurs corrigées en grattant dans le jouet actuel car cela fonctionne.