Например TDA7294

Форум РадиоКот • Просмотр темы - 6-ти канальный Диммер или регулятор мощности на мк atmega16
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт июл 10, 2025 00:01:54

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 34 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Чт авг 17, 2017 18:31:43 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Кто может нарисовать фазо - импульсное управление пропусков периодов

можно поискать Леонид Иванович Ридико, вроде регулятор мощности, тут что то скопипащено:
http://trolsoft.ru/ru/articles/bresenham-algo
Когда то делал безпомеховый регулятор для тэна с шимом и полевиком (меги есть с 6 шим), неудобство - надо выпрямлять и сглаживать хорошими конденсаторами сетевое напряжение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Чт авг 17, 2017 21:13:21 
Друг Кота
Аватар пользователя

Карма: 58
Рейтинг сообщений: 389
Зарегистрирован: Чт мар 20, 2008 01:06:40
Сообщений: 3253
Откуда: Севастополь
Рейтинг сообщения: 0
как вариант - http://www.cyber-place.ru/showthread.php?t=525

_________________
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Пт авг 18, 2017 16:05:01 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 92
Зарегистрирован: Сб июн 01, 2013 22:24:21
Сообщений: 765
Откуда: ПФО
Рейтинг сообщения: 0
Уважаемый ATMEL86, если хотите просто реализовать управление нагревом тенов, то совсем не стоит заморачиваться сложными алгоритмами, как сказал товарищ Z_h_e(и я с ним обсолютно согласен): "В простейшем случае берете твердотельное реле с детектором нуля" ну или если хотите, можно взять симистор и оптопару(например MOC3063) с детектором нуля выйдет что то аналогичное твёрдотельному реле, и управляйте шимом. Поскольку тены настолько инерционная нагрузка то эти пульсации никто не заметит, а за счёт детектора нуля не будет "звона" в проводах как при использовании диммера. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Пт авг 18, 2017 22:59:05 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб апр 20, 2013 16:38:32
Сообщений: 120
Откуда: Страна Чудес
Рейтинг сообщения: 0
Конечно крайне мало данных чтобы что-то посоветовать.

Пол периода это 10 мс или 180 градусов. Допустим будем регулироваться с дискретностью 100мкс или 1,8 градуса. Т.е. поделим полупериод на 100 частей.
При тактовой частоте 16 МГц за 100мкс МК выполнит 1600 однотактовых команд. Это приличное число, т.е. между этими точками МК может заняться спокойненько другим вещами. Эти точки дисретизации условно нумеруем от 0 до 100.

Запускаете таймер в режиме СТС и настраиваете прерывание так, чтобы оно вызывалось каждые 100мкс.
Так же настраиваете внешнее прерывание от детектора фазы.

Для каждого канала задается точка включения (фаза включения симистора), например по UART или как то еще. Ну видимо 6 переменных для 6 каналов.
В прерывании от детектора: сброс таймера и обнуление счетчика текущей дискретной точки (текущей фазы) на полуволне.
В прерывании от таймера:
инкремент счетчика дискретных точек;
если счетчик совпадает с заданием, то соответствующий порт включается иначе выключается.

Не знаю насколько понятно написал и надо будет конечно учесть кой-какие нюансы. Например, не увеличивать счетчик больше какого-то числа, можно останавливать таймер при фазе больше 160 градусов и запускать снова по детектору, учесть что детектор может быть чуть раньше или позже фактичего перехода через ноль и т.д.




Привет всем! :))

Вот кое что у меня получилось...

Правда в прерывании таймера0 задержки delay_us(30);
что очень плохо :oops:

подскажите альтернативу delay_us, сделать на том же таймере0


Код:

unsigned char out_1=0, out_2=0, out_3=0, out_4=0, out_5=0, out_6=0;
bit na,nb,nc,nd,ne,nf;


  interrupt [EXT_INT0] void ext_int0_isr(void)
   {
   na=1; 
   nb=1;
   nc=1;
   nd=1;
   ne=1;
   nf=1;
   
    TCNT0=0x00; //обнуляем счетный регистр
    out_1=0;     
    out_2=0;     
    out_3=0;      //обнуляем все выходы!!!
    out_4=0;
    out_5=0;
    out_6=0;
  }


// Timer 0 output compare interrupt service routine
   interrupt [TIM0_COMP] void timer0_comp_isr(void)
   {
    out_1++;
    out_2++;
    out_3++;
    out_4++;
    out_5++;
    out_6++;
   
   
   
   
     if (na==1) {

     if (out_1>30) {  //время включения симистора
     PORTC.2=1;
     delay_us(30);
      PORTC.2=0;
      out_1=0;
      na=0;   
        }
       
    };
     
   
   
     if (nb==1) {

      if (out_2>50) {
      PORTC.3=1;
      delay_us(30);
      PORTC.3=0;
      out_2=0;
      nb=0;     
     }

    };
     
   
   
     if (nc==1) {

      if (out_3>150) {
     PORTC.4=1;
     delay_us(30);
     PORTC.4=0;
     out_3=0;
     nc=0;     
     }

    };
     
   
   
    if (nd==1) {

      if (out_4>0) {
      PORTC.5=1;
      delay_us(30);
      PORTC.5=0;
      out_4=0;
      nd=0;   
     }
    };
   
   
   
     if (ne==1) {

     if (out_5>0) {
      PORTC.6=1;
      delay_us(30);
      PORTC.6=0;
      out_5=0;
      ne=0;     
      }

    };
   
   
     

       if (nf==1) {

      if (out_6>0) {
      PORTC.7=1;
      delay_us(30);
      PORTC.7=0;
      out_6=0;
      nf=0;
     }

    };
   
     
     
     };



    void main(void)
  {

   DDRC=0b11111100;
   PORTC=0b00000000;



// External Interrupt(s) initialization
        // INT0: On
        // INT0 Mode: faling Edge
        // INT1: Off
        // INT2: Off
            GICR|=(0<<INT1) | (1<<INT0) | (0<<INT2);
            MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (0<<ISC00);
            MCUCSR=(0<<ISC2);
            GIFR=(0<<INTF1) | (1<<INTF0) | (0<<INTF2);
   
       
       
         // Timer/Counter 0 initialization
         // Clock source: System Clock
         // Clock value: 921,600 kHz
         // Mode: CTC top=OCR0
         // OC0 output: Disconnected
         // Timer Period: 0,050998 ms
            TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) | (1<<CS01) | (0<<CS00);
            TCNT0=0x00;
            OCR0=0x2E;   //100us


           // Timer(s)/Counter(s) Interrupt(s) initialization
              TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (1<<OCIE0) | (0<<TOIE0);


            #asm("sei") // Global enable interrupts
};



Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Сб авг 19, 2017 07:55:42 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18401
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
этот код следует тщательнейшим образом причесать, в таком виде это неприемлемо.
1. счетчик один, фазы каналов в массиве. инкрементируете один счетчик, сравниваете с массивом в цикле.
2. не надо задержек. импульс формируете по условию ЕСЛИ РАВНО. таким образом, в прерывании если счетчик фазы совпадает с фазой канала, выход порта включается. в следующее прерывание счетчик уже не будет совпадать, и выход канала выключится - получится импульс (хоть и не 30 мкс, но это не важно)
3. раз все выходы каналов на одном порту, заведите отдельную переменную и устанавливайте в ней биты, а затем выводите сразу в порт эту переменную, обновляя состояние одновременно всех 6 выходов - так исключите джиттер фазы.

это первое, что пришло на ум.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Сб авг 19, 2017 08:55:08 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
До дома доберусь , накидаю вариант кода.

Добавлено after 57 seconds:
Re: 6-ти канальный Диммер или регулятор мощности на мк atmega16
Чуть больше 1000 км осталось

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Сб авг 19, 2017 12:25:56 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб апр 20, 2013 16:38:32
Сообщений: 120
Откуда: Страна Чудес
Рейтинг сообщения: 0
Всем привет! Спасибо что подсказываете. Хочу применить симисторы bt139 скажите длинна импульса открытия?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Сб авг 19, 2017 14:57:24 
Друг Кота

Карма: 68
Рейтинг сообщений: 1408
Зарегистрирован: Сб янв 29, 2011 00:28:48
Сообщений: 7774
Рейтинг сообщения: 0
30 мкс, например...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Вс авг 20, 2017 15:39:53 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
Не проверял даже в симуляторе. Может сразу не заработать.

Спойлер
Код:
#define F_CPU 16000000UL

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



#define DimPort   PORTC
#define DimDDR   DDRC

#define ch0      (1<<0)
#define ch1      (1<<1)
#define ch2      (1<<2)
#define ch3      (1<<3)
#define ch4      (1<<4)
#define ch5      (1<<5)

#define Presc   3   //предделитель таймера на 64
#define us100   (F_CPU/64*0.0001)// значение таймера, до которого досчитает до 100 мкс
#define Tim0Start   {TCCR0=Presc | (1<<WGM01);}
#define Tim0Stop   {TCCR0=0;}   

#define PhaseLimit 90
//******************************************
volatile uint8_t PhaseCh [6]={20,25,30,40,60,255};
volatile uint8_t PhaseCount=0;   

//*****************************************

//сработал детектор
ISR (INT0_vect)
   {
      Tim0Start;   //запуск таймера
      PhaseCount=0;      
   }
//----------
//
ISR (TIMER0_COMP_vect)   
   {
      uint8_t BufPort=DimPort;
      BufPort&=~(ch5|ch4|ch3|ch2|ch1|ch0);
      
      PhaseCount++;
      if (PhaseCount>PhaseLimit) {Tim0Stop;}
      
         else
         {
            if (PhaseCount==PhaseCh[0]) BufPort|=ch0;
            if (PhaseCount==PhaseCh[1]) BufPort|=ch1;
            if (PhaseCount==PhaseCh[2]) BufPort|=ch2;
            if (PhaseCount==PhaseCh[3]) BufPort|=ch3;
            if (PhaseCount==PhaseCh[4]) BufPort|=ch4;
            if (PhaseCount==PhaseCh[5]) BufPort|=ch5;
         }      
      
      DimPort=BufPort;
   }
//*****************************************************************   
   
int main(void)
{
   
   //настройка порта для управления симисторами
   DimDDR=ch0|ch1|ch2|ch3|ch4|ch5;
   
   //настройка таймера на 100мкс
   OCR0=us100;
   //TCCR0=1<<WGM01;   //стс
   TIMSK=1<<OCIE0;
   
   //настройка внешнего прерывания от детектора   
   MCUCR=(1<<ISC01) | (1<<ISC00);//фронт
   GICR=(1<<INT0);
   
   asm("sei");
   while(1)
      {         
         
      }
}

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Вс авг 20, 2017 21:57:06 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб апр 20, 2013 16:38:32
Сообщений: 120
Откуда: Страна Чудес
Рейтинг сообщения: 0
Привет всем! я изучил программу уважаемого Z_h_e и я понял, что ввёл всех в заблуждение!!!
я ни слова не сказал что,
все 6 - каналов будут динамически регулироваться кнопками +/- (возможно от термодатчиков)
в под программе будет инкремент\ декремент значения каждой по отдельности переменной out_1;2;3;4;5;6
я ещё раз извиняюсь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Пн авг 21, 2017 06:15:43 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я думаю что никто не предполагал о статичном режиме работы. Я просто показал возможную реализацию. Никто Вам не мешает добавить кнопки, дисплеи и другую периферию.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Пн авг 21, 2017 08:49:09 
Друг Кота

Карма: 64
Рейтинг сообщений: 1013
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4329
Откуда: Ижевск
Рейтинг сообщения: 0
Число-импульсное регулирование мощности тенов можно реализовать с отсечкой в 100 периодов сети 20мс. У меня в устройстве с аналогичным типом управления полный период 2 секунды делится на поканальное разравнивание в зависимости от установленной мощности и дополнительное разравнивание между каналами с целью выравнять мощность потребляемую от сети.
Код:
#define us100   (F_CPU/64*0.0001)// значение таймера, до которого досчитает до 100 мкс
Таймер отсчитает не 100, а 104мкс. Правильнее
Код:
#define us100   (F_CPU/64*0.0001-1)// значение таймера, до которого досчитает до 100 мкс


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Пн авг 21, 2017 09:21:03 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
akl писал(а):
Таймер отсчитает не 100, а 104мкс.
Я эту ошибку у себя потом увидел. Прикинул что при ограничении 91, за период вылезти не должно (конечно еще зависит от детектора). Лень было уже потом телефоном исправлять. Не сомневался, что именно Вы на нее укажете :beer: , честно сказать, думал это произойдет раньше, видимо из-за воскресенья произошла задержка :)) .

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 6-ти канальный Диммер или регулятор мощности на мк atmeg
СообщениеДобавлено: Пт сен 01, 2017 21:23:28 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 33
Зарегистрирован: Пт июн 04, 2010 17:40:13
Сообщений: 544
Откуда: Непокорный город-герой Севастополь
Рейтинг сообщения: 0
Покопайтесь тут http://radiokot.ru/circuit/digital/home/74/ - это моя первая статья, может что-то для себя найдёте.

_________________
Даже у стен есть уши...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 34 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y