BALDA 0 25 марта, 2006 Опубликовано 25 марта, 2006 · Жалоба алгоритм отличный - только накладен в вычислениях! или есть способы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 25 марта, 2006 Опубликовано 25 марта, 2006 · Жалоба алгоритм отличный - только накладен в вычислениях! или есть способы? Да нет проблем. 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-- Конец прерывания. ++ или -- возможно надо местами поменять в зависимости от полярности сигнала обратной связи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpyBot 0 25 марта, 2006 Опубликовано 25 марта, 2006 · Жалоба По поводу регулятора. А попробовать сл. метод: Прерывание TOVxxx (таймера, на котором шим сделан) Если уровень на входе обратной связи меньше порога то OCRx++ иначе OCRx-- Конец прерывания. ++ или -- возможно надо местами поменять в зависимости от полярности сигнала обратной связи. Вот именно, что получится интегральный регулятор, для которого как раз и свойственна неустойчивость. Уставка таймера должна быть пропорциональна рассогласованию, тем более, что имеем сигнал с АЦП, а не с компаратора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BALDA 0 25 марта, 2006 Опубликовано 25 марта, 2006 · Жалоба Да нет проблем. N выбирается как степень двойки, в результате k*1/N превращается в k>>log2N ;) вот это я не понял! можно пример реализации (лучше в мнемокодах чтоб подсчитать примерное кол-вл тактов )k*1/n как k>>log2N или я затупил или здесь и будут проблемы в скорости Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 25 марта, 2006 Опубликовано 25 марта, 2006 · Жалоба Да нет проблем. 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav 0 25 марта, 2006 Опубликовано 25 марта, 2006 · Жалоба А схему девайса с указанием номиналов всех элементов привести можете? Нестабильность, скорей всего, возникает в петле регулирования. Для определения причины нужно знать все параметры системы. PS. Осциллограммки бы ещё... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BALDA 0 25 марта, 2006 Опубликовано 25 марта, 2006 · Жалоба схемы в эл виде пока нет в понедельник нарисую ничего особенного нет ключ IGBT с драйвером + диод шоттки+ фильтр вообщем классика... индуктивность дросселей точно тоже замерю в понедельник MeasureFF - 2хбайтное число, MeasureFFl - это дробная часть. Measure - 8бит из АЦП (у меня сигнал от 0 до 255). Обратите внимание, что первый раз делается ror ror (а не asr ror), т.к. знаковый бит после вычитания оказывается в carry. чем больше рою тем более непоняток чето не работает этот алгоритм у меня Извиняюсь, но никак я в него не врублюсь :-) я так понял (Правильнее делать (чтобы результат переменной был такой-же, как и входной результат): MeasureFF я инициализирую значением ацп? и Y=Y-((Y-X)>>n), чем больше измерений я завожу в эту формулу тем больше переменаая Y у меня движется к бесконечности... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 27 марта, 2006 Опубликовано 27 марта, 2006 · Жалоба Если так, то есть такой отличный алгоритм: заводишь переменную, на каждом шаге добавляешь к ней отсчет с АЦП и вычитаешь 1/N часть ее самой. N нужно подобрать в зависимости от требуемого времени усреднения. Требуемая разрядность переменной определяется разрядностью АЦП и N. Алгоритм очень устойчив, не требует буфера отсчетов и отдает текущий ответ на каждом шаге. Скользящее усреднение. Вечно делал с помощью массива, а тут вот оказывается как -X/N на каждом шаге и не надо никаких массивов. Спасибо за алгоритм! чем больше рою тем более непоняток почитайте про алгоритм: http://tutornet.ru/library/books/Math/MATH..._14/Index14.htm будет легче понять реализацию.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 28 марта, 2006 Опубликовано 28 марта, 2006 · Жалоба чем больше рою тем более непоняток чето не работает этот алгоритм у меня Извиняюсь, но никак я в него не врублюсь :-) я так понял (Правильнее делать (чтобы результат переменной был такой-же, как и входной результат): MeasureFF я инициализирую значением ацп? и Y=Y-((Y-X)>>n), чем больше измерений я завожу в эту формулу тем больше переменаая Y у меня движется к бесконечности... Чего-то у вас не срослось с математикой. Пример в екселе: Начальное значение 0. На вход подана 1 через 2 такта - в результате имеем на выходе тот-же результат, как и RC цепь, без всяких бесконечностей. ЗЫ Для эксела >>3 заменено на /8 - как вы понимаете - это один хрен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BALDA 0 28 марта, 2006 Опубликовано 28 марта, 2006 · Жалоба после этого наконец врубился в тему.. только это практически тоже самое что я делал только с массивом.. только все бы было хорошо, если скорость ацп была больше периода шим и поскольку всем этим алгоритмам присуща некоторая инерционность боюсь не прокатит эта тема... думаю будет шим "качать" ;-) может мои опасения необоснованы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
visht 0 28 марта, 2006 Опубликовано 28 марта, 2006 · Жалоба после этого наконец врубился в тему.. Может пригодиться для расчета параметров обсуждаемого алгоритма набрасывал в свое время на MathCad 5.0 файлики (int_cep.mcd) и измерение методом суммирования значений (к делу не относиться но вдруг) это AnalizF.mcd MCD.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Starick 0 30 марта, 2006 Опубликовано 30 марта, 2006 · Жалоба Да.....ребята.....Какие то алгоритмы строите...какие то равенства выводите....Я вам рекомендую почитать ТАУ (Теория автоматического управления). Кто-то уже затрагивал этот вопрос с построением ЛАЧХ и ЛФЧХ. Это ближе, как говорится, к телу....шутка...Да, действительно эта проблема присутствует в любой схеме, где присутствует обратная связь, будь-то по скорости или по току, НЕ ИМЕЕТ ЗНАЧЕНИЕ какой параметр регулируется. И даже на базе той же меги16 (с медленным АЦП :tongue: ) мы сделали в свое время систему возбуждения для дизель-генератора, где регулировался ток возбуждения генератора. Регулируемым параметром было напряжение на выходе генератора....Но это предисловие, я к чему веду....Нужно делать вам ребята цифровой ПИД или хотя бы ПИ регулятор.....Ээээээээээ......наверно хватит, и так много сказал.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 30 марта, 2006 Опубликовано 30 марта, 2006 · Жалоба Да.....ребята.....Какие то алгоритмы строите...какие то равенства выводите....Я вам рекомендую почитать ТАУ У вас такая манера изложения, что остается лишь сказать - Спасибо, барин! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Starick 0 31 марта, 2006 Опубликовано 31 марта, 2006 · Жалоба Да.....ребята.....Какие то алгоритмы строите...какие то равенства выводите....Я вам рекомендую почитать ТАУ У вас такая манера изложения, что остается лишь сказать - Спасибо, барин! Барин - не барин, а совет дельный! Если Вам, уважаемый не нравится моя форма изложения, то прошу не читать их совсем. Мне ваша критика не к чему. Я еще раз настою на своем. Никакие быстродействующие АЦП не помогут, да и количество данных такое не к чему. Нужна реализация програмного хотя бы ПИ регулятора, который бы застабилизировал систему. На реализацию и отладку такого у меня ушло не мало времени. А уже вывести управляющее воздействие на ШИМ - это не сложно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zhek 0 31 марта, 2006 Опубликовано 31 марта, 2006 · Жалоба Задача в следующем: осуществить стабилизацию тока в пределах 0-100а имеем шим период 62,5мкс (шаг 62,5нс) (макс заполнеие 25-30%) Получаем максимальное значение длительности импульса 250, т. е. шаг 0.4 А (если система абсолютно линейная). Грубовато получается. Имхо, какие алгоритмы ни строй, надо сначала увеличить разрядность ШИМ. Тут надо выбирать между частотой ШИМ и ступенькой регулирования. А лучше поставить отдельный аналоговый ШИМ контроллер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться