Фазовый регулятор на AVR, нужна помощь...
Re: Фазовый регулятор на AVR, нужна помощь...
Ага, сегодня вечером попробую реализовать 
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Фазовый регулятор на AVR, нужна помощь...
Я говорил не о таком подходе.zero648 писал(а):...тогда отключаем триак и останавливаем сам таймер, т.е. TCCR=0. И так для каждого полупериода.
У Вас : триак включается в начале полупериода, а выключается через некоторое время.
У меня : триак выключен в начале полупериода, включается через некоторое время. По достижении нуля триак и так сам выключится.
Ставим плюсы: )
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Фазовый регулятор на AVR, нужна помощь...
Триак включается не в начале полупериода, а в заданное время по таймеру, первый отсчет таймера устанавливает обработчик INT1, время импульса устанавливается в обработчике таймера.ibiza11 писал(а):Я говорил не о таком подходе.
У Вас : триак включается в начале полупериода, а выключается через некоторое время.
Триак не отключится по достижении нуля, если не снять сигнал.ibiza11 писал(а):У меня : триак выключен в начале полупериода, включается через некоторое время. По достижении нуля триак и так сам выключится.
Код для примера:
Спойлер
Код: Выделить всё
; ---------- EXTERNAL INT1 interrupt vector ----------
EXT_INT1:
push r17
push r16
in r16, SREG
push r16
ser INT1_FLG
ldd r16, Y+$0
ldd r17, Y+$01
std Y+$05, r17
out TCNT0, r16
ldi r16, (0b011<<CS00)
out TCCR0, r16 ; Enable TCNT0
; Normal mode
; Prescaler 011=1:64
; 001=1:1,010=1:8,011=1:64,100=1:256,101=1:1024
pop r16
out SREG, r16
pop r16
pop r17
reti
.............................
; ---------- TIMER0 OVF interrupt vector - SINEWAVE CONTROL ----------
TMR0_OVF:
push r16
in r16, SREG ; Сейф SREG
push r16
ldd r16, Y+$05
subi r16, 1
std Y+$05, r16
brcc T0_EXIT
tst INT1_FLG
breq clos_triac
open_triac: sbi PORTB, 5 ; Open TRIAC
clr INT1_FLG
ldi r16, (0x00-0x20)
out TCNT0, r16
std Y+$05, INT1_FLG
pop r16
out SREG, r16
pop r16
reti
clos_triac:
cbi PORTB, 5 ; Close TRIAC
out TCCR0, INT1_FLG ; Стоп Timer0
T0_EXIT:
pop r16
out SREG, r16 ; Ресторе SREG
pop r16
reti
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Фазовый регулятор на AVR, нужна помощь...
неправильно понял Ваше сообщение. прошу прощения.

Я с этим и не спорил вроде какТриак не отключится по достижении нуля, если не снять сигнал.

Ставим плюсы: )
Re: Фазовый регулятор на AVR, нужна помощь...
Убрал задержу в 10мс. получилось так:
Микросекундные задержки пока не убрал, времени не было, завтра уберу. Все это дело в принципе работает, но есть несколько замечаний:
1) Присутствует дрожание, небольшое но есть.
2) Нет максимальной яркости, визуально доходит процентов до 85-90, даже если переменная ch1 равна нулю, т.е. включение симистора происходит сразу.
Из-за чего это может быть? Подозреваю "кривое" детектирование перехода через 0, сейчас стоит резистор 1М., подключенный к INT0. Завтра соберу что-нибудь более существенное.
Код: Выделить всё
ISR(INT0_vect){
counter = 0;
TCCR1B |= (1 << WGM12) | (1 << CS11);
GIFR = 0;
}
ISR(TIMER1_COMPA_vect){
if(flag1 == 0){
if(counter == ch1){
CH1_ON;
_delay_us(150);
CH1_OFF;
flag1 = 1;
TCCR1B = 0;
GIFR = 0;
}
}else{
CH1_ON;
_delay_us(150);
CH1_OFF;
flag1 = 0;
TCCR1B = 0;
GIFR = 0;
}
counter++;
if(counter == 99){
TCCR1B = 0;
GIFR = 0;
}
}Микросекундные задержки пока не убрал, времени не было, завтра уберу. Все это дело в принципе работает, но есть несколько замечаний:
1) Присутствует дрожание, небольшое но есть.
2) Нет максимальной яркости, визуально доходит процентов до 85-90, даже если переменная ch1 равна нулю, т.е. включение симистора происходит сразу.
Из-за чего это может быть? Подозреваю "кривое" детектирование перехода через 0, сейчас стоит резистор 1М., подключенный к INT0. Завтра соберу что-нибудь более существенное.
Последний раз редактировалось BARSik_ Чт дек 06, 2012 20:12:07, всего редактировалось 1 раз.
Re: Фазовый регулятор на AVR, нужна помощь...
Собрал другой детектор нуля, вот такой:

В работе почти ничего не изменилось, на максимальную яркость лампа не включается, и присутствует мерцание. В какую сторону копать?

В работе почти ничего не изменилось, на максимальную яркость лампа не включается, и присутствует мерцание. В какую сторону копать?
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Фазовый регулятор на AVR, нужна помощь...
В моем алгоритме flag1 включается в прерывании INT, а выключается в первом входе в прерывание таймера. Таймер станавливает себя во втором входе, когда flag1 = 0. Почему у вас таймер останавливается при любом flag1?
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Фазовый регулятор на AVR, нужна помощь...
... в сторону понимания , что в "чистом 0" симистор не может включитсяна максимальную яркость лампа не включается, и присутствует мерцание. В какую сторону копать?
Re: Фазовый регулятор на AVR, нужна помощь...
zero648 писал(а):В моем алгоритме flag1 включается в прерывании INT, а выключается в первом входе в прерывание таймера. Таймер останавливает себя во втором входе, когда flag1 = 0. Почему у вас таймер останавливается при любом flag1?
В каком смысле - во втором входе в прерывание? Таймер же за один полупериод успевает войти в прерывание 100 раз. Xто-то я совсе запутался... Можете кусочком кода поделиться?
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Фазовый регулятор на AVR, нужна помощь...
Выше пример приводил, но там таймер срабатывает по переполнению, а не по совпадению, атмега8 однако.