Voila j'ai un petit problème que je n'arrive pas à résoudre. J'ai réalisé un robot avec une carte moteur à base de l298N et je ne comprend pas pourquoi mon pic rentre de manière aléatoire dans la routine d'interruption.
Je soupçon fortement un problème de perturbations électromagnétiques car tout fonctionne correctement lorsque je test le soft sur une carte de développement.
Le plus étrange c'est que le phenomène survient lorsque un des moteurs tourne dans un sens particulier. Dans les autres cas, tout fonctionne correctement.
J'ai pas trop d'idée pour corriger le problème, j'ai relié la carcasse des moteurs à la masse, j'ai supprimer les interruptions rs232 pour voir (le problème est toujours présent dans ce cas.)
Voila si quelqu'un à une idée je suis preneur.
Ci-joint le schéma et le soft.
Damien
Je viens de penser qu'il pourrait être intéressant que je tente de voir si le pic ne reset pas.
... Voila j'ai un petit problème que je n'arrive pas à résoudre ...
Je ne me réponds pas à moi même, mais le document que tu as présenté, ne comporte aucun découplage des alimentations du contrôleur, pas plus qu'il ne comporte de filtres de déparasitage sur les entrées. Ne sachant pas comment se présente la réalisation pratique, je crains le pire.
Pourrais-tu joindre une photo, pour voir un peu comment "cohabitent" les fils de puissance et des entrées?
17/01/2009 - 19h16
Dwigo
Date d'inscription
janvier 2009
Âge
30
Messages
10
Re : Parasites sur carte moteur à base de l298N
Bonjour,
En fait je n'est que très peu de connaissances en électronique et je dois avouer que je ne sais pas ce qu'est un découplage d'alim. Celle-ci est à base de 7805 et deux condensateurs. Il y a aussi un condensateur (d'origine, je connais pas ca valeur) sur les deux moteurs.
Ceci dit, le câblage est un vrai fouillis (voir image), mais vu le peu de différence entre la tension logique et puissance, je pensais pas que ça ne pouvais influencée le pic (enfin pas à ce point) surtout que tout est en tension continu.
Ci joint le schéma, le soft et l'image du montage dans le format adéquate
Code:
/*
* Copyright:
(c) Zaremba damien
* Description:
Controle du l298n sur le port b
b0 Moteur 1-1
b1 Moteur 1-2
b2 Moteur 2-1
b3 Moteur 2-2
b4 Capteur Front Right
b5 Capteur Front Left
b6 Capteur Back Right
b7 Capteur Back Left
Controle de la charge baterie moteur port a
Scan sharp sur port a
Communication Rs232 via modem xbee (port c)
* Configuration:
MCU: PIC16F876a
Oscillator: HS, 20.0000 MHz
*/
#define myAdr 0x1
#define destAdr 0x2
#define Mot11 PORTB.F0
#define Mot12 PORTB.F1
#define Mot21 PORTB.F2
#define Mot22 PORTB.F3
#define GoForwar Mot11=0;Mot12=1;Mot21=0;Mot22=1
#define GoBackwar Mot11=1;Mot12=0;Mot21=1;Mot22=0
#define GoLeft Mot11=0;Mot12=1;Mot21=1;Mot22=0
#define GoRight Mot11=1;Mot12=0;Mot21=0;Mot22=1
#define Break Mot11=1;Mot12=1;Mot21=1;Mot22=1
#define FRight PORTB.F4
#define FLeft PORTB.F5
#define BRight PORTB.F6
#define BLeft PORTB.F7
#define mvtFront 0b00000000
#define mvtBack 0b00000001
#define mvtRight 0b00000010
#define mvtLeft 0b00000011
#define mvtBreak 0b00000100
#define mvtDlyRot 0b00000101
#define mvtDlyFront 0b00000110
#define mvtDlyBack 0b00000111
#define lgmvtOnFRight 0b1001111011101000
#define lgmvtOnFLeft 0b1001111010101000
#define lgmvtOnBRight 0b1000110011101000
#define lgmvtOnBLeft 0b1000110010101000
#define pop(val) stackCpt-=3;val=(mvtStack>>stackCpt)&0b111;
#define push(val) mvtStack|=(val<<stackCpt);stackCpt+=3;
#define longPush(a,b) mvtStack = a; stackCpt=b;
#define clearStack stackCpt=0
unsigned int mvtStack; //pile de mouvements LIFO:
//b15 : Non utilisé
//b14b13b12 : Debut de la pile
//b11b10b9
//b8b7b6
//b5b4b3
//b2b1b0 : fin de la pile
unsigned short stackCpt=0,t;
unsigned int delCpt=0;
unsigned short mvt=0,Rxdata=0;
void delayMs(unsigned int ms);
void interrupt(void){
if(PIR1.RCIF){
Rxdata=Usart_Read();
longPush(Rxdata,3);
delCpt=1;
}
if (INTCON.RBIF) {
if(FRight){
longPush(lgmvtOnFRight,15);delCpt=1;}
else if(FLeft){
longPush(lgmvtOnFLeft,15);delCpt=1;}
else if(BRight){
longPush(lgmvtOnBRight,15);delCpt=1;}
else if(BLeft){
longPush(lgmvtOnBLeft,15);delCpt=1;}
INTCON.RBIF=0;
}
PORTC.F5=~PORTC.F5;
}
void main() {
OPTION_REG=0b10000000;
PORTB=0;
PORTC=0;
PORTA=0;
TRISC=0b11011111;
TRISA=255;
TRISB=0b11110000;
PWM1_Init(40000);
PWM2_Init(40000);
PWM1_Change_Duty(204);
PWM2_Change_Duty(255);
PWM1_Start();
PWM2_Start();
Usart_Init(9600);
INTCON.RBIE=1;
PIE1.RCIE=0;
INTCON.PEIE=0;
mvtStack=0;
push(mvtFront);
INTCON.RBIF=0;
INTCON.GIE=1;
while(1){
if(stackCpt!=0){
pop(mvt);
switch (mvt){
case mvtFront: GoForwar;break;
case mvtBack: GoBackwar;break;
case mvtRight: GoRight;break;
case mvtLeft: GoLeft;break;
case mvtBreak: Break;break;
case mvtDlyRot: delayMs(1000);break;
case mvtDlyFront: delayMs(1000);break;
case mvtDlyBack: delayMs(2000);break;
}
}
}
}
void delayMs(unsigned int ms){
delCpt=ms;
while(delCpt--!=0){Delay_ms(1);}
}
18/01/2009 - 08h23
gcortex
Date d'inscription
juin 2006
Localisation
59
Âge
36
Messages
12 063
Re : Parasites sur carte moteur à base de l298N
j'ai pas bien vu, mais si tu pouvais alimenter le L298 en 9V,
avec une capa de 2200µF 16V pour absorber les retours de courant
des ponts en H
si besoin fais une régulation de courant par découpage
18/01/2009 - 08h42
DAUDET78
Date d'inscription
septembre 2006
Localisation
Ile de France
Âge
70
Messages
38 778
Re : Parasites sur carte moteur à base de l298N
1/ Je ne vois pas de PullDown sur les entrées de bouton poussoir (c'est encore des sorties à "0" qu'on force à "1" .... pôvre PIC)
2/ Je ne vois aucun découplage sur le 5V (220µF +100nF au minimum !)
L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !
Daudet78v-> oui effectivement j'ai oublié de mettre sur les schéma les résistances de pull down mais sur le montage elles sont bien la, on peut les apercevoir sur la photo à droite.
Si le découplage c'est mettre des condensateurs en parallèle de l'alim, alors ils sont aussi sur le montage mais pas sur le schéma. Leur valeur est de 100µf et 100nf pour l'alim 5v.
gcortex-> je vais essayer, mais hier j'ai tout décâblé pour tout refaire de façon plus organisé en séparant la puissance de la logique. La capa je l'a met bien en // de l'alim ?
Dernière modification par Dwigo ; 18/01/2009 à 13h34.
Motif: orthographe
18/01/2009 - 13h38
verdifre
Date d'inscription
mai 2006
Localisation
thiembronne 62560
Âge
51
Messages
7 964
Re : Parasites sur carte moteur à base de l298N
Bonjour,
avec un L298, les diodes en sortie doivent etre des diodes rapides et pas des 1n4...., j'ai déja donné en croyant economiser quelques centimes...
Donc dans le cas ou tu aurais monté des diodes de base, il faut les changer pour des modeles de course
fred
On ne vient pas de nulle part et il serait souhaitable qu'on n'aille pas n'importe où !
18/01/2009 - 13h57
Dwigo
Date d'inscription
janvier 2009
Âge
30
Messages
10
Re : Parasites sur carte moteur à base de l298N
Envoyé par verdifre
Bonjour,
avec un L298, les diodes en sortie doivent etre des diodes rapides et pas des 1n4....
C'est des 1n4007. Aurais tu une référence de diode utilisable ? (7,2 v, 1A nominal par moteur)
18/01/2009 - 14h27
Dwigo
Date d'inscription
janvier 2009
Âge
30
Messages
10
Re : Parasites sur carte moteur à base de l298N
Voila en image l'alim et les résistances de pull down. Plus tard, il y aura une carte d'alime c'est pour ça que le +5v arrive sur un connecteur.
...c'est encore des sorties à "0" qu'on force à "1" .... pôvre PIC...
Ce n'est pas comme ça qu'il faut faire ? Mieux vaut il faire des pullup ?
Dernière modification par Dwigo ; 18/01/2009 à 14h28.
Motif: oubli images
18/01/2009 - 16h44
MorpheusPic
Date d'inscription
août 2008
Âge
29
Messages
756
Re : Parasites sur carte moteur à base de l298N
salut quelle sont les valeur des resistances R1 et R2 car au moment que ton moteur demare jais bien peur que RA0 et RA1 se prenent une tension supperieure a 5 V
il te faudrait metre 1 resistance entre RA0 et R1 et une entre RA1 et R2 pour limiter les eventuel pic de courant
18/01/2009 - 17h23
Dwigo
Date d'inscription
janvier 2009
Âge
30
Messages
10
Re : Parasites sur carte moteur à base de l298N
Envoyé par MorpheusPic
salut quelle sont les valeur des resistances R1 et R2 car au moment que ton moteur demare jais bien peur que RA0 et RA1 se prenent une tension supperieure a 5 V
il te faudrait metre 1 resistance entre RA0 et R1 et une entre RA1 et R2 pour limiter les eventuel pic de courant
R1 et R2 sont des résistances de 10ohm. Je vais mettre les résistances que tu me conseil, 1k devrai suffire ?
18/01/2009 - 18h05
verdifre
Date d'inscription
mai 2006
Localisation
thiembronne 62560
Âge
51
Messages
7 964
Re : Parasites sur carte moteur à base de l298N
bonsoir,
C'est des 1n4007. Aurais tu une référence de diode utilisable ? (7,2 v, 1A nominal par moteur)
je n'ai pas de reference sous la main, il y en a dans le datasheet du 298. Mais ces diodes sont trés mauvaises et pour les parasites et pour le 298, elles sont beaucoup trop lentes
il faudrait prendre dans les gammes BY...
fred
On ne vient pas de nulle part et il serait souhaitable qu'on n'aille pas n'importe où !
18/01/2009 - 20h47
Dwigo
Date d'inscription
janvier 2009
Âge
30
Messages
10
Re : Parasites sur carte moteur à base de l298N
Ok merci j'en ai trouvé chez Gotronic
18/01/2009 - 21h11
Zig38
Date d'inscription
juin 2007
Âge
53
Messages
835
Re : Parasites sur carte moteur à base de l298N
Bonsoir,
Et sur le cablage, tu ne pense pas qu'il laisse à désirer aussi?
Les plaques de tests sont en grandes paeties sources de pannes je pense.
19/01/2009 - 13h12
verdifre
Date d'inscription
mai 2006
Localisation
thiembronne 62560
Âge
51
Messages
7 964
Re : Parasites sur carte moteur à base de l298N
bonjour,
c'est sur qu'un tel cablage laisse à désirer, j'ai déja été attrapé par l'utilisation de diodes trops lentes sur un circuit imprimé "propre" alors la j'ose pas imaginer.
des antennes partout et des emmeteurs puissants à coté , c'est fait pour marcher ensemble.
Cependant je crois que de réduire les emissions est le premier pas (qui ne peu qu'etre amelioré par un routage corret)
fred
On ne vient pas de nulle part et il serait souhaitable qu'on n'aille pas n'importe où !