ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
26 июля
1494124 Топик полностью
Связанные сообщения
Personal
Вопрос, кому нибудь удалось запрограммировать загрузчик на STM32f103C8 Duino BluePill, чтобы загрузка скомпилированных приложени...2025-07-22
[обновлено 29.05.25. новое добавлено в конец корневого сообщения]купил себе домой rigol mso5074,...2025-05-29
Коллеги, в каком объеме нужно знать ТФКП чтобы понять Фурье преобразование. Может кто посоветует "краткий курс" ? Давно учил, за...2025-05-24
Они синхронные, скольжения нет. Момент, когда надо переключить фазу, определяется по переходу ЭДС отключенной в данный момент фа...2025-05-23
Может баян, но наглядно. Что, как и на что влияет в ПИД регуляторе. Для чайников.2025-05-07
RISC-овые мытарства... Понадобился тут простенький одноканальный УЗ датчик, ибо сторонние промышленные стоят немеряно. Довольно ...2025-05-02
Всем привет! Купил у китайских продаванов несколько модулей NRF24L01+. Планирую сделать устройство на AVR (mega8,mega16,mega328)...2025-04-04
Как лучше выделять область флеш в скрипте линкера GCC в контексте МК с зеркалированием памяти программ в ОЗУ?2025-04-03
Ребята доброй пятницы всем, АЦП отдает данные 18 бит, 18-ый бит знаковый можно как-то быстро привести его к виду int32_t или над...2025-03-28
А есть чего дешманского ШИМ в аналог (0-10В, 4-20мА)?2025-03-21
PoE.. вот схемульку нашел. Но ведь эти линии на 75Ом нагружены. Так? Как там можно питалово высокое передавать2025-03-19
Интересный способ аналогового вычисления потребляемой мощности, не слышал про такой.2025-03-11
Я в подобных случаях ставлю токозащищенный ключ. Вся схема - два транзистора PNP + PNP (или P-MOSFET + BZX84C15 промеж затвор-ис...2025-03-07
Ребята, а где сейчас кошерно заказывать печатные платы 1-2 экземпляра для опытного образца, раньше делал прототипы JLCPCB ну под...2025-03-04
Вот такое ещё нарыл, весьма полезное, на мой взгляд:2025-03-03
Камент:2025-03-02
полезное. неожиданно для себя нашел программку которая топологию вычислительной машины показывает. можно проверять что пытаются ...2025-03-01
Вопрос по CH32V003.2025-02-28
Налетай-торопись. БУшка, походу. Если из аппаратуры, то флэша не поюзаная должна быть. Бегущие огни будут зачотные.2025-02-20
Ну и заказал еще на Озоне дешевенький, но весьма полезный девайс, имхо... Этакий конструктор с частотным диапазоном 18..1300 Мгц...2025-02-18
Юрий Иванович Конев и сборники "Электронная техника в автоматике". Любой открываем и читаем взахлеб..2025-02-17
Wiki проекта. Ведёт ли кто? Чем пользуетесь? Пора окультуриваться. Вот, задумался. Хотелось бы хранить локально. И чтобы формулы...2025-02-13
Все правильно. В классической теории: K, – пропорциональный коэффициент, Ti - постоянная интегрирования,, Td - и постоянная дифф...2025-02-06
Отсекатели питания. Существуют ли? Задача: источник 5Вольт, выведен наружу из устройства. Юзер его может замкнуть, закоротить. Н...2025-02-04
И да, кому может пригодиться.. Затворный резистор. Часть 1/Часть 22025-02-03
Ну что же. Купил DHO914 за 87 тыс.2025-01-20
Где в даташитах на тиристоры указывается встроенное сопротивление утечки между управляющим электродом и катодом?2025-01-16
я использую. считаю что пить можно и нужно. что бы печень не пострадала от радости, это нужно делать грамотно. использую самопер...2025-01-08
Смотри чего алишечка накинула. Можно аж в несколько слоев усадить.2024-12-25
Я бы вам рекомендовал обычный резистивный делитель 1:2 или 1:3 или 1:4 так, чтобы при 1В в цепи 120В на входе АЦП было бы 0,5......2024-08-29
Ещё так можно.2022-08-08
Раздразнили, сцуко... Ну и разминка, чтобы не заплесневеть ;)2017-10-22
LordNфилософ (28.01.2025 13:22, просмотров: 418) ответил LordN на задал вопрос по пид-регулятору, ответ как себе, очень общий. без очень важных мелочей
### Модифицированный код на C с ограничениями на выходной сигнал, интегральную часть и мёртвой зоной для ошибки 

### Модифицированный код на C с ограничениями на выходной сигнал, интегральную часть и мёртвой зоной для ошибки

#include <stdio.h>

#include <unistd.h> // для usleep

// Параметры ПИД-регулятора

#define KP 1.0

#define KI 0.1

#define KD 0.01

// Время дискретизации (в секундах)

#define DT 0.1

// Ограничения

#define OUTPUT_MIN -100.0 // Минимальное значение выходного сигнала

#define OUTPUT_MAX 100.0 // Максимальное значение выходного сигнала

#define INTEGRAL_MIN -50.0 // Минимальное значение интегральной части

#define INTEGRAL_MAX 50.0 // Максимальное значение интегральной части

#define DEAD_ZONE 0.5 // Мёртвая зона для ошибки

// Функция для имитации процесса (например, температура, скорость и т.д.)

double get_process_value() {

// Здесь может быть реальное считывание данных с датчика

static double process_value = 0.0;

process_value += 0.1; // Имитация изменения процесса

return process_value;

}

// Функция для применения управляющего воздействия

void apply_control(double control) {

// Здесь может быть реальное управление (например, PWM, напряжение и т.д.)

printf("Control output: %f\n", control);

}

// Функция для ограничения значения

double clamp(double value, double min, double max) {

if (value < min) return min;

if (value > max) return max;

return value;

}

int main() {

double setpoint = 100.0; // Заданное значение

double error, previous_error = 0.0, integral = 0.0, derivative, output;

double process_value;

while (1) {

// Считывание текущего значения процесса

process_value = get_process_value();

// Вычисление ошибки

error = setpoint - process_value;

// Мёртвая зона для ошибки

if (error > -DEAD_ZONE && error < DEAD_ZONE) {

error = 0.0;

}

// Вычисление интегральной составляющей

integral += error * DT;

// Ограничение интегральной части

integral = clamp(integral, INTEGRAL_MIN, INTEGRAL_MAX);

// Вычисление производной составляющей

derivative = (error - previous_error) / DT;

// Вычисление выходного значения ПИД-регулятора

output = KP * error + KI * integral + KD * derivative;

// Ограничение выходного сигнала

output = clamp(output, OUTPUT_MIN, OUTPUT_MAX);

// Применение управляющего воздействия

apply_control(output);

// Обновление предыдущей ошибки

previous_error = error;

// Задержка на время DT

usleep(DT * 1000000);

}

return 0;

}

### Добавленные изменения:

1. Ограничение выходного сигнала:

- Выходное значение output ограничивается между OUTPUT_MIN и OUTPUT_MAX с помощью функции clamp.

2. Ограничение интегральной части:

- Интегральная составляющая integral ограничивается между INTEGRAL_MIN и INTEGRAL_MAX, чтобы избежать "разгона" интегральной части (анти-windup).

3. Мёртвая зона для ошибки:

- Если ошибка error находится в пределах мёртвой зоны (-DEAD_ZONE < error < DEAD_ZONE), она приравнивается к нулю. Это позволяет игнорировать небольшие отклонения, которые могут быть вызваны шумами или неточностями.

### Пояснение:

- **OUTPUT_MIN и OUTPUT_MAX** — минимальное и максимальное значения выходного сигнала.

- **INTEGRAL_MIN и INTEGRAL_MAX** — минимальное и максимальное значения интегральной составляющей.

- **DEAD_ZONE** — диапазон, в котором ошибка игнорируется.

Эти изменения делают ПИД-регулятор более устойчивым и пригодным для реальных задач.

ЛН