![]() |
|
Lineariser la sortie Triac en mode découpe Sinus (Sujet clos temporairement) - Version imprimable +- F1ATB forum (https://f1atb.fr/forum_f1atb) +-- Forum : Forum de F1ATB (https://f1atb.fr/forum_f1atb/forum-3.html) +--- Forum : Routeur Photovoltaïque (https://f1atb.fr/forum_f1atb/forum-4.html) +---- Forum : Evolutions faites, à faire, dont vous rêvez... (https://f1atb.fr/forum_f1atb/forum-10.html) +---- Sujet : Lineariser la sortie Triac en mode découpe Sinus (Sujet clos temporairement) (/thread-2454.html) |
RE: Lineariser la sortie Triac en mode découpe Sinus - Lolo69 - 24-03-2026 Merci Laurent53 pour cette optimisation. RE: Lineariser la sortie Triac en mode découpe Sinus - 59jag - 24-03-2026 (24-03-2026, 09:18 AM)Mike a écrit : Par curiosité j'ai tracé les courbes du polynôme de Lolo et de x - sin(x) afin de comparer. oui mais moi c etait pour x varie entre 0 et 2*PI essaye la meme chose avec la correction que j ai dit au premier poste avec cette fonction -> x + 16*sin(2*PI* x/100) ca c est la theorie sinon le code est simple pas de sinus a calculer ou calcul complexe juste 2 a 3 lignes de codes pour la correction PID RE: Lineariser la sortie Triac en mode découpe Sinus - Lolo69 - 24-03-2026 Ta théorie ne tient pas debout. Au lieu de palabrer sors nous les lignes de codes pour linéariser ça sera plus utile Le code est si facile ça devrait aller vite, je ne comprends pas pourquoi André ne l a pas déjà fait On est encore très loin. RE: Lineariser la sortie Triac en mode découpe Sinus - 59jag - 25-03-2026 (24-03-2026, 10:28 PM)Lolo69 a écrit : Ta théorie ne tient pas debout. Au lieu de palabrer sors nous les lignes de codes pour linéariser ça sera plus utile c est pas ma théorie .c est juste des maths j ai pas sorti cette equation comme ca . j ai juste simplifier 100/2*pi qui vaut 15.9..... a 16 car le pid c est en nombre entier. pour le code dans 16*sin(2*PI* x/100) on a 4 symetries faut juste faire un tableau de 25 int8 avec les valeurs de correction . et additionner ou soustraire la valeur du tableau au pid. RE: Lineariser la sortie Triac en mode découpe Sinus - Lolo69 - 25-03-2026 Ton approche est très intéressante car digne d un programmeur hors pair qui maîtrise la discretisation j y avait pensé, mais je ne trouve pas ça « élégant » ça veut dire faire des interpolations linéaires entre 2 points avec des cassures aux jointures. En terme de précision ok ça passe , en temps processeur c est pas mieux et il faut encore remplir des tables et donc un peu de RAM. J ai horreur de ça ;-) Ça veut dire aussi linearisation après être passé en Int là aussi ça crée des pulses sur le PID ( donc du filtrage donc du retard de phase) et perte de continuité dans la commande. La méthode polynôme permet indirectement de passer à une régulation derrière la virgule … pour une ouverture calculée et affichée à 5 le polynôme est capable d ajuster le retard entre 4,5 et 5,49 réel Chacun son point de vue je trouve plus simple de rajouter une ligne pour un polynôme J ai hâte de pouvoir comparer le résultat des 2 approches, en attendant bon routage à tous. PS: J'ai remis à jour la modif de code dans les pages précédentes pour prendre en compte les remarques eclairées de Mike et Laurent53, merci à eux RE: Lineariser la sortie Triac en mode découpe Sinus - F6AAM - 25-03-2026 Bravo Lolo69 et Mike pour cette linéarisation de la courbe puissance triac = f (pourcentage). La méthode employée (polynôme) est certainement la plus rapide. Cela va améliorer le comportement de la boucle d'asservissement qui devient linéaire, ce qui n'était pas le cas avec la découpe sinus par le triac. De plus il devient plus agréable de constater la linéarité entre le pourcentage et la puissance comme cela est le cas dans les modes demi-sinus, multi-sinus et train de sinus. RE: Lineariser la sortie Triac en mode découpe Sinus - 59jag - 25-03-2026 (25-03-2026, 08:14 AM)Lolo69 a écrit : ça veut dire faire des interpolations linéaires entre 2 points avec des cassures aux jointures. j ai pas tous compris. je fait pas t interpolations ??? pour ce qui est de remplir la table c est une fois au démarrage de l Esp comme on fait pour le mode Multi-sinus qui rempli 2 tableaux de 100 int8 , que l on peux utiliser 1 seul suffit donc aucune memoire supplémentaire supplémentaire. pour ce qui est de la vitesse juste lire la correction dans tableau ca prend c est 2 cyles horloges, pour ton polynôme pas compté mais chatgpt dit 80 a 100 cyles faudra vérifié en reel le temps. Par contre, c'est Retard[i] qui est un int — c'est l'arrondi de RetardF : Retard[i] = round(RetardF[i]); Et c'est cet entier Retard[i] qui pilote le timer du triac dans onTimer() : Donc la précision du calcul en float est perdue à la conversion en entier. Le PID travaille finement en interne (les décimales permettent une accumulation progressive de l'intégrale), mais la commande réelle du triac n'a que 100 pas de résolution. oui le test tranchera RE: Lineariser la sortie Triac en mode découpe Sinus - Lolo69 - 25-03-2026 Et non dommage que tu sois aussi obstiné ça te rend aveugle . Je rend aussi hommage à Mr Bresenham grand mathématicien et informaticien dont les travaux m’inspirent beaucoup Réfléchis un peu à la précison et tu réviseras ce que c est qu un regulateur PID et que justement c est l accumulation interne qui déstabilise toutes la boucle . La commande ayant effectivement que 100 pas il ne faut pas les gaspiller avant … Bref j’ attend ton code avec impatience pour comparer les courbes mais je suis serein , meme si je m’en fout je connais déjà le résultat. En attendant mon esp32 passe 56 cycles pour calculer le polynôme avec des cycles max sur les 2 cœurs à 50ms. Comme le cache est bien chaud pas de latence pour aller lire un tableau en dram. Admettons 100 cycles ça fait jamais que 400nanoS sur des cycles PID à 200ms ça laisse de la marge Tes tableaux lisent des indexes en float ? RE: Lineariser la sortie Triac en mode découpe Sinus - Lolo69 - 27-03-2026 En attendant la méthode de 59Jag, vous pouvez donc tester la méthode Polynôme qui fonctionne parfaitement chez moi sans engendrer aucun reset ESP depuis 1 semaine Pour cela il suffit d'inserer les quelques lignes de code ci-dessous dans le fichier Solar_routeur_v17_06 , entre la ligne 1746 et 1748 (RetardF[i] = constrain(RetardF[i], 0.0, 100.0) Code : //LBE Linearisation mode decoupe sinus uniquement faire un if mode decoupe sinus plus tard Pour expliquer un peu mieux comment cela fonctionne , avec l'image ci dessous prenons un exemple avec Sortie PID = 20% à 20 % de sortie si on ne linearise pas on va donc aller sur la courbe bleue, donc 5 % de puissance. , c est à dire un ratio de 20/5 = 4 à ce point de fonctionnenement le probleme est que passe à 40% sur la courbe bleue on a 30% c est à dire un ratio de 40/30= 1.33 ce qui est très différent du point de fonctionnement précédent, donc le PID ne sait pas comment agir, et le reglage PID bon a un point sera mauvais à l'autre , entrainant une mauvaise performance Avec la linearisation , on va aller sur la courbe violette ( Polynome simplfié ou la courbe Verte calcul par regression de Newton) à 20% de sortie PID la courbe violette donne 5 à 5 la courbe violette donne 20 Donc 20 donne 20 Yessss c est lineaire ( ratio 20/20 =1) Si vous faites l exercice à PID=40 % vous arriverez aussi 40% donne 40 Yessssss c est lineaire ( ratio 40/40 =1) et ca c est très bon pour regler le PID de façon très réactive sans partir en osclliation ( je vous laisse voir les messages au début de cette discussion pour voir les résultats) Pour aller plus loin, l'interet du polynome par rapport à une table de correspondance c 'est que c est un calcul continu, sans arrondi Exemple si PID OUT=10.5 % le polynome va piloter le triac à 28 % ( la valeur idéale) la où une table oscillerait en permanence entre 27 et 29 generant du flickering RE: Lineariser la sortie Triac en mode découpe Sinus (Sujet clos temporairement) - alexandeur - 28-03-2026 question tu utilises , ta modification de pid plus reactif avec la linéarisation , les 2 peuvent fonctionner ensemble , ou ca creer probleme ? |