Version corrigée testée fontionnelle
This commit is contained in:
@@ -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.
|
||||
|
||||

|
||||
|
||||
Pour valider que le Mosfet N-channel puisse bien être piloté, une simulation du circuit à été faite dans LTSpice:
|
||||
|
||||

|
||||
|
||||
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 :
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||

|
||||
|
||||
Pour programmer la carte ci-dessus j'utilise la méthode : Méthode #4 : programmation d’un 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]()
|
||||
|
||||

|
||||
|
||||
Le montage réalisé avec à gauche le programmateur, et a droite le contrôleur à programmer.
|
||||
|
||||

|
||||
|
||||
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. J’imagine 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é...
|
||||

|
||||
|
||||
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 :
|
||||
|
||||

|
||||
|
||||
Un condensateur permettant de réduire le bruit de mesure à ajouter :
|
||||
|
||||

|
||||
|
||||
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.
|
||||
Reference in New Issue
Block a user