Это не приведет-ли к паразитной модуляции, мне она вредна. Мне требуется максимально стабильная скорость в пределах 1 оборота, если скорость медленно в течении секунд меняется - это нестрашно, а если будет кратковременное изменение - вот тут плохо.
Но во первых нет! Это шум кратной частоте тактирования. Как раз данный метод самый стабильный. У нас же есть интегратор/фильтр а без него быть просто не может, уровень скачка устанавливается таким что бы он не приводил к значимым изменениям но был в несколько раз выше разрядности измерения
А возвран к текущему заполнению когда идет - в следующем цикле или через сколько-то циклов или при смене знака ошибки ?
Тут как бы хитрость в том что: мы скажем имеет заполнение 100 перестариваем вверх прыгает в 1023 - 101, 1023 - 102, и.т.д, то есть среднее заполнение у нас примерное 560 получается так.
То есть оно искусственно выше или ниже, как только достигли сразу устанавливается текущее оно ниже искуственного и дальше роста не будет назад крутить не придётся уже. Не обязательно прыгать до максимума, этот скачок можно сделать на сколько надо шагов которые вписывается в систему, но такой метод позволяет моментально прекратить изменение и залёт в противоположную сторону.
А вот теперь тупое перекручивание заполнения: если будем крутить то когда у нас достигнет нужного текущее заполнение уже залетит далеко из-за энерционности, то есть если нам нужно для работы 300 то в момент достижения значение у нас будет получилось уже 500, и начнутся перекруты кончено фильтр их задавит и колебания утихнут НО зачем они нужны если можно без них?
Можно плавную сделать чисто на изменении заполнения без скачков но тогда понадобится фильтр что бы постоянно не перерегулировалось он внесёт задержки ясно дело.
Не совсем понял - мы увеличиваем текущее заполнение, проверяем величину ошибки или как ? Просто медленно ползём, изменяя заполение (управляющее воздействие) монотонно до вхождения ошибки в допуск ?
В том то и дело что! Опять быстро подстраиваем ошибку но в любой момент мы может остановиться без залёта вот в чём весь фиг то!
Тоесть использовать 2 алгоритма - грубый для ввода величины ошибки в некоторый коридор и точное для минимизации насколь возможно (опять-же для исключения колебаний надо устанавливать допустимую минимальную величину ошибки при достижении которой в данном цикле регулирование не производиться)
Гистирезис не самое лучшее (это тоже перескок но с большей амплитудой и на более низкой частоте), тогда будут дискретные перескоки, а если сделать на уровне шума то точность ограничена лишь разрядностью "измерителя" и может быть сколько угодно точная.
Вообще в принципе это 1 алгоритм, написан на скорую, можно сделать расчёт коэффициента и уровень скачка определять от минима до максимума.
Короче это почти аналоговая система эмуляция аналогового регулятора вот и всё, скачки рассматривайте как шум (оно так и есть), аналоговый ведь шумит когда мы до максимума поднимаем усиление что бы получить большую точность, так и тут точность в 1 отсчёт это логический предел метода.
По поводу 10 оборов а нафиг? За 1 оборот как бы не были расположены метки мы будем иметь время за которые они они прошли. Даже если взять не кратное значение меток но больше 1 оборота то страшного не чего не случится. Надо не усреднять а прогнать через интегратор будет намного точнее, в этом когда его нет могу и его дать.
По поводу релейного режима тут дело в том что это и есть возбуд как бы и генерация но частоте граничащей с рабочей в виде шума крайне малой амплитуды. Шум больше вписывается в любые системы чем гистерезис с дискретными перескоками приличной амплитуды или низкочастотная генерация с огромной амплитудой, плавная будет всегда на порядки медленнее если хотим получить амплитуду колебаний сравнимой с шумом от релейки. Например и будет шум в пределах 1 оборота скажем 0.1-0.3% я не думаю что это на что то повлияет, а гистерезис даст перескок сразу на 1-2%, или начнутся колебания на 3-10%. Поднимая точность разрядность измерения уменьшите относительный шум.
При 10бит АЦП напруга у меня колеблется 1-2 отсчёта, при 16бит было также но 2 отсчёта от 16бит было бы просто не чего.
Плавное изменение заполнения самый неудачный метод если есть задержки или придётся очень медленно крутить или будет залёты. Потому что: когда значение достигло мы не сможет вернуться на то значение которые прекратит изменение значение, то есть у нас есть инерционность. Аналоговый может резко вернуть нужно значение.
Можно плавно крутить но при достижении отскок должен быть быстрым вот и опять шум и релейный режим.
Pgravrd это данные для програмного AVR, при вносе изменений во входные данные обновляем расчёты Prgavrsubconf, тактирование самой AVR Pgravrsub:
Если хотите можно перейти на уровень тестирования у меня сейчас много горящих дел до сборки регулятора оборотов дойдёт не скоро, могу дать готовую прошику а вы попробуете с разными параметрами какие лучше устроят.
Генерация возникает на фоне задержек, где угодно в элекронике, не будь ёмкостей и задержек мы бы имели опять такие шум на бесконечно высокой частоте с бесконечно малой амплитудой при бесконечно высокой стабильности, в случае линейной зависимости шума бы не было. Цифра тут идеальна нет линейной зависимости бесконечно высокая точность (как только система зафиксирует ошибку 1 отсчёт) и шум на рабочей частоте с бесконечно малой амплитудой (1 отсчёт то что система способна зафиксировать).
Основная проблема дрефа это изменение напряжения питания и тепловой дрейф элементов аналогового тракта - ЦАП, масштабирующего усилителя и усилителя мощности.
Если в обратку будут лезть грязь будет колбасить если система быстрая, что бы не колбасило нужно снижать быстродействие то есть дать системе время на фильтрацию грязи.
Пропорциональный не получится при такой разрядности, это надо хотя бы 16бит а лучше 24бит.
У меня в фонаре гистерезисный перескок 1 разряда ШИМ 8Бит давал очень заметным перепад яркости на малом токе, шум был заметен на глаз в разы слабее, 2 фильтр сделал его вообще не заметным.
Короче мой вариант задумывался как пропорционально интегральный, но в виду малой разрядности от пропорциональной части вреда больше чем толку было бы потому я её заменил тут на быструю перестройку. Прогнозировать что то мне не чего не хочется как тут отдельная тема по этому поводу может оказаться даже и хуже.
Время быстрой перестройки от 0 до максимума должно в 2 или более раза больше отклика системы тогда генерации не когда не начнётся. Его можно определить автоматом и даже провести автонастройку.
http://robot-develop.org/archives/2833