Украинский Авиационный Форум Crewshop
Добро пожаловать, Гость.
Вам не пришло письмо с кодом активации?
 
 
14.04.2021, 03:55:36 am
   Начало   Поиск Календарь Тэги Войти Регистрация  
Страниц: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 » |   Вниз
  Печать  
Автор Тема: Как у нас с трихограммой?  (Прочитано 57856 раз)
реношник
*

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: +110/-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: +110/-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: +110/-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: +110/-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: +110/-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: +110/-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 см.
Записан
реношник
*

Karma: +10/-0
Offline


« Ответ #74 : 31.12.2018, 15:35:30 pm »

" Еще вариант - потратьте несколько минут на изготовление фильтра на вход двигателя (RC цепочка), чтобы исключить влияние частоты ШИМ. Благо, осциллограф под рукой. "

а это зачем ?  это уменьшит скорость отклика на управление...
а вот ДИОД это нужная вещь. http://chipenable.ru/index.php/how-connection/item/155-pwm-regulator-dc-dvigatelya.html
Записан
  Печать  
Страниц: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 » |   Вверх
Тэги:
 
Перейти в:  

Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC | v1.2 © Крылья 2004