Задача следующая чем больше разница между переменными тем быстрее "газуем "чем меньше разница тем слабее "газуем". Если разница в минус то тоже самое только тормозим.
Идея такая. На два аналоговых входа подаются два сигнала от ноль до 5 вольт. Один сигнал с резистора задания второй выходное напряжение. Их нужно сравнивать и если сигнал задания больше нежели сигнал напряжение то нужно увеличивать значение в третьей переменной от ноль до 6000 тысяч. Если наоборот то уменьшать.
Но увиличивать и уменьшать нужно с разным шагом. То есть если к примеру сигнал задания больше на 20 то увеличивать с шалом 30 если больше на 30 то увеличивать с шагом 50. Тоже самое если сигнал задания больше чем напряжения то уменьшать с разным шагом.
1. По логике Вам нужно увеличивать не с разным шагом, а с разной скоростью. Если задержка между временами коррекции фиксирована, тогда - да, с разным шагом.
2. В предположении п.1: можно составить табличку зависимости шага приращения от разности и занести ее в массив.
3. Вполне вероятно, что на самом деле Вам нужен ПИД-регулятор, возможно, даже не целиком, а лишь его отдельные части. В любом случае - у Вас есть ключевое слов для Гугла.
Но увиличивать и уменьшать нужно с разным шагом. То есть если к примеру сигнал задания больше на 20 то увеличивать с шалом 30 если больше на 30 то увеличивать с шагом 50. Тоже самое если сигнал задания больше чем напряжения то уменьшать с разным шагом.
На операционном усилителе реализовали сто лет назат. Хотелось чтоб на контроллере.
Так и на контроллере организовали пару веков назад. Вот только Вы и так и так не можете. Начните все же с ОУ, а с контроллером оно потом нормально пойдет
Идея такая. На два аналоговых входа подаются два сигнала от ноль до 5 вольт. Один сигнал с резистора задания второй выходное напряжение. Их нужно сравнивать и если сигнал задания больше нежели сигнал напряжение то нужно увеличивать значение в третьей переменной от ноль до 6000 тысяч. Если наоборот то уменьшать.
2. Умножаем на коэффициент, который нужно рассчитать/подобрать. Коэффициент фактически ограничивает изменение: максимальное увеличение/уменьшение за одну проверку. Назовем N получившееся число.
3. Выбираем как будем регулировать: через равные промежутки времени и прибавляем N. N будет положительное или отрицательное
Или шаг изменения будет однаковый, а N будет влиять на промежутки времени будет изменениями. N только положительное. Сделать через millis например
Я думаю нужно множить на коэффициент и полученное значение прибавлять с каждым проходом. И получится чем меньше разница тем меньше значение тем плавнее регулировка. Но еще нужно условие чтоб проверять либо x >y либо y>x. Соответсвенно либо плюсовать либо минусовать. Подскажите как правильнее это программно написать. Потому как if else подозреваю не совсем правильное решение?
Я думаю нужно множить на коэффициент и полученное значение прибавлять с каждым проходом. И получится чем меньше разница тем меньше значение тем плавнее регулировка. Но еще нужно условие чтоб проверять либо x >y либо y>x. Соответсвенно либо плюсовать либо минусовать. Подскажите как правильнее это программно написать. Потому как if else подозреваю не совсем правильное решение?
То что вы описали пропорциональный и интегральный канал ПИД регулятора. Есть ещё дифканал - реагирует на быстрые изменения. Прочитайте любую мурзилку про ПИД регулятор. Их в сети полно. И не надо будет изобретать велосипед. В примерах к библиотеке есть программы в 4 строчки с работающим ПИД.
Окей . Благодарю.
Могу привести эквивалент:
nop;
Не понял. Поясните ?
Задача следующая чем больше разница между переменными тем быстрее "газуем "чем меньше разница тем слабее "газуем". Если разница в минус то тоже самое только тормозим.
nop - это пустая операция, которая ничего не делает (строго говоря, это не Си, а Ассемблер).
Аааа. А по поводу газуем че то подскажите?
Может и подскажу. Если сумеете внятно по-русски сформулировать вопрос.
Идея такая. На два аналоговых входа подаются два сигнала от ноль до 5 вольт. Один сигнал с резистора задания второй выходное напряжение. Их нужно сравнивать и если сигнал задания больше нежели сигнал напряжение то нужно увеличивать значение в третьей переменной от ноль до 6000 тысяч. Если наоборот то уменьшать.
Но увиличивать и уменьшать нужно с разным шагом. То есть если к примеру сигнал задания больше на 20 то увеличивать с шалом 30 если больше на 30 то увеличивать с шагом 50. Тоже самое если сигнал задания больше чем напряжения то уменьшать с разным шагом.
1. По логике Вам нужно увеличивать не с разным шагом, а с разной скоростью. Если задержка между временами коррекции фиксирована, тогда - да, с разным шагом.
2. В предположении п.1: можно составить табличку зависимости шага приращения от разности и занести ее в массив.
3. Вполне вероятно, что на самом деле Вам нужен ПИД-регулятор, возможно, даже не целиком, а лишь его отдельные части. В любом случае - у Вас есть ключевое слов для Гугла.
Насколько я понял библиотека пид это библиотека. А вот как с нее вытащить отдельные части ?
ПИД - это обобщенный подход к регулированию с использованием обратной связи.
Как он реализован, в виде библиотеки или нет, дело десятое.
На операционном усилителе реализовали сто лет назат. Хотелось чтоб на контроллере.
Пид это две строки кода - расчёт коэфициента и применеие его в управляющей цепи. Библиотека делает именно это.
А примерчик не подкините?
Откройте библиотеку PID compute. Там расчёт коэффициента. Например https://github.com/br3ttb/Arduino-PID-Library
Чё то ссылка не открывается.
Так и на контроллере организовали пару веков назад. Вот только Вы и так и так не можете. Начните все же с ОУ, а с контроллером оно потом нормально пойдет
Я не хочу не кого обидеть, но если бы давали советы по делу то толку было бы намного больше.
Да и на операционники типа TL071 пид я делал и не раз. Мне нужен чисто программный совет.
Ты и тут сообразить не можешь, да? Удали ненужные символы в конце ссылки, и всё будет ок.
https://github.com/br3ttb/Arduino-PID-Library
Всё открывается.
Это что шифр такой.?
а не проще формула? разницу между значениями домножаем на коэффициент это будет шаг. больше разница больше шаг
Нет, это у тебя IQ такой.
а не проще формула? разницу между значениями домножаем на коэффициент это будет шаг. больше разница больше шаг
Вот мне почему-то тоже кажется, что автору будет достаточно самой простенькой формулки, а то и тупо пары-тройки if-ов вместо всех "высоких материй".
Типа одно минус второе и умножить на коэффициент.?
а это кто писал?
Как один из возможных частных случаев.
Нужен ли Вам именно этот случай или какой-то другой - никто кроме Вас не знает.
if(val>val1){val3=Val-val1*2};типа того.?
Я писал.
1. Находим разницу
2. Умножаем на коэффициент, который нужно рассчитать/подобрать. Коэффициент фактически ограничивает изменение: максимальное увеличение/уменьшение за одну проверку. Назовем N получившееся число.
3. Выбираем как будем регулировать: через равные промежутки времени и прибавляем N. N будет положительное или отрицательное
Или шаг изменения будет однаковый, а N будет влиять на промежутки времени будет изменениями. N только положительное. Сделать через millis например
Я думаю нужно множить на коэффициент и полученное значение прибавлять с каждым проходом. И получится чем меньше разница тем меньше значение тем плавнее регулировка. Но еще нужно условие чтоб проверять либо x >y либо y>x. Соответсвенно либо плюсовать либо минусовать. Подскажите как правильнее это программно написать. Потому как if else подозреваю не совсем правильное решение?
Условия понадобятся все равно для граничных условий, краев диапазона. А также чтобы N не был чтобы слишком большим например
То что вы описали пропорциональный и интегральный канал ПИД регулятора. Есть ещё дифканал - реагирует на быстрые изменения. Прочитайте любую мурзилку про ПИД регулятор. Их в сети полно. И не надо будет изобретать велосипед. В примерах к библиотеке есть программы в 4 строчки с работающим ПИД.
Благодарю всех за советы буду вникать .