Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Диммер BT136 + MOC3021
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
_Bess
Доброго времени суток. Прошу помощи в изгнании диавола из кода!!1
Пытаюсь соорудить диммер на MOC3021 + BT136, детектор нуля повесил на обработчик внешнего прерывания. Суть проблемы в чем: Схема ведет себя так, будто оптосимистор с zero-cross: если подать сигнал на оптопару точно в момент перехода нуля - лампа загорается. Если сигнал подать чуть с задержкой относительно перехода - симистор не открывается. Собственно, почему?
Код
void EXTI4_15_IRQHandler(void)
{  
      HAL_Delay(2);   // c этой задержкой лампочка не горит
                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_14, GPIO_PIN_SET);  
                HAL_Delay(1);
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_14, GPIO_PIN_RESET);
      HAL_NVIC_ClearPendingIRQ(EXTI4_15_IRQn);
      HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
}
Onkel
Цитата(_Bess @ Feb 15 2016, 23:08) *
Доброго времени суток. Прошу помощи в изгнании диавола из кода!!1

Код
void EXTI4_15_IRQHandler(void)
{  
      HAL_Delay(2);   // c этой задержкой лампочка не горит
                ....
}

по большому счету, да и по гамбургскому такие штуки как HAL_Delay(2); в теле прерывания не рекомендуются. В прерывании по занулению ноги я бы запустил таймер, быстренько из прерывания выскочил бы и уже по прерыванию по таймеру резал бы синус, тоже живенько и быстро.
Plain
Нуль вообще надо брать защёлкой, после этого программно ФАПЧ'ить, т.е. отсеивать помехи, а симистор включать аппаратно же компаратором того же таймера.
Herz
Тему переместил.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.