Открыть симистор на пике напряжения
- Войдите на сайт для отправки комментариев
Сб, 29/02/2020 - 10:58
Решил сделать контроллер для точечной сварки. Вроде для трансформатора надо открыть симистор на пике напряжения. Мой код при симуляции на протеусе не всегда правильно отрабатывает. Насколько правильный мой код? или в этом случае другой подход нужен.
#include <avr/io.h> #include <avr/interrupt.h> #define triak 13 #define button 11 volatile byte count_Imp = 5; // количество импульсов volatile bool button_f = 0; // флаг нажатия кнопки double time_but = 0; // время нажатия // таймер 1 совпадение ISR(TIMER1_COMPA_vect) { if (count_Imp < 5) { if (button_f) digitalWrite(triak, 1); } else{ button_f = 0; digitalWrite(triak, 0); } count_Imp++; } // при начале полупериода обнуляем таймер 1 void sin_imp(){ if (button_f){ TCNT1 = 0x00; // обнуление таймера 1 } } void setup() { pinMode(triak, OUTPUT); pinMode(button, INPUT); // инициализация Timer1 cli(); // отключить глобальные прерывания TCCR1A = 0; // установить регистры в 0 TCCR1B = 0; TCNT1 = 0x00; //OCR1A = 15624; // установка регистра совпадения 1 сек OCR1A = 79;// установка регистра совпадения 5 mсек TCCR1B |= (1 << WGM12); // включение в CTC режим // Установка битов CS10 и CS12 на коэффициент деления 1024 TCCR1B |= (1 << CS10); TCCR1B |= (1 << CS12); TIMSK1 |= (1 << OCIE1A); // включение прерываний по совпадению sei(); // включить глобальные прерывания attachInterrupt(0, sin_imp, RISING); } void loop() { if (digitalRead(button) == 0) { if ((millis() - time_but) > 300){ time_but = millis(); count_Imp = 0; button_f = 1; } } }
Точно на пике, вы ничего не перепутали, трансформатор же стартует в режиме КЗ выходной обмотки