Генератор 400Гц на Arduino Mega2560

так вы исходный код залейте сначала, и посмотрите что там на выходе таймера1

Я наверное уже сильно старый и не понимаю, как можно синусом в 400Гц трансформатор / мотор запустить? Они же ток хавают приличный.

1 лайк

125 значений на две полных волны. 125 / 2 ,= 62.5. То есть на одну волну 62.5 значения. Частоту 62.5 КГц делим на 62.5 и получаем 1КГц.

Из-за этих .5 в конце пришлось делать две волны …
Пареметров RC не подскажу - делал в Proteus, а он чипы не сжигает … ИМХО резистора в 1К будет достаточно, что бы не спалить выход. Кондер разрядите перед пайкой от греха …

И это решит всё проблемы ТС?
Ну я, видимо, всё ещё не понимаю нахуа оно надо…

Так трансформатор “то поди - мааааленький”(с) :slightly_smiling_face: 9Вт/45в = 0.2А Оно самолётное на 400Гц в том числе, что бы и ток поменьше был и размер.

Можно же добавить операционник и разогнать до нужных величин …

Ага. Вы явно старый и невнимательный товарисч. :slight_smile:

Komandir, вот я и вижу эти самые 62.5 КГц!
А ослик из-за них просто не может нормально засинхронизировать картинку.
От этого она и получается дёрганой.
Сейчас попробую какой-нибудь примитивнейший RC подключить на выход.

P.S. А что насчёт таблички для 400 Гц.?

Пока не смотрел, методику я только что описал … можете и сами попробовать.

Пины мк от такого подхнут, даже если оно всё маааленькое)))

Оффтоп: У меня вчера на щупах ЛБП справилась типа силиконовая «накладка»… Хотя он винтокрылом всего один раз пожжужжал))

9 ватт с одного Пина?! Он сдохнет сразу же!!!

А я то пытался вспомнить как енто называется, старость не радость :slightly_frowning_face:

Чтобы додуматься до такого, я столько не выпью. :slight_smile:

1 лайк

А так схемы нет. Что ты еще мне предлагаешь додумать?

Надо 4 волны синуса пересчитать в 625 ячеек памяти ! (тут на конце выходит .25 по этому 4 волны)

Предлагаю, уж не обессудьте, не считать других за…

а там не три ли фазы нужно? и 36 в поди тоже

Если под словом “там” имеется ввиду то, что обсуждается в этой теме, то “три фазы” “там” имеются, но…
На них подавать ничего не требуется. Достаточно подать на обмотки возбуждения сельсинов требуемое напряжение требуемой частоты.
В обсуждаемом случае - 45В 400Гц.
Вот схема подключения.
Это называется “индикаторный режим”. Где для успешной работы достаточно подать те самые 45В 400Гц на ДВА провода, подключённых к обмоткам “ОВ” сельсинов.
Т.о. (в данном случае) в эту линию необходимо обеспечить подачу 45В 400Гц с макс. током 0,4А (для запитки двух ОВ).
Соответственно, мне, кроме генерации синуса 400Гц, необходимо обеспечить усиление сигнала с ардуино до вышеупомянутых значений.
Т.е. далее необходим УНЧ для обеспечения необходимой мощности и, возможно, трансформатор для обеспечения необходимого напряжения.
Т.к. для того, чтобы получить 45В синуса, УНЧ (без трансформатора) придётся запитывать от ~ 60В.
В точности те же проблемы будут и с предложенным ua6em ad9833.
Вообщем, не всё так просто, как хотелось бы…
Но это всё к данной теме имеет весьма отдалённое отношение. Т.е. это уже частности.

P.S.

Всё именно так и оказалось. Прицепил к выходу простейший ФНЧ (резистор и кондёр) и ослик увидел нужную синусоиду.
Правда, не 1000Гц, как ожидалось, а 930, но это уже вероятно его (ослика) погрешность измерения.
Частотомером смотреть не стал, т.к. и так понятно, что с генерацией всё в норме.
Жду обещанную Komandir-ом табличку для 400Гц. :wink:

А этого не достаточно -?Генератор 400Гц на Arduino Mega2560 - #54 от пользователя Komandir
Сама формула есть в той теме.

Увы… Старые извилины не тянут такое…
Ну не моё это…

16000000 / 400 / 256 = 156.25
Для более точного графика нужно целое число, следовательно умножаем в данном случае на 4
156.25 * 4 = 625
Подставляем 625 и 4 в скетч.
(Для 1кГц было 16000000 / 1000 / 256 = 62.5 для целого 62.5 * 2 = 125)
Видимо так будет. На пятый таймер и его ноги вы уже умеете переводить …

uint8_t sine_wave[625];
void setup() {
    for (uint16_t i=0; i<625;i++) sine_wave[i]=128 + 127.5 * sin(radians(360.0*4/625*i));
    pinMode(9, OUTPUT);
    pinMode(10, OUTPUT);
    TIMSK1 = 1 << TOIE1;
    OCR1A = OCR1B = sine_wave[624];
    TCNT1 = 0;
    TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << COM1B0) | (1 << WGM10);
    TCCR1B = (1 << WGM12) | (1 << CS10); //Mode5 Fast PWM, 8-bit  TOP 0xFF ; DIV 1
}

ISR (TIMER1_OVF_vect) {
    static uint8_t  n(0);
    OCR1AL = OCR1BL = sine_wave[n++];
    if (n >= 625) n = 0;
}

void loop() {
}

Магарыч занести не забываем !!!
Если нужен “мгновенный” старт без расчётов (который проходят за доли секунды), то можно вывести этот массив после расчёта на терминал и вставить в ваш предыдущий код.

1 лайк