Попытка контролировать скорость двигателя постоянного тока с помощью ПИД

я пытаюсь управлять двигателем постоянного тока с помощью ПИД-регулятора. Я уже сделал код, где я управляю двигателем с помощью ультразвукового датчика (для расстояния), но теперь мне нужно запустить двигатель при заданной скорости вращения (выход). Я сделал много resarch и обнаружил, что мне придется использовать библиотеку PID. Но с моим существующим кодом я не уверен, что он будет работать. Я знаю, что мне придется изменить значения PWM на входе analogWrite(). Можете ли вы просветить меня на этом PID? Вот мой код:

int enableBridgePin = 10; 
int forwardPin = 11;
int backWardPin = 9;
int tickPin = 2;
const int trig = 5;
const int echo = 6;

int dt;
int distance;

void setup() {
  pinMode(enableBridgePin, OUTPUT);
  pinMode(forwardPin, OUTPUT);
  pinMode(backWardPin, OUTPUT); 
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  Serial.begin(9600);

  digitalWrite(forwardPin, LOW);
  digitalWrite(backWardPin, LOW);

  digitalWrite(enableBridgePin, HIGH);
}

void loop() {
  analogWrite(enableBridgePin,255);

  digitalWrite(forwardPin, HIGH);
  digitalWrite(backWardPin, LOW);
  Serial.println(distancefonction(dt,distance));

  if (distancefonction(dt,distance)<15 && distancefonction(dt,distance)>7){
    slowdown();}
}

int distancefonction(int dt, int distance) //function to show distance

void slowdown(){
  for(int i=255;i>=0;--i){
      analogWrite(enableBridgePin,i);
      delay(10);}
   Serial.println("SLOWDOWN");
}

, 👍1

Обсуждение

ПИД-это контур управления обратной связью. Поэтому сначала вам нужна обратная связь с двигателем, например, какой-то способ измерения фактической скорости/оборотов двигателя. Только тогда вы сможете использовать PID., @chrisl

Работает ли ваш ШИМ analogWrite(enableBridgePin,i); так, как вы хотите ? ( Приветствуется минимальный, но полный и компилируемый код :), @DataFiddler

@chrisl мотор возвращает клещевую шпильку, @kevin0304

@DataFiddler да, ШИМ работает правильно, я пробовал., @kevin0304

Что делает мотор с Трикпином? Вы этого не объяснили, и я ничего не вижу в вашем коде. Вы уже считываете текущие обороты назад от двигателя или это действительно проблема?, @chrisl

@chrisl Я не могу прочитать обороты двигателя. Тикпин-это на самом деле вывод таймера, подключенный к каналу A (двигатель с кодировщиком), я думаю, что каждый раз, когда есть импульс, таймер увеличивается (я не уверен, что это так)., @kevin0304

Является ли "галочка" сигналом тахометра?, @Sim Son


1 ответ


1

PID - или любые аналогичные потребности в контроле

  • заданное значение
  • фактическое значение
  • управляющая переменная (ваше значение ШИМ)

Разница между заданной точкой и фактической переменной и ее изменение с течением времени объединяются для вычисления управляющей переменной, чтобы свести эту разницу к минимуму.

Теория управления в целом слишком сложна, чтобы ответить на вопрос "как" здесь в целом.

Помимо измерения фактического значения вам также нужны знания о поведении вашей системы: например, Если вы измените значение ШИМ с 50 на 100, насколько и как быстро изменится скорость двигателя? Даже форма ответа со временем повлияет на оптимальные параметры для вашего контура управления. Это называется циклом (обратной связи), потому что любое изменение значения ШИМ изменит эту разницу и снова приведет к другому новому значению управляющего значения ШИМ (что позволяет обеспечить нестабильное поведение в случае плохих управляющих параметров).

Получение фактического значения-ваша первая задача. Также может потребоваться больше разъяснений о том, как ваше расстояние влияет на желаемое значение (заданную точку)...

,

спасибо за объяснение. На самом деле "функция расстояния" просто отображает расстояние между объектом и датчиком. чего я не понимаю, так это как я получу фактическую стоимость? заданное значение составляет 100 об / мин, @kevin0304

Одним из более простых способов является оптическое колесо или даже просто небольшой "флаг", прикрепленный к валу двигателя, который прерывает световой луч каждый оборот (или часть одного оборота). Время импульсов и преобразование в частоту вращения., @JRobert