Перейти к содержанию
    

Не могу добиться устойчивости работы шим регулятора

алгоритм отличный - только накладен в вычислениях!

или есть способы?

 

Да нет проблем. N выбирается как степень двойки, в результате k*1/N превращается в k>>log2N ;)

 

Вообще-то это обычный RC фильтр. Правильнее делать (чтобы результат переменной был такой-же, как и входной результат):

 

Y=Y-((Y-X)>>n), где Y - ваша переменная, X - результат преобразования, n - логарифм (2) N. Реализуется очень просто и быстро. Соответственно, чем больше n, тем ниже частота среза.

 

Да, и еще, сдвиг надо делать обязательно АРИФМЕТИЧЕСКИЙ (т.е. ASR ROR ROR ROR ...), чтобы сохранялся знак разности.

 

По поводу регулятора. А попробовать сл. метод:

 

Прерывание TOVxxx (таймера, на котором шим сделан)

Если уровень на входе обратной связи меньше порога то OCRx++ иначе OCRx--

Конец прерывания.

 

++ или -- возможно надо местами поменять в зависимости от полярности сигнала обратной связи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу регулятора. А попробовать сл. метод:

 

Прерывание TOVxxx (таймера, на котором шим сделан)

Если уровень на входе обратной связи меньше порога то OCRx++ иначе OCRx--

Конец прерывания.

 

++ или -- возможно надо местами поменять в зависимости от полярности сигнала обратной связи.

Вот именно, что получится интегральный регулятор, для которого как раз и свойственна неустойчивость. Уставка таймера должна быть пропорциональна рассогласованию, тем более, что имеем сигнал с АЦП, а не с компаратора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да нет проблем. N выбирается как степень двойки, в результате k*1/N превращается в k>>log2N ;)

вот это я не понял! можно пример реализации (лучше в мнемокодах чтоб подсчитать примерное кол-вл тактов )k*1/n как k>>log2N

или я затупил или здесь и будут проблемы в скорости

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Да нет проблем. N выбирается как степень двойки, в результате k*1/N превращается в k>>log2N ;)

вот это я не понял! можно пример реализации (лучше в мнемокодах чтоб подсчитать примерное кол-вл тактов )k*1/n как k>>log2N

или я затупил или здесь и будут проблемы в скорости

 

Ну например так:

;
; Измерение проведено, производим фильтрацию (IIR фильтр, порядок 1)
; MeasureFF=MeasureFF-(MeasureFF-Measure)/8
;
    mov    r16,MeasureFF
    sub    r16,Measure
    mov    r17,MeasureFFl
    ror    r16
    ror    r17
    asr    r16
    ror    r17
    asr    r16
    ror    r17
    sub    MeasureFFl,r17
    sbc    MeasureFF,r16

 

MeasureFF - 2хбайтное число, MeasureFFl - это дробная часть. Measure - 8бит из АЦП (у меня сигнал от 0 до 255).

 

Обратите внимание, что первый раз делается ror ror (а не asr ror), т.к. знаковый бит после вычитания оказывается в carry.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А схему девайса с указанием номиналов всех элементов привести можете?

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

PS. Осциллограммки бы ещё...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

схемы в эл виде пока нет в понедельник нарисую

ничего особенного нет

ключ IGBT с драйвером + диод шоттки+ фильтр

вообщем классика...

индуктивность дросселей точно тоже замерю в понедельник

 

MeasureFF - 2хбайтное число, MeasureFFl - это дробная часть. Measure - 8бит из АЦП (у меня сигнал от 0 до 255).

 

Обратите внимание, что первый раз делается ror ror (а не asr ror), т.к. знаковый бит после вычитания оказывается в carry.

чем больше рою тем более непоняток

чето не работает этот алгоритм у меня

Извиняюсь, но никак я в него не врублюсь :-)

я так понял

(Правильнее делать (чтобы результат переменной был такой-же, как и входной результат):

 

MeasureFF я инициализирую значением ацп?

и

Y=Y-((Y-X)>>n),

чем больше измерений я завожу в эту формулу тем больше переменаая Y у меня движется к бесконечности...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если так, то есть такой отличный алгоритм: заводишь переменную, на каждом шаге добавляешь к ней отсчет с АЦП и вычитаешь 1/N часть ее самой. N нужно подобрать в зависимости от требуемого времени усреднения. Требуемая разрядность переменной определяется разрядностью АЦП и N. Алгоритм очень устойчив, не требует буфера отсчетов и отдает текущий ответ на каждом шаге.

Скользящее усреднение. Вечно делал с помощью массива, а тут вот оказывается как -X/N на каждом шаге и не надо никаких массивов. Спасибо за алгоритм!

 

 

чем больше рою тем более непоняток

 

почитайте про алгоритм: http://tutornet.ru/library/books/Math/MATH..._14/Index14.htm

будет легче понять реализацию..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чем больше рою тем более непоняток

чето не работает этот алгоритм у меня

Извиняюсь, но никак я в него не врублюсь :-)

я так понял

(Правильнее делать (чтобы результат переменной был такой-же, как и входной результат):

 

MeasureFF я инициализирую значением ацп?

и

Y=Y-((Y-X)>>n),

чем больше измерений я завожу в эту формулу тем больше переменаая Y у меня движется к бесконечности...

 

Чего-то у вас не срослось с математикой.

 

Пример в екселе:

 

1.JPG

 

Начальное значение 0. На вход подана 1 через 2 такта - в результате имеем на выходе тот-же результат, как и RC цепь, без всяких бесконечностей.

 

ЗЫ Для эксела >>3 заменено на /8 - как вы понимаете - это один хрен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

после этого наконец врубился в тему..

только это практически тоже самое что я делал только с массивом..

только все бы было хорошо, если скорость ацп была больше периода шим

и поскольку всем этим алгоритмам присуща некоторая инерционность

боюсь не прокатит эта тема...

думаю будет шим "качать" ;-)

может мои опасения необоснованы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

после этого наконец врубился в тему..

Может пригодиться для расчета параметров обсуждаемого алгоритма набрасывал в свое время на MathCad 5.0 файлики (int_cep.mcd)

и измерение методом суммирования значений (к делу не относиться но вдруг) это AnalizF.mcd

MCD.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да.....ребята.....Какие то алгоритмы строите...какие то равенства выводите....Я вам рекомендую почитать ТАУ (Теория автоматического управления). Кто-то уже затрагивал этот вопрос с построением ЛАЧХ и ЛФЧХ. Это ближе, как говорится, к телу....шутка...Да, действительно эта проблема присутствует в любой схеме, где присутствует обратная связь, будь-то по скорости или по току, НЕ ИМЕЕТ ЗНАЧЕНИЕ какой параметр регулируется. И даже на базе той же меги16 (с медленным АЦП :tongue: ) мы сделали в свое время систему возбуждения для дизель-генератора, где регулировался ток возбуждения генератора. Регулируемым параметром было напряжение на выходе генератора....Но это предисловие, я к чему веду....Нужно делать вам ребята цифровой ПИД или хотя бы ПИ регулятор.....Ээээээээээ......наверно хватит, и так много сказал....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да.....ребята.....Какие то алгоритмы строите...какие то равенства выводите....Я вам рекомендую почитать ТАУ

У вас такая манера изложения, что остается лишь сказать - Спасибо, барин!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да.....ребята.....Какие то алгоритмы строите...какие то равенства выводите....Я вам рекомендую почитать ТАУ

У вас такая манера изложения, что остается лишь сказать - Спасибо, барин!

 

Барин - не барин, а совет дельный! Если Вам, уважаемый не нравится моя форма изложения, то прошу не читать их совсем. Мне ваша критика не к чему. Я еще раз настою на своем. Никакие быстродействующие АЦП не помогут, да и количество данных такое не к чему. Нужна реализация програмного хотя бы ПИ регулятора, который бы застабилизировал систему. На реализацию и отладку такого у меня ушло не мало времени. А уже вывести управляющее воздействие на ШИМ - это не сложно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задача в следующем:

осуществить стабилизацию тока в пределах 0-100а

имеем шим период 62,5мкс (шаг 62,5нс) (макс заполнеие 25-30%)

Получаем максимальное значение длительности импульса 250, т. е. шаг 0.4 А (если система абсолютно линейная). Грубовато получается. Имхо, какие алгоритмы ни строй, надо сначала увеличить разрядность ШИМ. Тут надо выбирать между частотой ШИМ и ступенькой регулирования. А лучше поставить отдельный аналоговый ШИМ контроллер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...