Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Portail lourd motorisé 2 vantaux 24v
LO à tous,
=> Est-ce à dire qu'exclure la version avec potars est la bonne stratégie à retenir? Compatible avec un potentiel réglage via NCO ?
=> La validation concerne les valeurs des réglages ; et la sauvegarde concerne leur conversion en points, c'est bien çà ?
Si oui, j'ai donc besoin de 2 actions différentes via les poussoirs, par exemple pour chaque valeur :
- Sx1 >4s = Validation de la valeur traitée
- Sx2 >4s = Sauvegarde en RAM de sa conversion en points (après validation)
=> simplifier le programme : Je ne saisis pas bien ce que tu veux dire...
Remarque :
J'ai la mauvaise impression que le réglage envisagé de la fréquence PWM va hélas rester impossible, et que cette valeur sera donc à fixer "en dur"...
Je ne suis pas arrivé à déterminer la fréquence PWM utilisée à partir des composants sur la carte HS.
Tout ce que j'avais pu remarquer, c'était un bruit strident (qqs kHz?) lors du forçage en butée.
Je vais donc m'enquérir d'un générateur PWM (fréquence et duty) en tête d'une carte Ponts-en-H et faire des essais réels sur mes moteurs, histoire d'avoir une idée plus précise de ces valeurs.
A suivre
Je me disais bien que j'avais faux ! Encore pas mal de pain sur la planche, donc.paulfjujo a écrit :tu ne peux pas modifier FOSC à 32 ou 8 ou 4 ou 2 ... à tester !! NCO variable de 1Hz à 16MHz
il y a nécessité de garder PR2 à 255 pour que le réglage %PWM soit le même pour chaque fréquence PWM. gamme 0 à100%.
il manque juste la validation ?
si tous les réglages par menu se font sur 2 digits, une seule fonction commune sera nécessaire,
encadrée , fonction(menu) par des : mini, maxi value et éventuellement position du digit
... simplifie le programme
après validation , il faudra ensuite convertir les unités physiques en points -> RAM -> Eeprom
=> Est-ce à dire qu'exclure la version avec potars est la bonne stratégie à retenir? Compatible avec un potentiel réglage via NCO ?
=> La validation concerne les valeurs des réglages ; et la sauvegarde concerne leur conversion en points, c'est bien çà ?
=> simplifier le programme : Je ne saisis pas bien ce que tu veux dire...
Remarque :
J'ai la mauvaise impression que le réglage envisagé de la fréquence PWM va hélas rester impossible, et que cette valeur sera donc à fixer "en dur"...
Je ne suis pas arrivé à déterminer la fréquence PWM utilisée à partir des composants sur la carte HS.
Tout ce que j'avais pu remarquer, c'était un bruit strident (qqs kHz?) lors du forçage en butée.
Je vais donc m'enquérir d'un générateur PWM (fréquence et duty) en tête d'une carte Ponts-en-H et faire des essais réels sur mes moteurs, histoire d'avoir une idée plus précise de ces valeurs.
A suivre
Portail lourd motorisé 2 vantaux 24v
- paulfjujo

Maître- Messages : 3257
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Babar64 a écrit :après validation , il faudra ensuite convertir les unités physiques en points -> RAM -> Eeprom
si on ne modifie que les unités physique ( avec visu sur LCD) on ne pourra pas verifier la modif , car c'est bien la valeur correspondante en points qui est utilisée dans l'application ..
il faut donc que la validation realise => la conversion en points et sauvegarde en RAM
nota : la partie modification de parametres est en dehors de la boucle principale
ou alors on est forcément avec vantaux portails sur butee..pas de commande portail engagée.
Le resultat d'une modif ne sera vue qu'apres coup.
sortie preventive du menu SANS validation ..les modifs sont abandonnées ?
sortie AVEC Validation ..les modifs sont transférées en Memoire de travail ..SANS sauvegarde en eeprom ?
..pour verifier le comportement
Menu specifique pour Sauvegarde des parametres en eeprom ?
Babar64 a écrit :=> Est-ce à dire qu'exclure la version avec potars est la bonne stratégie à retenir?
Compatible avec un potentiel réglage via NCO ?
Attendre la faisabilité d'usage du NCO, à la place de FOSC ou FOSC/4 , comme frequence de pilotage TMR2 ..
donc de la frequence du PWM .. le % duty-cycle PWM restant 0 à1023 pou 0 à 100% avec PR2 fixe=255
Babar64 a écrit :=> La validation concerne les valeurs des réglages ; et la sauvegarde concerne leur conversion en points, c'est bien çà ?
NON
on ne peut RIEN FAIRE avec les mesures affichées en unités physique, c'est juste un confort pour l'operateur
il faut les sauvegarder en points (avec mises à l'echelle UPH-> points) pour les utiliser..
Travailler dans la boucle principale avec des valeurs en unités physique ..demande beaucoup plus de ressources MCU
Remarque :
J'ai la mauvaise impression que le réglage envisagé de la fréquence PWM va hélas rester impossible, et que cette valeur sera donc à fixer "en dur"...
[/quote]
les possibilites actuelles :
Code : Tout sélectionner
REGISTER 22-5: TxCON: TIMERx CONTROL REGISTER
bit 6-4 CKPS<2:0>: Timerx-type Clock Prescale Select bits
Fosc/4 Fosc
111 = 1:128 Prescaler 488Hz 1 953
110 = 1:64 Prescaler 977Hz 3 906
101 = 1:32 Prescaler 1 953 Hz 7 813
100 = 1:16 Prescaler 3 906Hz 15 625
011 = 1:8 Prescaler 7 813 Hz 31250
010 = 1:4 Prescaler 15 625 Hz 62500
001 = 1:2 Prescaler 31 250 Hz 125000
000 = 1:1 Prescaler 62 500 Hz 250 000
7 choix possibles via le Prescaler ( et donc indirectement le diviseur) avec choix FOSC=64Mhz
7 autres choix possibles via le Presccaler ( et donc indirectement le diviseur) avec choix FOSC/4==16Mhz
Portail lourd motorisé 2 vantaux 24v
- paulfjujo

Maître- Messages : 3257
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
ça peut le faire avec NCO !
soit un reglage fin mais difficile avec un potar 270°
FrqNCO (Khz) = EA0*16* 64000000 / (2*2^20) =(EA0<<4)* 30.5176
Freq PMW (KHz) : = 1/( (1/FreqNCO) * (PR2+1)) =FrqNCO/256
si au lieu du potar analogique avec EA0 *16,
on progresse de 1 à 8 pas fixe de 511
soit en parcourant une table de valeurs
ou via une table de valeurs, pour des valeurs rondes 1,2,3,4,5,6,7,sauf 7.8
Ref_Increment[]={ 526,1050,1573,2097,2622,3146,3670,4095};
Test avec
EA0 => Fosc NCO ..donc Freq PWM1
et EA1=% PWM1
TEST REEL avec SQA analyser
plus de details et code complet ICI
ça peut le faire avec NCO !soit un reglage fin mais difficile avec un potar 270°
FrqNCO (Khz) = EA0*16* 64000000 / (2*2^20) =(EA0<<4)* 30.5176
Freq PMW (KHz) : = 1/( (1/FreqNCO) * (PR2+1)) =FrqNCO/256
EA0=526 FrqPWM= 1,003 KHz
EA0=1050 FrqPWM= 2,003 KHz
EA0=1573 FrqPWM= 3,000 KHz
EA0=2097 FrqPWM= 4,000 KHz
EA0=2622 FrqPWM= 5,003 KHz
EA0=3146 FrqPWM= 6,001 KHz
EA0=2670 FrqPMW= 7,000 Khz
EA0=4095 FrqPWM= 7,811 KHz
si au lieu du potar analogique avec EA0 *16,
on progresse de 1 à 8 pas fixe de 511
Incr=pas*511*16
correspondance :
PAS Freq
1... 975 Hz
2... 1949
3... 2944
4... 3899
5... 4873
6... 5848
7... 6823
8... 7797
soit en parcourant une table de valeurs
ou via une table de valeurs, pour des valeurs rondes 1,2,3,4,5,6,7,sauf 7.8
Ref_Increment[]={ 526,1050,1573,2097,2622,3146,3670,4095};
Test avec
EA0 => Fosc NCO ..donc Freq PWM1
et EA1=% PWM1
TEST REEL avec SQA analyser
j= 5 A0=00484 A1=00224 FStep=4195 Increment = 7744 Freq NCO Out= 236328 KHz PWM1= 56
j= 9 A0=00910 A1=00728 FStep=4195 Increment = 14560 Freq NCO Out= 444336 KHz PWM1= 182
j= 13 A0=01199 A1=00740 FStep=4195 Increment = 19184 Freq NCO Out= 585450 KHz PWM1= 185
j= 16 A0=01273 A1=02700 FStep=4195 Increment = 20368 Freq NCO Out= 621582 KHz PWM1= 675
j= 21 A0=01253 A1=03550 FStep=4195 Increment = 20048 Freq NCO Out= 611817 KHz PWM1= 887
j= 22 A0=01549 A1=03429 FStep=4195 Increment = 24784 Freq NCO Out= 756348 KHz PWM1= 857
j= 29 A0=01726 A1=03665 FStep=4195 Increment = 27616 Freq NCO Out= 842774 KHz PWM1= 916
j= 34 A0=02308 A1=03680 FStep=4195 Increment = 36928 Freq NCO Out= 1126954 KHz PWM1= 920
j= 45 A0=03951 A1=03656 FStep=4195 Increment = 63216 Freq NCO Out= 1929200 KHz PWM1= 914
j= 52 A0=04085 A1=01247 FStep=4195 Increment = 65360 Freq NCO Out= 1994630 KHz PWM1= 311
Code : Tout sélectionner
void main(void) {
// SYSTEM_Initialize();
OSCCON1 = 0x60; // NOSC HFINTOSC; NDIV 1;
OSCCON3 = 0x00; // CSWHOLD may proceed; SOSCPWR Low power;
OSCEN = 0x00;
OSCFRQ = 0x08; //64_MHz;
OSCTUNE = 0x10;
............
// ---------TMR2_Initialize();------------------------------------
//REGISTER 22-1: TxCLK: TIMERx CLOCK SELECTION REGISTER
// T2CLKCON = 0x01;// FOSC/4
// T2CLKCON = 0x02;// FOSC
T2CLKCON = 0x09;//NCO
//REGISTER 22-6: TxHLT: TIMERx HARDWARE LIMIT CONTROL REGISTER
//PSYNC CKPOL CKSYNC MODE<4:0>
//1 = PSYNC: TxTMR Prescaler Output is synchronized to Fosc/4
//0 = CKPOL: Rising edge of input clock clocks timer/prescaler
//1 CKSYNC: 1 = ON register bit is synchronized to T2TMR_clk input
//0000 MODE TABLE 22-1: TIMER2 OPERATING MODES
//T2HLT = 0x80;
T2HLT=0b10000000; //
T2RST = 0x04; // 04= CCP1 out
T2PR = 0xFF;// PR2 255
T2TMR = 0x00;
PIR4bits.TMR2IF = 0;
//REGISTER 22-5: TxCON: TIMERx CONTROL REGISTER
// ON CKPS<2:0> OUTPS<3:0>
// TMR2ON ON=1; T2CKPS=000=> 1:1; T2OUTPS=0 => 1:1;
T2CON = 0x80; // 0b1 000 0000
..........
CPrint("\r\n Init NCO1 à 10Khz \r\n");
Increment=3395;
j=0;
CPrint(" Init NCO (voir page 454 datasheet) \r\n");
NCO1CONbits.NCO1EN=0; // disable
//PFM: NCO1 Pulse Frequency Mode bit
// 1 = NCO1 operates in Pulse Frequency mode
// 0 = NCO1 operates in Fixed Duty Cycle mode, divide by 2
CPrint(" Polarity =0 (Not inverted) \r\n");
NCO1CONbits.NCO1POL=0; //0 = NCO1 output signal is not inverted 1=inverted
CPrint(" NCO1 operates in Fixed Duty Cycle mode 50% , divide by 2 (PFM=0)\r\n");
NCO1CONbits.PFM=0; //else Fixed duty cycle is 50%
pI=&Increment;
PWS_Valeur=0;
// The NCO clock source is selected by configuring
// the N1CKS<2:0> bits in the NCO1CLK register.
// 000 = NCO1 output is active for 1 input clock period
// 000 = NCO1 output is active for 1 input clock period
NCO1_Clock_Choix=1; // 0=FOSC 1=HFINTOSC 3=500Khz
CPrint (" NCO1CLK choix = ");
cx= NCO1_Clock_Choix+48;
PrintChar(cx);
CPrint (" soit ");
CPrint ( NCO1_Clock_Name[NCO1_Clock_Choix]);
CRLF1();
NCO1CLK= PWS_Valeur<<5 | NCO1_Clock_Choix ;
NCO1CONbits.NCO1EN=1; // enable
SQA=1;
__delay_ms(2500);
SQA=0;
// CPrint (" Freq Output= de 1KHz à 10Kz par pas de 1Khz: \r\n");
FStep=4195;
Increment=4195;
for(j=0;j<10;j++)
{
NCO1CONbits.NCO1EN=0; // disable
pI=&Increment;
NCO1INCU= *(pI+2);
NCO1INCH= *(pI+1);
NCO1INCL= *(pI+0);
NCO1CONbits.NCO1EN=1; // enable
//Foverflow= NCO clock /2 * Increment / 2^20 ; /1 048 576?
// F0= NCO1_Clock[NCO1_Clock_Choix];
// F0=F0 *(float)Increment / 2097152.0 ;
F0 = (float)Increment * 30.5176; // 64000000 / 2097152.0 = 30.5176
txt=&TEXTE[0];
sprintf(txt," j=%5d FStep=%lu Increment = %lu ",j,FStep,Increment);
Print(txt);
sprintf (CRam1," Freq Output= %8.3f KHz ",F0/1000);
Print (CRam1);
CRLF1();
SQA=1;
__delay_ms(150);
SQA=0;
Increment = Increment + FStep;
Led_Rouge_Toggle() ;
__delay_ms(2000);
Waiting_Enter_Key_Pressed();
}
CPrint(" ITB2 enable => Marche\r\n");
IBT2_Enable=1;
CPrint("\r\n Test Freq NCO avec EA0*16 et EA1=%PWM1 \r\n");
j=0;
do
{ // acquisition des 4 mesures ANA
Mesures_Analogiques();
sprintf(CRam1, " j=%5d A0=%05d A1=%05d",j, EA0, EA1);
Print(CRam1);
Increment = EA0 << 4 ; // EA0 * 16
NCO1CONbits.NCO1EN=0; // disable
pI=&Increment;
NCO1INCU= *(pI+2);
NCO1INCH= *(pI+1);
NCO1INCL= *(pI+0);
NCO1CONbits.NCO1EN=1; // enable
SQA=1;
Led_Rouge_Toggle() ;
F0 = (float)Increment * 30.5176;
txt=&TEXTE[0];
sprintf(txt," FStep=%lu Increment = %lu ",FStep,Increment);
Print(txt);
sprintf (CRam1," Freq NCO Out= %9.3f KHz ",F0/1000);
Print (CRam1);
k1_PWM=EA1>>2;
PWM1_LoadDutyValue(k1_PWM); // cde PWM Lent PONT M1
sprintf (CRam1," PWM1= %5d ", k1_PWM);
Print (CRam1);
CRLF1();
SQA=0;
__delay_ms(1000);
Waiting_Enter_Key_Pressed();
j++;
}
while(1);
.........................
plus de details et code complet ICI
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Portail lourd motorisé 2 vantaux 24v
- paulfjujo

Maître- Messages : 3257
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
à noter:
il n'y a qu'un seul NCO, on ne peut donc pas avoir de frequence differente entre un vantail ou l'autre,
..à part du simple au double via le prescaler ou utiliser FOSC,FOS/16 dans un cas à la place du NCO
d'un autre coté, avec les mêmes moteurs, pourquoi voudrait-on differencier la frequence..!
le Timer2 serait affecté à un vantail ( RC1 RC2 PWM outputs)
le Timer4 serait affecté à l'autre ventail ( RB0 RB5 PWM outputs)
chacun recevant la meme frequence de pilotage NCO ..
Le reglage duty %PWM etant liés à un timer
on peut quand meme regler la vitesse de chaque moteur.
Question:
vitesses differentes suivant les positions du Vantail :(f (position cames)..... vu
ET aussi ?
differentes entre sens Ouverture Ou Fermeture ?
(pertes mecanique trop differentes suivant le sens )
Rappel:
mes test concernent un seul driver PONT H Mosfet IBT2
validation MARCHE Pont H par RB5
cde %PWM1 en RC2 et %PWM2 en RC1
je n'ai qu'un seul (petit) moteur en test..
...eventuellement remplacé par ampoules 12V 10W ,pour l'effet visuel direct du %PWM
France/Allemagne
...mettre des avant-centre aux petits pieds ...
un 36 au lieu de 41 aurait peut-etre permis de valider le but refusé ...
dommage, l'aventure s'arrete là.
à noter:
il n'y a qu'un seul NCO, on ne peut donc pas avoir de frequence differente entre un vantail ou l'autre,
..à part du simple au double via le prescaler ou utiliser FOSC,FOS/16 dans un cas à la place du NCO
d'un autre coté, avec les mêmes moteurs, pourquoi voudrait-on differencier la frequence..!
le Timer2 serait affecté à un vantail ( RC1 RC2 PWM outputs)
le Timer4 serait affecté à l'autre ventail ( RB0 RB5 PWM outputs)
chacun recevant la meme frequence de pilotage NCO ..
Le reglage duty %PWM etant liés à un timer
on peut quand meme regler la vitesse de chaque moteur.
Question:
vitesses differentes suivant les positions du Vantail :(f (position cames)..... vu
ET aussi ?
differentes entre sens Ouverture Ou Fermeture ?
(pertes mecanique trop differentes suivant le sens )
Rappel:
mes test concernent un seul driver PONT H Mosfet IBT2
validation MARCHE Pont H par RB5
cde %PWM1 en RC2 et %PWM2 en RC1
je n'ai qu'un seul (petit) moteur en test..
...eventuellement remplacé par ampoules 12V 10W ,pour l'effet visuel direct du %PWM
France/Allemagne
...mettre des avant-centre aux petits pieds ...un 36 au lieu de 41 aurait peut-etre permis de valider le but refusé ...
dommage, l'aventure s'arrete là.
Portail lourd motorisé 2 vantaux 24v
LO à tous,
Inutile, oui ; c'est au cahier des charges
Oui ; c'est ce qui a été retenu.
J'essaie de décrire correctement les réglages avec leur conversion en points... Mais je reste dubitatif...
La feuille est protégée sans mot de passe.
A+
Euh... ça ne serait pas plutôt un 41 au lieu d'un 36 ? En tout cas le dernier péno aurait eu lui aussi besoin de plus de watts pour espérer échapper aux paluches de Ann-Katrin Berger... Mais on les aime toutes, ces footballeusespaulfjujo a écrit :un 36 au lieu de 41 aurait peut-être permis de valider le but refusé ...
paulfjujo a écrit :pourquoi voudrait-on différencier la fréquence..!
Inutile, oui ; c'est au cahier des chargespaulfjujo a écrit :le Timer2 serait affecté à un vantail ( RC1 RC2 PWM outputs)
le Timer4 serait affecté à l'autre vantail ( RB0 RB5 PWM outputs)
chacun recevant la même fréquence de pilotage NCO ..
Oui ; c'est ce qui a été retenu.Non. Elles étaient commues sur la carte d'origine, et tout se passait correctement. Mais effectivement, ce serait resté une vraie interrogation s'il s'était avéré une trop grande disparité aux moteurs, ou leur charge mécanique.paulfjujo a écrit :vitesses différentes entre sens Ouverture Ou Fermeture ?
J'essaie de décrire correctement les réglages avec leur conversion en points... Mais je reste dubitatif...
La feuille est protégée sans mot de passe.
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Portail lourd motorisé 2 vantaux 24v
- paulfjujo

Maître- Messages : 3257
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
je parlais du but refusé sur hors jeu..
le check montrant le bout du pied dépassant la limite materialisée du hors jeu
j'ai jeté un oeil sur ton fichier ...
Rappel : on ne peut pas regler un courant en fonction du %PWM
à moins d'etablir un modele predictif via tout une serie de mesures
et en considerant que le modele mecanique restera invariable ( et sans vent)
un relevé de la mesure de courant , enregistré pendant un deplacement de ventail
pourrait servir de signature mecanique de reference ...moyennant une option dans le menu
ou réalisée avant une mise en service officielle. .. ou systematique si la duree de boucle principale est suffisament faible.
Ne pas confondre la mise à l'echelle de la mesure de courant et celle du seuil d'alerte
le seuil d'alerte ..uniquement pour le STOP (Hardware) sur grosse anomalie
pourrait d'ailleurs rester inutile avec une Rserie cable + moteur >=6 ohms
et les seuil de courant, comparés à la mesure de courant, en live,
pour detecter un forçage mecanique ,
ou conjointement avec la tempo Brk si arrivé en butee,
le 1er des 2 arretant le PWM.
gamme de tempo 4.096sec ..jouable ?
Babar64 a écrit :... ça ne serait pas plutôt un 41 au lieu d'un 36 ?
je parlais du but refusé sur hors jeu..
le check montrant le bout du pied dépassant la limite materialisée du hors jeu
j'ai jeté un oeil sur ton fichier ...
Rappel : on ne peut pas regler un courant en fonction du %PWM
à moins d'etablir un modele predictif via tout une serie de mesures
et en considerant que le modele mecanique restera invariable ( et sans vent)
un relevé de la mesure de courant , enregistré pendant un deplacement de ventail
pourrait servir de signature mecanique de reference ...moyennant une option dans le menu
ou réalisée avant une mise en service officielle. .. ou systematique si la duree de boucle principale est suffisament faible.
Ne pas confondre la mise à l'echelle de la mesure de courant et celle du seuil d'alerte
le seuil d'alerte ..uniquement pour le STOP (Hardware) sur grosse anomalie
pourrait d'ailleurs rester inutile avec une Rserie cable + moteur >=6 ohms
et les seuil de courant, comparés à la mesure de courant, en live,
pour detecter un forçage mecanique ,
ou conjointement avec la tempo Brk si arrivé en butee,
le 1er des 2 arretant le PWM.
gamme de tempo 4.096sec ..jouable ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Portail lourd motorisé 2 vantaux 24v
Bonjour Paul, et à tous
On avance :
Les parties Amax_INA ; Amp_BRK et Tmp_BRK sont réglées.
De même les actions Sx1 à Sx3.
Pas de commentaires sur les Duty_LW et Duty_HI : c'est bon aussi ?
Il semble que tu n'aies pas pu consulter le fichier complet, joint plus tardivement, incluant la Fréquence PWM.
Bien entendu ces limites devront être inférieures à celles des ALERT aux INA (Amax_INA) et du courant de blocage (Amp_BRK).
Sauf erreur, on n'aura pas le même ampérage en vitesse lente qu'en vitesse rapide ; les seuils dépendent donc de la vitesse active en cours : c'est la raison pour laquelle je tiens compte du % des duty pour déterminer Amax_LW et Amax_HI.
Toutefois, il est probable que la limite en courant Amax_LW soit trop faible et déclenche au démarrage.
Il faudra très certainement prévoir de l'inhiber pendant quelques dixièmes de secondes.
A suivre.
Oui ; complètement. on retient ça.paulfjujo a écrit :gamme de tempo 4.096sec ..jouable ?
Yes!paulfjujo a écrit :Ne pas confondre la mise à l'échelle de la mesure de courant et celle du seuil d'alerte
On avance :
Les parties Amax_INA ; Amp_BRK et Tmp_BRK sont réglées.
De même les actions Sx1 à Sx3.
Pas de commentaires sur les Duty_LW et Duty_HI : c'est bon aussi ?
Il semble que tu n'aies pas pu consulter le fichier complet, joint plus tardivement, incluant la Fréquence PWM.
Oui! Mais je ne me suis pas fait bien comprendre sur ce point : je ne veux pas régler le courant en fonction des % Duty_LW et Duty_HI, mais pouvoir régler une limite en courant pour chacune de ces vitesses (Amax_LW et Amax_HI), provoquant un arrêt en cas d'un obstacle qui n'aurait pas été détecté par les cellules ou le palpeur (ceinture et bretelles).paulfjujo a écrit :Rappel : on ne peut pas régler un courant en fonction du %PWM
Bien entendu ces limites devront être inférieures à celles des ALERT aux INA (Amax_INA) et du courant de blocage (Amp_BRK).
Sauf erreur, on n'aura pas le même ampérage en vitesse lente qu'en vitesse rapide ; les seuils dépendent donc de la vitesse active en cours : c'est la raison pour laquelle je tiens compte du % des duty pour déterminer Amax_LW et Amax_HI.
Toutefois, il est probable que la limite en courant Amax_LW soit trop faible et déclenche au démarrage.
Il faudra très certainement prévoir de l'inhiber pendant quelques dixièmes de secondes.
A suivre.
Portail lourd motorisé 2 vantaux 24v
- paulfjujo

Maître- Messages : 3257
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
Probleme sur la ref PWM
avec un step de 526 point ..et une consigne analogique via EA0 ...............7,8Khz maxi
on est limité par le maxi ADC si solution potar EA0
mais avec des BP incr on peut depasser le 4096! et probablement atteindre 30KHz
MAIS reste à verifier la limite maxi de Freq NCO
... à verifier
il faudra donc avoir un menu pour
* reglage de %PWM pour vitesse lente
0 à1023 pour 0 à 100% PMW
* reglage de %PWM pour vitesse Rapide
* reglage seuil Amp pour vitesse Lente
* reglage seuil Amp pour vitesse Rapide
les amperes sont plutot liés au couple resistant mecanique
et bien plus faiblement à la difference de vitesse ..
il faudrait verifier quelle est la part du Cable et de l'induit
sur la mesure globale de ~6ohms (moteur + cable)
influence de R cable (chute R*I)
Que faire si on atteint une de ces limites => Arret moteur ?
La mesure de courant INA devra donc etre constament rafraichie ...
à chaque tour de boucle minimum ....
NOTA: ne peut pas etre l'inclure dans une interruption timer ..I2C non rérentrant.
Probleme sur la ref PWM
avec un step de 526 point ..et une consigne analogique via EA0 ...............7,8Khz maxi
on est limité par le maxi ADC si solution potar EA0
mais avec des BP incr on peut depasser le 4096! et probablement atteindre 30KHz
MAIS reste à verifier la limite maxi de Freq NCO
... à verifier il faudra donc avoir un menu pour
* reglage de %PWM pour vitesse lente
0 à1023 pour 0 à 100% PMW
* reglage de %PWM pour vitesse Rapide
* reglage seuil Amp pour vitesse Lente
* reglage seuil Amp pour vitesse Rapide
les amperes sont plutot liés au couple resistant mecanique
et bien plus faiblement à la difference de vitesse ..
il faudrait verifier quelle est la part du Cable et de l'induit
sur la mesure globale de ~6ohms (moteur + cable)
influence de R cable (chute R*I)
Que faire si on atteint une de ces limites => Arret moteur ?
La mesure de courant INA devra donc etre constament rafraichie ...
à chaque tour de boucle minimum ....
NOTA: ne peut pas etre l'inclure dans une interruption timer ..I2C non rérentrant.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Portail lourd motorisé 2 vantaux 24v
Je viens de rentrer... et je jette un oeil avant le dodo

Pour les mesures ohmiques câble / induit, je vois ça après ma (courte) nuit.
A+
Ouipaulfjujo a écrit :Source du message il faudra donc avoir un menu pour
* reglage de %PWM pour vitesse lente
0 à1023 pour 0 à 100% PMW
* reglage de %PWM pour vitesse Rapide
* reglage seuil Amp pour vitesse Lente
* reglage seuil Amp pour vitesse Rapide
Oui, via la sortie STOP_outPA4 (pin6 du PIC)paulfjujo a écrit :Source du message Que faire si on atteint une de ces limites => Arret moteur ?
Bien sûr, mais, sur ton site, je n'ai pas compris comment récupérer cette mesure...paulfjujo a écrit :Source du message La mesure de courant INA devra donc être constamment rafraichie ...
à chaque tour de boucle minimum ....
Pour les mesures ohmiques câble / induit, je vois ça après ma (courte) nuit.
A+
Portail lourd motorisé 2 vantaux 24v
- paulfjujo

Maître- Messages : 3257
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
l'init INA à faire au moins 1 fois, apres calibrage des parametres... pour chaque vantail
Init_INA226_Done=1;
pour 1 vantail :
Mesures_INA226();
Volts =(float) mvU * 0.00125 ;
Amps =(float) mvA * 0.00025 ;
sprintf(CRam1," %2.2f V %2.3f A .",Volts,Amps);
Print(CRam1);
LCD_Write_Text_At(3,1,CRam1);
on pourrait se passer de la mesure tension d'induit ...?
et dans le main, boucle principale
il faudra adapter la calibration INA ... car mes tests ont été faits sur un petit moteur < 250mA
2 mesures INA ..avec 2 adresse I2C en parametre pour le choix de vantail.(moteur)
le parametrage des 2 devrait etre identique .
certaines mesures / parametres INA pourront être éliminés pour simplifier
ex: mesure de puissance, mesure de tension induit , detection ALERTE (puisqu'on est en hardware)
l'init INA à faire au moins 1 fois, apres calibrage des parametres... pour chaque vantail
Init_INA226_Done=1;
pour 1 vantail :
Mesures_INA226();
Volts =(float) mvU * 0.00125 ;
Amps =(float) mvA * 0.00025 ;
sprintf(CRam1," %2.2f V %2.3f A .",Volts,Amps);
Print(CRam1);
LCD_Write_Text_At(3,1,CRam1);
on pourrait se passer de la mesure tension d'induit ...?
Code : Tout sélectionner
#ifdef With_INA226
#define INA226_ADDR 0x40 // sur 7 bits
// Conversion time in microseconds
#define CONV_TIME_140 0
#define CONV_TIME_204 1
#define CONV_TIME_332 2
#define CONV_TIME_588 3
#define CONV_TIME_1100 4
#define CONV_TIME_2116 5
#define CONV_TIME_4156 6
#define CONV_TIME_8244 7
// INA226_measureMode;
#define INA226_POWER_DOWN 0x00
#define INA226_TRIGGERED 0x03
#define INA226_CONTINUOUS 0x077
// INA226_ALERT_TYPE
#define SHUNT_OVER 0x8000
#define SHUNT_UNDER 0x4000
#define BUS_OVER 0x2000
#define BUS_UNDER 0x1000
#define POWER_OVER 0x0800
#define CURRENT_OVER 0xFFFE
#define CURRENT_UNDER 0xFFFF
#define INA226_CONF_REG 0x00 //Configuration Register
#define INA226_SHUNT_REG 0x01 //Shunt Voltage Register
#define INA226_BUS_REG 0x02 //Bus Voltage Register
#define INA226_PWR_REG 0x03 //Power Register
#define INA226_CURRENT_REG 0x04 //Current flowing through Shunt
#define INA226_CAL_REG 0x05 //Calibration Register
#define INA226_MASK_EN_REG 0x06 //Mask/Enable Register
#define INA226_ALERT_LIMIT_REG 0x07 //Alert Limit Register
#define INA226_MAN_ID_REG 0xFE //Contains Unique Manbufacturer Identification Number
#define INA226_ID_REG 0xFF //Contains unique ID
/* parameters, flag bits */
uint16_t INA226_RST =0x8000; //Reset
uint16_t INA226_AFF =0x0010; //Alert function flag
uint16_t INA226_CVRF =0x0008; //Conversion ready flag
uint16_t INA226_OVF =0x0004; //Overflow flags AFF
uint16_t INA226_ALERT_POL =0x0002; //Alert pin polarity - if set then active-high
//Latch enable - if set then alert flag remains until mask/enable register is read
//if not set then flag is cleared after next conversion within limits
uint16_t INA226_LATCH_EN =0x0001;
//--- INA226-----
int16_t mvA=0;
uint16_t mvU=0; // toujours positif
float Power=0.0;
int16_t mA=0;
float Amps=0.00;
float Volts=0.00;
float Seuil_Alerte=0.0;
uint8_t AFF_Flag=0;
uint16_t ALERTE_STATUS=0;
void INA226_Init_Config(void);
#endif
#ifdef With_INA226
void INA226_Init_Config(void)
{
CPrint(" Config INA226_CONF_REG,0x43FF (was 0x4127 )\r\n");
p1=&tmp[0];
// Addr=0x40; // INA226_ADDR 0x40 8 bits;
// configuration RST AVGX VBUSCTX VSHCTX MODEx // 16-bits
// AVG2 AVG1 AVG0 bit 9 à 11
// 0 => 1 1 => 4 2-> 8 3-> 16 4 -> 128 ...... 7 -> 1024
//Reset 1 dumy 000 NbAverage 011= 3 => 64mS
// conversion Time Vbus 100=1,1mS conversion Time SHuntV 100=1,1mS
// mode 111 Shunt & bus continuous
// 0b 0 000 001 Vbus 011 Vsht 111 mode 111;
// 0b 0100 0011 0011 1111;
// V.O. INA226_Write_16bits_Register(INA226_CONF_REG,0x4127);
tmp[0]=INA226_CONF_REG;
tmp[1]=0x47; // 64 ms average Vbus 1.1mS VSh 1.1mS
tmp[2]=0x3F; // shunt convertion time 8.24mS mode continu
Addr=INA226_ADDR;
// I2C1CON2bits.ABD=1;
cx=3;
I2C1_WriteNBytes(Addr, p1, cx);
// CPrint(" Calibration register 05h <- 0x0034 (shunt 0,1 ohm) \r\n");
CPrint(" Calibration register 05h (pour shunt 0,01 ohm et 8 Amps) \r\n");
// 0x00D1B
tmp[0]=INA226_CAL_REG; //5120 =>0x1400
tmp[1]=0x00; // 0x00;// pour shunt 0,1
tmp[2]=0x14; // 0x34;//pour shunt 0,1
Addr=INA226_ADDR;
p1=&tmp[0];
cx=3;
I2C1_WriteNBytes(Addr, p1,cx);
// Mask / Enale Register
// SOL/SUL shunt voltage over/Under Limit Alert
// BOL /BUL Bus Voltage Over/Under Limit Alert
// POL :Power Over limit Alert
// CNVR Convertion Readdy Alert
// 0b 1 0 0 0 0 0 0 0
// shunt Over alert
// // 0b 0 0 0 AFF CVRF OVF APOL LEN
// AFF Alarm Fonction Flag aune limite a été franchie !
// CVRF conversion Ready Flag mesure OK OVF : Overflow Flag debordement d'un registre
// APOL= Alert polarity=active high with APOL=0
// LEN=1 =Alarme Latche enable
CPrint(" Mask/Alert MASK_EN_REG register 06h <- 0x8001\r\n");
// 0x00D1B
tmp[0]=INA226_MASK_EN_REG;
tmp[1]=0x80;
tmp[2]=0x01; // avec latch_EN=1
Addr=INA226_ADDR;
p1=&tmp[0];
cx=3;
I2C1_WriteNBytes(Addr, p1, cx);
// CPrint(" Alert MASK_EN_REG register 07h <- 24000 pour 6 A\r\n");
// tmp[0]=INA226_ALERT_LIMIT_REG;
// // 24000 pour 6Amps
// tmp[1]=0x5D;
// tmp[2]=0xC0;
CPrint(" Alert MASK_EN_REG register 07h <- 2400 pour 0.6 A\r\n");
tmp[0]=INA226_ALERT_LIMIT_REG;
// 2400 pour 0.6Amps
tmp[1]=0x09;
tmp[2]=0x60;
Addr=INA226_ADDR;
p1=&tmp[0];
cx=3;
I2C1_WriteNBytes(Addr, p1, cx);
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_CURRENT_REG, p1,3);
k=(tmp[0]<<8) + tmp[1];
sprintf(CRam1," Mesure de courant % 5d mA \r\n",k);
Print(CRam1);
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_ALERT_LIMIT_REG, p1,3);
k=(tmp[0]<<8) + tmp[1];
Seuil_Alerte= 8.192 * (float)k / 32768;
sprintf(CRam1," Seuil d'alerte %3.3f Amperes\r\n",Seuil_Alerte);
Print(CRam1);
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
tmp[2]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_MAN_ID_REG, p1,3); // 2260
k=(tmp[0]<<8) + tmp[1];
sprintf(CRam1," INA Manufactuer 0x%04X\r\n",k);
Print(CRam1);
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
tmp[2]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_ID_REG, p1,3); // 2260
k=(tmp[0]<<8) + tmp[1];
sprintf(CRam1," INA Identifiant 0x%04X\r\n",k);
Print(CRam1);
CPrint(" Fin de parametrage INA226... OK\r\n\r\n");
}
int Lecture_INA_mA()
{
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_CURRENT_REG,p1,3);
mA=(tmp[0]<<8) + tmp[1];
return(mA);
}
void Mesures_INA226(void)
{
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_BUS_REG, p1,3);
mvU=(tmp[0]<<8) + tmp[1];
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_SHUNT_REG,p1,3);
mvA=(tmp[0]<<8) + tmp[1];
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_ALERT_LIMIT_REG, p1,3);
k=(tmp[0]<<8) + tmp[1];
Seuil_Alerte= 8.192 * (float)k / 32768;
// sprintf(CRam1," Seuil d'alerte %3.3f Amperes\r\n",Seuil_Alerte);
// Print(CRam1);
Addr=INA226_ADDR;
tmp[0]=0; tmp[1]=0;
p1=&tmp[0]; // pointeur sur debut de table
I2C1_ReadDataBlock(Addr,INA226_MASK_EN_REG,p1,2);
ALERTE_STATUS= (tmp[0]<<8) + tmp[1];
AFF_Flag=(ALERTE_STATUS & 0x00F0)>>4;
if(AFF_Flag==1) Led_Rouge=0; // allume led
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_CURRENT_REG, p1,3);
mA=(tmp[0]<<8) + tmp[1];
// sprintf(CRam1," Mesure de courant % 5d mA \r\n",mA);
// Print(CRam1);
Addr= INA226_ADDR;
tmp[0]=0;
tmp[1]=0;
p1=&tmp[0];
I2C1_ReadDataBlock(Addr,INA226_PWR_REG, p1,3);
k=(tmp[0]<<8) + tmp[1];
Power= (float)k / 2500.0;
}
#endif
et dans le main, boucle principale
Code : Tout sélectionner
#ifdef With_INA226
Mesures_INA226();
Addr=LCD_ADDR;
// sprintf(CRam1," mvA=% 5d mvU=% 5d ",mvA,mvU);
// LCD_Write_Text_At(2,1,CRam1);
// strcat(txt,CRam1);
// Print(CRam1);
Volts = mvU * 1.25 / 1000;
Amps = mvA * 2.5/10000.0; // (5120/2048=2.5)
sprintf(CRam1," %2.2f V %2.3f A .",Volts,Amps);
if (AFF_Flag==1)
{
*(CRam1+19)='O';
IBT2_Enable=0;
k1_PWM=0;k2_PWM=0;
PWM1_LoadDutyValue(0);
PWM2_LoadDutyValue(0);
CPrint("\r\n Alarm Over_current ..faire un reset\r\n");
}
Print(CRam1);
LCD_Write_Text_At(3,1,CRam1);
Power=Volts*Amps;
sprintf(CRam1," %3.3f W Seuil=%3.3f ",Power,Seuil_Alerte);
Print(CRam1);
LCD_Write_Text_At(4,1,CRam1);
CRam1[0]=0;
CRLF1();
Nb_Boucles ++;
#endif
il faudra adapter la calibration INA ... car mes tests ont été faits sur un petit moteur < 250mA
2 mesures INA ..avec 2 adresse I2C en parametre pour le choix de vantail.(moteur)
le parametrage des 2 devrait etre identique .
certaines mesures / parametres INA pourront être éliminés pour simplifier
ex: mesure de puissance, mesure de tension induit , detection ALERTE (puisqu'on est en hardware)
Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 13 invités

