Régulateur PWM basse tension sur microcontrôleur avec indication. Régulateur de puissance sur microcontrôleur ATtiny2313 - Régulateurs de puissance - Alimentations

Bonjour à tous les lecteurs de Muska !
Grâce à ce merveilleux site, j'ai acquis beaucoup de choses et de connaissances utiles et, en réponse, j'ai décidé d'écrire le premier rapport sur l'appareil nouvellement développé. Lors du développement de l'appareil, j'ai rencontré un certain nombre de problèmes et je les ai résolus avec succès. Peut-être que la description de certaines solutions aidera certains de mes collègues débutants dans leur créativité.
Pour fabriquer des circuits imprimés, j'ai acquis une micro-perceuse et un support pour celle-ci, qui transforme la perceuse en micro-perceuse. Le besoin en est apparu après l'utilisation d'un tas de forets cassés de 0,5 à 1 mm dans un tournevis et un Dremel chinois. Mais il s’est avéré qu’il est impossible d’utiliser un tel outil sans contrôleur de vitesse. Le régulateur a décidé de le faire lui-même, acquérant ainsi de nouvelles connaissances.

J'ai peu d'expérience en radioamateur. Enfant, à l'aide du livre de Borisov, j'assemblais plusieurs récepteurs et clignotants à l'aide de multivibrateurs. Puis d’autres passe-temps et activités ont suivi.
Et puis, par hasard, j'ai remarqué Arduino, des modèles célèbres de stations météorologiques et de robots sculptés, et j'ai voulu automatiser tout ce que je pouvais mettre la main à l'aide de microcontrôleurs. Les tailles des contrôleurs étaient classées par ordre décroissant de taille et de facilité d'intégration - Arduino UNO, Arduino Pro Mini, puis un tas d'ATMega328P, et pour les appareils les plus petits et les plus simples, j'ai acheté l'ATtiny85.
J'ai acheté les Tinkies il y a plus d'un an et ils se sont assis et ont attendu leur tour.

Capture d'écran de la commande


(il y avait aussi du thermorétractable dans la commande, donc le prix total est plus élevé)


MK est arrivé comme d'habitude dans un sac avec baby bump, eux-mêmes en tas dans un sac en plastique séparé. Il aurait été mieux, bien sûr, dans une boîte rigide ou en mousse, mais malgré cela, rien n'était plié et tout fonctionnait.

Au début, j'ai soudé des circuits sur des planches à pain, mais après avoir lu des informations sur LUT, j'ai réalisé qu'il était tout à fait possible et beaucoup plus pratique de tout assembler sur des cartes de circuits imprimés normales.
J'ai également progressivement commencé à collecter des outils utiles, parmi lesquels une microperceuse MD-3 avec une pince de serrage et une machine pour percer de petits trous. Bien sûr, il aurait été possible d'acheter uniquement une pince et de récupérer le moteur quelque part, mais j'ai décidé d'en acheter une toute faite dans un magasin local.

Nous imprimons le motif au laser sur du papier photo Lomond brillant pour une impression jet d'encre. Mais mettre du papier qui n’était pas destiné à cela dans une toute nouvelle imprimante faisait peur. J'ai trouvé des avertissements en ligne indiquant que le revêtement brillant du papier jet d'encre peut fondre, coller au poêle et endommager l'imprimante. Pour être sûr, j'ai fait une expérience - j'ai roulé un fer à souder chauffé à 200°C sur la surface de ce papier (je n'ai jamais trouvé la température exacte du poêle, mais à propos de ça), le papier s'est un peu déformé, mais rien n'a fondu ni collé - ce qui signifie qu'il peut être utilisé dans l'imprimante.

J'ai repassé le dessin sur le tableau et lavé le papier. Un motif de conducteurs de très haute qualité et une couche de papier brillant collé sont restés sur la carte. L'auteur de la technologie a recommandé de l'enlever avec du ruban isolant légèrement collant, mais peu importe mes efforts, soit le brillant n'a pas été enlevé du tout, soit les conducteurs se sont détachés avec lui. Les inscriptions ont également été immédiatement transférées sur du ruban électrique. Ayant souffert, j'ai pris un poinçon et, en grattant entre les conducteurs, j'ai arraché presque tout le brillant. L'affaire est délicate et fastidieuse, il faut inventer quelque chose. Puis, lors de la réalisation des deuxième et troisième planches, j'ai cherché un moyen de me débarrasser de ce foutu gloss, mais l'impression ni sur une page de magazine ni sur la base de papier autocollant ne donnait pas une telle qualité de dessin, les traces flou ou tombé. Mais j'ai réalisé qu'il n'était pas nécessaire de nettoyer le brillant du papier photo à zéro - il suffit de gratter au moins un peu entre les traces pour accéder à la solution du cuivre, et à certains endroits il a été gravé sans rayures, grâce à le brillant.

J'ai décidé de graver le cuivre avec une solution de peroxyde d'hydrogène et d'acide citrique comme composition la plus accessible. Les options chimiques possibles pour la gravure avec calculs peuvent être consultées ici

J'ai pris le peroxyde de la trousse de premiers secours, je l'ai acheté il y a 3 ans, la date de péremption était d'environ 2 ans, je pensais qu'il était déjà épuisé et ne fonctionnerait pas du tout. Cependant, je me suis trompé, le tableau a été gravé très rapidement - en trois minutes environ. Voici le résultat :

Une piste a souffert d'une rayure au poinçon, elle a été restaurée en mordant le fil de la résistance. Plus des trous mineurs dus à l'utilisation de ruban isolant. J'ai besoin d'un marqueur adapté, mais en attendant, appliquez du vernis partout où je peux.

J'ai étamé la carte avec un fer à souder en utilisant une tresse. J'ai soudé les pièces.




Les grands supports en laiton vissés les uns dans les autres des deux côtés de la carte à travers des trous de montage sont une chose pratique ; vous pouvez placer la carte sans boîtier de chaque côté sur la table pendant l'installation et le débogage sans craindre de bosseler ou de court-circuiter quoi que ce soit.

La partie la plus exigeante en main-d'œuvre consistait à ramper et à souder les LED de sortie côté conducteur. J'ai décidé d'utiliser le côté soudure comme face avant, parce que... sur celui-ci, la hauteur des pièces est beaucoup plus petite et le passage d'un arbre de résistance variable à travers la carte réduit sa longueur à la longueur requise.

Je n'ai pas soudé le condensateur C2 dans le schéma connecté à Reset, car Bien que cela augmente la fiabilité du démarrage de l'appareil, cela peut interférer avec le flashage du MK.

Le microcontrôleur a été soudé en dernier, après avoir connecté la carte à l'alimentation électrique et en s'assurant que rien ne grillerait immédiatement et que le stabilisateur produirait le 5V standard. Rien n'a commencé à fumer, nous connectons donc le programmeur aux broches ICSP et téléchargeons le firmware de test.

Nous écrirons le firmware de l'appareil dans l'environnement de programmation Arduino, qui est familier à beaucoup, après y avoir ajouté la prise en charge des microcontrôleurs ATtiny, les avoir téléchargés et décompressés dans le dossier Arduino/hardware.

Le croquis de test (je ne vois pas l'intérêt de le présenter) lisait simplement les états des signaux d'entrée et les affichait sur les sorties existantes avec des LED connectées. Parce que Nous avons 4 canaux d'entrée, mais seulement 2 canaux de sortie, nous avons donc dû le vérifier en plusieurs étapes.

Tout a fonctionné comme prévu, à l'exception d'une chose : le bouton connecté au même canal avec la LED verte n'était pas lisible et la LED était sensiblement plus lumineuse que la rouge. Les mesures effectuées par le testeur ont montré que dans l'état PB0, plus de 20 mA traversent la LED en tant que sortie et seulement 2,1 V chutent à travers elle. Et dans l'état d'entrée avec un pull-up interne sur la jambe, il n'y a que 1,74 V lorsque le bouton est relâché et 0,6 V lorsqu'il est enfoncé. Il n'est pas surprenant que l'on lise constamment 0. La LED verte basse tension, sans même briller, drainait la tension sur la jambe lorsqu'un courant microampère circulait. Il est désormais clair pourquoi 2 LED étaient connectées en série dans l'article d'origine.

Mais mettre une deuxième LED pour briller bêtement à l'intérieur du boitier en guise de ballast (et on n'a pas non plus besoin de 2 identiques en face avant) semblait être une solution un peu tordue. J'ai réfléchi à la manière dont je pourrais augmenter la tension dans le circuit LED et je me suis souvenu de la caractéristique courant-tension de la diode Zener. Si nous connectons une diode Zener 2V en série avec la LED en face d'elle (pour qu'elle fonctionne normalement, sur la branche inverse de la caractéristique courant-tension), alors nous obtiendrons exactement ce dont nous avons besoin. Lorsque la LED s'allume à un courant de 10 mA, la diode Zener se brise et n'interfère pas avec le flux de courant, mais stabilise seulement la tension qui la traverse à un niveau donné. Il vous suffit de remplacer la résistance de limitation de courant, car vous devez supprimer la tension Ures = 5V-2,1V-2,0V = 0,9V par 10mA, c'est-à-dire R=90 ohms. Et lorsque la jambe est commutée sur l'entrée avec un pull-up - en raison de la pente de la branche caractéristique I-V jusqu'à la rupture de la jonction, la diode Zener est équivalente à une résistance à haute résistance et encore une fois, environ 2 V chuteront dessus , augmentant la tension sur la jambe MK lorsque le bouton est relâché à 4V, ce qui sera déjà lu comme VRAI. Lorsque vous appuyez sur le bouton, la jambe sera tirée à 5V par une résistance interne d'une résistance d'environ 40KOhm (d'après mes calculs), et à la terre par une résistance de 5KOhm (qui contournera le circuit LED), c'est à dire il aura le même 0,6 V et est considéré comme FAUX.
J'ai soudé la diode Zener en série avec la résistance et le bouton a fonctionné comme il se doit.

C'était maintenant au tour de vérifier le fonctionnement du PWM et des problèmes sont survenus ici aussi. La commande Arduino standard AnalogWrite(leg, fill) ne voulait pas fonctionner. Cela signifie qu'il y a quelque chose qui ne va pas avec la bibliothèque pour adolescents. Il est utile de consulter la fiche technique sur MK et Internet.

Cela s'est avéré intéressant :
- 2 canaux PWM (OC0A, OC0B) peuvent être sortis sur les broches 5, 6 (PB0, PB1), chacun fonctionnant avec son propre réglage de remplissage (mais la même fréquence) depuis le Timer 0 ;
- un troisième canal PWM fonctionnant à partir du Timer 1 peut être émis vers les broches 2, 3 (PB3, PB4), et un signal PWM direct (OC1B) peut être émis vers la branche 3, et sa version inverse (/OC1B) peut être émise vers jambe 2. Mais la sortie va soit uniquement à la 3ème étape, soit aux deux à la fois. Mais nous avons besoin de PWM sur la jambe 2, au moins inverse (nous l'inversons dans le logiciel), nous devrons donc configurer la sortie sur les jambes 2 et 3, et le signal ne passera pas vers la jambe 3 uniquement parce qu'il est déclaré un saisir.

Ainsi, d'après ce que je comprends, dans le package de support ATtiny pour Arduino, le canal PWM de Timer 1 ne peut être émis que vers l'étape 3. Apparemment, la sortie de sa version inverse a été considérée comme inutile. Vous devrez configurer vous-même le timer et le PWM (voir code, fonction PWM3_init), au lieu d'utiliser AnalogWrite.

J'ai également remarqué que lors de la réinitialisation du Timer 1, le fonctionnement de la fonction millis() est perturbé - il s'avère que le Timer 1 est utilisé par défaut pour l'horloge interne. Mais vous pouvez réinitialiser l'heure sur le Timer 0 en utilisant une définition de macro dans le Fichier Arduino\hardware\tiny\cores\tiny\core_build_options. h
/* Pour diverses raisons, Timer 1 est un meilleur choix pour le timer millis sur le processeur "85. */ #define TIMER_TO_USE_FOR_MILLIS 0
C'est ce que nous utiliserons, puisque Timer 0 dans ce projet est totalement gratuit.

Une question s'est également posée concernant la plage de réglage de vitesse lue à partir de la résistance variable. L'auteur du circuit original a ajouté une résistance constante de 36K en série avec la variable 10K, apparemment pour que le code ADC rentre dans la plage 0-255. En réalité, il s'est avéré 0-230 et le maximum flottait. Mais j'aimerais qu'exactement 0-255 corresponde à la pleine échelle du réglage avec un PWM 8 bits. Pour ce faire, j'ai supprimé la tension constante et l'ai remplacée par un cavalier à +5V, l'ADC a commencé à lire toute la plage et les 4 bits les moins significatifs ont été supprimés par programme. Et pourquoi des détails supplémentaires étaient-ils nécessaires ?

Après avoir testé les canaux d'entrée/sortie, nous chargeons dans le microcontrôleur le firmware de combat, écrit en C dans l'environnement Arduino basé sur le code source BASIC de l'auteur du circuit original.

Texte du programme

// Attiny85 à 1 MHz // N'oubliez pas de régler le timer 0 pour les millis, etc ! // Arduino\hardware\tiny\cores\tiny\core_build_options.h -> TIMER_TO_USE_FOR_MILLIS 0 #include // Connexions #define MODE_LED_PIN PIN_B0 #define MODE_BUT_PIN MODE_LED_PIN #define PWM_LED_PIN PIN_B3 #define AM_PIN PIN_B1 #define SP_PIN A1 #define CUR_PIN A2 // Etats #define MODE_MANUAL 0 #define MODE_WAITING 1 #define MODE_SETUP_XX 2 #define MODE_SETUP_MAX 3 #define MODE_START 4 #define MODE_DRILLING 5 #define MODE_STOP 6 // Variables octet Mode = MODE_MANUAL; octet ModeLedVal = FAIBLE ; octet SetPoint = 0 ; int CourantFiltré = 0 ; octet CourantU8 = 0 ; octet AMButton ; octet AMButtonFlt = FAIBLE ; octet statique ModeButton ; octet statique ModeButtonFlt = HIGH ; // valeur initiale pour l'octet statique ModeButtonOld = LOW; // déclenche des exceptions au démarrage octet statique SetupStep = false; BlinkFromMs long non signé ; StartFromMs long non signé ; ModeFromMs long non signé ; octet W, W0, W1, W2, Wxx, Wmax, Uxx, Uon, Uoff ; void PWM3_init() ( // Configurer PWM sur PB3 (broche 2) à l'aide de Timer 1 TCCR1 = _BV (CS11) | _BV (CS10); // prescaler /4 GTCCR = _BV (COM1B0) | _BV (PWM1B); // effacer OC1B lors de la comparaison OCR1B = 255 ; // cycle de service initial 0 % (utiliser la sortie inverse !) OCR1C = 255 ; // fréquence PWM = 1 KHz (1 000 000 /4 /256) void analogWrite_PB3(uint8_t duty_value) ( ​​​​​​// analogWrite sur PIN_B3 OCR1B = 255-duty_value; // remplissage 0-255 (0-100%) (on utilise la sortie inverse !) ) byte ScanButton(void) ( // Lecture d'un bouton connecté à une sortie avec une LED // Accéléré version avec restauration de sortie et sans arrêt PWM valeur d'octet, port_bak; port_bak = PORTB; // sauvegarde de la sortie DDRB &= ~(1<intervalle))( \ outvar = varname;\ )\ )\ else (\ __lastChange_##varname=millis();\ ) // Initialisation void setup() ( pinMode(MODE_LED_PIN, OUTPUT); // état principal - indication pinMode (PWM_LED_PIN, OUTPUT); PWM3_init(); // restauration des paramètres depuis l'EEPROM s'ils sont là si (EEPROM.read(11)==0xAA) ( Wxx = EEPROM.read(0); Wmax = EEPROM.read(1) ; Uon = EEPROM.read(2); Uoff = EEPROM.read(3); ) else ( // valeurs par défaut Wxx = 1; Wmax = 255; Uon = 255; // exclut le démarrage avant de définir Uoff = 0 ; ) // Accélération douce jusqu'au ralenti ou réglage manuel if (digitalRead(AM_PIN)==HIGH) W0 = Wxx; else ( W0 = 255- (analogRead(SP_PIN) >> 2); // 0-255, résistance variable que nous avons tournée est inverse) W1 = 0 ; pour (W=0 ; W<=W0; W++) { analogWrite_PB3(W); W1 = W1 + 4; delay(W1); } delay(800); Mode = MODE_WAITING; } // Рабочий цикл void loop() { // Индикация текущего режима морганием switch (Mode) { case MODE_MANUAL: ModeLedVal = LOW; // выключено break; case MODE_WAITING: (ModeLedVal==HIGH) ? ModeLedVal=LOW: ModeLedVal=HIGH; // в полнакала break; case MODE_START: case MODE_DRILLING: case MODE_STOP: ModeLedVal = HIGH; // на полную break; case MODE_SETUP_XX: if ((millis()-BlinkFromMs >400)) ( // rarement (ModeLedVal==HIGH) ? ModeLedVal=LOW: ModeLedVal=HIGH; BlinkFromMs = millis(); ) break; case MODE_SETUP_MAX : if ((millis()-BlinkFromMs > 100)) ( // souvent (ModeLedVal==HIGH) ? ModeLedVal=LOW : ModeLedVal=HIGH; BlinkFromMs = millis(); ) break ; ) digitalWrite(MODE_LED_PIN, ModeLedVal); // Interrupteur à bascule Auto/Manuel, en mode Auto s'ouvre et lit HIGH AMButton = digitalRead(AM_PIN); Anti-rebond (AMButton, AMButtonFlt, 200); // Bouton Paramètres, lu par une procédure spéciale car combiné avec une LED, lorsqu'il est enfoncé, il lit LOW ModeButton = ScanButton(); Anti-rebond (ModeButton, ModeButtonFlt, 200); SetupStep = (ModeButtonFlt==LOW) && (ModeButtonOld==HIGH); ModeButtonOld = ModeButtonFlt; // Spinner SetPoint = 255- (analogRead(SP_PIN) >> 2); // 0-255, notre résistance variable s'est avérée être inverse // Courant moteur // Le filtre principal est une chaîne RC de 36K+68nF (constante de temps 2,5 ms, fréquence de coupure 65 Hz) // mais juste au cas où, nous Je vais le compléter avec un logiciel // Filtre passe-bas IIR du premier ordre y(i) = y(i-1) + alpha*(x(i)-y(i-1)) // (alias Exponential Moving Moyenne, EMA) // dans le filtre au lieu de float on utilise une précision accrue int, pour laquelle on décale vers la gauche des 5 bits libres (le signe sera utile) // remplacer la multiplication par le coefficient fractionnaire alpha par un décalage à droite // (6 = /64 = *0,016) 100 cycles - 80 % de la valeur, 200 cycles - 96 % de la valeur, 369 cycles - 99,6 % de la valeur // (5 = /32 = *0,031 ) 50 cycles - 80 % de la valeur, 100 cycles - 96 % de la valeur, 179 cycles - 99,6 % de la valeur // (4 = /16 = *0,063) 25 cycles - 80 % de la valeur, 50 cycles - 96 % valeur, 90 cycles - valeur 99,6% // (3 = /8 = *0,125) 12 cycles - valeur 80%, 25 cycles - valeur 96%, 45 cycles - valeur 99,6% // période de travail = ADC 110 μs + programme = 0,2 ms // constante de temps = 8 * 0,2 ms = 1,6 ms, fréquence de coupure 625 Hz CurrentFiltered = CurrentFiltered + (((analogRead(CUR_PIN)<< 5) - CurrentFiltered) >> 3); // pour faciliter l'utilisation, réduire à 0-255 // (reculer de 5 bits et supprimer les 2 bits de poids fort car tout est intéressant (inactif)<1В) CurrentU8 = byte (CurrentFiltered >> 5); // if >1V pour ne pas être confondu avec les petits if ((CurrentFiltered >> 5) & 0x7F00) CurrentU8=255; // Commutateur de machine d'état (Mode) ( case MODE_MANUAL: // Contrôle manuel avec un bouton analogWrite_PB3(SetPoint); if (SetupStep) Mode = MODE_SETUP_XX; if (AMButtonFlt==HIGH) ( // Lors du passage à la machine, nous allons ralentir analogWrite_PB3(Wxx); StartFromMs = millis(); Mode = MODE_STOP; ) break; case MODE_WAITING: // Attendre que le courant augmente if (CurrentU8 > Uon) ( // Démarrer StartFromMs = millis(); analogWrite_PB3(Wmax ); Mode = MODE_START; ) si (SetupStep ) Mode = MODE_SETUP_XX; si (AMButtonFlt==LOW) Mode = MODE_MANUAL; pause; cas MODE_START : // Lancement si (millis()-StartFromMs > 300) Mode = MODE_DRILLING ; si (AMButtonFlt==LOW) Mode = MODE_MANUAL; break ; case MODE_DRILLING : // Percer, attendre que le courant baisse si (CurrentU8< Uoff) { // Тормозим analogWrite_PB3(Wxx); Mode = MODE_STOP; } if (AMButtonFlt==LOW) Mode = MODE_MANUAL; break; case MODE_STOP: // Тормозим и ждем пока выйдем на ток ХХ if (CurrentU8 < Uon) { // Замедлились if (millis()-StartFromMs >300) // Mode fiable = MODE_WAITING ; ) else ( StartFromMs = millis(); ) if (AMButtonFlt==LOW) Mode = MODE_MANUAL; casser; case MODE_SETUP_XX : // Réglage du régime de ralenti Wxx = SetPoint ; analogWrite_PB3 (Wxx); if (SetupStep) ( Uon = byte(1.1 * CurrentU8); EEPROM.write(0,Wxx); EEPROM.write(2,Uon); Mode = MODE_SETUP_MAX; ) break; case MODE_SETUP_MAX : // Réglage de la vitesse maximale Wmax = SetPoint ; analogWrite_PB3 (Wmax); if (SetupStep) ( Uoff = byte(1.1 * CurrentU8); EEPROM.write(1,Wmax); EEPROM.write(3,Uoff); EEPROM.write(11.0xAA); // Frein analogWrite_PB3(Wxx); StartFromMs = millis();Mode = MODE_STOP; ) pause; par défaut : Mode = MODE_WAITING ; retour; ) )


Nous connectons une résistance de 5 watts 2,2 ohms en tant que shunt. Pour protéger le circuit des surtensions inductives au bord arrière du PWM, nous connectons une diode Schottky SS34 en parallèle avec le moteur, et pour supprimer les interférences liées à la commutation des enroulements, nous connectons un condensateur de 100 nF. Et nous commençons les tests de contrôle du moteur de forage.

Le hurlement écrasant du PWM à 4 KHz (1 MHz/256) est immédiatement perceptible. Nous ajoutons le réglage du diviseur /4 - on se sent immédiatement mieux, même si le grincement n'a pas disparu, mais pour une raison quelconque, 1 KHz est beaucoup plus facile à tolérer même avec une utilisation prolongée.

En mode manuel, la vitesse du moteur est normalement régulée de 0 à 100 %, mais dans le circuit de retour automatique ADC, il lit toujours la valeur MAX et rien ne fonctionne. En chemin, je remarque que la planche émet un bip fort même lorsque le moteur est éteint. WTF ?

Nous prenons le testeur, sortons l'oscilloscope et commençons à étudier ce que nous produisons et ce que nous recevons. Et nous laissons tomber nos mâchoires. Sur le shunt, au lieu de douces ondes de courant traversant l'inductance, au début des impulsions PWM, nous voyons des aiguilles de plusieurs dizaines de volts. Cela signifie qu'un courant pulsé de plusieurs dizaines d'ampères circule à travers le shunt ! Et même moteur éteint. Sans surprise, le panneau sonna. Mais qu’est-ce qui complète le circuit sans moteur ? Petit condensateur de 100 nF ! Il peut supprimer et supprimera les interférences lors de la commutation des enroulements, mais pour l'instant, il organise un court-circuit à court terme à chaque période PWM ! Conclusion - le condensateur de suppression de bruit n'est pas compatible avec le contrôle PWM et le contrôle par shunt, il doit être retiré.

Et puis je me rends compte que ces surtensions vont presque directement à l'ADC de la tinka (puisqu'il y a un détecteur d'amplitude, le condensateur sur la jambe est chargé à la tension maximale dans l'aiguille et la stocke en toute sécurité, puisque le la décharge se fait uniquement par fuite de diode). Tinka ne semble pas encore sur le point de mourir, mais qu’est-ce qui ne va pas avec sa jambe ? Les appareils affichent une tension constante sur la jambe de 5,2 V, supérieure à la tension d'alimentation, mais où est passé le reste ? On se souvient que pour lutter contre les surtensions, il dispose de diodes spécialement entraînées sur les alimentations «+» et «-», qui purgent l'excédent dans l'alimentation. Mais les diodes intégrées sont fragiles et vous ne devriez pas trop vous y fier.

On enlève ce foutu condensateur, on mesure la tension avec notre pied - ça marche ! Des microcontrôleurs fiables sont fabriqués par Atmel ! Apparemment, le fait que la capacité des condensateurs soit faible a aidé : un peu de charge a été pompée à travers.

Sans le condensateur, les aiguilles ont disparu, la carte a arrêté de jouer de la musique, la jambe semble réellement mesurer l'amplitude du courant d'impulsion PWM. Nous commençons la procédure de configuration et essayons de percer. Tout semble être comme il se doit : lorsqu'il est sous charge, il augmente la vitesse, lorsque la perceuse sort, il se réinitialise. Mais ce n'est pas tout : plusieurs fois par minute, il accélère et décélère spontanément sans charge. On ne sait pas pourquoi, les instruments ne montrent rien. Soit la patte est brûlée, soit la capacité des fils génère des aiguilles invisibles comme celle du Conder, soit des interférences proviennent du même collecteur.

Ici, j'ai décidé d'aborder le problème de manière radicale, car j'ai remarqué qu'aucun autre circuit n'utilise de détecteur de crête. Au contraire, la valeur intégrale du courant traversant les filtres RC est contrôlée partout. Et de telles mesures sont précisément insensibles aux interférences sous forme d’émissions uniques. Nous remplaçons la diode par une résistance - et le détecteur d'amplitude se transforme en filtre passe-bas.

La tension modifiée par l'ADC a chuté immédiatement d'un ordre de grandeur - la tension effective est bien inférieure à l'amplitude dans le cas d'un signal sous forme d'ondes plates avec des pauses entre elles. Nous devions capter une tension d'environ 0,2 V. Bien sûr, il était possible d'augmenter la résistance du shunt, mais avons-nous utilisé du PWM pour chauffer l'atmosphère ? Et avec un remplissage PWM important et une charge sur le moteur, vous pouvez obtenir une surtension. Par conséquent, vous devrez travailler avec un ralenti U faible.

La réponse à la charge semble également avoir ralenti. L'accélération commence au bout d'environ une demi-seconde, mais je n'y vois pas de gros problème - la perceuse s'alignera simplement et traversera le cuivre à basse vitesse. Et fini les faux départs. Tu peux travailler.

Schéma final de l'appareil :


L'appareil a été monté dans un boîtier dont le rôle était une installation électrique étanche « Boîte de jonction en plastique Tuso sans joints 120x80x50 mm, IP55 gris 67052 Ruvinil Russie ». Je voulais en trouver un plus plat, mais je n'ai rien trouvé comme 110*60*30. Afin de ne pas placer de guirlandes sur la table, j'ai tordu le régulateur avec l'alimentation en un seul tout. La brique s'est avérée géniale, mais nous ne pouvons même pas la transporter dans nos poches. Et bien qu'après avoir percé quelques dizaines de trous, il n'y ait eu aucun échauffement notable de l'interrupteur à clé, du shunt et du stabilisateur au toucher, j'ai percé un peu de ventilation sur le fond et la paroi arrière.







Depuis lors, la machine avec le régulateur a participé à la création de 2 autres cartes (vous pouvez voir combien de perçages cela a nécessité d'après les mots « AVR Fusebit Doctor ». Je suis très satisfait de son travail.

Je voudrais également noter que les forets en carbure d'Ali ont une tige de 3,2 mm et que les pinces n'étaient que de 3,0 et 3,5 - le foret ne rentre pas dans l'un et ne se serre pas dans l'autre. J'ai enroulé du fil de cuivre autour d'une perceuse et je l'ai inséré d'une manière ou d'une autre dans 3,5 mm, mais ce n'était pas joli. Si quelqu'un a rencontré une pince de serrage 3,2 d'un diamètre de 6 mm (partout uniquement des pinces Dremel, avec la queue rectifiée jusqu'à 5 mm), dites-le-moi.

Lors du changement de foret, la procédure de réglage doit être répétée à nouveau - apparemment, le courant du moteur est affecté par le moment d'inertie différent d'un foret conventionnel « maigre » et d'un foret en carbure à tige épaissie. Mais cela se fait rapidement et n'est pas gênant. Les personnes intéressées peuvent ajouter des profils de forage de sauvegarde au firmware :)

J'ai reçu à plusieurs reprises des conseils pour percer les planches sous une couche d'eau afin de ne pas respirer la limaille de verre. Je ne pouvais pas obtenir. La réfraction dans l'eau interfère avec le positionnement précis de la perceuse lorsqu'elle est haute et la jauge oculaire est mal alignée. Et lorsque la foreuse entre dans l’eau, des ondulations commencent à apparaître et rien n’est visible du tout. Est-il nécessaire de régler la perceuse arrêtée puis de la remettre en marche ? En conséquence, je mets simplement un bol d'eau à côté et j'y plonge périodiquement la planche pour humidifier et éliminer la sciure de bois. Dans ce cas, la sciure est humide et ne vole pas non plus, elle est collectée dans un cône au-dessus du trou.

Et encore une digression lyrique, sur les petites attaches.

J'ai décidé d'installer un connecteur d'alimentation du type « DS-225, prise d'alimentation sur le panneau » dans l'appareil. Pour le fixer, des vis et des écrous avec un filetage de 2,5 mm étaient nécessaires. Il n'y avait rien de convenable dans le garde-manger, puis je me suis souvenu qu'une autre pièce nécessitait des vis de 2 mm. Cela signifie que cela vaut la peine de reconstituer votre collection d'éléments de fixation afin que la prochaine fois vous n'ayez pas à voler à l'autre bout de la région pour acheter une noix. Je n'ai rien trouvé de plus petit que M3 dans les quincailleries, je dois donc en chercher des spécialisés.

Le premier magasin relativement pratique s'est avéré être une chaîne de magasins
À l'intérieur, mes yeux étaient fous de toutes sortes de choses utiles, mais pas de chance - les plus petites vis n'étaient que des M2,5 de la même longueur, mais il n'y a ni écrous ni rondelles pour elles ! J'ai été impressionné par la vente de noix individuellement pour 2 roubles par pièce et par le fait de verser tout ce que j'achetais dans un seul sac pour T-shirt (il n'y avait pas de petits sacs de différentes tailles). Encore une fois, il est coûteux de s’approvisionner en différentes tailles.

Un autre magasin de fixations est venu à la rescousse -
Ici, il y a vraiment de tout en stock, du M1.6, avec différents emplacements et têtes, vendu à la pièce et au poids, et à un prix d'un ordre de grandeur inférieur à celui du précédent concurrent. Il suffit de se rendre directement au magasin-entrepôt de la rue Plekhanov, sinon je suis d'abord allé au magasin près de la station de métro Perovo et j'ai été très surpris du prix annoncé. Et il s'est avéré qu'ils n'avaient que de l'acier inoxydable, et pour les fixations ordinaires, il fallait se rendre dans la zone industrielle sur des barres de transfert.

Je prévois d'acheter +67 Ajouter aux Favoris J'ai aimé la critique +76 +152

Il existe un grand nombre de circuits régulateurs classiques à thyristors et triacs, mais ce régulateur est fabriqué sur une base d'éléments moderne et, en outre, était basé sur les phases, c'est-à-dire ne transmet pas toute l'alternance de la tension secteur, mais seulement une certaine partie de celle-ci, limitant ainsi la puissance, puisque le triac ne s'ouvre qu'à l'angle de phase requis.

Lors de la première mise sous tension du circuit, le chiffre 0 s'allume sur l'indicateur de segment. L'allumage et l'extinction s'effectuent en appuyant simultanément sur deux boutons du microswitch et en les maintenant enfoncés. Ajustement plus ou moins - avec chaque pression séparément. Si vous n'appuyez sur aucun des interrupteurs à bascule, après la dernière pression, après deux heures, le régulateur s'éteindra tout seul, l'indicateur continuera à clignoter au dernier niveau de fonctionnement de consommation d'énergie jusque-là.

Lorsque l'appareil est déconnecté du réseau, le dernier niveau de puissance de sortie est mémorisé, qui sera automatiquement réglé lors de la prochaine mise sous tension. Le réglage s'effectue dans la plage de 0 à 9, puis de A à F. Autrement dit, il y a un total de 16 étapes de réglage.

Le radiateur sur la photo ci-dessus est assez grand, le design permet une option plus petite, mais je n'avais rien d'autre. Lorsque j'ai allumé l'appareil pour la première fois, 0 clignotait sur l'écran ; le circuit ne répondait pas aux pressions sur les boutons. En remplaçant le condensateur d'alimentation par une valeur nominale de 1000 uF, le problème a disparu.

Le format du circuit imprimé et le micrologiciel du microcontrôleur se trouvent dans une archive sur le lien ci-dessus.

Le circuit est utilisé pour contrôler en douceur la puissance de la charge. La méthode de contrôle est basée sur la méthode de contrôle de phase d'un triac. Son essence réside dans le fait de sauter une partie du demi-cycle de la tension alternative du secteur. Le courant entrant dans la charge est proportionnel à l'intégrale du signal reçu. La base de la conception est le microcontrôleur PIC16F1823.

L'appareil prend en charge le fonctionnement avec des charges actives (lampe à incandescence, chauffage) et inductives. Le microcontrôleur est cadencé à partir d'un oscillateur interne. Le signal de synchronisation avec le réseau provient du pont redresseur jusqu'à l'entrée du comparateur interne du microcontrôleur via un filtre sur R10, C5, R9, R8, C3. La tension de référence du comparateur provient du DAC interne du microcontrôleur et est égale à environ 0,6 V, qui est définie lors de la configuration du MK. Pour éliminer l'influence de la capacité C6 sur la synchronisation, la diode D6 est utilisée. L'indication est faite sur E30561 avec une cathode commune.

Structurellement, l'appareil est assemblé sur deux circuits imprimés. Sur l'un se trouvent un indicateur et des boutons de commande, et sur l'autre un MK, une alimentation et un triac. Les cartes sont connectées à l'aide d'un fil MGTF.

Avec un radiateur pour triac (HS-135-38), comme sur la figure, la puissance de charge maximale est d'environ 500 W. En conséquence, un emplacement sur le circuit imprimé a été réalisé pour ce radiateur.

Le firmware du MK est réalisé dans l'environnement MPLAB en langage C pour le compilateur HI-TECH PICC 9.83. Vous pouvez télécharger les cartes de circuits imprimés, le firmware et le projet MPLAB à partir du lien ci-dessus.

La conception est régulée à l'aide d'un triac de type BT138. Qui est contrôlé via MK. L'affichage numérique LED indique le pourcentage d'ouverture du triac. La partie logique du circuit est alimentée par une alimentation dont la base est un stabilisateur de tension DA1 7805.

Ce circuit est parfait pour ajuster séparément la puissance de sortie pour deux charges différentes, par exemple des radiateurs, des lampes, des moteurs électriques. La puissance de charge maximale dépend du type de commutateurs qui la commutent. Dans le schéma ci-dessous, les transistors KT819 agissent comme tels, mais il peut exister d'autres options, en fonction de la puissance requise des deux charges. L'appareil génère des signaux d'impulsion qui vont à l'un des interrupteurs d'alimentation.

L'appareil génère des signaux d'impulsion, la largeur de leurs impulsions peut être ajustée sur 256 degrés égaux. Pour contrôler le circuit, des résistances variables sont utilisées, connectées aux ports RVZ et RV4 du MK, travaillant avec l'ADC. ATtiny13 mesure la valeur de résistance d'une résistance variable et définit la largeur d'impulsion du signal d'impulsion de sortie qui va au commutateur qui contrôle l'alimentation d'une charge spécifique. C'est-à-dire qu'en tournant le régulateur à résistance variable, la puissance est ajustée. Ce réglage, comparé au réglage utilisant les boutons « moins » et « plus », est plus pratique à utiliser en raison de son efficacité. Il existe un connecteur ISP6 pour programmer l'appareil. Lors de la programmation, nous réglons les fusibles par défaut, en travaillant avec le générateur d'horloge RC interne à une fréquence de 9,6 MHz. Vous pouvez télécharger l'archive avec le code source du firmware à partir du lien ci-dessus.

Le réglage de la vitesse des moteurs électriques dans la technologie électronique moderne n'est pas obtenu en modifiant la tension d'alimentation, comme cela se faisait auparavant, mais en fournissant des impulsions de courant de différentes durées au moteur électrique. PWM, qui est récemment devenu très populaire, est utilisé à ces fins ( modulation de largeur d'impulsion) régulateurs. Le circuit est universel - il contrôle également le régime moteur, la luminosité des lampes et le courant dans le chargeur.

Circuit régulateur PWM

Le diagramme ci-dessus fonctionne très bien, ci-joint.

Sans modifier le circuit, la tension peut être portée à 16 volts. Placez le transistor en fonction de la puissance de la charge.

Peut être assemblé Régulateur PWM et selon ce circuit électrique, avec un transistor bipolaire classique :

Et si nécessaire, à la place du transistor composite KT827, installez un IRFZ44N à effet de champ, avec résistance R1 - 47k. Le polevik sans radiateur ne chauffe pas à une charge allant jusqu'à 7 ampères.

Fonctionnement du contrôleur PWM

La minuterie de la puce NE555 surveille la tension sur le condensateur C1, qui est retiré de la broche THR. Dès qu'il atteint le maximum, le transistor interne s'ouvre. Ce qui court-circuite la broche DIS à la terre. Dans ce cas, un zéro logique apparaît à la sortie OUT. Le condensateur commence à se décharger via DIS et lorsque la tension sur celui-ci devient nulle, le système passe à l'état opposé - à la sortie 1, le transistor est fermé. Le condensateur recommence à se charger et tout se répète.

La charge du condensateur C1 suit le chemin : « R2->bras supérieur R1 ->D2 », et la décharge le long du chemin : D1 -> bras inférieur R1 -> DIS. Lorsque nous faisons tourner la résistance variable R1, nous modifions le rapport des résistances des bras supérieurs et inférieurs. Ce qui, en conséquence, modifie le rapport entre la durée d'impulsion et la pause. La fréquence est fixée principalement par le condensateur C1 et dépend également légèrement de la valeur de la résistance R1. En modifiant le rapport de résistance charge/décharge, nous modifions le rapport cyclique. La résistance R3 garantit que la sortie est portée à un niveau élevé – il y a donc une sortie à collecteur ouvert. Ce qui n'est pas capable de fixer indépendamment un niveau élevé.

Vous pouvez utiliser n'importe quelle diode, condensateur à peu près de la même valeur que dans le schéma. Les écarts d'un ordre de grandeur n'affectent pas de manière significative le fonctionnement de l'appareil. A 4,7 nanofarads réglés en C1 par exemple, la fréquence chute à 18 kHz, mais elle est quasiment inaudible.

Si, après l'assemblage du circuit, le transistor de commande de clé devient chaud, il est fort probable qu'il ne s'ouvre pas complètement. Autrement dit, il y a une chute de tension importante aux bornes du transistor (il est partiellement ouvert) et le courant le traverse. En conséquence, une grande quantité d’énergie est dissipée pour le chauffage. Il est conseillé de mettre en parallèle le circuit en sortie avec de gros condensateurs, sinon il chantera et sera mal régulé. Pour éviter les sifflements, sélectionnez C1, le sifflement vient souvent de là. En général, le champ d'application est très large ; son utilisation comme régulateur de luminosité pour les lampes LED haute puissance, les bandes LED et les projecteurs sera particulièrement prometteuse, mais nous y reviendrons la prochaine fois. Cet article a été rédigé avec le soutien de ear, ur5rnp, stalker68.

Très souvent, il est nécessaire de pouvoir réguler le courant circulant dans les lampes ou les éléments chauffants. Leur charge étant résistive, la solution la plus simple est d'assembler un petit régulateur PWM (de l'anglais PWM - pulse width modulation). Étant donné que les circuits simples basés sur les minuteries NE555 ne présentaient aucun intérêt, il a été décidé de développer et d'assembler les nôtres, quelque peu similaires.

Le circuit, malgré la présence d'un microcontrôleur PIC18LF2550, est très simple à répéter et peut être divisé en 3 parties :

Générateur PWM

Le microcontrôleur génère des impulsions claires de la forme et du rapport cyclique souhaités, ce qui simplifie grandement le circuit. Il y a deux boutons pour augmenter et diminuer la puissance. Ils vont aux broches 3 et 5 de la puce PIC18LF2550. En fonction de la largeur d'impulsion, la LED clignote plus lentement ou plus rapidement, afin que vous puissiez évaluer visuellement le rapport cyclique. Si la LED est entièrement allumée, la puissance est de 100 %, et si elle s'éteint, le rapport cyclique est de 0 %.

Alimentation du microcontrôleur

Le stabilisateur MK est de 3,3 volts, donc en fonction du transistor de sortie, vous pouvez utiliser une source d'alimentation de 3,7 à 25 volts. La fréquence de commutation est de 32 kHz et la durée d'impulsion est divisée en 256 étapes, y compris l'activation et la désactivation complètes.

Interrupteur de charge

Le pilote du transistor MOSFET est un 2N3904 classique. Le transistor de puissance lui-même peut être n'importe quel MOSFET à canal N approprié, pas nécessairement comme dans le circuit 80NF55L.

Cette version du contrôleur PWM 4 canaux 8 bits est conçue à l'aide du microcontrôleur ATmega16. L'appareil contient une interface RS232 pour le contrôle depuis un ordinateur, une interface pour un clavier à 12 boutons et 4 canaux analogiques 10 bits pour connecter des potentiomètres. Il y a un écran LCD à 4 lignes pour afficher les modes de fonctionnement et les paramètres actuels. De plus, le contrôleur PWM dispose de : 4 sorties vers LED pour indiquer les modes de contrôle (peuvent être utilisées comme sorties à usage général), 3 sorties à usage général.

L'appareil dispose de paramètres très flexibles. Par exemple, les paramètres de fonctionnement des canaux PWM peuvent être contrôlés à l'aide de commandes provenant d'un ordinateur, à l'aide de commandes analogiques (potentiomètres) ou à l'aide d'un clavier (avec une interface utilisateur affichée sur l'indicateur LCD). L'indicateur LCD lui-même peut également être contrôlé via RS232 ; les paramètres et modes actuels peuvent être affichés au format numérique ou graphique.

Principales caractéristiques de l'appareil :

  • PWM 4 canaux, résolution 8 bits, fréquence PWM - 31 kHz ;
  • Interface RS232 pour le contrôle et la surveillance depuis un PC ;
  • conception de circuit simple avec un nombre minimum d'éléments externes ;
  • Clavier à 12 touches ;
  • possibilité de réglage analogique ;
  • jusqu'à 7 lignes de sortie à usage général ;
  • Écran LCD à 4 lignes ;
  • Contrôle de l'écran LCD via une interface série ;
  • menu personnalisé ;
  • paramètres flexibles ;
  • implémentation logicielle de tampons FIFO pour accélérer le travail.

Les sorties à usage général (y compris les indicateurs LED) sont contrôlées depuis un ordinateur (RS232) ; l'utilisateur a également la possibilité de lire l'historique des frappes sur le clavier (les 32 dernières frappes, ou immédiatement après avoir appuyé sur une touche).

Grâce à ces paramètres flexibles, en choisissant le paramètre approprié, le contrôleur PWM peut être utilisé dans diverses applications et en tant qu'appareil autonome. La conception utilise un microcontrôleur ATmega16, un nombre minimum d'éléments externes, puisque tout le contrôle et la gestion sont effectués par le microcontrôleur lui-même. Il est possible pour l'utilisateur d'utiliser uniquement les composants nécessaires, par exemple, un indicateur LCD peut être exclu s'il n'est pas nécessaire.

Schéma logique de l'appareil.

Schéma de principe de l'appareil

La solution du circuit est très simple. Pour synchroniser le microcontrôleur, un résonateur à quartz de 8 MHz est sélectionné, l'alimentation +5,0 V est montée sur un stabilisateur intégré LM7805, une inductance de 10 μH et un condensateur de 100 nF forment un filtre qui empêche la pénétration des interférences lors de la commutation. circuits analogiques. Le convertisseur de niveau logique MAX232 est utilisé pour implémenter l'interface série. Indicateur LCD sur chipset Hitachi (HD44780) avec une résolution de 20x4 ou 40x2. L'unité de commande du rétroéclairage des indicateurs est implémentée sur le transistor MJE3055T (un analogue moins cher peut être utilisé). Matrice de clavier, standard, 4×3.

Après la mise sous tension, le microcontrôleur définit les derniers paramètres enregistrés dans l'EEPROM : modes de contrôle du canal PWM (contrôle analogique, contrôle de l'interface série, contrôle du clavier), format d'affichage des paramètres sur l'indicateur (contrôle de l'interface série, affichage des valeurs PWM, affichage de valeurs analogiques), ainsi que l'état des lignes de sortie à usage général et l'état du rétroéclairage de l'écran.

La génération PWM est toujours présente sur les quatre canaux après la mise sous tension. L'utilisateur peut configurer tous les paramètres du contrôleur PWM à l'aide de l'interface série, en envoyant des commandes de contrôle, puis enregistrer tous les paramètres effectués dans la mémoire EEPROM du microcontrôleur. Une liste complète des commandes et des valeurs est fournie en annexe ci-dessous. L'interface série peut également être utilisée pour envoyer les valeurs actuelles des canaux de contrôle analogiques (sur demande).

Lorsque la tension d'alimentation est appliquée, l'indicateur affiche un message d'accueil (l'utilisateur peut modifier le message d'accueil), puis, conformément aux paramètres actuels, affiche les paramètres et valeurs actuels des sorties PWM, les valeurs des canaux analogiques.

Pour un exemple de mise en œuvre pratique de l'appareil et du contrôle PWM de divers appareils externes, le schéma suivant est donné. Cet exemple montre des solutions de circuit pour connecter un moteur de ventilateur, une LED puissante de la famille et un convertisseur de tension PWM sur un amplificateur opérationnel LM358 à 4 canaux PWM. Des LED sont également connectées pour permettre le test des lignes de sortie à usage général.

Un exemple de mise en œuvre des étages de sortie d'un contrôleur PWM

Chargement...Chargement...