Что касается моей программы, это программа, которая выполняет некоторые вычисления, а затем выводит напряжение на основе результата, используя функцию analogWrite. Однако моя проблема заключается в том, что я выполнил свое программирование, основываясь на неправильном представлении о том, что функция аналогового ввода через ШИМ выдает аналоговое напряжение, хотя на самом деле оно вместо этого только «имитирует» аналоговое напряжение.
Вот соответствующие части моего кода:
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");
}
Что касается схемы, выходной контакт 11 подключается к резистору 1 Ом, а затем к заземлению. (Где я измерил напряжение) Я использую плату Arduino Uno.
ОБНОВЛЕНИЕ :
Как сказано в комментариях @DatHa, ШИМ не выводит напряжение. Есть ли способ вывода напряжения как сказано, не меняя плату?
Ответы:
У вас есть три варианта:
Из трех вариантов я обычно использую MCP4822, поскольку он дает наилучшие результаты и стоит меньше, чем использование Due.
источник
При напряжении 5 В резистор на 1 Ом будет пытаться поглотить 1 А и намного превысить характеристики 40 мА. Пожалуйста, используйте как минимум резистор 5 / 0,040 = 125 Ом для защиты вашего контакта. И если вы поместите конденсатор между резистором и землей, RC-цепь конденсатора сгладит ШИМ до аналогового напряжения.
Пожалуйста, попробуйте предложенный ответ @russell с резистором 47K и конденсатором 1 мкФ, вы получите аналоговое напряжение на соединении для использования с вашей электронной нагрузкой.
источник
Насколько я знаю, в Arduinos есть АЦП (аналого-цифровые преобразователи), но нет ЦАП (цифро-аналоговых преобразователей). Таким образом, вы не можете выводить установленное напряжение из каких-либо контактов на основе цифрового значения.
источник
НЕТ .. Нет способа получить аналоговое напряжение от Arduino. Лучшее, что вы можете сделать, - это использовать Arduino в качестве преобразователя напряжения в линейном режиме или режиме повышения напряжения, используя стабилизатор напряжения, индуктор и транзистор с полевой транзистором. Вам также может понадобиться использовать Mega или Dulorme, которые обеспечивают частоту ШИМ, отличную от стандартной 50 Гц.
Удачи
источник
Прямого пути нет.
В дополнение к @Majenko
Альтернативный способ: вы можете использовать H-мост, такой как L293d, чтобы обеспечить непрерывный уровень. Многие схемы инвертора diy используют эту технику.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS
источник