![]() |
|
|
#11 |
|
Junior Member
Регистрация: 19.09.2019
Сообщений: 4
Вес репутации: 0 ![]() |
Правильно ли я понял?
Развернуть для просмотраvoid detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
{ tic=0; //обнулить счетчик ResumeTimer1(); //запустить таймер attachInterrupt(0, detect_down, HIGH); //перепрограммировать прерывание на другой обработчик } void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту { StopTimer1(); //остановить таймер D4_Low; D5_Low; D6_Low; //логический ноль на выходы tic=0; //обнулить счетчик attachInterrupt(0, detect_up, LOW); //перепрограммировать прерывание на другой обработчик } [свернуть] Как я понимаю, при появлении LOW на входе мы запускаем таймер и ставим ожидание HIGH. LOW у нас появляется на 2м входе сразу же после прохождения синусоидой "0". После этого мы ждем несколько отсчетов уже по прерыванию таймера и подаем сигнал. При появлении HIGH мы отключаем таймер и обнуляем счетчик. Имеем мертвую зону, что хорошо для гарантированного выключения тиристора. Желтым - сигнал с детектора "0", Голубым - сигнал на управление нагрузкой. |
|
|
|
| Здесь присутствуют: 11 (пользователей: 0 , гостей: 11) | |
|
|