валеравал 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба хочу сделать регулятор мощности, управлять симистором вобщем использую внешнее прерывание 0 чтобы получить момент перехода сетевого напряжения через ноль подключил две кнопки она на увеличение угла открытия симистора другая на уменьшение но не получается плавно регулировать может кто подскажет как сделать? подпрограмма обработки внешнего прерывания выгляди так в CVAVR: interrupt [EXT_INT0] void ext_int0_isr(void) { #asm("cli") PORTB.4=1; for (i=0; i<=k; i++) { delay_us(1); //регулировка мощности } PORTB.4=0; delay_us(100); PORTB.4=1; #asm("sei") } основная программа бесконечный цикл while (1) { k1=PIND.3; if (k1==0) { #asm("cli") delay_us(30); // #asm("sei") k=k+1; if (k>=3500) k=3500; #asm("sei") }; k2=PIND.1; if (k2==0) { #asm("cli") delay_us(30); // #asm("sei") k=k-1; if (k<=30) k=30; #asm("sei") }; // Place your code here } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба Ну во-первых, честно-ли фиксируеться переход через ноль? Во-вторых не получаеться ли лажа с функцией delay_us(), т.е. не убивает ли ее оптимизатор, и правильно ли считаються задержки. В-третьих, я бы например сделал бы расчет задержки по таймеру, а прерыание просто бы его сбрасывало. Т.е. такой триггер - по TOVF установка, по EXT_INT сброс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Starick 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба Уважаемый, а он и небудет плавно регулировать. Так, как зависимоть угла открытия тиристора (сисмистора) и получаемое напряжение (а соответственно и мощности и энергии) не линейна. Тут нужен алгоритм, который бы эту зависимость немного линеаризировал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
валеравал 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба Уважаемый, а он и небудет плавно регулировать. Так, как зависимоть угла открытия тиристора (сисмистора) и получаемое напряжение (а соответственно и мощности и энергии) не линейна. Тут нужен алгоритм, который бы эту зависимость немного линеаризировал. а как ее линеаризировать? подскажите плиз Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба Уважаемый, а он и небудет плавно регулировать. Так, как зависимоть угла открытия тиристора (сисмистора) и получаемое напряжение (а соответственно и мощности и энергии) не линейна. Тут нужен алгоритм, который бы эту зависимость немного линеаризировал. Непонятно что автор подразумевал под словом "плавно". Может, не "равномерно", а "монотонно"? Может, у него яркость скачет? k почему-то меняется от 30 до 3500; скорость этого изменения (при нажатии на кнопку), похоже, велика; функция delay_us(1) дает непонятно какую задержку. При 50 Гц полупериод 10000 мкс, чтобы все работало монотонно delay_us(1) должна обеспечивать задержку не более 10000/3500=2.85 мкс. Если больше, то после минимальной яркости будет прыжок на максимальную. Если delay_us(1) дает 2.85мкс, то delay_us(30) даст задержку всего в 85.5мкс, и при нажатии на кнопку счетчик k установится в 3500 или отмотает в 30 примерно за 350 мс, считая что полный цикл выполнится примерно за 100мкс. Глазом не успеешь моргнуть. PS: На самом деле все гораздо хуже, т.к. прерывание не отдает управление сразу же, как должно было бы делать, а "держит" до тех пор пока не зажжет симистор. Поэтому время исполнения основного цикла зависит от угла поджига, чем меньше яркость - тем "инерционнее" становятся кнопки. Лучше бы так не делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба В данном случае [/b]Starick прав-зависимость сильно нелинейная.Я для такой задачи экспереминта- льно составил регулировочную таблицу в виде массива и по нажатию кнопок увеличивал-уменьшал индекс.И по стилю написания-очень сильно некрасиво и неоптимально,куча лишних и неоптимальных команд-почитай книги по С.И еще-у тебя нет подавления дребезга кнопок-здесь тоже может быть баг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acex2 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба а как ее линеаризировать? подскажите плиз Отдаваемая мощность считается как площадь под синусоидой напряжения. Проще всего наверное сделать табличку или аппроксимировать полиномом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба Отдаваемая мощность считается как площадь под синусоидой напряжения. Проще всего наверное сделать табличку или аппроксимировать полиномом. Яркость - это не мощность. Чтобы видимая яркость менялась линейно, мощность должна меняться примерно по экспоненте (там еще спектр меняется, но это уж здесь совсем неуместно обсуждать). Регулировка яркости при линейном изменении угла зажигания симистора весьма плавная и на глаз вполне "линейная" при изменении яркости от 0 до 50%, что при 50 Гц составляет от 9 мс до 5 мс соответственно. Последнюю миллисекунду использовать не удается, там мощность слишком мала, чтобы нить накала засветилась. А вот участок от 50% до 100% "линеаризовать" хорошо бы, хотя бы путем кусочно-линейной аппроксимации. Хорошо бы, но вовсе не обязательно, особенно для начинающих. Даже при линейном управлении фазой работает удовлетворительно. Кстати, первую 1мс тоже можно выбросить нафиг, т.к. никакой разницы на глаз нет, поджечь симистор сразу же после перехода через ноль, или подождать 1...1.5мс. Так что вполне можно для начала просто сделать добротное линейное управление углом поджига в диапазоне от 1мс до 9мс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BALDA 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба хочу сделать регулятор мощности, управлять симистором вобщем Диммер делаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба А автор топика вроде говорил именно про регулировку мощности,а не про управление лампочкой.А вд- руг у него двигатель в нагрузке со своей регулировочной харакиеристикой?ИМХО,лучше сделать в таб- личном виде на реальной нагрузке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
валеравал 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба Ну во-первых, честно-ли фиксируеться переход через ноль? Во-вторых не получаеться ли лажа с функцией delay_us(), т.е. не убивает ли ее оптимизатор, и правильно ли считаються задержки. В-третьих, я бы например сделал бы расчет задержки по таймеру, а прерыание просто бы его сбрасывало. Т.е. такой триггер - по TOVF установка, по EXT_INT сброс. попробую сделать с таймером а как сделать обработку кнопок? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба Да хоть бы и в обработчике перехода нуля, правда без переменки работать не будет :) Вот тут кстати никто из нас не обратил внимание на один момент - дребезг кнопок - запросто даст "неравномерностьь регулировки". Кнопки желательно опросить несколько раз и принимать решение о нажатии после 3-10 совпадений.(в зависмости от частоты опроса) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба В CV функция delay_us() -это библиотечная функция,компилятор ее не трогает.Единственно,чтобы она корректно работала,в опциях проекта частоту надо правильно выставить.Если нужна точность,надо запретить прерывания. софтовое устранение дребезга,например так if (pind.3==0){ delay_ms(20); if(pind.3==0){kod} } Но лучше читать кнопки в прерывнии по таймеру или вешать их на внешнее прерывание Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acex2 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба Отдаваемая мощность считается как площадь под синусоидой напряжения. Проще всего наверное сделать табличку или аппроксимировать полиномом. Яркость - это не мощность. Чтобы видимая яркость менялась линейно, мощность должна меняться примерно по экспоненте (там еще спектр меняется, но это уж здесь совсем неуместно обсуждать). Мне кажется, вопрос изначально был все-таки про мощность. Хотя про яркость мне было интересно узнать. Может подскажете, где поподробнее про это можно почитать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 2 апреля, 2006 Опубликовано 2 апреля, 2006 · Жалоба Мне кажется, вопрос изначально был все-таки про мощность. Хотя про яркость мне было интересно узнать. Может подскажете, где поподробнее про это можно почитать? На kazus.ru видел в каталоге схем статью в которой описывается регулятор яркости светильника (или регулятор мощности) на PIC'е. Там все было расписано, IMHO, достаточно подробно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться