Em relação ao meu programa, é um programa que faz alguns cálculos e, em seguida, emite uma tensão com base no resultado usando função analogWrite. No entanto, meu problema é que eu fiz minha programação com base no conceito errado de que a função analogWrite via PWM produz uma tensão analógica, onde na verdade ela 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 :
Conforme dito nos comentários de @DatHa, pwm não fornece tensão de saída. Existe uma maneira de emitir a tensão, conforme dito, sem mudar a placa?
Comentários
- PS A gravação analógica usa PWM e NÃO produz uma tensão analógica.
- @DatHa isso significa que não pode ser feito dessa maneira? Existe outra função para saída de tensão analógica?
- Veja a resposta do @Russell em arduino.stackexchange.com/questions/10041/…
- @dpw Eu não ' não acho que funcione porque meu programa tem que se conectar a uma carga eletrônica por meio de sua programação externa porta e controlá-lo usando 0-5V.
- PWM emite uma tensão específica, ou eu ' ma pirata no ano de nosso Senhor 1734. Você pode ' ir acima de um valor de 8 bits, e há ' sempre alguma imprecisão na leitura.
Resposta
Você tem basicamente três opções:
- Mudar para um Arduino Due que tem um DAC integrado que produz uma tensão real.
- Adicione um chip DAC externo (como o MCP4821 / 2) para criar a tensão para você
- Use um filtro passa-baixo (rede RC) em um pino PWM.
Das três opções, geralmente uso um MCP4 822, pois dá os melhores resultados e não custa tanto quanto usar um Due.
Comentários
- Obrigado. A opção 2 parece muito boa, mas devido às limitações de tempo, fui em frente com a opção 3 e obtive os resultados que queria.
- ou use um R-2R escada como um " pobre ' s DAC "
- @AndreHolzner eu conto uma escada R-2R igual a um chip DAC, mas com muitos fios para torná-la prática em seu Arduino comum.
- @Majenko Eu só queria acrescentar que existe " potenciômetros digitais " ou " digipots " que são basicamente escadas R-2R dentro de um chip DIP-8. Eles são mais baratos do que os DACs. (Por exemplo, X9C103)
- @FilipFranik Exceto que ' não são escadas R-2R. Eles ' são apenas uma cadeia de resistores com um FET conectado a cada conexão entre resistores. Há apenas R. Muitos Rs iguais. Sim, se você escrever com as duas pontas do potenciômetro para VCC e GND você obterá uma espécie de DAC, mas ele sofre o mesmo tipo de problemas de impedância que um potenciômetro real. Ele fornece um par de resistências, enquanto um DAC fornece uma tensão.
Resposta
Em 5 V, um 1 O resistor 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 um 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 @russell sugerida com um resistor de 47K e capacitor de 1uF, você obterá uma tensão analógica na junção para usar com sua carga eletrônica.
Resposta
Pelo que eu sei, os Arduinos têm ADC (conversores analógico para digital), mas não tem 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.
Comentários
- Os Arduinos baseados em ARM geralmente têm pelo menos um DAC canal.
Resposta
NÃO .. Não há como obter uma tensão analógica do Arduino. O melhor que você pode fazer é usar o Arduino como um conversor Buck Voltage no modo linear ou boost usando um regulador de tensão, indutor e o transistor mosfet. Também pode ser necessário usar um Mega ou Dulorme que forneça uma frequência PWM diferente do padrão 50o Hz.
Boa sorte
Resposta
Não existe um caminho direto.
Além de @Majenko
Forma alternativa: você pode usar a ponte H como L293d para fornecer nível contínuo.Muitos circuitos inversores diy estão usando essa técnica.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS