J'ai fait une temporisation sérielle ( T1 programmable commande T2 programmable commande T3 programmable commande T4 prorammable ) .
Cela me donne 2 impulsions dont les "1" on, et les "0" off sont programmables .
J'ai fait ce montage en hard avec des monostables en série , et j'arrive à une précision de 1% entre chaque tempo , pour une même valeur affichée T1=T2=T3=T4 .
Mes tempos sont " programmables " par rotacteurs de 1 ms à 90 ms .
A noter je peux répéter, le cycle T1+T2+T3+T4 2048 fois via un compteur 12 bits .
Mes tempos serviront à faire de la soudure de plaques aluminium 2 fois 2 mm ( soudure par points classique impossible à cause de la fusion liquide de l'alu ) , par décharge de condensateurs commandé par 100 MOSFET en // , ...commutateurs à 100 MOSFET en //... déjà opérationnel.
Voir sur le forum usinages.com à soudeuse à décharges de condensateurs .
Un prototype "1" avec 32 MOSFET 195 A/100V en // , et une batterie de 2 condensateurs 75000µF/100V , a fonctionné sous 15 Volts ( car oscillations au dessus ) ...mais sans soudure.
Notre conclusion => l'ESR des condos était trop élevé 4 milli Ohms ainsi que le r DS"on" des MOSFET=>400 µ Oms , devant la résistance soudure=>800 µ Ohms .
Toute l'énergie ( plus de 80 %) est consommée ailleurs que dans la soudure.
Ma demande de tempo sérielle avec 3 voir 4 T "on" et 4 T "off" , est lié au fait qu'il faut un fort courant 2500 à 3500 A sur un temps court 1 à 50 ms en "on" , avec une progression de type 1 ms ( pré chauffage ) 5 ms ( pré soudure ) , 10 ms seconde ( forgeage) ,20 ms ( soudure) ...avec des temps de repos ajustables/réglables entre chaque T "on" .
Pourquoi ces précaution => l'alu est fluide ( très ductile et , malléable) et ne se tient pas à la fusion ...trou et éclaboussures .
J'ai a donc fait un proto "2" avec 100 MOSFET en // => r "DS"on =60 µ Ohms ( datas sheet infos ) , et 20 super condensateurs 2.7V/ 500 Farads en // =>ESR=400 µ Ohms .
Ma tempo hard est opérationnele précise , mais avec une progression de 1.4 entre 1 ms et 90 ms .
Les effets des forts courants ( cem) a été prévu => boitier alu pour la commande des tempos , chasis/boitier en tôle fer pour l'ensemble ...filtre anti sortie HF sur l'entrée 230 V , cage en grillage anti parasite autour de la soudeuse .
J'atteints quand même une précision de 1 %.
Avec un Arduino , ou un Rasperry pi , peut on espérer plus précis .
Quelqu'un a t-il déjà programmé ou planché sur un tel projet...?
Merci de vos réponses .
Amicalement .
Jac .
- Edité par JacquesVergneau 2 septembre 2020 à 0:42:27
Non j'ai déjà réalisé une tempo avec 4 monostables en série ( je me répète , mais bon ) , ces 4 tempos sont "programmables de 1 à 90 ms , et se déclenchent les unes les autres.
Résultat en sortie j'ai T1+T2+T3+T4.
Je voudrais savoir si avec un Arduino nano on peut faire la même chose .
Dois-je donner mon schéma ,...ou faire un croquis , pour plus de précision .
J'utilise une batterie de super condensateurs ( 20 en // de 500 Farads ) de 10 000 Farads sous 2.5 V ...opérationnelle.
J'ai 31.25 k Joules d'énergie disponible ...ce qui devrait être largement suffisant pour souder des tôles alu de 2 fois 2 mm.
J'utilise un commutateur électronique à 100 MOSFET en // pouvant commuter 100 fois 110 Ampères max soit 11 000 Ampères max théoriques , commandé par une minuterie à 4 tempos sérielles , dont les t"on" et "off" peuvent être programmé de 1 ms à 90 ms ....opérationnels.
Le but envoyer des impulsions brèves ( 1 à 90ms ) sous fort courant (3500 ampères max soit 2.5 V:0.7 milliOhms==> rDS"on MOSFET +ESR super condensateurs +r soudure=0.7 m Ohms )...de façon à monter la température de l'alu proche de la fusion et répéter plusieurs fois l'opération.
L'astuce : par cette manip , la température sera plus haute au coeur de l'aluminium au contact des 2 plaques à souder , la chaleur se dissipant plus vers l'extérieur ...et donc la soudure se fera au contact des 2 tôles , et l'aluminium ne devrait pas dégouliner vers l'extérieur ( aluminium fondu très liquide impossible à souder par points ) .
Par expérience on devra déterminer quelle largeur d'impulsion il faut en "on" et "off" , et combien de fois on devra répéter le cycle T1+T2+T3+T4 ...
Avec le forum usinages.com ( sujet soudeuse à décharge de condensateurs ), nous sommes sur ce projet depuis 4 ans .
Les premiers essais devraient commencer d'ici quelques semaines .
Une tempo " soft" avec un Arduino nano programmé en C++ serait facile à dupliquer pour tous , une fois les durées trouvées par expérience dans le dur des tôles alu avec ma tempo "hard".
Ma tempo "hard" sera plus rapide avec ces 4 commutateurs 12 positions à utiliser , qu'une tempo "soft" ...mais la conception sur circuit imprimé ne sera sans doute pas aisée pour tout le monde .
D'où programmer un Arduino nano déjà monté et pas cher.
Amicalement .
Jac .
- Edité par JacquesVergneau 31 août 2020 à 16:23:03
Le fait est que tu es sur un forum C++ ici, et non sur un forum d'électronique.
Cela implique que les gens pourront -- éventuellement -- t'aider à programmer ton rasperry ou ton arudino (à condition peut-être d'avoir un code sur lequel "travailler"), mais qu'il y a très peu de chance que tu trouve quelqu'un qui soit suffisamment doué en électronique pour répondre à cette question très (trop) spécifique.
Pour ma part, j'ai "à peu près" compris ce que tu explique, mais les explications que mes maigres compétences (n'étant pas electronicien) me permettent sont:
un arduino uno "de base" a une fréquence d'horloge de base de 16 MhZ, ce qui devrait permettre (à condition d'être codé correctement) au code d'apporter une précision supérieure
les temps "de charge" et de "décharge" des condensateur dépendent essentiellement de la résistance du système (exprimée en Ohms) et de la capacité du condensateur (exprimée en Farah) selon la formule Temps (en seconde) = R * C
En pratique, on se contente souvent d'atteindre +/- 60 % de la capacité du condensateur à la charge et à +/- 30 % de sa capacité à la décharge
Pour ce que j'en sais, l'obtention d'un arc électrique pour provoquer la soudure à partir de condensateur nécessite des condensateur à très grosse capacité à voltage élevé (mais je peux me tromper). Tu ne pourras donc en aucun cas descendre descendre en dessous du temps nécessaire à la charge des condensateurs (entre deux soudures) ni à un temps de soudure inférieur au temps de décharge de ceux-ci.
les circuits "basse tension" (arduino) et "haute tension" doivent être totalement isolés l'un de l'autre pour éviter les risque, ce qui implique d'utiliser des relais spécifiques. Relais qui mettront -- forcément -- "un certain temps" à s'ouvrir et à se fermer.
Tout cela pris en compte doit nous rappeler que la capacité maximale d'une chaine dépend de la force de son maillon le plus faible, et qu'il n'y a rien à faire: si arduino (correctement programmé) devrait pouvoir permettre des séquences plus petites que 50ms, le reste de la chaine sera limité par le "plus long temps" pris par les autres composants pour obtenir le résultat voulu, à savoir
les 50 ms minimum requis par les roacteurs
le temps de charge / décharge des condensateurs
le temps d'ouverture / fermeture des relais entre haute et basse tensions.
Comme on ne dispose d'aucune donnée technique pour les deux derniers éléments (bon, j'avoue, je ne les ai pas cherchées non plus ) , il devient pour le moins difficile de répondre de manière plus précise à ta question
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Notre pote Abimen du forum "usinages.com" me transmet ce bout de programme en C pour un Arduino .
Quelqu'un peut-il vérifier .
Merci de votre attention .
Void setup( ) {
pinMode(13,output); // met la patte 13 en mode sortie .
}
void loop( ) {
digitalWrite(13, HIGHT); // patte 13 à 5 Volts .
delay (20) ; //attente 20 ms
digitalWrite(13,LOW); // patte 13 à 0 Volt .
delay(300); //attente 300ms.
digitalWrite(13,Hight) ; //etc...
delay(50);
digitalWrite(13,LOW);
delay(200);
} // et ça reboucle ...
Merci de me dire si c'est bon .
Ici on aurait la génération d'un signal à "1"sur 20ms , suivi d'une mise à"o"sur 300ms , d'une mise à"1"sur 50ms et d'une mise à "0" sur 200 ms ..et le cycle se répète .
Amicalement .
Jac .
- Edité par JacquesVergneau 15 septembre 2020 à 12:08:03
les circuits "basse tension" (arduino) et "haute tension" doivent être totalement isolés l'un de l'autre pour éviter les risque, ce qui implique d'utiliser des relais spécifiques. Relais qui mettront -- forcément -- "un certain temps" à s'ouvrir et à se fermer.
Sauf erreur, Jacques nous explique qu'il commute des tensions de 2,5 Vcc, donc pas de problème du coté tension, mais des intensités de 3.5 KA, la c'est plus compliqué. Donc en effet il sera sûrement bon de réaliser une isolation: Les relais, c'est une solution, si non, il peut mettre des opto-coupleurs, ce sera plus précis.
Mais dès le départ, je ne comprends pas exactement le besoin. C'est de la "grosse artillerie": faire de la soudure à l'arc par point, avec une commutation de 3,5 KA, c'est pas de la gnognote! A-t-on besoin de 1% de précision ?
1) Attention il y a risque! Commuter 3500 ampères, c'est dangereux ! N'oublie pas la sécurité : Diode d'anti retour, éclateur, ... Enfin, c'est ta vie, pas la mienne !
2) Attention à la CEM [les parasites]! Commuter 3500 ampères, c'est pas anodin ! Si les voisins regarde la télévision, ou écoute la radio, ils vont pas forcément apprécier !
3) Ca va chauffer ! Le refroidissement est prévue ? Quelle sont les résistances internes des capacités et des MOSFET ? Si tu vides les capa avec un courant de 3,5 KA, tu vas les charger avec un courant du même ordre (Plus exactement, en fonction du rapport cyclique entre tes timers). Ton alimentation est capable de fournir ça ?
4) Comme tu vas charger/décharger des capa, es-tu sûr que ce soit si important la précision des timers ? Par exemple quel est la précision des capacités que tu utilises ? tu parles de 1% pour les timers, je pense qu'avec tes capa, tu vas être loin de ce chiffre. Plutôt que la précision, il me semble qu'il serait plus important de prendre en compte la possibilité de configuration: Avec ton rotateur, tu peux choisir une valeurs sur 12 par timer, avec du soft tu pourras choisir beaucoup plus de valeurs, et éventuellement au cours du burst de les faire évoluer. Donc avec un processeur et un soft ce sera plus facile de configurer/adapter/tester/ ...
Je viens d'aller voir sur le forum: Je n'ai pas compris si tu as déjà fait des essais ou pas. Ca marche ?
Aussi j'ai répondu en partie ...aux questions des potes du forum , dans mon premier post ( modifié ), sur les essais à fort courant , les cem etc ...en bleu .
On me dit aussi sur forum usinage qu'on n'a pas à programmer en C++ sur un Arduino Uno , le logiciel résident et spécifique est suffisant .
Votre avis .
Merci.
Amicalement .
Jac .
- Edité par JacquesVergneau 31 août 2020 à 16:32:20
En fait, il vaut mieux éviter d'éditer les messages, ceux qui suivent la discussion ne vont pas forcément voir les modifications. (On ne relit pas tous les anciens posts)
JacquesVergneau a écrit:
On me dit aussi sur forum usinage qu'on n'a pas à programmer en C++ sur un Arduino Uno , le logiciel résident et spécifique est suffisant
Le langage sur Arduino est en fait du C++, pas du C. Le compilateur est un dérivé de G++ (avr-g++).
Il suffit de voir que le langage sur Arduino a des classes pour comprendre que ce n'est pas du C : String, Keyboard, Stream, etc.
Par contre, c'est un C++ simplifié. Techniquement, c'est plus proche d'un "C with class" que du C++, mais cela reste du C++.
Mais en fait, on s'en fout un peu que ce soit du C ou du C++.
Par contre, tu te perds beaucoup dans tes explications, ca rend la discussion difficile a suivre. Comme l'a dit koala01, c'est un forum de programmation ici. Entrer dans les détails de la partie électronique ne sert à rien et ne fait que rendre plus compliqué de te lire.
Par contre, tu te perds beaucoup dans tes explications, ca rend la discussion difficile a suivre. Comme l'a dit koala01, c'est un forum de programmation ici. Entrer dans les détails de la partie électronique ne sert à rien et ne fait que rendre plus compliqué de te lire.
Salut gbdivers.
En parlant électronique je répondais à Dedeun ...et à une interrogation éventuelle "mais pourquoi donc faire une temporisation sérielle ...?"
J'ai laissé à votre sagacité à tous ,un bout de programme en langage Arduino que m'a gracieusement pondu mon pote Abimen du forum usinages.com , pour savoir s'il pouvait tourner tel que .
Moyennant la correction sur le V majuscule a "void" à mettre en minuscule , et le T en fin de "HIGH" ...ce programme tourne t-il ...?
Je suppose aussi que ce programme est succeptible de fonctionner sur un Arduino UNO , ou Arduino nano ...ou tout type d'Arduino.
Perso j'ai fait du Basic et du Visual basic ,du Pascal , du langage machine sur µC 8031 et 8051 , donc ça date un peu .
Faire un programme par la suite avec afficheur LCD et clavier pour modifier le programme me plairait assez.
Si on me dit que celui là haut en rouge , tourne ...ça m'avancerait déjà .
Je veux bien m'y remettre à 70 ans ...encore faut-il que j'avance sur la bonne voie .
Oui, a priori, ton code en rouge est correct. (Mais je n'ai pas fait de Arduino depuis un bout de temps)
Et il passera sur tous les types d'Arduino (Uno, nano, etc). Le langage est le meme entre les differents Arduino (sauf changement récent), c'est juste les caracteristiques techniques qui changent.
/*
* Code donné à titre d'exemple. Utilisation sous votre
* entière responsabilité. Si vous vous électrocutez,
* vous viendrez pas vous plaindre. Surtout si vous êtes mort.
*/
const int CHARGER_PIN = 13;
void setup( ) {
pinMode(CHARGER_PIN, OUTPUT);
}
void send_pulse(long ms_on, long ms_off) {
digitalWrite(CHARGER_PIN, HIGH);
delay(ms_on);
digitalWrite(CHARGER_PIN, LOW);
delay(ms_off);
}
void loop( ) {
send_pulse(20, 300);
send_pulse(50, 200);
}
Attention
Arduino est un nom générique. Il me semble que certaines cartes (arduino mega ?) sortent du 3.3 v, pas du 5v. Vérifier soigneusement.
L'environnement arduino est aussi utilisable avec d'autres microcontroleurs (8266)
faites vérifier votre programme par un programmeur compétent. C'est un vrai métier, où on arrive très vite à l'horrible constatation qu'on fait énormément de conneries en programmant. Tant qu'on programme pour faire clignoter des led ou ouvrir/fermer le poulailler, ça va, mais bon.
- Edité par michelbillaud 2 septembre 2020 à 9:33:20
Pas de crainte à priori pour l'électrocution , (enfin en principe) , je suis un technicien électro technicien et électronicien de métier à la retraite .
Les bourres de 230Volts efficaces , 325 Volts pic positif et négatif ressenti par le corps ...j'évite .
Là sur ce projet je travaille sur 2.7 Volts max , et en utilisation sous 2.5 Volts dont l'alim en alternatif 2x 5.5 Volts efficaces 180 Ampères est protégée par un transformateur 230 V / 2x5.5 V .
J'ai pas de fuites , mon transfo est bien isolé ...donc 2.5 V pas de soucis , malgré de forts courants commutables ( 2500 à 3500 Ampères ) .
-La programmation est effectivement un vrai métier ...mon fils a débuggué pendant son stage d'ingé d'un an , avec d'autres ingés, le logiciel Windows 2000 dans la SiliconeVvalley , de mémoire il y avait des centaines de buggs qui une fois bien recensés se sont retrouvés à être 10 fois plus .
Mon "micro programme" en rouge en haut le débugage sous IDE Arduino me marquait "pin non déclarée ".
Je vois toi que tu la déclares ( constant int )bien en début .
Le "void send pulse" en milieu indique ce qu'il y-a à faire .
Et le "void loop " en fin de programme est plus court .
Si j'ai bien compris .
Je débugg ça sous IDE Arduino .
A+.
Jac .
PS : en débuggué ...ça tourne ...merci à toi...il fait 2 octets de plus que celui de mon pote Abimen , mais devrait être plus léger si on décide de programmer 10 impulsions différentes .
- Edité par JacquesVergneau 14 septembre 2020 à 8:34:13
Téléchargé le programme de notre ami Michelbillaud via l'IDE Arduino sur les 2 Arduino nano ..
Ca tourne impeccable.
Mes temporisations sont à + 0.265% de la valeur affichée , mesurée à l'oscillo numérique ...c'est suffisant pour moi . ( reste à savoir qui est le plus juste à ce niveau , l'oscillo ou la puce Arduino=> penchons pour l'oscillo numérique qui possède lui un quartz )
Merci à vous tous .
A+.
Jac
- Edité par JacquesVergneau 19 septembre 2020 à 9:01:14
Bien sûr t'auras deviné , c'était pour plaisanter.
Pour souder des tôles alu ( 2 fois 1 mm ou 2 fois 2 mm ) je n'ai besoin que d'une seule boucle du programme ...avec 2, 3 , 4 impulsions pré réglées en "on" , et des temps de repos préréglés en "off" .
ces tempos seront réglées de manière à souder sans faire de trous ni d'éclaboussures.
J'ai dons prévu une progression des temps "on" et "off" ... soit par exemple , 30 , 40, 50 ms pour les "on" , et 300,400,500 ms pour les "off".
Par calculs , pour avoir 1 k Joules nécessaire à la soudure , il me faudrait 120 ms de t"on" ...d'où 30+40+50 = 120ms .Tout autre combinaison progressive faisant 120 ms pourra convenir ( exemple : 10+20+30+60 ) ...cela sera déterminé par essais .
Les "off" seront aussi déterminés par essais .
Je pensais m'en tirer avec une boucle répétitive void loop du "Arduino nano" sortant sur un circuit intégré ( compteur CD 4040 par exemple ) comptant le nombre d'impulsions prévues ( 2, 3, 4 t "on" ...etc ) .
Il y aura bien le nombre d'impulsions prévues , ...mais qui pourraient commencer par n'importe quelle valeur 60 ou autre , car par de synchronisation possible .
Or on veut que le cycle commence par la plus faible valeur ...pour faire du bon boulot soudure .
Bref le cycle 10+20+30+60 , pourrait être commandé par le bouton reset , ou toute autre pin programmée en entrée ...si c'est possible , pour un seul cycle , répétable à chaque appui sur un interrupteur , reset ou autre .
Voilà je suis rentré dans des détails , pour plus de compréhension ...mais l'explication est faite .
Bref, tu veux que ça lance une série d'impulsions quand on appuie sur un bouton.
Et cette série serait définie par un "tableau" indiquant leur durée, et le délai avant de lancer la suivante.
Pour faire ça bien, on s'arrange pour que l'appui sur le bouton déclenche une interruption. Dans la boucle loop(), cette interruption démarre (si ce n'est pas déjà fait), une tâche consistant à envoyer les impulsions.
Voila un exemple de tâche déclenchée par un bouton (faire cligner la led intégrée un certain nombre de fois). Il y a un délai de sécurité au départ pour que la mise en route du pullup ne déclenche pas une interruption par inadvertance (saleté de machin).
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/
Eug
Discord NaN. Mon site.
Discord NaN. Mon site.
https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.