Попытка контролировать скорость двигателя постоянного тока с помощью ПИД
я пытаюсь управлять двигателем постоянного тока с помощью ПИД-регулятора. Я уже сделал код, где я управляю двигателем с помощью ультразвукового датчика (для расстояния), но теперь мне нужно запустить двигатель при заданной скорости вращения (выход). Я сделал много 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");
}
@kevin0304, 👍1
Обсуждение1 ответ
PID - или любые аналогичные потребности в контроле
- заданное значение
- фактическое значение
- управляющая переменная (ваше значение ШИМ)
Разница между заданной точкой и фактической переменной и ее изменение с течением времени объединяются для вычисления управляющей переменной, чтобы свести эту разницу к минимуму.
Теория управления в целом слишком сложна, чтобы ответить на вопрос "как" здесь в целом.
Помимо измерения фактического значения вам также нужны знания о поведении вашей системы: например, Если вы измените значение ШИМ с 50 на 100, насколько и как быстро изменится скорость двигателя? Даже форма ответа со временем повлияет на оптимальные параметры для вашего контура управления. Это называется циклом (обратной связи), потому что любое изменение значения ШИМ изменит эту разницу и снова приведет к другому новому значению управляющего значения ШИМ (что позволяет обеспечить нестабильное поведение в случае плохих управляющих параметров).
Получение фактического значения-ваша первая задача. Также может потребоваться больше разъяснений о том, как ваше расстояние влияет на желаемое значение (заданную точку)...
спасибо за объяснение. На самом деле "функция расстояния" просто отображает расстояние между объектом и датчиком. чего я не понимаю, так это как я получу фактическую стоимость? заданное значение составляет 100 об / мин, @kevin0304
Одним из более простых способов является оптическое колесо или даже просто небольшой "флаг", прикрепленный к валу двигателя, который прерывает световой луч каждый оборот (или часть одного оборота). Время импульсов и преобразование в частоту вращения., @JRobert
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- ПИД-регулятор для управления скоростью двигателя
- Как управлять 6 шаговыми двигателями с помощью Arduino?
- Не могу контролировать скорость двигателей постоянного тока с помощью analogWrite()
- Как Arduino Uno может поддерживать до 12 сервоприводов, если у него всего 6 цифровых выводов ШИМ?
- L298N издает звуковые сигналы и дает сбой при получении определенных значений AnalogWrite
- MPU 6050 застрял на тех же значениях
ПИД-это контур управления обратной связью. Поэтому сначала вам нужна обратная связь с двигателем, например, какой-то способ измерения фактической скорости/оборотов двигателя. Только тогда вы сможете использовать PID., @chrisl
Работает ли ваш ШИМ
analogWrite(enableBridgePin,i);
так, как вы хотите ? ( Приветствуется минимальный, но полный и компилируемый код :), @DataFiddler@chrisl мотор возвращает клещевую шпильку, @kevin0304
@DataFiddler да, ШИМ работает правильно, я пробовал., @kevin0304
Что делает мотор с Трикпином? Вы этого не объяснили, и я ничего не вижу в вашем коде. Вы уже считываете текущие обороты назад от двигателя или это действительно проблема?, @chrisl
@chrisl Я не могу прочитать обороты двигателя. Тикпин-это на самом деле вывод таймера, подключенный к каналу A (двигатель с кодировщиком), я думаю, что каждый раз, когда есть импульс, таймер увеличивается (я не уверен, что это так)., @kevin0304
Является ли "галочка" сигналом тахометра?, @Sim Son