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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> регулятор мощности на AT90S2313, не получается плавно регулировать
валеравал
сообщение Apr 2 2006, 08:38
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-05-05
Пользователь №: 5 503



хочу сделать регулятор мощности, управлять симистором вобщем
использую внешнее прерывание 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
}
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Apr 2 2006, 09:09
Сообщение #2


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Ну во-первых, честно-ли фиксируеться переход через ноль?
Во-вторых не получаеться ли лажа с функцией delay_us(),
т.е. не убивает ли ее оптимизатор, и правильно ли считаються задержки.
В-третьих, я бы например сделал бы расчет задержки по таймеру, а прерыание просто бы его сбрасывало.
Т.е. такой триггер - по TOVF установка, по EXT_INT сброс.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Starick
сообщение Apr 2 2006, 09:19
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 4-09-05
Пользователь №: 8 211



Уважаемый, а он и небудет плавно регулировать. Так, как зависимоть угла открытия тиристора (сисмистора) и получаемое напряжение (а соответственно и мощности и энергии) не линейна. Тут нужен алгоритм, который бы эту зависимость немного линеаризировал.
Go to the top of the page
 
+Quote Post
валеравал
сообщение Apr 2 2006, 09:47
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-05-05
Пользователь №: 5 503



Цитата(Starick @ Apr 2 2006, 12:19) *
Уважаемый, а он и небудет плавно регулировать. Так, как зависимоть угла открытия тиристора (сисмистора) и получаемое напряжение (а соответственно и мощности и энергии) не линейна. Тут нужен алгоритм, который бы эту зависимость немного линеаризировал.



а как ее линеаризировать? подскажите плиз
Go to the top of the page
 
+Quote Post
=AK=
сообщение Apr 2 2006, 09:49
Сообщение #5


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(Starick @ Apr 2 2006, 18:49) *
Уважаемый, а он и небудет плавно регулировать. Так, как зависимоть угла открытия тиристора (сисмистора) и получаемое напряжение (а соответственно и мощности и энергии) не линейна. Тут нужен алгоритм, который бы эту зависимость немного линеаризировал.

Непонятно что автор подразумевал под словом "плавно". Может, не "равномерно", а "монотонно"? Может, у него яркость скачет?

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: На самом деле все гораздо хуже, т.к. прерывание не отдает управление сразу же, как должно было бы делать, а "держит" до тех пор пока не зажжет симистор. Поэтому время исполнения основного цикла зависит от угла поджига, чем меньше яркость - тем "инерционнее" становятся кнопки. Лучше бы так не делать.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Apr 2 2006, 09:50
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



В данном случае [/b]Starick[b] прав-зависимость сильно нелинейная.Я для такой задачи экспереминта-
льно составил регулировочную таблицу в виде массива и по нажатию кнопок увеличивал-уменьшал
индекс.И по стилю написания-очень сильно некрасиво и неоптимально,куча лишних и неоптимальных
команд-почитай книги по С.И еще-у тебя нет подавления дребезга кнопок-здесь тоже может быть баг.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
acex2
сообщение Apr 2 2006, 09:50
Сообщение #7


Адепт
****

Группа: Свой
Сообщений: 520
Регистрация: 15-02-05
Пользователь №: 2 656



Цитата(валеравал @ Apr 2 2006, 06:47) *
а как ее линеаризировать? подскажите плиз


Отдаваемая мощность считается как площадь под синусоидой напряжения.
Проще всего наверное сделать табличку или аппроксимировать полиномом.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Apr 2 2006, 10:05
Сообщение #8


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(acex2 @ Apr 2 2006, 19:20) *
Отдаваемая мощность считается как площадь под синусоидой напряжения.
Проще всего наверное сделать табличку или аппроксимировать полиномом.

Яркость - это не мощность. Чтобы видимая яркость менялась линейно, мощность должна меняться примерно по экспоненте (там еще спектр меняется, но это уж здесь совсем неуместно обсуждать).

Регулировка яркости при линейном изменении угла зажигания симистора весьма плавная и на глаз вполне "линейная" при изменении яркости от 0 до 50%, что при 50 Гц составляет от 9 мс до 5 мс соответственно. Последнюю миллисекунду использовать не удается, там мощность слишком мала, чтобы нить накала засветилась.

А вот участок от 50% до 100% "линеаризовать" хорошо бы, хотя бы путем кусочно-линейной аппроксимации. Хорошо бы, но вовсе не обязательно, особенно для начинающих. Даже при линейном управлении фазой работает удовлетворительно. Кстати, первую 1мс тоже можно выбросить нафиг, т.к. никакой разницы на глаз нет, поджечь симистор сразу же после перехода через ноль, или подождать 1...1.5мс. Так что вполне можно для начала просто сделать добротное линейное управление углом поджига в диапазоне от 1мс до 9мс.
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Apr 2 2006, 10:50
Сообщение #9


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Цитата(валеравал @ Apr 2 2006, 11:38) *
хочу сделать регулятор мощности, управлять симистором вобщем

Диммер делаете?


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
WHALE
сообщение Apr 2 2006, 10:52
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



А автор топика вроде говорил именно про регулировку мощности,а не про управление лампочкой.А вд-
руг у него двигатель в нагрузке со своей регулировочной харакиеристикой?ИМХО,лучше сделать в таб-
личном виде на реальной нагрузке.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
валеравал
сообщение Apr 2 2006, 11:20
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-05-05
Пользователь №: 5 503



Цитата(beer_warrior @ Apr 2 2006, 12:09) *
Ну во-первых, честно-ли фиксируеться переход через ноль?
Во-вторых не получаеться ли лажа с функцией delay_us(),
т.е. не убивает ли ее оптимизатор, и правильно ли считаються задержки.
В-третьих, я бы например сделал бы расчет задержки по таймеру, а прерыание просто бы его сбрасывало.
Т.е. такой триггер - по TOVF установка, по EXT_INT сброс.


попробую сделать с таймером
а как сделать обработку кнопок?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Apr 2 2006, 12:32
Сообщение #12


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Да хоть бы и в обработчике перехода нуля, правда без переменки работать не будет smile.gif
Вот тут кстати никто из нас не обратил внимание на один момент - дребезг кнопок - запросто даст "неравномерностьь регулировки".
Кнопки желательно опросить несколько раз и принимать решение о нажатии после 3-10 совпадений.(в зависмости от частоты опроса)


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Apr 2 2006, 12:53
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



В CV функция delay_us() -это библиотечная функция,компилятор ее не трогает.Единственно,чтобы она
корректно работала,в опциях проекта частоту надо правильно выставить.Если нужна точность,надо
запретить прерывания.
софтовое устранение дребезга,например так
if (pind.3==0){
delay_ms(20);
if(pind.3==0){kod}
}
Но лучше читать кнопки в прерывнии по таймеру или вешать их на внешнее прерывание


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
acex2
сообщение Apr 2 2006, 13:27
Сообщение #14


Адепт
****

Группа: Свой
Сообщений: 520
Регистрация: 15-02-05
Пользователь №: 2 656



Цитата(=AK= @ Apr 2 2006, 07:05) *
Цитата(acex2 @ Apr 2 2006, 19:20) *

Отдаваемая мощность считается как площадь под синусоидой напряжения.
Проще всего наверное сделать табличку или аппроксимировать полиномом.

Яркость - это не мощность. Чтобы видимая яркость менялась линейно, мощность должна меняться примерно по экспоненте (там еще спектр меняется, но это уж здесь совсем неуместно обсуждать).


Мне кажется, вопрос изначально был все-таки про мощность.
Хотя про яркость мне было интересно узнать. Может подскажете, где поподробнее про это можно почитать?
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 2 2006, 14:53
Сообщение #15


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(acex2 @ Apr 2 2006, 15:27) *
Мне кажется, вопрос изначально был все-таки про мощность.
Хотя про яркость мне было интересно узнать. Может подскажете, где поподробнее про это можно почитать?

На kazus.ru видел в каталоге схем статью в которой описывается регулятор яркости светильника (или регулятор мощности) на PIC'е. Там все было расписано, IMHO, достаточно подробно.
Go to the top of the page
 
+Quote Post
Laksus
сообщение Apr 2 2006, 19:43
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Цитата
...
но не получается плавно регулировать может кто подскажет как сделать?...

____________
Я не совсем понял,
что имеется ввиду "не получается плавно регулировать..."
Но может быть имеются ввиду мерцания от импульсных помех.
Тогда должна помочь проверка срабатывания INT0 на дребезг,
(смотри апликэшн "AVR182: Zero Cross Detector" Figure 6.)

простейший вариант:
Код
interrupt [EXT_INT0] void ext_int0_isr(void)
{
    delay_us(1);//...delay_us(10);
    if(PIND.2) return; //так как прерывание по спаду
//...


Вот попробовал,
(в архиве схемка и код для CodeVisionAVR V1.23.7a Evaluation)
Прикрепленный файл  Dimmer_20060402.zip ( 4.21 килобайт ) Кол-во скачиваний: 447

вроде работает, на мой взгляд меняется плавно.

Правда пробовал не с 220в (побоялся),
а с 12 вольтовой лампочкой от гирлянды.
Кроме того использовал другие выводы для кнопок и выхода,
была готовая макетка.
_____________
Александр
2006 04 02

Сообщение отредактировал Laksus - Apr 2 2006, 19:50
Go to the top of the page
 
+Quote Post
ZiB
сообщение Apr 3 2006, 03:53
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



я собирал много канальный (8 каналов) регулятор мощности, для ламп.
реализован был так:

// Синхронизация 50Гц
#pragma vector=INT0_vect
__interrupt void Sync_50Hz(void)
{
This_Time = 0;
}

// прерывания с частотой (50Гц * 512)
///////////////////////////////////////////////////////////////////////////////
#pragma vector=TIMER1_COMPA_vect
__interrupt void Lamp_Power(void)
{
Byte Time = ~This_Time;
//
if(DMX_Data[0] > Time) Pin_Off(Pin_0); else Pin_On(Pin_0);
if(DMX_Data[1] > Time) Pin_Off(Pin_1); else Pin_On(Pin_1);
if(DMX_Data[2] > Time) Pin_Off(Pin_2); else Pin_On(Pin_2);
if(DMX_Data[3] > Time) Pin_Off(Pin_3); else Pin_On(Pin_3);
if(DMX_Data[4] > Time) Pin_Off(Pin_4); else Pin_On(Pin_4);
if(DMX_Data[5] > Time) Pin_Off(Pin_5); else Pin_On(Pin_5);
//
This_Time++;
}
Go to the top of the page
 
+Quote Post
Starick
сообщение Apr 3 2006, 07:44
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 4-09-05
Пользователь №: 8 211



[quote name='defunct' date='Apr 2 2006, 17:53' post='100404']
[/quote]
На kazus.ru видел в каталоге схем статью в которой описывается регулятор яркости светильника (или регулятор мощности) на PIC'е. Там все было расписано, IMHO, достаточно подробно.
[/quote]

Регулятор мощности и регулятор яркости совсем разные вещи. Я согласен с тем, что для плавного регурирования яркости лампы накала вполне сойдет зависимость линейного увеличение-уменьшения угла открытия тиристора, но никак не для регулирования мощности. Я напомню, что мощность и угол- зависисмоть не линейна. И тут ничего не поделаешь. Тут либо табличный метод надо применять либо апроксимацию, как уже выше говорилось. И еще. Тут нужно учитывать тип нагрузки. Она может быть как активная, как индуктивная, как емкостная, так и смешаная. И при разном типе нагрузки Ваш регулятор мощности будет работать по разному.
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Apr 3 2006, 15:35
Сообщение #19


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



а ещё неплохо было бы сделать защиту в детекторе нуля
на моем опыте была ситуация на производстве когда Н-ая гармоника была больше первой
и вся эта классическая буда : детектор нуля- старт таймер просто ушли в разнос...


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
Zond
сообщение Apr 3 2006, 20:17
Сообщение #20


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 27-01-05
Из: Беларусь, г. Гомель
Пользователь №: 2 239



Посмотри вот здесь - www.telesys.ru/projects/proj131/index.shtml
Должно помочь wink.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 3 2006, 22:12
Сообщение #21


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Starick @ Apr 3 2006, 09:44) *
Цитата(defunct @ Apr 2 2006, 17:53) *

На kazus.ru видел в каталоге схем статью в которой описывается регулятор яркости светильника (или регулятор мощности) на PIC'е. Там все было расписано, IMHO, достаточно подробно.

Регулятор мощности и регулятор яркости совсем разные вещи. Я согласен с тем, что для плавного регурирования яркости лампы накала вполне сойдет зависимость линейного увеличение-уменьшения угла открытия тиристора, но никак не для регулирования мощности.

Уточню, в статье рассматривается линейное регулирование яркости лампы накаливания. Как называется статья я не помню, т.к. она для меня не представляла особого интереса. Насчет регулирования мощности, и ежу понятно, что природа регулятора зависит от нагрузки, и тут путей регулирования может быть много. Например для регулятора мощности инертного обогревателя можно применить инфранизкочатотный ШИМ, и зависимость потребляемой мощности будет прямопропорционой коду ШИМ, однако такой подход совсем не годится для регулирования яркости.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:42
Рейтинг@Mail.ru


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