En ce qui concerne mon programme, cest un programme qui fait quelques calculs puis génère une tension basée sur le résultat en utilisant fonction analogWrite. Cependant, mon problème est que javais fait ma programmation sur la base dune idée fausse selon laquelle la fonction analogWrite via PWM produit une tension analogique, alors quen fait, elle ne « simule » que la tension analogique à la place.
Voici les parties pertinentes de mon code:
int pwmOutput = 11; int pwm = 0; void compareNewOldVoltageYes(void) { if(pv_Vnew > pv_Vold && pwm != 255) { ++pwm; //increasing value } else if(pwm != 0) { --pwm; //decreasing } } void compareNewOldVoltageNo(void) { if(pv_Vnew > pv_Vold && pwm != 0) { --pwm; } else if(pwm != 255) { ++pwm; } } void loop() { reading(); PowerCalculation(); if(pv_NewP > pv_OldP) { compareNewOldVoltageYes(); } else { compareNewOldVoltageNo(); } analogWrite(pwmOutput, pwm); //analogWrite float displayPWMvolt = pwm * 0.0196; Serial.print("Output Voltage: "); Serial.print(displayPWMvolt); Serial.println(" V"); pv_OldP = pv_NewP; Serial.print("Previous Power: "); Serial.print(pv_OldP); Serial.println(" W"); }
En ce qui concerne les circuits, la broche de sortie 11 est connectée à une résistance de 1 ohm, puis à GND. (Où jai mesuré la tension) Jutilise la carte Arduino Uno.
UPDATE :
Comme indiqué dans les commentaires de @DatHa, pwm ne fournit pas de tension. Existe-t-il un moyen de sortir la tension comme indiqué, sans changer la carte?
Commentaires
- PS Lécriture analogique utilise PWM et ne produit PAS de tension analogique.
- @DatHa cela signifie-t-il que cela ne peut pas être fait de cette façon? Existe-t-il une autre fonction de sortie de tension analogique?
- Voir la réponse @Russell sur arduino.stackexchange.com/questions/10041/…
- @dpw Je ne ' Je pense que cela fonctionne car mon programme doit se connecter à une charge électronique via sa programmation externe port et contrôlez-le en utilisant 0-5V.
- PWM émet une tension spécifique, ou je ' un pirate dans lannée de notre Seigneur 1734. Vous pouvez ' t aller au-dessus dune valeur de 8 bits, et il y a ' toujours une certaine imprécision dans sa lecture.
Réponse
Vous avez essentiellement trois options:
- Passer à un Arduino Due doté dun DAC intégré qui génère une tension réelle.
- Ajoutez une puce DAC externe (telle que le MCP4821 / 2) pour créer la tension pour vous
- Utilisez un filtre passe-bas (réseau RC) sur une broche PWM.
Parmi les trois options, jutilise habituellement un MCP4 822 car il donne les meilleurs résultats et ne coûte pas autant que d utiliser un Due.
Commentaires
- Merci. Loption 2 semble vraiment bonne, mais en raison de contraintes de temps, jai opté pour loption 3 et jai obtenu les résultats que je voulais.
- ou utiliser un R-2R échelle en tant que " pauvre homme ' s DAC "
- @AndreHolzner Je compte une échelle R-2R de la même façon quune puce DAC mais avec trop de fils pour la rendre pratique sur votre Arduino moyen.
- @Majenko Je voulais juste ajouter quil existe " potentiomètres numériques " ou " digipots " qui sont à peu près des échelles R-2R à lintérieur dune puce DIP-8. Ils sont moins chers que les DAC. (Par exemple X9C103)
- @FilipFranik Sauf quils ' ne sont pas des échelles R-2R. Ils ' ne sont quune chaîne de résistances avec un FET connecté à chaque connexion entre résistances. Il ny a que R. Beaucoup de R tout de même. Oui, si vous lécrivez avec les deux extrémités du potentiomètre à VCC et GND, vous obtenez une sorte de DAC, mais il souffre du même genre de problèmes dimpédance quun vrai potentiomètre. Il fournit une paire de résistances, tandis quun DAC fournit une tension.
Réponse
À 5V, un 1 La résistance ohm essaiera de couler 1A et de dépasser de loin les spécifications de 40mA. Veuillez utiliser au moins une résistance de 5 / 0,040 = 125 ohms pour protéger votre broche. Et si vous mettez un condensateur entre votre résistance et la masse, le circuit RC du condensateur lissera le PWM en une tension analogique.
Veuillez essayer la réponse @russell suggérée avec une résistance de 47K et un condensateur 1uF, vous obtiendrez une tension analogique à la jonction à utiliser avec votre charge électronique.
Réponse
Pour autant que je sache, les Arduinos ont ADC (Analog to Digital Converters) mais nen ont pas DAC (convertisseurs numérique-analogique). Vous ne pouvez donc pas sortir une tension définie à partir de broches en fonction dune valeur numérique.
Commentaires
- Les Arduinos basés sur ARM ont généralement au moins un DAC canal.
Réponse
NON .. Il ny a aucun moyen dobtenir une tension analogique de lArduino. Le mieux que vous puissiez faire est dutiliser Arduino comme convertisseur de tension Buck en mode linéaire ou boost à laide dun régulateur de tension, dune inductance et du transistor mosfet. Vous devrez peut-être aussi utiliser un Mega ou un Dulorme qui fournissent une fréquence PWM autre que la norme 50o Hz.
Bonne chance
Réponse
Il ny a pas de moyen direct.
En plus de @Majenko
Autre manière: vous pouvez utiliser le pont H comme L293d pour fournir un niveau continu.De nombreux circuits onduleurs de bricolage utilisent cette technique.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS