увеличение значения переменной

mag155
Offline
Зарегистрирован: 21.12.2017

Окей . Благодарю.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

mag155 пишет:
if(( val>val1)>10) {val2 +=20}; я че то думал что надо вот так .?

Могу привести эквивалент:

nop;

mag155
Offline
Зарегистрирован: 21.12.2017

Не понял. Поясните ?

mag155
Offline
Зарегистрирован: 21.12.2017

Задача следующая чем больше разница между переменными тем быстрее "газуем "чем меньше разница тем слабее "газуем". Если разница в минус то тоже самое только тормозим.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nop - это пустая операция, которая ничего не делает (строго говоря, это не Си, а Ассемблер).

mag155
Offline
Зарегистрирован: 21.12.2017

Аааа. А по поводу газуем че то подскажите?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Может и подскажу. Если сумеете внятно по-русски сформулировать вопрос.

mag155
Offline
Зарегистрирован: 21.12.2017

Идея такая. На два аналоговых входа подаются два сигнала от ноль до 5 вольт. Один сигнал с резистора задания второй выходное напряжение. Их нужно сравнивать и если сигнал задания больше нежели сигнал напряжение то нужно увеличивать значение в третьей переменной от ноль до 6000 тысяч. Если наоборот то уменьшать.

mag155
Offline
Зарегистрирован: 21.12.2017

Но увиличивать и уменьшать нужно с разным шагом. То есть если к примеру сигнал задания больше на 20 то увеличивать с шалом 30 если больше на 30 то увеличивать с шагом 50. Тоже самое если сигнал задания больше чем напряжения то уменьшать с разным шагом.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. По логике Вам нужно увеличивать не с разным шагом, а с разной скоростью. Если задержка между временами коррекции фиксирована, тогда - да, с разным шагом.

2. В предположении п.1: можно составить табличку зависимости шага приращения от разности и занести ее в массив.

3. Вполне вероятно, что на самом деле Вам нужен ПИД-регулятор, возможно, даже не целиком, а лишь его отдельные части. В любом случае - у Вас есть ключевое слов для Гугла.

mag155
Offline
Зарегистрирован: 21.12.2017

Насколько я понял библиотека пид это библиотека. А вот как с нее вытащить отдельные части ?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

Как он реализован, в виде библиотеки или нет, дело десятое.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

mag155 пишет:
Но увиличивать и уменьшать нужно с разным шагом. То есть если к примеру сигнал задания больше на 20 то увеличивать с шалом 30 если больше на 30 то увеличивать с шагом 50. Тоже самое если сигнал задания больше чем напряжения то уменьшать с разным шагом.
Ну почему это не реализовать на ОУ.

mag155
Offline
Зарегистрирован: 21.12.2017

На операционном усилителе реализовали сто лет назат. Хотелось чтоб на контроллере.

nik182
Offline
Зарегистрирован: 04.05.2015

Пид это две строки кода - расчёт коэфициента и применеие его в управляющей цепи. Библиотека делает именно это.

mag155
Offline
Зарегистрирован: 21.12.2017

А примерчик не подкините?

nik182
Offline
Зарегистрирован: 04.05.2015

Откройте библиотеку PID compute. Там расчёт коэффициента. Например https://github.com/br3ttb/Arduino-PID-Library 

mag155
Offline
Зарегистрирован: 21.12.2017

Чё то ссылка не открывается.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

mag155 пишет:
На операционном усилителе реализовали сто лет назат. Хотелось чтоб на контроллере.

Так и на контроллере организовали пару веков назад. Вот только Вы и так и так не можете. Начните все же с ОУ, а с контроллером оно потом нормально пойдет

mag155
Offline
Зарегистрирован: 21.12.2017

Я не хочу не кого обидеть, но если бы давали советы по делу то толку было бы намного больше.

mag155
Offline
Зарегистрирован: 21.12.2017

Да и на операционники типа TL071 пид я делал и не раз. Мне нужен чисто программный совет.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

mag155 пишет:
Чё то ссылка не открывается.

Ты и тут сообразить не можешь, да? Удали ненужные символы в конце ссылки, и всё будет ок.

https://github.com/br3ttb/Arduino-PID-Library

Всё открывается.

mag155
Offline
Зарегистрирован: 21.12.2017

Это что шифр такой.?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а не проще формула? разницу между значениями домножаем на коэффициент  это будет шаг. больше разница больше шаг

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

mag155 пишет:
Это что шифр такой.?

Нет, это у тебя IQ такой.

kalapanga
Offline
Зарегистрирован: 23.10.2016

jeka_tm пишет:

а не проще формула? разницу между значениями домножаем на коэффициент  это будет шаг. больше разница больше шаг

Вот мне почему-то тоже кажется, что автору будет достаточно самой простенькой формулки, а то и тупо пары-тройки if-ов вместо всех "высоких материй".

mag155
Offline
Зарегистрирован: 21.12.2017

Типа одно минус второе и умножить на коэффициент.?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

mag155 пишет:
Идея такая. На два аналоговых входа подаются два сигнала от ноль до 5 вольт. Один сигнал с резистора задания второй выходное напряжение. Их нужно сравнивать и если сигнал задания больше нежели сигнал напряжение то нужно увеличивать значение в третьей переменной от ноль до 6000 тысяч. Если наоборот то уменьшать.

а это кто писал?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

mag155 пишет:
Типа одно минус второе и умножить на коэффициент.?

Как один из возможных частных случаев.

Нужен ли Вам именно этот случай или какой-то другой - никто кроме Вас не знает.

mag155
Offline
Зарегистрирован: 21.12.2017

if(val>val1){val3=Val-val1*2};типа того.?

mag155
Offline
Зарегистрирован: 21.12.2017

Я писал.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

1. Находим разницу

2. Умножаем на коэффициент, который нужно рассчитать/подобрать. Коэффициент фактически ограничивает изменение: максимальное увеличение/уменьшение за одну проверку. Назовем N получившееся число.

3. Выбираем как будем регулировать: через равные промежутки времени и прибавляем N. N будет положительное или отрицательное

Или шаг изменения будет однаковый, а N будет влиять на промежутки времени будет изменениями. N только положительное. Сделать через millis например

mag155
Offline
Зарегистрирован: 21.12.2017

Я думаю нужно множить на коэффициент и полученное значение прибавлять с каждым проходом. И получится чем меньше разница тем меньше значение тем плавнее регулировка. Но еще нужно условие чтоб проверять либо x >y либо y>x. Соответсвенно либо плюсовать либо минусовать. Подскажите как правильнее это программно написать. Потому как if else подозреваю не совсем правильное решение?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Условия понадобятся все равно для граничных условий, краев диапазона. А также чтобы N не был чтобы слишком большим например

nik182
Offline
Зарегистрирован: 04.05.2015

mag155 пишет:
Я думаю нужно множить на коэффициент и полученное значение прибавлять с каждым проходом. И получится чем меньше разница тем меньше значение тем плавнее регулировка. Но еще нужно условие чтоб проверять либо x >y либо y>x. Соответсвенно либо плюсовать либо минусовать. Подскажите как правильнее это программно написать. Потому как if else подозреваю не совсем правильное решение?

То что вы описали пропорциональный и интегральный канал ПИД регулятора. Есть ещё дифканал - реагирует на быстрые изменения. Прочитайте любую мурзилку про ПИД регулятор. Их в сети полно. И не надо будет изобретать велосипед. В примерах к библиотеке есть программы в 4 строчки с работающим ПИД. 

mag155
Offline
Зарегистрирован: 21.12.2017

Благодарю всех за советы буду вникать .