Преобразования ШИМ в значения Val
- Войдите на сайт для отправки комментариев
Пт, 21/08/2020 - 20:37
как библиотеку PID, заставить выдавать не ШИМ, а значения например - от 0 до 1024.
/*********************************/ #include <PID_v1.h> double Setpoint, Input, Output; double Kp=2, Ki=5, Kd=1; PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT); /*********************************/ #include <MCP4725.h> MCP4725 dac(SDA, SCL); /*********************************/ int potentenciometr = A0; int val_r1; // Потенциометр /*********************************/ void setup(void) { /*********************************/ dac.begin(); /*********************************/ Setpoint = 100; myPID.SetMode(AUTOMATIC); /*********************************/ } void loop(void) { /*********************************/ val_r1 = analogRead(potentenciometr); val_r1 = map(val_r1, 0, 1023, 0, 100); /*********************************/ Input = val_r1; myPID.Compute(); // analogWrite(PIN_OUTPUT, Output); /*********************************/ dac.setValue(Output); }
Поставить на ноге с ШИМ RC цепочку. Получим постоянное напряжение.
Дык он и выдает значение.
Попробуйте в 43 строке вставить Serial.print(Output) и подивитесь :)
Дык он и выдает значение.
Попробуйте в 43 строке вставить Serial.print(Output) и подивитесь :)
Да от 0 до 255, а мне надо до 1024!
А можно через Output= map(Output, 0, 255, 0, 1024);?
Используй
А можно через Output= map(Output, 0, 255, 0, 1024);?
А что, просто умножить на четыре религия не позволяет? Будет тоже самое, что с мапом только вдвое быстрее.
А что, просто умножить на четыре религия не позволяет? Будет тоже самое, что с мапом только вдвое быстрее.
Зачем умножать если в библиотеке есть штатное средство - SetOutputLimits()
Используй
Отлично добрый человек, но очень медленно растет это значение,
как ему дать понять, что мне хватает целочисленное, а не с плавающей точкой?
Отлично добрый человек, но очень медленно растет это значение,
как ему дать понять, что мне хватает целочисленное, а не с плавающей точкой?
Дело не в целочисленности. Значение растет в зависимости от заданных коэффициентов. Можно делать динамическую подстройку. Здесь все хорошо описано, но, увы, на буржуйском языке - http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/
Если состояние вывода может принимать значения ШИМ скважностью 0-255, зачем нужно абстрактное значение 0-1023 ?
Оно во первых ложное, во вторых к коду никакого отношения не имеет
Потому что здесь речь идет не о ШИМе а о ЦАПе MCP4725 который 12 разрядный. Так что, по-хорошему, надо говорить о 0-4096.
Потому что здесь речь идет не о ШИМе а о ЦАПе MCP4725 который 12 разрядный. Так что, по-хорошему, надо говорить о 0-4096.
ДА, ДА, именно так и есть!
А чем управляем?
А чем управляем?
Тиристорный трехфазный привод на 100 ампер!
100А приводами управляют недоучки, а как Вы, батенька, будете управлять 3-мя фазами от 0-1024?
100А приводами управляют недоучки, а как Вы, батенька, будете управлять 3-мя фазами от 0-1024?
ПИД - от 0 до 4095, ЦАП, опторазвязка, и на управления СИФУ, а он в свою очередь тиристорным мостом!
ПИД - от 0 до 4095, ЦАП, опторазвязка, и на управления СИФУ, а он в свою очередь тиристорным мостом!
Пи..нц, а как Вы фазу отслеживать будете? Или по европейской привычке - превращая в постоянку, а потом импульно ШИМ?
Тиристорный трехфазный привод на 100 ампер!
Тогда, возможно, будет лучше воспользоваться библиотекой FastPID, она требует примерно в 2 раза меньше времени на один цикл.
ПИД - от 0 до 4095, ЦАП, опторазвязка, и на управления СИФУ, а он в свою очередь тиристорным мостом!
Пи..нц, а как Вы фазу отслеживать будете? Или по европейской привычке - превращая в постоянку, а потом импульно ШИМ?
Это все уже есть и отлаженно работает! Задача только в "смесителе", тоесть - задатчик частоты, ОС, защита.
Тиристорный трехфазный привод на 100 ампер!
Тогда, возможно, будет лучше воспользоваться библиотекой FastPID, она требует примерно в 2 раза меньше времени на один цикл.
Прошу Вас, поподробней!
Еще вопрос, можно ли менять коефициеты ПИД, на ходу например из прикрученного меню?
Тогда, возможно, будет лучше воспользоваться библиотекой FastPID, она требует примерно в 2 раза меньше времени на один цикл.
Прошу Вас, поподробней!
https://github.com/mike-matera/FastPID
Еще вопрос, можно ли менять коефициеты ПИД, на ходу например из прикрученного меню?
Можно.