Создание переменного тока с контактом 11

Я пытаюсь получить переменный ток (50 Гц) с помощью Arduino Uno. Кажется, он не работает (или неправильный код).

int up;
int down;
int out = 11;
void setup() {
  pinMode(out, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  for (up = 0; up <= 255; up++) {
    analogWrite(out, up);
    delay(1);
  }
  for (down = 255; down >= 0; down--) {
    analogWrite(out, down);
    delay(1);
  }
}

Обновление:

  1. Теперь приведенный выше код дает выходное напряжение 0–5 В (увеличивается с 0 до 5, а затем уменьшается), не давая отрицательного цикла (-5 В).

  2. После установки минимальной задержки 1 выходная волна по-прежнему представляет собой однополупериодный выпрямитель с частотой 2 Гц.

  3. Без задержки светодиод мигает так быстро, что я не знаю, какова его частота.

Как сделать переменный ток частотой 50 Гц с отрицательным циклом?

, 👍0

Обсуждение

В UNO нет ЦАП. Поэтому вам нужно отфильтровать выход ШИМ, чтобы получить аналоговое напряжение переменного тока., @Gerben

То, что у вас есть (кроме отсутствия скобок в «for», что все это ломает), — это код для пилообразной волны (если вы ее отфильтруете) на частоте 1,95 Гц., @Majenko

Ваш код показывает реальное непонимание основ программирования на C., @Majenko

ооо, я думал, что вывод arudino AnalogWrite - это синусоидальная волна. После просмотра этого https://www.arduino.cc/en/Tutorial/PWM кажется, что arduino выдает только цифровую волну., @koolwithk

Он цифровой (как в широтно-импульсной модуляции), но при фильтрации (фильтр нижних частот) формирует аналоговое напряжение. Правильно установив рабочий цикл (analogWrite), вы можете сформировать одну дискретную часть сигнала переменного тока. Если вам нужна синусоида, вам нужно сформировать синусоиду из дискретных значений., @Majenko

Обычно это делается с помощью справочной таблицы (LUT), поскольку вычисление значений sin происходит слишком медленно на небольшом 8-битном микроконтроллере., @Majenko

@Majenko обновил цикл for и код. Проверил мультиметром на переменном токе он показывает около 5В, а на постоянном токе около 2,5В. похоже, создается половинный переменный ток на частоте 50 Гц. сейчас работаю над фильтром нижних частот., @koolwithk

Ваш код все еще далек от правильного. Там есть ненужные биты, а нужные биты находятся не в том месте (и неправильное значение, и просто неправильное)., @Majenko


2 ответа


2

Я запустил ваш скетч, и вот выходной сигнал:

прямоугольная волна

analogWrite создает прямоугольную волну.

Как сказал Маженко, чтобы получить эту синусоидальную волну, нужно добавить фильтр нижних частот.

,

0

Если вы не критичны к форме волны, вы можете использовать трансформатор, у которого вторичная обмотка имеет отвод посередине. У начального тоже должен быть. Привяжите отвод центра входа к +12 или любому другому доступному, но НЕ используйте 5-вольтовый контакт Arduino. Затем, используя два N-канальных полевых МОП-транзистора с защитой от лавин, вы управляете двумя оставшимися входными выводами. На выходе будет псевдосинусоидальная волна, далекая от совершенства, но она будет иметь отрицательный ход, который вам нужен. Этот тип схемы можно найти в импульсных источниках питания (SMPS). Обратите внимание, что коэффициент обмотки трансформатора будет определять выходное напряжение. Вам понадобится небольшое мертвое время между выключением одного МОП-транзистора и включением другого. Один MOSFET будет работать, но будет только два соединения с первичной обмоткой трансформатора, а не 3, и форма волны будет паршивой.

,

Надеюсь, вы понимаете, что отвечаете на вопрос более чем четырехлетней давности. Ваш ответ очень выиграет от схемы., @StarCat