En ce qui concerne mon programme, il s'agit d'un programme qui effectue certains calculs puis émet une tension basée sur le résultat à l'aide de la fonction analogWrite. Cependant, mon problème est que j'avais fait ma programmation sur la base d'une idée fausse selon laquelle la fonction analogWrite via PWM produit une tension analogique, alors qu'en fait, elle "simule" uniquement la tension analogique.
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ù j'ai mesuré la tension) J'utilise la carte Arduino Uno.
MISE À JOUR :
Comme indiqué dans les commentaires de @DatHa, pwm ne produit pas de tension. Existe-t-il un moyen de sortir la tension comme indiqué, sans changer la carte?
Réponses:
Vous avez essentiellement trois options:
Des trois options, j'utilise généralement un MCP4822 car il donne les meilleurs résultats et ne coûte pas autant que l'utilisation d'un Due.
la source
À 5 V, une résistance de 1 ohm tentera de descendre de 1 A et dépassera de loin les spécifications de 40 mA. Veuillez utiliser au moins une résistance 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 47K et un condensateur 1uF, vous obtiendrez une tension analogique à la jonction à utiliser avec votre charge électronique.
la source
Autant que je sache, les Arduinos ont des ADC (convertisseurs analogiques-numériques) mais n'ont pas de DAC (convertisseurs numériques-analogiques). Vous ne pouvez donc pas sortir une tension définie à partir de broches en fonction d'une valeur numérique.
la source
NON .. Il n'y a aucun moyen d'obtenir une tension analogique de l'Arduino. Le mieux que vous puissiez faire est d'utiliser Arduino comme convertisseur Buck Voltage en mode linéaire ou boost en utilisant un régulateur de tension, une inductance et le transistor mosfet. Vous devrez peut-être également utiliser un Mega ou un Dulorme qui fournissent une fréquence PWM autre que le 50o Hz standard.
Bonne chance
la source
Il n'y a aucun moyen direct.
En plus de @Majenko
Autre moyen: vous pouvez utiliser le pont H comme L293d pour fournir un niveau continu. De nombreux circuits d'onduleurs diy utilisent cette technique.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS
la source