реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> X10. Наконец - то получилось., Мучился долго
Димон Безпарольн...
сообщение May 27 2015, 17:50
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



А оказалось что DRS516 стал по каким - то причинам глухим. Купил новый, подключил - заработало!

Схема передающей части.

Трансформатор от какой - то вч-шняги. Это некритично. Индуктивность 1мГн.

Zero_Cross.

Работает на 2 внешних прерывания AT91sam7s 256. Дело в том, что процессор должен реагировать на оба фронта сигнала, а настроить можно только один. В итоге удалось вытянуть Zero_Cross из DRS - 516 и сравнить осциллографом.

Вот что получилось:


В разработках я опирался на AN236 от Микрочип. Софт делал строго по протоколу. Помог осциллограф DSO-5200A. У него буфер 1M, что позволило записать всю передаваемую от DRS - 516 посылку и ее проанализировать. Если отойти от протокола, прграмму можно сильно упростить.

Софт. Настраиваем внешние прерывания:
Код
//Внешнее прерывание
   *AIC_SMR30   =   (1 << 5) |(1 << 6)| 7;      //Задний фронт(5), передний фронт (5,6)
   *AIC_SVR30   =   (unsigned long) EXT0_int;   //7-й уровень пиоритета (IRQ0) Стр.165.   PA20, P3.4
   *AIC_SMR31   =   (1 << 5) | 6;            //Задний фронт(5), передний фронт (5,6)
   *AIC_SVR31   =   (unsigned long) EXT1_int;   //7-й уровень пиоритета (IRQ1) Стр.165. PA30, P2.6
   *AIC_IECR   =   0xC0000000;               //Разрешить внешнее прерывание


И пишем их код:
Код
__irq void EXT0_int(void) {         //Внешнее прерывание. Начало и остановка измерений АЦП
   ZeroCross = 1;               //
__irq void EXT1_int(void) {ZeroCross = 1; *AIC_EOICR = 1;}


Сам обработчик X10:
Код
extern int ZeroCross;

//Функции X10
void Pulse1ms(void);                    //Передача импульса в сеть
void Pulse1ms1(void);                    //Генератор импульса 120КГц 1мс
void Pause1ms(void);                    //Генератор паузы 1мс
void WaitZC    (void);                        //Ожидание события - перехода синосоиды 50Гц через 0.
void SendStart(void);                    //Передача старт - условия: три единичные посылки 1мс и пауза 1мс
void Trnsfer (unsigned char DATA, int Bits); //Педача данных длиной Bits в сеть

void SendX10Command (int House, int Unit, int Command){//Педача команды в сеть
        SendStart();          //Передаем посылку 1110
        Trnsfer(House,4);    //House. 0110 = A
        Trnsfer(Unit,5);      //Unit Addresses = 00110 = 1
        SendStart();          //Передаем посылку 1110
        Trnsfer(House,4);    //House. 0110 = A
        Trnsfer(Unit,5);      //Unit Addresses = 00110 = 1
        WaitZC();            //Пропускаем 6 переходов
        WaitZC();            //через 0.
        WaitZC();            //
        WaitZC();            //
        WaitZC();            //
        WaitZC();            //
        SendStart();          //Первый раз
        Trnsfer(House,4);      //House. 0110 = A
        Trnsfer(Command,5);    //On = 10100
        SendStart();        //Второй раз.
        Trnsfer(House,4);      //House. 0110 = A
        Trnsfer(Command,5);    //On = 10100
                        }
//Для DRS-16 достаточно такого алгоритма:
/*        SendStart();        //
        Trnsfer(6,4);          //House
        Trnsfer(0x1c,5);      //Unit / Function. Function = On
*/
//--------------------------------------------------------------------------------------------------------------------
void Trnsfer (unsigned char DATA, int Bits){//Педача данных длиной Bits    в сеть
    unsigned char i;                    //
    unsigned char mask;                 //
    for(i=0; i<Bits; i++) {             //
        mask = (1 << i);                 //Выделение передаваемого бита
        WaitZC();                        //Ожидание перехода через 0 перед передачей бит - интервала
        if((DATA&mask) == 0)               //Передача 0:
            {Pause1ms();                //
            WaitZC();                    //Ожидание перехода через 0 между полубитным интервалом
            Pulse1ms();}                  //
        else                            //Передача 1:
            {Pulse1ms();                //1
            WaitZC();                    //Ожидание перехода через 0 между полубитным интервалом
            Pause1ms();}                  //
        }                                 //for(i=0; i<Bits; i++)
        }                                //void Trnsfer (unsigned char DATA, int Bits)
//--------------------------------------------------------------------------------------------------------------------
void WaitZC(void) {                        //Ожидание события - перехода синосоиды 50Гц через 0.
    ZeroCross = 0;                        //
    while(!ZeroCross) {}                //
    }                                    //
//--------------------------------------------------------------------------------------------------------------------
void SendStart(void){                    //Передача старт - условия: три единичные посылки 1мс и пауза 1мс
    WaitZC();                            //Ожидание перехода через 0
       Pulse1ms();                            //
    WaitZC();                            //Ожидание перехода через 0
       Pulse1ms();                            //
    WaitZC();                            //Ожидание перехода через 0
       Pulse1ms();                            //
    WaitZC();                            //Ожидание перехода через 0
    Pause1ms();                            //Передача паузы необязательна
    }
//--------------------------------------------------------------------------------------------------------------------
void Pulse1ms (void){                      //Передача импульса. Импульс передается 3 раза
     Pulse1ms1();                        //со слвигом 120градусов для трех разных фаз. Фаза A
     Pause1ms();                        //
     Pause1ms();                        //
     Pulse1ms1();                        //Фаза B
     Pause1ms();                        //
     Pause1ms();                        //
     Pulse1ms1();}                        //Фаза C
//Хотя для DRS516 фазы B и С не нужны. И так работает. Достаточен вызов только Pulse1ms1()!
//--------------------------------------------------------------------------------------------------------------------
//Передача единичной посылки длительностью 1мс с помощью ШИМ. Частота заполнения 120КГц.
//Длительность посылки задается с помощью таймера TC1.
//Таймер запрограммирован на останов по совпадению с RC. Загружаем RC нужной величиной
//и ждем бита совпадения таймера TC1_CV с RC(бит CPCS, поз4, стр 414). При совпадении
//таймер автоматически останавливается.
void Pulse1ms1 (void){                    //Генератор импульсов 120КГц 1мс
    *TC1_RC = 28000;                    //28000
    *PWM_ENA = 1;                        //Разрешить работу канала PWM1 (CHID0), P0.3, 120КГц.
    *TC1_CCR = 0x5;                        //Запустить таймер 1 + SWTRG=1
    while (!(*TC1_SR&(1<<4))) {}        //Ждать 1мс до совпадения регистра таймера TC1_CV с RC
    *PWM_DIS = 1;                        //120КГц. Запретить работу канала PWM1 (CHID0), P0.3
    *TC1_CCR = 0x6;}                    //Остановить таймер
//--------------------------------------------------------------------------------------------------------------------
void Pause1ms (void){                    //Генератор паузы 1мс
    *TC1_RC = 25000;                    //25000
    *TC1_CCR = 0x5;                        //Запустить таймер 1 + SWTRG=1
    while (!(*TC1_SR&(1<<4))) {}        //Ждать 1мс до совпадения регистра таймера TC1_CV с RC
    *TC1_CCR = 0x6;}                    //Остановить таймер
//DRS516 срабатывает при значениях TC1_RC от 1000 до 800 000


И его вызов:

Код
    if (Knob) {                            //
        int House = 0xc;                //House = K
        int Unit = 5;                    //
        int Command;                    //OFF = 0x1c, ON = 0x14, All Units Off = 0x10, All Units On = 0x18
        if (Knob<3) {Command = 0x14;}
        else {Command = 0x1c;}
        SendX10Command(House, Unit, Command);
        Knob = 0;                        //
        }


DRS-516 удалось запрограммировать на новый House и Unit код.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 27 2015, 21:08
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Спасибо! Класс..


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
syoma
сообщение May 28 2015, 06:59
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



А какой финальный размер железа для такого интерфейса? Ну в какой объем его можно уместить?
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение May 28 2015, 17:04
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(syoma @ May 28 2015, 09:59) *
А какой финальный размер железа для такого интерфейса? Ну в какой объем его можно уместить?

Не понял вопрос. Речь о габаритах железа? Я делаю менеджер нагрузок на дачу. Пока изделие умеет измерять переменное напряжение сети методом суммы квадратов, ток в сети через токовый трансформатор и отправлять команды X10, управляя освещением и контролируя потребляемый ток. Если ток больше 20А, часть низкоприоритетных мощных нагрузок отключаются. И подключаются при снижении потребляемого тока. Изделие еще не готово - собранно на макетке. Габариты 70х115мм без питающего и импульсного трансформатора.
Go to the top of the page
 
+Quote Post
syoma
сообщение May 28 2015, 18:13
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Я имел ввиду футпринт части, отвечающей за X10 - ну сколько квадратных сантиметров занимает сам приемопередатчик на плате.
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение May 28 2015, 18:20
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(syoma @ May 28 2015, 21:13) *
Я имел ввиду футпринт части, отвечающей за X10 - ну сколько квадратных сантиметров занимает сам приемопередатчик на плате.

Квадратный сантиметр под транзистором B772. За исключением трансформатора и конденсатора. Это передающая часть.
Приемную я не делал и вряд ли буду. Просто не нужна. Но схему DRS516 со временем выложу. Там неплохой приемник и не очень сложный.

Сообщение отредактировал Димон Безпарольный - May 28 2015, 18:23
Go to the top of the page
 
+Quote Post
syoma
сообщение May 28 2015, 19:08
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Цитата(Димон Безпарольный @ May 28 2015, 20:20) *
Квадратный сантиметр под транзистором B772. За исключением трансформатора и конденсатора. Это передающая часть.
Приемную я не делал и вряд ли буду. Просто не нужна. Но схему DRS516 со временем выложу. Там неплохой приемник и не очень сложный.

А индуктивность? Трансформатор с конденсатором много занимают?
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение May 29 2015, 04:21
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(syoma @ May 28 2015, 22:08) *
А индуктивность? Трансформатор с конденсатором много занимают?

Трансформатор 26х25мм ЕТD кажется Epcos N87 материал, а емкость 0.1х315В - какую подберете.

Сейчас проверил дальность. Если вводить сигнал рядом с системным блоком - рапространение плохое. Ловит только рядом. Если вводить сигнал в розетку, в которой не торчит ни одного импульсного блока питания, распространение по всей двухкомнатной квартире - ловит в любой розетке, в т.ч. и рядом с системным блоком. Хотя нет. На этой же линии телевизор. Но не мешает. Вероятно сказываются Y - конденсаторы, шунтирующие сигнал. На очереди дача. Там линии подлиннее.

Сообщение отредактировал Димон Безпарольный - May 29 2015, 04:22
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение May 29 2015, 06:22
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Вертится идея изолировать изделие от сети. Не могу найти какой - нибудь толковый ZeroCross на оптроне. Может у кого - то есть идеи?

Повесил на выход ZeroCross оптрон 4N35. Расхождениие по фронтам не более 7мкс. Не смертельно. Окно согласно документации 200мкс.

Ну и работает нормально. Не найду решения - запитаю схему ZeroCross от отдельного источника и пущу через оптрон.

Сообщение отредактировал Димон Безпарольный - May 29 2015, 06:47
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Jun 25 2015, 08:04
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Изменился узел передатчика.


Передатчик работает исправно. Проверен с модулями LM15, AM12, MRS516. В AM12 адрес выставляется переключателями, обучение LM12, MRS516 прошло успешно.
Для MRS51 два раза передаем посылку после нажатия на кнопку в течении 30с.
Для LM15 в течении 30с после включения надо три раза передать посылку с кодом включения.

Модули работают исправно. Приятно удивил трансформатор тока. Необычно линеен в диапазоне от 30ма до 20А. Показания тока сравнивались со счетчиком Меркурий 230, у которого есть режим индикации тока. Разность в показаниях составила не более 1.5%!

Добавил трехцветный светодиод. В режиме до 100ма он горит синим, 100ма-1А - зеленым, более 1А - красным.

Резисторы R8, R9 - для биполярных транзисторов. R9 = 0, R8 нет.

Сообщение отредактировал Димон Безпарольный - Jun 25 2015, 08:15
Прикрепленные файлы
Прикрепленный файл  1.JPG ( 240.79 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Sep 16 2015, 20:39
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



Цитата(Димон Безпарольный @ May 29 2015, 08:22) *
Вертится идея изолировать изделие от сети. Не могу найти какой - нибудь толковый ZeroCross на оптроне. Может у кого - то есть идеи?

Повесил на выход ZeroCross оптрон 4N35. Расхождениие по фронтам не более 7мкс. Не смертельно. Окно согласно документации 200мкс.

Ну и работает нормально. Не найду решения - запитаю схему ZeroCross от отдельного источника и пущу через оптрон.

Есть такое проверенное решение (см. приложение)
Прикрепленные файлы
Прикрепленный файл  zerocross_half.png ( 39.1 килобайт ) Кол-во скачиваний: 52
 


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Sep 17 2015, 12:14
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(sergeeff Jr. @ Sep 16 2015, 23:39) *
Есть такое проверенное решение (см. приложение)

Хорошее решение. Надо будет попробовать. Пока у меня NE555 исправно работает через обмотку трансформатора.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Sep 19 2015, 10:21
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



на составной TLP127 ограничительный резистор меньше греется
Go to the top of the page
 
+Quote Post
НЕХ
сообщение Sep 19 2015, 11:33
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 220
Регистрация: 10-10-06
Из: Петербург
Пользователь №: 21 169



Всяк кулик своё болото хвалит biggrin.gif
ZERO CROSS BEST



--------------------
Когда едешь на поезде - переезд всегда закрыт...
Go to the top of the page
 
+Quote Post
OlegGurin
сообщение Sep 13 2017, 09:54
Сообщение #15





Группа: Участник
Сообщений: 10
Регистрация: 13-09-17
Пользователь №: 99 278



Цитата(НЕХ @ Sep 19 2015, 11:33) *
Всяк кулик своё болото хвалит [/url]

Это Вы по поводу своей схемы так сказали ? )))
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 10:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01524 секунд с 7
ELECTRONIX ©2004-2016