Attiny85 AC Phase Control для уменьшения яркости лампочки

Я пытаюсь приглушить лампочку через attiny85, который принимает команды, отправленные по I2C. Моя проблема в том, что лампочка почти не тускнеет и немного мерцает.

Мою схему можно увидеть здесь: Схема диммирования Attiny85, управляемая по I2C

Оптоизолятор (и, следовательно, симистор) управляется через контакт 2 (AKA PB3, AKA PCINT3), а определение пересечения нуля переменного тока выполняется на контакте 3 (AKA PB4, AKA PCINT4) на Attiny85.

В коде используется разрешение прерывания при смене вывода, а не одно разрешение внешнего прерывания, потому что вывод внешнего прерывания - это вывод 7 (также известный как PB2), который используется как SCL для связи I2C.

Используется внутренняя частота 8 МГц, а предварительный делитель таймера / счетчика - 1024. Это означает, что у меня есть эффективный диапазон ввода (см. Переменную level в коде) примерно от 0 до 65. Мой источник переменного тока - США (60 Гц).

#include <avr/interrupt.h>
#include <avr/io.h>
#include <TinyWireS.h>

#define PULSE 4       //trigger pulse width (counts)
#define I2C_SLAVE_ADDR 0x4 // the 7-bit address (remember to change this when adapting this example)

byte trigger = 3;
byte detector = 4;

byte level = 50;
byte maxLevel = 65;
byte minLevel = 0;


void setup() {
    TinyWireS.begin(I2C_SLAVE_ADDR); // join i2c network
    TinyWireS.onRequest(requestEvent); //setup i2c requester

    digitalWrite(detector, HIGH);  //enable pull-up resistor
    pinMode(trigger, OUTPUT);// Set AC Load pin as output

    TCCR1 = 0;     //stop timer
    OCR1A = level;    //initialize the comparator
    TIMSK = _BV(OCIE1A) | _BV(TOIE1); //interrupt on Compare Match A and  enable timer overflow interrupt

    GIMSK = 0b00100000; //Enable pin change interrupt
    PCMSK = 0b00010000; //PB4, physical pin 3 PCINT4
    TCCR1 = B00001011; //Prescale the timer
    sei();  // Turn on interrupts
}


ISR(PCINT0_vect){ //interrupt looking for zero crossing
        TCNT1 = 0;   //reset timer - count from zero
        OCR1A = level;
        TCCR1 = B00001011;// prescaler on 1024, see table 12-5 of the tiny85 datasheet
}

ISR(TIMER1_COMPA_vect){    //comparator match
        digitalWrite(trigger,HIGH); //set triac gate to high
        TCNT1 = 255-PULSE;       //trigger pulse width for a few cycles for triac to latch on. 255 bc the counter can only count up to 255
}

ISR(TIMER1_OVF_vect){  //timer1 overflow
        digitalWrite(trigger,LOW);   //turn off triac gate
        TCCR1 = 0;  //disable timer stop unintended triggers
}


void loop() {}

void requestEvent(){
    if (TinyWireS.available()) {
        level = TinyWireS.receive();
        if (level > maxLevel) {
            level = maxLevel;
        }
        else if (level < minLevel){
            level = minLevel;
        }
    }
    TinyWireS.send(OCR1A);
}

Я пробовал множество лампочек, и ни одна из них не работала лучше, чем другая.

Вот видео, показывающее детектор пересечения нуля (желтый) и триггер (синий) на осциллографе, когда я отправляю ему разные уровни затемнения Плохое видео на телефоне


person thread9000    schedule 29.12.2016    source источник
comment
Просто быстрый ответ. Какие лампочки пробовали? Лампы накаливания и галогенные лампы регулируются, а светодиодные и люминесцентные (неоновые и CFL) - нет. Более того, я бы добавил демпферную сетку ... Тогда .. Почему выход желтой волны несимметричный?   -  person frarugi87    schedule 29.12.2016
comment
Лампы накаливания и регулируемые светодиоды. Да, я думал о демпфере, просто сейчас у меня нет запчастей. Я думаю, что это поможет, но не думаю, что это исправит мою текущую проблему.   -  person thread9000    schedule 29.12.2016
comment
Желтый - это ответ детектора пересечения нуля. Это то, что подается в attiny85.   -  person thread9000    schedule 29.12.2016
comment
было бы проще заменить / загнать горшок на что-то вроде этого или использовать igbt или ssr w / zcd вы можете запускать из крошечного.   -  person dandavis    schedule 03.01.2017


Ответы (1)


вот что-то вроде работает: диммер, управляемый напряжением, с ATtiny85

attiny85 ac dimmer

person stark9000    schedule 04.09.2017