Перейти к содержанию

Пид Регулятор


ukr823f

Рекомендуемые сообщения

Раз так то и считай обороты каждый оборот коленвала, с таким источником сигнала все равно точнее не замеряешь, только точность не очень хорошая, после замера оборотов считай свой ШИМ, предварительно сделав мертвую зону оборотов в которой изменение ШИМа не требуется, и подобрав скорость изменения ШИМа такой чтоб при снижении и попадании оборотов в мертвую зону обороты по инерции не ушли ниже зоны. И с ПИДами мудрить не нужно.

Вот подобный рисунок: красный - обороты, черный - ШИМ.

post-163052-0-59124800-1425465852_thumb.png

Изменено пользователем fog
Ссылка на комментарий
Поделиться на другие сайты

Пока исходим из 1 импульса на оборот.

Получается диапазон при 200 оборотах время между импульсами 300мС.

При 8000 оборотах (8000-????) время между импульсами 7,5мС.

Нас больше интересуют низкие обороты.

Частота микроконтроллера 8Мгц. Получается что делитель должен

быть 64. Тогда один тик равен 8 мкС. А переиод переполнения 524мС с копейками.

В диапазон в принципе укладываемся.

То, что насчитает таймер расчитывай через ПИД и выдавай в ШИМ.

Ссылка на комментарий
Поделиться на другие сайты

Товарищи. Спасибо за советы. Будем эксперементировать. С вашей активной помощью - всё намного проще в понимании. Всё получиться. Постараюсь уже готовый код подробно описать, чтобы потом кому то ещё тоже он пригодился. Делать буду через ПИД. Так как с ним нужно разобраться. И его ещё много где нужно применить - а не разобравшись, ничего не выйдет. Это скажем так - точка старта для подобного плана проектов. Пусть сложно - но только так, и никак иначе.

По коду. Выходит алгоритм таков.

Инициализируем два таймера. Таймер1 -для подсчёта времени и генерации прерывания, в котором будет считаться наши обороты и наш алгоритм ПИД). И инициализируем таймер2 - с помощью которого генерируем ШИМ. АЦП - запускаем в свободный постоянный счёт (Free Runing) и в основном цикле программы while(1) постоянно считываем температуру мотора и вычисляем установочные обороты от этой температуры по таблице.

temperatura=read_adc(0)*на число для получения температуры в градусах , а целевые обороты берём из массива так - target_rpm = rpm_table[temperatura]; , где rpm_table - наш массив на 10 значений оборотов от температуры (от 0 до 100 гр. цельсия)

Таймер 1у нас тикает постоянно, и в его прерывании мы считываем наше кол-во импульсов которые у нас пришло на вход INT0. Как только мы посчитали текущее значение оборотов, мы сразу же в этом прерывании запускаем алгоритм расчёта ПИД. То есть у нас этот алгоритм будет запускаться каждые 524мс, что в принципе достаточно для управления клапаном холостого хода я думаю.

Правильно всё расписал?

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Расчет ПИД лучше делать вне прерывания.

Можно таймер0 запустить на прерывание в 1сек. В его прерывании запускать однократное измерение.

А в основной программе обрабатывать температуру. Температура не так важна по времени.

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Так а мы то его всё равно делаем то в прерывании. Только от таймера 0. Или это для того чтобы не нагружать прерывания от таймера1, которые будут работать только для подсчёта наших текущих оборотов?

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Таймер 1 не будет выдавать прерываний. Прерывание будет от входа INT1.

А таймер 1 будет только считать. А в прерывании от INT1 нужно считывать

данные из таймера и перезапускать его.

Начни с простого, без ПИД регулирования. Создай проект в Протеусе, как писал выше.

И просто от значения таймера меняй ШИМ на выходе. Потом уже подключишь

и ПИД и температуру.

Ссылка на комментарий
Поделиться на другие сайты

Тогда такой вопрос. У нас допустим 100 оборотов (начало вращения стартером). За это время у нас таймер переполниться и заново начнёт считать. А когда появиться импульс, у нас уже значение таймера будет допустим 20 000. Что в таком случае делать?

Ссылка на комментарий
Поделиться на другие сайты

Зачем Вам INT0 и таймер1 ? Таймер Т1 прекрасно работает в режиме захвата (Capture) безо всякого INT0. А чтобы обороты не проскакивали нижнюю границу, начинайте "оживлять" двигатель ДО момента достижения 1000 об. Скажем при 1200-1400.

Ссылка на комментарий
Поделиться на другие сайты

Геннадий. С оживлением мотора тут ясно. Но вот моделируем ситуацию. Включили зажигание. Мотор заглушен. Устройство активно, и оно уже хочет считать наши импульсы. А импульсов то - нет. Если бы в прерывании через определённое число времени считали сколько импульсов пришло за этот промежуток времени, то тогда мы отследили бы даже 0 оборотов. А вот как с вышеописаной ситуацией быть, что то не пойму.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо Геннадий.

Еще проще. Есть у таймера 1 вход захвата. На него и подавать

сигналы с датчика.

Разрешить прерывание по захвату и по переполнению.

Когда обороты 0, то будет срабатывать прерывание по переполнению.

Как пойдут импульсы, будет срабатывать прерывание по захвату.

Погугли и почитай про этот режим таймера.

Примерно такое http://radioparty.ru...astoty-signala/

А для точности почитай даташит.

Изменено пользователем croc19
Ссылка на комментарий
Поделиться на другие сайты

Про этот режим я знаю Он у меня в принципе и есть уже реализованный и в железе собранный. только собирался он немного для другого - для отображения параметров измеряемого ШИМ. Но суть та же. Как раз на основе статьи с радиопати и сделанный. Работает хорошо. Только я переделал его под переменные типа Float для точно расчёта. Как раз собирался собрать на его основе точный спидометр с измерением скорости от 0.1 до 300 к\ч

Его то можно и переделать под измерение оборотов.

Изменено пользователем ukr823f
Ссылка на комментарий
Поделиться на другие сайты

Когда то, года 2 назад, в самом разгаре обучения программированию, писал простенький пример измерения 2-х частот и вывода 2-х ШИМов. Может пригодится.

pwm_frec.rar

Частоты измеряются по принципу измерения периода между двумя фронтами импульсов, отлавливаемые внешними прерываниями. ШИМы программно-аппаратные. Основной цикл полностью свободен для собственных нужд (в нём сейчас пересчитываются и выводятся частоты на дисплей).

На всё про всё потрачен всего 1 таймер, которым, в прниципе, можно ещё и отсчитывать какие-то интервалы. Он крутится постоянно и не обнуляется. Его обработчик уже реализован и вызывается через 65536 его тактов.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо большое за ценную информацию. Сейчас, я только немного разберусь, чтобы была возможность сделать устройство уже в схемотехнике, чтобы было можно сразу на машине и смотреть что и к чему и выявлять ошибки. И я думаю так ещё вопросы возникнут.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 года спустя...
  • 4 года спустя...
В 07.03.2015 в 00:40, ukr823f сказал:

////////////

Здравствуйте. Получилось устройство??? Так как мне оно очееень сейчас надо!!! 

Изменено пользователем Falconist
Оверквотинг
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...