PDM регулятор

Используется алгоритм Брезенхема

Пользовательские блоки ПИД регуляторов, прочих регуляторов и для работы с ШИМ выходами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

PDM регулятор

#1

Сообщение Sancho » 13.03.2018{, 10:17}

PDM регулятор, он же по-русски: Частотно-Импульсная Модуляция, ЧИМ.
Альтернатива ШИМ регуляторам - с ними у Вас меняется соотношение между длительностью "1" и "0", а при PDM длительность импульсов маленькая и постоянная, но их количество в единицу времени - меняется, но зависит от времени цикла( минимальное время равно времени цикла).
Использование алгоритма Брезенхема дало возможность равномерно распределять импульсы по времени в зависимости от входного сигнала.
Рекомендуется применять при отсутствии в системе устройств, увеличивающих время цикла типа дисплеев и т.д.
Может использоваться с любым цифровым пином. Цифровой из аналогового тоже.
В наборе два блока - с входным сигналом 0-100 и 0-255(в реальности до 254, но единицей, я думаю, можно пренебречь).
На входах блоков стоят ограничители вх. сигн., так что перебор не страшен, так-же как и недобор. :haha:
Тестовый проектик в комплекте.

Обновлено: были проблемы со вторым блоком в проекте при объявлении, исправлено.

UPD 22.01.2019
Добавлен блок для управления нагревательным элементом.
Необходим детектор нуля, пин 2, выходной оптрон по пину 6 может быть с zero cross, может без.
Переключение происходит в момент спада напряжения каждую вторую полуволну,
т.е. напряжение подаётся целыми периодами.
Имеем 2 сек - 100%, если меньше - равномерное распределение в пределах этих 2 секунд.
Вход 0-100.
Фото прилагаю. Один ньюанс на фото - я использую другой детектор нуля, по другому принципу, поэтому сигнал как-бы инвертирован. На яндексе в папке полный размер
Вложения
Тест Брезенхема 1.flp
Для переменки, с детектором нуля
(101.56 КБ) 383 скачивания
PDM_Brezenhem_v2.ubl
обновлено
(26.34 КБ) 450 скачиваний
Брезенхем_PPM_v2.flp
Тестовый пример
(111.12 КБ) 476 скачиваний
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

PDM регулятор

#2

Сообщение Sancho » 22.01.2019{, 12:24}

Обновил, сделал для тэнов.
Если кто затестит на более 1 kw- просьба отписаться как с миганием света в квартире/доме и т.д.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

PDM регулятор

#3

Сообщение Phazz » 22.01.2019{, 14:20}

Попробую на 3 кВт. У меня там стоит твердотельное реле с zero-cross, я так понимаю мне нужно будет только добавить детектор нуля?

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

PDM регулятор

#4

Сообщение Sancho » 22.01.2019{, 14:32}

Phazz, Да.
Если оптрон с диодным мостом - будет 100% две секунды, 1%=1 период.
Если без, а с одним обратным диодом 1%=2 периода.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

solo
Рядовой
Сообщения: 54
Зарегистрирован: 06.12.2016{, 18:04}
Репутация: 0
Откуда: Харьков

PDM регулятор

#5

Сообщение solo » 11.04.2019{, 15:14}

а подскажите пж есть проект собранный на двух нанах , хочу управлять 6 нагревателями и шаговым двигателем . Нагреватели планирую подключить в 3х фазную сеть по 2 шт на фазу , на макетке все работает , со светодиоды эмитирующие работу тэнов моргают как то не равномерно , для управления тэнами планирую использовать твердотельное реле с детектором нуля , может можно как то снизить частоту ШИМ, а то боюсь что на малых мошностях импульс открытия может получатся коротким и реле не будет открываться
Вложения
peckaDicpley.flp
(185.07 КБ) 112 скачиваний
peckaBez.flp
(146.4 КБ) 104 скачивания

Аватара пользователя
Grafsaxar
Лейтенант
Сообщения: 377
Зарегистрирован: 06.09.2015{, 16:04}
Репутация: 6
Откуда: Маркс-Энгелс
Имя: Alexander

PDM регулятор

#6

Сообщение Grafsaxar » 11.04.2019{, 16:26}

solo писал(а):
11.04.2019{, 15:14}
для управления тэнами планирую использовать твердотельное реле с детектором нуля , может можно как то снизить частоту ШИМ, а то боюсь что на малых мошностях импульс открытия может получатся коротким и реле не будет открываться
Вы шимом собираетесь SSR управлять?????

Плохая идея. Оно проживёт не долго. Личный опыт.
СпойлерПоказать
минимально можно 62 Гц установить. но это вам не поможет.


для 3 или 11 пина добавьте в setup:

TCCR2B = TCCR2B & Желаемая частота;
для 9-10 пина
TCCR1B = TCCR1B & Желаемая частота;

Но имейте ввиду - для работы шим (на любой частоте) таймер, который обслуживает шим (один таймер - два пина шим) не должен быть использоватся для других задач (серво, звук, прерывания по таймеру, некоторые блоки пользователя).

Частота ШИМ'а на ногах 9 и 10:

Код:
Константа Делитель Частота(Гц)
0x01 1 31250
0x02 8 3906.25
0x03 64 488.28125
0x04 256 122.0703125
0x05 1024 30.517578125

Частота ШИМ'а на ногах 11 и 3:

Код:
Константа Делитель Частота(Гц)
0x01 1 31250
0x02 8 3906.25
0x03 32 976.5625
0x04 64 488.28125
0x05 128 244.140625
0x06 256 122.0703125
0x07 1024 30.517578125
Качество — это делать что-либо правильно, даже когда никто не смотрит

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

PDM регулятор

#7

Сообщение Sancho » 11.04.2019{, 16:43}

solo, В проекте Вы используете регулятор на алгоритме Брезенхема, который предназначен для постоянного тока.
Есть регулятор для переменки, использующий в качестве точки отсчёта каждую вторую полуволну напряжения, и, соответственно, требующий детектор нуля.
Для трёх фаз возможно использовать один детектор и один выход с подключением к ТТР с детекторами нуля.
Дабы не усложнять.

Отправлено спустя 8 минут 47 секунд:
Посмотрел этот блочок(подзабыл как там) - он рассчитан на детектор нуля по простой схеме на гасящих резисторах, диодном мосту и оптроне, 817 по входу/пину D2.
Остаётся поставить повторители/инверторы в зависимости от схемы подключения входов ТТР по выходу D6.
Выходной пин легко поменять, изменив D6_ на любое в четырёх местах в блоке.

Отправлено спустя 5 минут 35 секунд:
Вау, посмотрел внимательно - у Вас все шесть каналов независимые.
Ок, сделаю Вам для проекта.
Будут пины как в Вашем текущем.
Нужно?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

PDM регулятор

#8

Сообщение Phazz » 11.04.2019{, 17:05}

Grafsaxar, да как-то не было проблем с шимом на ssr. Была проблема с завышением заявленных характеристик самого реле китайцами. После этого я проверяю что за симистр там установлен, ну и если нагрузка большая - то хорошее охлаждение, по возможности активное.

Matafon
Рядовой
Сообщения: 9
Зарегистрирован: 17.01.2019{, 20:49}
Репутация: 0
Откуда: Новосибирск
Имя: Николай

PDM регулятор

#9

Сообщение Matafon » 11.04.2019{, 18:18}

Sancho писал(а):
11.04.2019{, 16:58}
Посмотрел этот блочок(подзабыл как там) - он рассчитан на детектор нуля по простой схеме на гасящих резисторах, диодном мосту и оптроне, 817 по входу/пину D2.
Добрый день.
Пытаюсь разобраться как при подключении детектора нуля в блоке "Брезенхем_V100" туда приладить сигналы управления. Хочу управлять тэном кнопками (больше / меньше) не пойму как реализовать. Ткните мордой пожалуйста как кнопки приладить

solo
Рядовой
Сообщения: 54
Зарегистрирован: 06.12.2016{, 18:04}
Репутация: 0
Откуда: Харьков

PDM регулятор

#10

Сообщение solo » 11.04.2019{, 18:27}

ну на счет твердотельного реле это я громко сказал , берем оптрон ( типа мок 3061 или подобный) припаиваем к симистору и получаем реле. надеюсь, что проживет долго пока, что нибудь не коротнет
Sancho писал(а):
11.04.2019{, 16:58}
Есть регулятор для переменки, использующий в качестве точки отсчёта каждую вторую полуволну напряжения, и, соответственно, требующий детектор нуля.
да как то я тупонул, что можно взять регулятор для переменки и на вход подать с генератора сигнал для регулировки частоты ШИМ
Sancho писал(а):
11.04.2019{, 16:58}
все шесть каналов независимые
а что нельзя так делать как я , использовать в одном проекте несколько (6) блоков

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

PDM регулятор

#11

Сообщение Sancho » 11.04.2019{, 19:13}

Matafon, В посте 1 пример именно такой.
Только нет запоминания - сами приладите :)
solo, для постоянки - без проблем, для переменки нет,
блок делал одно-канальный, прочитайте.
Как писал выше - готовьте детектор нуля, блок почти сделал, завтра выложу.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

PDM регулятор

#12

Сообщение Renigant » 08.11.2019{, 11:19}

Sancho, Планирую по вашему совету использовать PDM блок, только данный блок не подходит для моей системы у меня 3 тэна на каждую фазу следовательно для каждой фазы нужно отдельно использовать пин с прерыванием у меги я использую 19, 20, 21 и соответственно пины для управления у меня используются три разных. Отсюда вопрос Вы сможете изменить этот блок для задания пинов в ручную?
И вопрос подойдет ли этот блок для такой платы https://ru.aliexpress.com/item/32802025 ... 33edXin7Ne ?

Отправлено спустя 3 минуты 20 секунд:
Renigant писал(а):
08.11.2019{, 11:19}
Отсюда вопрос Вы сможете изменить этот блок для задания пинов в ручную
Я так понимаю что в блоке достаточно поменять значения во вкладке SetupSection
"pinMode(2, INPUT);
attachInterrupt(0, detect_up, RISING);
D6_Out;
D6_Low;"
Если это так то первый вопрос я снимаю

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

PDM регулятор

#13

Сообщение Sancho » 09.11.2019{, 08:29}

Renigant, Для избежания использования 3-х детекторов нуля - проще использовать ТТР и один детектор. У большинства - zero-cross. Тогда только один блок, выходы на оптроны - в паралель.
В результате :)
СпойлерПоказать
3fase_zero-cross.jpg
3fase_zero-cross.jpg (65.31 КБ) 3319 просмотров
Отправлено спустя 24 минуты 19 секунд:
Renigant писал(а):
08.11.2019{, 11:22}
Я так понимаю что в блоке достаточно поменять значения во вкладке SetupSection
Нет, надо менять везде в блоке. Смотри внимательно....
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

PDM регулятор

#14

Сообщение Renigant » 09.11.2019{, 09:58}

Все дело в том, что обвязка уже готова и менять ее будет долго да и ТТР в наличии нет на все нужно время, а зима близко.
IMG_20191015_225438.jpg
Отправлено спустя 1 час 43 минуты 21 секунду:
Sancho писал(а):
09.11.2019{, 08:53}
. Нет, надо менять везде в блоке. Смотри внимательно
Нашел меняем значения в SetupSection и меняем функцию в FunctionSection
Последний раз редактировалось Renigant 09.11.2019{, 12:00}, всего редактировалось 1 раз.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

PDM регулятор

#15

Сообщение Sancho » 09.11.2019{, 11:59}

Renigant писал(а):
09.11.2019{, 11:41}
Я в коде не силен, сейчас пересмотрел блок ещё раз, но привязку к пинам я увидел только в SetupSection.
Смотри в функциях :)
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

PDM регулятор

#16

Сообщение Renigant » 09.11.2019{, 12:40}

Renigant писал(а):
08.11.2019{, 11:22}
.
И вопрос подойдет ли этот блок для такой платы https://m.ru.aliexpress.com/item/328020 ... 33edXkInS6
А для этих модулей подойдёт?

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

PDM регулятор

#17

Сообщение Renigant » 02.12.2019{, 22:34}

Sancho, Возможно ли добавить в ваш блок "линию задержки-задержка (микросекунды)-выход" как в стандартном блоке скоростного счетчика?

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

PDM регулятор

#18

Сообщение Sancho » 03.12.2019{, 08:21}

Renigant писал(а):
02.12.2019{, 22:34}
Возможно ли добавить в ваш блок "линию задержки-задержка (микросекунды)-выход" как в стандартном блоке скоростного счетчика?
Renigant, зачем?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Renigant
Рядовой
Сообщения: 82
Зарегистрирован: 11.09.2015{, 12:21}
Репутация: 3

PDM регулятор

#19

Сообщение Renigant » 03.12.2019{, 09:43}

Sancho писал(а):
03.12.2019{, 08:21}
Renigant писал(а):
02.12.2019{, 22:34}
Sancho, Возможно ли добавить в ваш блок "линию задержки-задержка (микросекунды)-выход" как в стандартном блоке скоростного счетчика?
Renigant, зачем?
Очень хороший вопрос, это было написано ошибочно, сегодня провел тесты и убедился, что все работает без добавлений.
Но в ходе теста возникла другая ситуация, если использовать блок по умолчанию (пин 2 отслеживание "0", пин 6 управляет), то все работает но если изменить в блоке "pinMode(2, INPUT);" на "pinMode(19, INPUT);" то отслеживание "0" все равно происходит от пин 2. Как в таком случае быть?

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

PDM регулятор

#20

Сообщение Sancho » 03.12.2019{, 09:59}

переписать код, используя другой пин, поддерживающий прерывание.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Ответить

Вернуться в «ПИД регуляторы (PID), блоки для ШИМ»