реношник
Karma: +10/-0
Offline
|
|
« Ответ #60 : 24.12.2018, 21:26:09 pm » |
|
кстати тут « Ответ #50 : 19.12.2018, 10:26:13 »
Тогда поправка будет (100-95) * 2 = 10. Смотрим, какой был PWM в предыдущем цикле. Допустим, он равнялся 120. Новое значение будет 120 + 10 = 130.
Как у вас ШИМ больше 100% ? или вы пользуетесь стандартной analogWrite() ? +++++++++++++++++++++++++++++++++++++++++++
" Я в свое время вдоволь "наигрался" с ПИДами, протестировал на реальных дозаторах... и сделал только параметрическое управление. "
Это я уже заметил, поэтому И,Д коэффициенты нулевые. Подпрограмма ПИДрегулятора у меня компактная (несколько строчек), поэтому её оставляю полностью на всякий случай.
|
|
|
Записан
|
|
|
|
Perelesnik
Karma: +125/-5
Offline
WWW
|
|
« Ответ #61 : 24.12.2018, 23:21:48 pm » |
|
PWM это у меня такое рудиментарное имя переменной ( осталось с тех времён, когда в коде оперировал именно ШИМ ). Потом перешёл на analogwrite, а переменную не стал переименовывать, тем более, что смысл у неё остался примерно тем же.... только разрядность поменялась. Вернее, переменная у меня называется не PWM, а PWMout, но не важно. Принцип вычисления от этого не меняется. Даже формула та же, только коэффициент к приращению отличается и ограничение предельного значения результата указывается разное - в одном случае 100, а в другом 255 ( фактически у меня 250 указано по причине некоторых особенностей питания схемы... ну то такое... не принципиально). В реальных условиях работы программы переменная и не должна достигать своего предельного значения. Предел достигается либо при неверной первоначальной настройке дозатора ( когда дозатор физически оказывается не способным выдать необходимую дозировку на данной скорости полёта, и нужно было поставить другое, соответстующее колесо дозатора), либо двигатель не вращается ( нет адекватных данных с энкодера). А ПИД формула и у меня долгое время "жила" в коде с нулями на I и D , но потом при какой-то очередной генеральной уборке в коде я её таки подчистил, чтобы просто не маячила перед глазами.
|
|
« Крайнее редактирование: 24.12.2018, 23:23:53 pm от Perelesnik »
|
Записан
|
Хто визволиться сам, той вільним буде, Хто визволить кого, в неволю візьме. Л.Українка.
|
|
|
Perelesnik
Karma: +125/-5
Offline
WWW
|
|
« Ответ #62 : 25.12.2018, 12:06:31 pm » |
|
А, еще добавлю: сразу же подвяжите вычисление PWM к таймеру, а не просто позволяйте этому процессу происходить в цикле. Время, за которое происходит цикл, изменится, если что-то позже захотите добавить в код или убрать из кода. Да и вообще, при работе с периферией типа GPS время выполнения цикла становится величиной немного не постоянной. А временная составляющая для нас важна - она определяет всю динамику управления двигателем. Привязка к таймеру - это удобнее, чем менять коэффициент пропорциональности каждый раз после вставки в код каких-то дополнительных функций.
|
|
|
Записан
|
Хто визволиться сам, той вільним буде, Хто визволить кого, в неволю візьме. Л.Українка.
|
|
|
реношник
Karma: +10/-0
Offline
|
|
« Ответ #63 : 27.12.2018, 21:46:41 pm » |
|
Если честно, то не совсем понимаю - " подвяжите вычисление PWM к таймеру " о чем это... А по поводу ШИМ, то я не использую analogwrite у меня идет прямое управление через регистры. Идея в том, что бы пользователь мог изменить частоту ШИМ для оптимальной работы двигателя. Навеяно это статьей : http://www.rcdesign.ru/articles/radio/esc_introцитата :А что будет, если частота генератора ниже оптимальной?
Энергии, запасенной в индуктивности обмоток двигателя в течение импульса, не будет хватать для сглаживания пульсаций тока в паузе между импульсами. Появится заметное дрожание ротора. Но это не страшно. Плохо другое: - уменьшится мощность двигателя, поскольку полезную работу совершает только постоянная компонента импульсного тока. Переменная же будет рассеиваться на магнитопроводе двигателя, нагревая его. Упадет КПД в связке регулятор хода - электродвигатель. Причем виновным окажется неправильно подобранный регулятор хода, а греться будет двигатель.У стандартной функции analogwrite частота ШИМ около 480 Гц. В моем случае пользователь может задать частоту до 13000 Гц (просто большую частоту у меня не получилось наблюдать осциллографом). По умолчанию я использую частоту ШИМ 1100 Гц. Для меня главное, что у пользователя есть возможность регулировать различные параметры работы устройства.
|
|
|
Записан
|
|
|
|
Perelesnik
Karma: +125/-5
Offline
WWW
|
|
« Ответ #64 : 27.12.2018, 23:43:02 pm » |
|
О привязке к таймеру - в процессе регулировки оборотов двигателя программа вносит поправку в управляющий сигнал, увеличивая или уменьшая его на некое значение. К примеру, программа обнаружила, что скорость вращения ниже необходимой, поэтому, допустим, к предыдущему значению сигнала добавляет "1". В следующем цикле опять добавляет, и в следующем... А сам двигатель, имеющий не мгновенное время отклика, достигнет требуемых оборотов, допустим, на сотом цикле. Но к этому моменту значение сигнала окажется избыточным. Поэтому после достижения требуемых оборотов двигатель уйдёт в разгон, и программе придётся уменьшать значение сигнала. Мы получим синусоиду. Чтобы сгладить, а в идеале, исключить такие колебания, нам нужно синхронизировать динамку программного изменения управляющего сигнала с динамикой реакции двигателя. Самый простой способ - подобрать значение, на которое мы в каждом цикле уменьшаем или увеличиваем сигнал, так, чтобы динамика примерно совпала. В нашем примере, допустим, синусоида сгладится, если мы будем в каждом цикле добавлять не "1", а "0.001". Но это будет работать только до тех пор, пока время выполнения каждого цикла программы будет неизменным. Если мы что-то изменим в коде, период также изменится. И снова получим синусоиду. Поэтому я рекомендую производить такие вычисления не в каждом цикле программы, а создать искусственный, строго определённый цикл, не зависящий от того, каким окажется период между реальными циклами. Классически это делается с помощью программного прерывания по таймеру. Но можно и без прерывания.
По частоте ШИМ теоретически все верно (ранее сам сильно " загонялся" вопросами максимального приближения ШИМ к "постоянке" , хотя и не по теме двигателей). Практически же здесь разницы не заметил, хотя делал и так и так. Ни по мощности, ни по нагреву, ни по ресурсу двигателей. Возможно, если питать двигатель чисто от Ардуинки, и это очень маленький двигатель будет... Но мне с таким сталкиваться не приходилось. Так что частоты вполне хватает, и даже дополнительных мер по сглаживанию ШИМ применять не приходится. Только по питанию сглаживаю. Как говорил один мой знакомый: "буде свербіть - будем чухатися". Будут симптомы - будем принимать меры. Тем более, что это очень простой вопрос, и решается тоже крайне просто. Но за несколько лет такого вопроса так и не появилось в практике. Ни одного отказа или даже перегрева двигателей в полях пока не было (постучу по дереву на всякий случай, но факт). Поэтому не уверен, что стоит такому уделять хоть какое-то особое внимание.
А вот по количеству регулировок... это вопрос действительно интересный. Конечно, как разработчику, хочется буквально утыкать прибор переменными резисторами, чтобы и тот, и этот коэффициент можно было настраивать без влезания в код, и кучу тонких регулировок.... но у людей, которые на этой аппаратуре реально работают не ради научного любопытства, немного другой взгляд на вещи оказывается. В идеале им вообще нужна одна кнопка "вкл". И чтобы сразу деньги выдавало 😃. В общем, за избыток регуляторов я уже был и ругаем, и осуждаем. Поэтому пришлось исправляться в сторону минимально необходимого по настройкам. А минимально и реально необходим там только один регулятор, которым задается доза в миллилитрах на гектар. Поэтому все настройки разных коэффицинтов - это сугубо моя работа и моя ответственность. Я делаю это До того, как устройство попадает в руки пользователя, и не загружаю человеку голову лишним - пилотам и кроме этого есть чем заниматься, и о чем думать. А чисто для Себя можно и с десятком регуляторов сделать. Можно и без физических регуляторов, а через какое-то приложение на ПК настраивать, сохраняя в энергонезависимой памяти устройства. Это уже дело вкуса. Просто если будете делать не только для себя, но и для других людей, учтите такой момент. Он довольно немаловажный. Все по максимуму должно быть преднастроено или иметь способность самонастраиваться в процессе работы (что ещё лучше). Но вся эта наша " внутренняя кухня" не должна занимать внимание пользователя и работать без его участия.
|
|
« Крайнее редактирование: 27.12.2018, 23:56:32 pm от Perelesnik »
|
Записан
|
Хто визволиться сам, той вільним буде, Хто визволить кого, в неволю візьме. Л.Українка.
|
|
|
реношник
Karma: +10/-0
Offline
|
|
« Ответ #65 : 29.12.2018, 13:10:34 pm » |
|
теперь понятно. Изначально когда писал функцию ПИДрегулятора предусматривал временнОй коэффициент, который зависел от промежутка времени между обращениями к этой функции. Но потом пришел к варианту в котором просто устанавливается этот промежуток обращения к функции. По сути это то, что вы называете таймером.
|
|
|
Записан
|
|
|
|
реношник
Karma: +10/-0
Offline
|
|
« Ответ #66 : 30.12.2018, 22:04:49 pm » |
|
Вернусь к частоте ШИМ. Хочу более обосновано показать мотивы по которым я делаю возможность для пользователя самостоятельно выбирать этот параметр. К сожалению у меня в наличии только один привод и "мучать" буду только его. Но думаю, что показанных данных будет достаточно для аргументации моей позиции. 1 - собрана вот такая модель : 2 - первое, что смотрел это сигнал на самом моторчике при 50% ШИМ но разной частотой... *** вот так выглядит дефолтная частота 500 Гц *** теперь 1000 Гц *** 5000 Гц *** 9000 Гц *** 11000 Гц Думаю, что это первый аргумент... Следующий пункт это пропорциональность и линейность изменения скорости вращения от процента ШИМ. Измерения проводил так - после изменения %ШИМ моторчик работает пять секунд, а потом только начинается измерение. Измеряю время за которое от энкодера приходит 10 импульсов. Из таких замеров формирую массив (до 250 элементов). Этот массив пропускаю через фильтр в котором выбираю наиболее часто встречающиеся значения для удаления шумов и ложных замеров (простое усреднение не понравилось). Полученные данные свел в графики : По моему тоже довольно красноречиво... Хотя как вы ранее отмечали во всех режимах моторчик НЕ греется ...
|
|
|
Записан
|
|
|
|
Perelesnik
Karma: +125/-5
Offline
WWW
|
|
« Ответ #67 : 31.12.2018, 12:39:20 pm » |
|
Верю. Но зачем такие усложнения с ручным подбором пользователем частоты ШИМ - не понимаю. Для того, чтобы вручную подобрать оптимальную частоту, нужен в идеале осциллограф. Практичнее - чтобы была подпрограмма, перебирающая частоты и находящая оптимальную по данным с энкодера. В случае наличия такой подпрограммы калибровка частоты будет происходить в полностью автоматическом режиме, то есть, пользователю вручную ничего подстраивать не придется. Единственно, режим калибровки не должен стартовать при каждом включении аппаратуры, а включаться принудительно.
И снова же, практическая ценность подбора частоты здесь весьма условна. В моем алгоритме достаточно, чтобы при 100% ШИМ двигатель достигал своих максимальных номинальных оборотов. И не грелся. Эти свойства уже присутствуют во всех двигателях, с которыми реально приходится иметь дело, так как при их расчете, видимо, предполагалось, что требуется обеспечить работоспособность на широком диапазоне частот в различных устройствах без использования дополнительного низкочастотного фильтра. Все остальное программа отрегулирует самостоятельно - сама подберет нужный ШИМ для обеспечения расчетных оборотов. И если на одном двигателе для одних и тех же оборотов нужно 50% ШИМ, на другом - 60% ШИМ, а на третьем - 40% ... на общей работе системы это никак не сказывается и пользователя абсолютно не волнует. Получается очень гибкая система, в которой не важно, какой двигатель подключать. Важно только знать соотношение количества сигналов энкодера на один реальный оборот выходного вала редуктора и максимальные номинальные обороты двигателя. Да, были у меня и старые еще советские коллекторные моторы, которые без фильтра (сопротивление + "электролит") не хотели стабильно работать. Но кто ими сейчас пользуется? А показатель здесь важный всего один - греется мотор или не греется (недостаточно мощности или достаточно). Но опять же, с таким редуктором очень сложно загнать моторчик в режим недостатка мощности при работающем алгоритме регулировки ШИМ в зависимости от оборотов. Даже если заклинить выходной вал, программа быстро "добежит" до 100% наполнения ШИМ (где по осциллограмме уже будет ровненькая линия вверху, и частота "побоку"), что приведет скорее к проворачиванию вала в рабочем колесе, или к разрушению редуктора, или к отказу модуля питания... смотря где "тонко" будет, чем к фатальному перегреву самого моторчика. Это чисто из опыта.
Единственный случай, когда Неизбежно нужно настраивать "идеальный" ШИМ для каждого конкретного двигателя - это если в системе отсутствует обратная связь (нет энкодера).
ЗЫ: блин... ну чем мы вот тут занимаемся 31 декабря? Извращенцы!
|
|
|
Записан
|
Хто визволиться сам, той вільним буде, Хто визволить кого, в неволю візьме. Л.Українка.
|
|
|
реношник
Karma: +10/-0
Offline
|
|
« Ответ #68 : 31.12.2018, 14:17:53 pm » |
|
Ну как бы не могу я с вами согласиться... Вы спрашиваете зачем это нужно пользователю... По моему убеждению - наличие возможности всегда лучше чем отсутствие таковой... Ну и еще немного картинок которые мотивируют меня заморачиваться с частотами... привожу два графика - первый для частоты 13 кГц, а второй для 500 Гц. для каждой частоты я провел четыре калибровочные процедуру, хотел отследить корреляцию. первое это "динамический" диапазон изменения частоты вращения, у дефолтной частоты 500Гц он совсем грустный... еще более грустной для меня оказалась корреляция .... :'( даже наличие обратной связи (энкодера) как-то не мотивирует меня использовать 500Гц для ШИМа... по моему с таким хаосом простая обратная связь это как рыбе зонтик.
|
|
|
Записан
|
|
|
|
Perelesnik
Karma: +125/-5
Offline
WWW
|
|
« Ответ #69 : 31.12.2018, 15:17:27 pm » |
|
Графики по частоте энкодера в одном масштабе? А то вижу, что при 13 кГц частота вращения "200" достигается на ШИМ 50% , а при 0.5 кГц та же частота при 20 % ШИМ. И тогда получается, что "разброс" частоты вращения в обеих случаях имеет примерно одинаковую амплитуду (+- 25). По идее, амплитуда погрешности должна хоть как-то изменяться с изменением частоты. Снова же, из опыта, такие "разбросы" может давать сам энкодер. Я бы проверил, развязав "тахометр" и блок управления двигателем по питанию и сделав это на отдельных Ардуинках + экранирование и укорачивание сигнального провода энкодера. Такое хаотическое изменение скорости вращения двигателя аж на 25% (судя по графику) должно быль очень хорошо заметно даже не слух. Еще вариант - потратьте несколько минут на изготовление фильтра на вход двигателя (RC цепочка), чтобы исключить влияние частоты ШИМ. Благо, осциллограф под рукой. Просто было у меня такое, что эти энкодеры мне злостно мозг выносили своей нестабильной работой, вызванной чувствительностью к всевозможным наводкам (классическим использованием подтягивающего резистора не особо решается).
|
|
« Крайнее редактирование: 31.12.2018, 15:24:46 pm от Perelesnik »
|
Записан
|
Хто визволиться сам, той вільним буде, Хто визволить кого, в неволю візьме. Л.Українка.
|
|
|
реношник
Karma: +10/-0
Offline
|
|
« Ответ #70 : 31.12.2018, 15:24:45 pm » |
|
" Графики по частоте энкодера в одном масштабе? А то вижу, что при 13 кГц частота вращения "200" достигается на ШИМ 50% , а при 0.5 кГц та же частота при 20 % ШИМ. "
графики привязаны к оси %ШИМ. так и есть на разных частотах при одном %заполнения получаем разную скорость вращения. вот тути получается "динамический" диапазон....
|
|
|
Записан
|
|
|
|
Perelesnik
Karma: +125/-5
Offline
WWW
|
|
« Ответ #71 : 31.12.2018, 15:27:53 pm » |
|
так и есть на разных частотах при одном %заполнения получаем разную скорость вращения.
То есть, мое предположение верно: амплитуда разброса скоростей здесь примерно одинакова и не зависит от частоты. Так быть не должно. Проверяйте энкодер.
|
|
|
Записан
|
Хто визволиться сам, той вільним буде, Хто визволить кого, в неволю візьме. Л.Українка.
|
|
|
реношник
Karma: +10/-0
Offline
|
|
« Ответ #72 : 31.12.2018, 15:29:07 pm » |
|
" И тогда получается, что "разброс" частоты вращения в обеих случаях имеет примерно одинаковую амплитуду (+- 25). По идее, амплитуда погрешности должна хоть как-то изменяться с изменением частоты. " только соотнесите эту амплитуду с диапазоном мин/макс для каждого графика, и протяженность этих нестабильных участков по всему графику.
|
|
|
Записан
|
|
|
|
реношник
Karma: +10/-0
Offline
|
|
« Ответ #73 : 31.12.2018, 15:30:32 pm » |
|
" Снова же, из опыта, такие "разбросы" может давать сам энкодер. Я бы проверил, развязав "тахометр" и блок управления двигателем по питанию и сделав это на отдельных Ардуинках + экранирование и укорачивание сигнального провода энкодера. "
Питание естественно раздельное и длина провода 4 см.
|
|
|
Записан
|
|
|
|
|
|