Em relação ao meu programa, é um programa que faz alguns cálculos e, em seguida, gera uma tensão com base no resultado usando a função analogWrite. No entanto, meu problema é que eu havia feito minha programação com base no equívoco de que a função analogWrite via PWM produz uma tensão analógica, na verdade, apenas "simula" a tensão analógica.
Aqui estão as partes relevantes do meu código:
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");
}
Quanto ao circuito, o pino de saída 11 está sendo conectado a um resistor de 1 ohm e depois ao GND. (Onde medi a tensão) Estou usando a placa Arduino Uno.
ATUALIZAÇÃO :
Como dito nos comentários de @DatHa, o pwm não gera tensão. Existe uma maneira de emitir tensão como dito, sem alterar a placa?
Respostas:
Você basicamente tem três opções:
Das três opções, costumo usar um MCP4822, pois fornece os melhores resultados e não custa tanto quanto usar um Due.
fonte
Em 5V, um resistor de 1 ohm tentará afundar 1A e exceder em muito as especificações de 40mA. Use pelo menos um resistor de 5 / 0,040 = 125 ohm para proteger seu pino. E se você colocar o capacitor entre o resistor e o terra, o circuito RC do capacitor suavizará o PWM em uma tensão analógica.
Por favor, tente a resposta sugerida @russell com um resistor de 47K e um capacitor de 1uF, você obterá uma tensão analógica na junção para usar com sua carga eletrônica.
fonte
Até onde eu sei, os Arduinos têm ADC (conversores analógico para digital), mas não possuem nenhum DAC (conversores digital para analógico). Portanto, você não pode emitir uma tensão definida de nenhum pino com base em um valor digital.
fonte
NÃO. Não há como obter uma tensão analógica no Arduino. O melhor que você pode fazer é usar o Arduino como um conversor de tensão Buck no modo linear ou de reforço usando um regulador de tensão, indutor e o transistor mosfet. Você também precisará usar um Mega ou Dulorme que forneça uma frequência PWM diferente da padrão de 50o Hz.
Boa sorte
fonte
Não há caminho direto.
Além de @Majenko
Maneira alternativa: você pode usar a ponte H como L293d para fornecer nível contínuo. Muitos circuitos inversores de bricolage estão usando esta técnica.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS
fonte