AlexandrY 3 11 июня, 2019 Опубликовано 11 июня, 2019 · Жалоба 1 hour ago, Aner said: Tanya права, ... из моей практики, при торможении, не такого и мощного мотора (~16V/20A) дуга на конденсаторе в ~20мм. Повторяемо многократно. Как вам такое! Превиделось. 1 hour ago, Tanya said: Раскрутите моторчик и закоротите его... Ток будет огромный. Не всякий драйвер это выдержит. Вся кинетическая энергия нагреет обмотку и ключи. А тут мы еще быстрее останавливаем... Если есть система рекуперации, то можно зарядить конденсатор до очень высокого напряжения. Что с ним будет? Огромный он будет только если мотор раскручивает внешняя сила. Инерция не вызовет скачок тока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 11 июня, 2019 Опубликовано 11 июня, 2019 · Жалоба 7 минут назад, AlexandrY сказал: Превиделось. Огромный он будет только если мотор раскручивает внешняя сила. Инерция не вызовет скачок тока. Попробуйте... Капица придумал в свое время... импульсный магнит питал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 октября, 2020 Опубликовано 15 октября, 2020 (изменено) · Жалоба выбрал такой typedef struct { float dState; // Last position input float iState; // Integrator state // Maximum and minimum allowable integrator state float iMax; float iMin; float iGain; // integral gain float pGain; // proportional gain float dGain; // derivative gain float value; } PID_S; float PID_Run(PID_S *pid, float *input) { float pTerm, dTerm, iTerm; float error = pid->value - *input; pTerm = pid->pGain * error; // calculate the proportional term pid->iState += error; // calculate the integral state with appropriate limiting if (pid->iState > pid->iMax) pid->iState = pid->iMax; else if (pid->iState < pid->iMin) pid->iState = pid->iMin; // calculate the integral term iTerm = pid->iGain * pid->iState; // calculate the diff term dTerm = pid->dGain * (*input - pid->dState); pid->dState = *input; pid->value = (pTerm + iTerm - dTerm); return pid->value; } начал настраивать. вход подал постоянный, поставил минимум, максимум и начал играться с коэффициэнтами iGain, pGain , dGain. сижу уже целый день - не могу настроить - осцилирует либо в плюс либо в минус. пробовал всякие подходы. такой Quote Set all gains to zero. Increase the P gain until the response to a disturbance is steady oscillation. Increase the D gain until the the oscillations go away (i.e. it's critically damped). Repeat steps 2 and 3 until increasing the D gain does not stop the oscillations. Set P and D to the last stable values. Increase the I gain until it brings you to the setpoint with the number of oscillations desired (normally zero but a quicker response can be had if you don't mind a couple oscillations of overshoot) и такой Quote Set all gains to 0. Increase Kd until the system oscillates. Reduce Kd by a factor of 2-4. Set Kp to about 1% of Kd. Increase Kp until oscillations start. Decrease Kp by a factor of 2-4. Set Ki to about 1% of Kp. Increase Ki until oscillations start. Decrease Ki by a factor of 2-4. ничего не выходит. как настроить? Изменено 15 октября, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба Это задача не для программирования программистами. Схему нарисуйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 1 hour ago, Tanya said: Это задача не для программирования программистами. Схему нарисуйте. да нет схемы. скажем вход - температура датчика, выход - PWM вентилятора. изменение скорости вентилятора от температуры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 6 минут назад, jenya7 сказал: да нет схемы. скажем вход - температура датчика, выход - PWM вентилятора. изменение скорости вентилятора от температуры. На НЕТ и суда НЕТ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 3 минуты назад, jenya7 сказал: да нет схемы. скажем вход - температура датчика, выход - PWM вентилятора. изменение скорости вентилятора от температуры. Не нужно для вентилятора полного ПИДа. Достаточно пропорционального звена. И зону пропорциональности нет смысла большой делать. И не забыть, что обычные кулеры примерно от 25% ШИМа начинают работать. А ниже - или останавливаются, или крутят на минимальной скорости. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 12 минут назад, Baser сказал: Не нужно для вентилятора полного ПИДа. Достаточно пропорционального звена. И зону пропорциональности нет смысла большой делать. И не забыть, что обычные кулеры примерно от 25% ШИМа начинают работать. А ниже - или останавливаются, или крутят на минимальной скорости. Это, смотря для чего все это. Может, и релейный (двухпозиционный), реализованный на достаточно мощном процессоре, будет удовлетворять. Регуляторы температуры для разных целей применяют. И ПИД в регуляторах температуры прекрасно работает. В умелых руках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 3 минуты назад, Tanya сказал: Это, смотря для чего все это. Именно так. ТС не выдал условия своей задачи, а я дал рекомендации относительно моих задач Эти рекомендации для управления кулером, который охлаждает перегретый/охлажденный относительно окружающей температуры объект по разнице температур. А что нужно ТС - х.з. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 октября, 2020 Опубликовано 15 октября, 2020 (изменено) · Жалоба 1 hour ago, Baser said: Не нужно для вентилятора полного ПИДа. Достаточно пропорционального звена. И зону пропорциональности нет смысла большой делать. И не забыть, что обычные кулеры примерно от 25% ШИМа начинают работать. А ниже - или останавливаются, или крутят на минимальной скорости. а дифференциальная часть нужна? она без интегральной никак не влияет. Изменено 15 октября, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба Задачу сначала озвучьте. Что есть на входе (датчики)? Какой вентилятор? ШИМ чем управляет и как? Результат управления какой нужен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 октября, 2020 Опубликовано 15 октября, 2020 (изменено) · Жалоба 1 hour ago, Baser said: Задачу сначала озвучьте. Что есть на входе (датчики)? Какой вентилятор? ШИМ чем управляет и как? Результат управления какой нужен? это вобщето планируется как универсальный ПИД. какая разница от какого датчика я получу цифру 25 (градусов)? и какая разница на какой дравер я подам ШИМ? я реально не понимаю вопроса. тип вентилятора? это важно для ПИД? Изменено 15 октября, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 7 минут назад, jenya7 сказал: а дифференциальная часть нужна? она без интегральной никак не влияет. В 101 раз... Теплоемкость, умноженная на производную от температуры по времени равно мощности. Мощность равна сумме членов ПИД-регулятора. Продифференцируем это уравнение по времени. Получим - Теплоемкость, умноженная на вторую производную от невязки температуры равно сумме ( коэффициент пропорциональности (П) на первую производную от температуры) + (И, умноженный на невязку температуру ) +(Д, умноженный на вторую производную). Вспоминаем уравнение механического осциллятора (груз на пружинке). Видим. что дифференциальный член увеличивает эффективную массу (теплоемкость), интегральный член играет роль пружинки, а пропорциональный вводит трение (вязкое). Таким образом посредством регулятора мы создаем колебательную систему с затуханием. Имеется три решения такого уравнения в зависимости от величин параметров, которые мы можем выбирать по вкусу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 октября, 2020 Опубликовано 15 октября, 2020 (изменено) · Жалоба ок. взял такое решение float PID_Reg(PID_S *pid, float *input) { static char is_first_call = 1; static float U, I, error, error_prev; if (is_first_call) { is_first_call = 0; I = 0; error_prev = 0; //Kp, Ki, Kd initialization } U = 0; error = *input; //integral part if (pid->iGain != 0) { U = I + pid->iGain * error; I = U; } //proportional part if (pid->pGain != 0) { U += pid->pGain * error; } //differencial part if (pid->dGain != 0) { U += pid->dGain * (error - error_prev); error_prev = error; } return U; } вобщем то неплохо. можно настроить довольно стабильно. но почему то I, D коэффициэнты малы - P = 80, I = 0.001, D = 0.1. при увеличении система идет вразнос. ок. с P и I разобрался. D не влияет - нет изменения на входе, но и он понятен (скорость реагирования на изменение). спасибо. Изменено 15 октября, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 4 часа назад, jenya7 сказал: это вобщето планируется как универсальный ПИД. какая разница от какого датчика я получу цифру 25 (градусов)? и какая разница на какой дравер я подам ШИМ? я реально не понимаю вопроса. тип вентилятора? это важно для ПИД? Если это ПИД в общем виде, то отвечать вам вообще нечего. Формулы у вас в общем виде есть, методики настройки в общем виде тоже на каждом углу в интернете разбросаны. Вот если бы у вас был вопрос по конкретному применению ПИД - тогда другое дело, везде есть нюансы. Чистый теоретический ПИД редко применяется, обычно в алгоритм вводят кучу эмпирических добавок. 4 часа назад, jenya7 сказал: но почему то I, D коэффициэнты малы - P = 80, I = 0.001, D = 0.1. Без нормализации входного сигнала и сигнала управления - это просто числа, которые могут быть любыми. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться