Содержание
- 1 PID РЕГУЛЯТОР НА ARDUINO
- 2 БИБЛИОТЕКА GYVERPID
- 3 ДОКУМЕНТАЦИЯ
- 4 ПРИМЕРЫ
- 5 УСТАНОВКА БИБЛИОТЕКИ
- 6 ОСТАЛЬНЫЕ БИБЛИОТЕКИ
- 7 Лучшие программы для регулировки кулера
- 8 Как регулировать скорость кулера в BIOS
- 9 Как управлять скоростью кулера с утилитой SpeedFan
- 10 Как управлять скоростью кулера с утилитой AMD OverDrive
- 11 Как настроить кулер в Msi Afterburner
Есть два похода к настройке ПИД регулятора. Первый – синтез регулятора, то есть вычисление параметров регулятора на основании модели системы. Данный метод позволяет очень точно рассчитать параметры регулятора, но он требует основательного погружения в ТАУ. Второй метод – ручной подбор параметров (коэффициентов). Это метод научного тыка проб и ошибок. Берем готовую систему, меняем один (или сразу несколько коэффициентов) регулятора, включаем регулятор и смотрим за работой системы. В зависимости от того, как ведет себя система с выбранными коэффициентами (недо/пере регулирование) опять меняем коэффициенты и повторяем эксперимент. И т. д. Ну, такой метод имеет право на жизнь, главное представлять как изменение того или иного коэффициента повлияет на систему (что бы не действовать совсем наугад). Есть более «оптимизированный» метод подбора коэффициентов – метод Зиглера–Никольса. Сразу скажу, что метод работает не для любой системы, результаты получаются не самыми оптимальными. Но, зато, метод очень простой и годится для базовой настройки регулятора в большинстве систем. Суть метода состоит в следующем: 1. Выставляем все коэффициенты (Kp, Ki, Kd) в 0. 2. Начинаем постепенно увеличивать значение Kp и следим за реакцией системы. Нам нужно добиться, чтобы в системе начались устойчивые колебания (вызванные перерегулированием). Увеличиваем Kp, пока колебания системы не стабилизируются (перестанут затухать). 3. Запоминаем текущее значение Kp (обозначим его Ku) и замеряем период колебаний системы (Tu). Все. Теперь используем полученные значения Ku и Tu для расчета всех параметров ПИД регулятора по формулам: Kp = 0.6 * Ku Ki = 2 * Kp / Tu Kd = Kp * Tu / 8 Готово. Для дискретных регуляторов нужно еще учесть период дискретизации – T ( умножить на Ki та Т, разделить Kd на Т). Еще раз повторюсь, ТАУ изучать нужно, синтез регуляторов рулит, описанный метод годится для базовой настройки, подходит не для всех систем и т. д. Но данный метод очень простой, и вполне годится для «бытового» уровня.
PID РЕГУЛЯТОР НА ARDUINO
ПИД регулятор – мощный инструмент, позволяющий удерживать заданную величину (температура, скорость вала, положение) при помощи управляющего устройства (обогреватель, контроллер мотора, линейный привод). Вот отличная статья по теории, что такое ПИД регулятор, как он работает и как его настроить. А я предлагаю свою библиотеку для работы с PID на Arduino.
ПИД регулятор выдаёт на выходе сигнал для плавного управления управляющим устройством (диммер, транзистор), если вам нужно реле – используйте библиотеку GyverRelay.
Алгоритм ПИД регулятора выглядит так, можете использовать его напрямую в скетче:
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ // величины регулятора int setpoint = 0; // заданная величина, которую должен поддерживать регулятор int input = 0; // сигнал с датчика (например температура, которую мы регулируем) int output = 0; // выход с регулятора на управляющее устройство (например величина ШИМ или угол поворота серво) int pidMin = 0; // минимальный выход с регулятора int pidMax = 255; // максимальный выход с регулятора // коэффициенты float Kp = 1.0; float Ki = 1.0; float Kd = 1.0; float _dt_s = 0.1; // время итерации в секундах // вспомогательные переменные int prevInput = 0; float integral = 0.0; // ПИД // функция расчёта выходного сигнала int computePID() { float error = setpoint - input; // ошибка регулирования float delta_input = prevInput - input; // изменение входного сигнала prevInput = input; output = 0; output += (float)error * Kp; // пропорционально ошибке регулирования output += (float)delta_input * Kd / _dt_s; // дифференциальная составляющая integral += (float)error * Ki * _dt_s; // расчёт интегральной составляющей // тут можно ограничить интегральную составляющую! output += integral; // прибавляем интегральную составляющую output = constrain(output, pidMin, pidMax); // ограничиваем выход return output; }
БИБЛИОТЕКА GYVERPID
GyverPID v2.2
Библиотека классического PID регулятора для Arduino
- Быстрая и лёгкая библиотека
- Время одного расчёта около 70 мкс
- Режим работы по величине или по её изменению (для интегрирующих процессов)
- На выбор целочисленная или float модель вычисления
- Возвращает результат по встроенному таймеру или в ручном режиме
Поддерживаемые платформы: все Arduino (используются стандартные Wiring-функции)
ДОКУМЕНТАЦИЯ
Документация
Логика работы
ПИД регулятор принимает на вход две величины:
- Входной сигнал input – сигнал с датчика: температура, скорость, положение, и т.д;
- Установку setpoint – величина, к которой регулятор будет стараться регулировать входной сигнал (температуру, скорость, положение…)
С ПИД регулятора выходит выходной (управляющий) сигнал output – безразмерная величина, которая подаётся на управляющее устройство. Это может быть транзистор с ШИМ сигналом, диммер, сервопривод, и т.д. Выходной сигнал должен влиять на входной сигнал: нагреватель нагревает объект с датчиком температуры, мотор крутится и даёт значения для датчика оборотов, и т.д.
Закон управления регулятора устанавливается при помощи коэффициентов Kp, Ki и Kd. Kp – пропорциональный коэффициент, выходная величина будет увеличиваться пропорционально разнице входного сигнала и установки. Ki – коэффициент интегрирующей составляющей, отвечает за накапливающуюся ошибку, позволяет сгладить пульсации и нивелировать маленькую ошибку. Kd – коэффициент дифференциальной составляющей, отвечает за скорость изменения величины, позволяет уменьшить раскачку системы.
Инициализация
Можно инициализировать объект тремя способами:
- GyverPID regulator; // инициализировать без настроек (всё по нулям, dt 100 мс)
- GyverPID regulator(kp, ki, kd); // инициализировать с коэффициентами. dt будет стандартно 100 мс
- GyverPID regulator(kp, ki, kd, dt); // инициализировать с коэффициентами и dt (в миллисекундах)
Режимы и настройки
Направление регулирования: зависит от того, в какую сторону направляется управляемая величина (input) при увеличении управляющего сигнала (output). Например: охлаждение или нагрев, разгон или торможение, и т.д. По умолчанию стоит NORMAL – регулятор считает, что увеличение управляющего сигнала (output) увеличит входной сигнал (input). Устанавливается командой
setDirection(dir); // dir – NORMAL или REVERSE
Режим работы: режим регулирования по ошибке входного сигнала (ON_ERROR) или по изменению входного сигнала (ON_RATE). По умолчанию стоит ON_ERROR, его рекомендуется использовать в большинстве случаев, потому что большинство процессов – саморегулирующиеся (температура нагревателя сама установится в своём максимуме, скорость мотора – тоже). Режим ON_RATE рекомендуется использовать в интегрирующих процессах, в которых выходная величина влияет на скорость изменения входной величины, например положение моторизированного слайдера, который не остановится при управляющем сигнале, отличном от нуля. Таким процессом будет проще управлять в режиме ON_RATE. Устанавливается командой
setMode(mode); // mode – ON_ERROR или ON_RATE
Пределы выхода: ограничение значения выходного сигнала, по умолчанию: 0-255 (для 8 бит ШИМ). Может быть установлено 0-180 для угла сервопривода, и т.д. Устанавливается командой
setLimits(min, max); // установить пределы
Время итерации: время итерации можно изменить в процессе работы (не знаю, зачем, но возможность есть). Время устанавливается в миллисекундах и влияет на функцию getResultTimer, которая с этим периодом делает новый расчёт управляющего сигнала. Также это время входит в расчёт управляющего сигнала (в И и Д составляющей). Устанавливается командой
setDt(dt); // установка времени итерации в мс
Установка/чтение параметров
Основные величины регулятора можно менять в любом месте программы любым удобным способом (кнопки, энкодер, передача через UART/GSM/WiFi, как угодно). Коэффициенты регулятора Kp, Ki и Kd можно устанавливать и читать напрямую как члены класса, например
regulator.Kp = 1.5; // установить regulator.Ki += 0.7; // изменить lcd.print(regulator.Kd); // читать
Время итерации меняется при помощи метода setDt() (см. выше).
Величины регулятора (вход, установка, выход) также являются членами класса и к ним можно обратиться напрямую для чтения и записи:
regulator.input = 10; // ВХОД регулятора, например текущая температура regulator.setpoint = 20; // УСТАНОВКА регулятора, например необходимая температура analogWrite(regulator.output); // ВЫХОД с регулятора можно подавать напрямую на ШИМ или серво
Тип вычислений
Библиотека имеет режим целочисленных вычислений. Скорость вычислений особо не меняется, но код занимает меньше места и всё-таки должен выполняться быстрее. По умолчанию стоит режим чисел с плавающей точкой, в заголовочном файле библиотеки смотрите ключевое слово datatype, datatype будет float или int в зависимости от настройки: это некоторые переменные и функции. Настройка осуществляется дефайном перед подключением библиотеки:
#define PID_INTEGER #include "GyverPID.h"
Как работать с библиотекой?
Нужно скормить регулятору текущее значение величины в input, нужное значение в setpoint, провести расчёт при помощи getResult или getResultTimer, и после этого выходную величину output подать на управляющее устройство. Делать это нужно часто для быстрых процессов (стабилизация частоты оборотов шпинделя станка под нагрузкой: dt берём около 10-50 мс), и не очень часто для медленных процессов (удержание заданной температуры бойлера: dt можно взять пару секунд, процесс очень инерционный). Функция getResult делает расчёт в каждый свой вызов и возвращает output, а getResultTimer делает расчёт только при срабатывании встроенного таймера. То есть getResult нужно вызывать по своему таймеру (для продвинутых пользователей), а getResultTimer нужно вызывать как можно чаще, он посчитает только тогда, когда это будет нужно по своему таймеру. После расчёта можно подавать управляющий сигнал (выходную величину output) на управляющее устройство. Смотрите пример!
Как настроить коэффициенты?
Подбор коэффициентов ПИД регулятора – индивидуальная задача, зависящая от конкретных условий и “железа”. Можно почитать статьи на эту тему: например эту, вот эту попроще, и вот эту посложнее. Первым делом нужно установить dt – об этом я писал выше. Маленький dt для быстрых процессов и побольше для медленных (инертных). Dt влияет на расчёты при неизменных коэффициентах, поэтому dt лучше не менять во время настройки, чтобы не пришлось пересчитывать все остальные коэффициенты. Диапазон коэффициентов: 0.01 – 100, т.е. довольно широк и зависит напрямую от инертности системы и выбранного времени dt. Коэффициенты должны быть положительные, противоположное направление регулирования задаётся в setDirection.
Интегральная составляющая
В версии 2.1 интегральная составляющая вынесена в публичный доступ как член класса, к ней можно обратиться как regulator.integral. Интегральная составляющая суммирует ошибку по времени, и при слишком сильном накоплении может приводить к перерегулированию. Для наблюдения за её состоянием можно прочитать integral, и при необходимости например ограничить её диапазон (regulator.integral = constrain(regulator.integral, -50, 50);) или даже обнулить (regulator.integral = 0;).
Список функций и методов библиотеки из файла .h
// ==== datatype это float или int, в зависимости от выбранного (см. пример integer_calc) ==== GyverPID(); GyverPID(float new_kp, float new_ki, float new_kd, int16_t new_dt = 100); // kp, ki, kd, dt datatype setpoint = 0; // заданная величина, которую должен поддерживать регулятор datatype input = 0; // сигнал с датчика (например температура, которую мы регулируем) datatype output = 0; // выход с регулятора на управляющее устройство (например величина ШИМ или угол поворота серво) datatype getResult(); // возвращает новое значение при вызове (если используем свой таймер с периодом dt!) datatype getResultTimer(); // возвращает новое значение не ранее, чем через dt миллисекунд (встроенный таймер с периодом dt) void setDirection(boolean direction); // направление регулирования: NORMAL (0) или REVERSE (1) void setMode(boolean mode); // режим: работа по входной ошибке ON_ERROR (0) или по изменению ON_RATE (1) void setLimits(int min_output, int max_output); // лимит выходной величины (например для ШИМ ставим 0-255) void setDt(int16_t new_dt); // установка времени дискретизации (для getResultTimer) float Kp = 0.0; float Ki = 0.0; float Kd = 0.0;
ПРИМЕРЫ
Демо — все возможности библиотеки с комментариями
/* Пример работы ПИД регулятора в автоматическом режиме по встроенному таймеру Давайте представим, что на 3 пине у нас спираль нагрева, подключенная через мосфет, управляем ШИМ сигналом И есть какой то абстрактный датчик температуры, на который влияет спираль */ #include "GyverPID.h" GyverPID regulator(0.1, 0.05, 0.01, 10); // коэф. П, коэф. И, коэф. Д, период дискретизации dt (мс) // или так: // GyverPID regulator(0.1, 0.05, 0.01);// можно П, И, Д, без dt, dt будет по умолч. 100 мс void setup() { regulator.setDirection(NORMAL); // направление регулирования (NORMAL/REVERSE). ПО УМОЛЧАНИЮ СТОИТ NORMAL regulator.setLimits(0, 255); // пределы (ставим для 8 битного ШИМ). ПО УМОЛЧАНИЮ СТОЯТ 0 И 255 regulator.setpoint = 50; // сообщаем регулятору температуру, которую он должен поддерживать // в процессе работы можно менять коэффициенты regulator.Kp = 5.2; regulator.Ki += 0.5; regulator.Kd = 0; } void loop() { int temp; // читаем с датчика температуру regulator.input = temp; // сообщаем регулятору текущую температуру // getResultTimer возвращает значение для управляющего устройства // (после вызова можно получать это значение как regulator.output) // обновление происходит по встроенному таймеру на millis() analogWrite(3, regulator.getResultTimer()); // отправляем на мосфет // .getResultTimer() по сути возвращает regulator.output }
УСТАНОВКА БИБЛИОТЕКИ
Если вы не знаете, как установить библиотеку – читайте отдельный урок по работе с библиотеками!
ОСТАЛЬНЫЕ БИБЛИОТЕКИ
У меня есть ещё очень много всего интересного! Смотрите полный список библиотек вот здесь.
Если системный блок чистый, без пыли и система охлаждения работает исправно, а внутренние компоненты нагреваются до высоких температур, тогда следует увеличить обороты кулеров в пределах допустимых возможностей. Это является первой причиной, чтобы разогнать вентилятор.
Программа для регулировки скорости кулера
Другой причиной уже для уменьшения оборотов вентилятора, считается увеличенный шум в системном блоке. В обоих случаях, следовательно провести практически одну и ту же операцию, только с разными настройками кулера.
Лучшие программы для регулировки кулера
Фото | Название | Описание |
---|---|---|
Speedfan 4.52 | Бесплатная утилита создана именно для внешнего вмешательства к настройкам вентиляторов. Недостаток один — настройки отвечающие за вращениями кулеров, могут привести к неполадкам, до момента вмешательства, компьютера | |
AMD OverDrive | ||
Riva Tuner | Многофункциональная программа с поддержкой русского языка имеет одну из опций, управляющей настройкой вентиляторов. Невысокие требования к системе, продвинутая функциональность и простой, понятный интерфейс делают эту программу топовой среди остальных похожих | |
Msi Afterburner | Мощная программа управляет разгоном видеокарт, имеет огромное количество обложек для интерфейса. Также встроена функция, которая позволяет контролировать и регулировать скорость оборотов кулера. Ещё есть удобная опция с подсказками для неопытных пользователей |
Перед скачиванием и установкой какой-либо программы для регулировки кулеров попробуйте их настроить с помощью штатных ресурсов системы. Например в BIOS есть такая опция.
Как регулировать скорость кулера в BIOS
Перед загрузкой компьютера часто жмите на кнопку Delete. Вы попадёте в меню BIOS, где управление происходит с помощью клавиатуры.
Главное меню BIOS
Шаг 1. Перейдите в верхней панели во вкладку «Advanced». Выберите настройку «Smart Fan Configuration». Эта настройка отвечает за скорость вращения кулера. Нажмите на неё кнопкой Enter.
Переходим в «Advanced» и выбираем «Smart Fan Configuration»
Шаг 2. Откроются внутренние настройки. Если у вас опция находится в положении «Disabled» нажмите Enter на «CPU Smart Fan» и установите стрелками «Auto».
Нажимаем Enter на «CPU Smart Fun» и устанавливаем «Auto»
Шаг 3. Далее для успешного автоматического регулирования скорости кулера, необходимо откалибровать скорость в пункте «Smart Fan Calibration». Для этого нажмите кнопку Enter и ждите несколько секунд пока в окне будет проводиться калибровка вентиляторов. После окончания снова жмите Enter.
Ждём окончания калибровки в пункте «Smart Fan Calibration»
Шаг 4. Перейдите в пункт «Control Mode» и выберите одну из опций:
- режим «Quiet — скорость, которой предостаточно для поддержания оптимальной температуры;
- режим «Performance» — для увеличения скорости в случаях большой нагрузки на процессор или работа компьютера заключается в тёплых условиях;
- режим «Manual» — позволяет самостоятельно отрегулировать вращение вентиляторов.
В пункте «Control Mode» выбираем одну из опций
Шаг 5. После окончания настройки необходимо выйти с сохранёнными изменениями и для этого переходим на верхней панели в «Exit» нажать 2 раза кнопку Enter.
Выходим из BIOS с сохранением изменений
Как управлять скоростью кулера с утилитой SpeedFan
Программа может управлять скоростью всех вентиляторов, подсоединённых напрямую в материнской плате. Эту операцию нужно проделать в случае перегрева «железа» на ПК. Как правильно настроить неопытному пользователю компьютера читайте инструкцию ниже.
Установка на компьютер программы SpeedFan 4.52
Скачать программу вы можете перейдя по ссылке: http://www.softportal.com/software-3121-speedfan.html.
Нажимаем «СКАЧАТЬ» программу
- Если вы скачали программу с интернета, нажмите на установочный файл. В запущенном окне, предлагающим ознакомиться с лицензией, жмите «I Agree». Соглашаемся с лицензией и жмём «I Agree»
- Галочки на пунктах означают создание оболочки, создание параметров и ярлыка на рабочем столе, для удобного запуска. Оставьте их на своих местах и нажмите «Next». Оставляем галочки на местах и нажимаем «Next»
- В новом окне будет предложено место для распаковки файлов и установки программы. Так как программа мало весит и не употребляет много системных ресурсов можете нажать кнопку «Next». По умолчанию утилита будет храниться в папке «Program Files (86)» с именем SpeedFan. Выбираем папку для установки программы
- После распаковки архивов нажмите на кнопку «Close». После распаковки архивов нажимаем «Close»
Это действие завершит установки приложения, а на рабочем столе образуется ярлык в виде значка вентилятора.
Как русифицировать программу SpeedFan
- После запуска программы в главном меню нажмите на пункт «Configure». Нажимаем на раздел «Configure»
- Выберите в верхней панели пункт «Options». Выбираем в верхней панели пункт «Options»
- В строке «Language» будет находиться русский язык. Кликните «Russian» и нажмите «Ок». В строке «Language» выбираем «Russian» и жмём «Ок»
Меню изменится с английского на русский интерфейс.
Настройка кулеров
В главном меню программы, если греется аппаратура, увеличьте стрелками вверх процент оборотов кулера.
- за нагрев процессора отвечает CPU. Увеличивайте процент до 100% на данном пункте;
- GPU- видеокарта. Подымайте скорость вращения вентиляторов на этом параметре, если она сильно нагревается;
- Sys — отвечает за настройку дополнительного кулера на «материнке»;
- изменив процентные показания на пунктах Pwm1 и остальных, заработают вентиляторы охлаждения системы и появится шум от и быстрых оборотов. Настройки и показатели программы
Выполните действия на понижение процентов, в случае громкой работы вентиляторов, на 10-20%. После чего послушайте насколько изменится шум.
Видео — Настройка Speedfan 4.52
Как управлять скоростью кулера с утилитой AMD OverDrive
Программа имеет широкий функционал и чтобы не запутаться в ней новичку, следует прочитать данную короткую инструкцию о том, как настроить обороты вентилятора легко и просто.
- Запустите программу и в главном меню окна раскройте пункт «Performance Control».
- Откройте строку с названием «Fan Control». Открываем «Fan Control»
- Ползунками вы можете контролировать скорость вентиляторов. Если у вас происходит в системнике шум тогда уменьшите % скорости подачи оборотов на вентиляторы. А если вы заметили что компьютер начал греться, тогда увеличьте процент.
- После настройки кулеров, для сохранения результата нажмите «Apply».
- Для того, чтобы при каждом запуске или перезагрузки ОС настройки не «слетали», нажмите в правом верхнем углу утилиты «Preference», а на вкладке «Settings» установите галочку на пункте «Apply my last settings». Жмите «Ок» и закрывайте программу.
Как настроить кулер в Msi Afterburner
В этой программе легко работать, так как есть всплывающие подсказки.
- Откройте свойства программы (Settings). Открываем настройки программы
- Перейдите в верхней панели на «Кулер» и поставьте галочку на программном пользовательском авторежиме. Ставим галочку на программном пользовательском авторежиме
График со шкалой отображает скорость кулера в процентах и нижнюю шкалу температуру чипа. Передвигая серые точки на кривой графика, вы можете управлять скоростью кулеров, выставляя значения на свой слух и опыт. При возникновении шума следует опустить кривую для уменьшения оборотов вентиляторов. Универсальной настройки кривой в графике нет.
Узнайте эффективные способы, как увеличить скорость кулера на ноутбуке, из нашей новой статьи.
Видео — Настройка скорости вращения кулеров в MSI Afterburner
Используемые источники:
- http://we.easyelectronics.ru/theory/prostoy-metod-nastroyki-pid-regulyatora.html
- https://alexgyver.ru/gyverpid/
- https://pc-consultant.ru/rabota-na-komp-yutere/programma-dlya-regulirovki-skorosti-kulera/