Уважаемые пользователи! Наш сайт и форум содержится на средства полученные от рекламы. Если вы хотите и дальше продолжать общаться, скачивать, и т.п. пожалуйста отключите блокировку рекламы для нашего сайта/форума. Мы не обязываем Вас переходить по рекламным ссылкам, просто она должна отображаться у вас в браузере. Реклама размещена ненавязчиво, сверху и снизу страницы, на прочтение основного материала никак не влияет! Спасибо за понимание!

PDM регулятор

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

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

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 КБ) 138 скачиваний
PDM_Brezenhem_v2.ubl
обновлено
(26.34 КБ) 228 скачиваний
Брезенхем_PPM_v2.flp
Тестовый пример
(111.12 КБ) 239 скачиваний
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

PDM регулятор

#21

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

Использую мегу пробовал менять на пин 3 и 19 оба поддерживают прерывание.
Вот добавил код и программу, желтым отметил, то что я изменил.
#include <CyberLib.h>

int input_1;
volatile int temp_01;
volatile int error_01;
volatile int iinnpp;
volatile bool takt_01;
int _gtv4;
String _stou1;
void setup()
{
Serial.begin(9600);
pinMode(19, INPUT);
attachInterrupt(0, detect_up, RISING);
D6_Out;
D6_Low;
}
void loop()
{




//Плата:1
_gtv4 = (map(( (analogRead (8))), (0), (1023), (0), (100)));

//Плата:2
input_1 = _gtv4;
// не доделано
if ( input_1 <0) input_1 =0;
if ( input_1 >100) input_1 =100;
iinnpp = input_1 ;


if (1){if(!(( (String(_gtv4, DEC)))==(_stou1))){Serial.println((String(_gtv4, DEC)));}} _stou1 = (String(_gtv4, DEC));




}
void detect_up()
{
if( takt_01 ){
temp_01 = iinnpp + error_01;
if (temp_01 < 50){
D6_Low;
error_01 = temp_01 ;
}
else {
D6_High;
error_01=temp_01-100;
}
}
takt_01 = !takt_01;
}
Брезенхем.flp
(68.21 КБ) 14 скачиваний

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

PDM регулятор

#22

Сообщение Sancho » 03.12.2019{, 10:58}

Renigant, Очень хороший букварь тут
В следующей строчке для 2560 нужно заменить для 19 пина ноль на ....
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

PDM регулятор

#23

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

Sancho писал(а):
03.12.2019{, 10:58}
Renigant, Очень хороший букварь тут
В следующей строчке для 2560 нужно заменить для 19 пина ноль на ....
Все отлично заработало, спасибо Вам большое.

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

PDM регулятор

#24

Сообщение Renigant » 12.12.2019{, 08:27}

10 дней гоняю ТЭН 5кВт с помощью PDM регулятора, мигания света не замечено(ну это наверное благодаря реконструкции электросети которую провели 2 года назад), помехи отсутствуют, электроника не сбоит. PDM регулятор использую на 80 из 100, что соответствует мощности в 4,5 кВт, автомат на 20 ампер не выбивает, семистор BTA80 греется до 60С без активного охлаждения.
Sancho, Столкнулся с проблемой, хотел подключить еще 2 тэна на другие фазы по такому же принципу,но столкнуля с проблемой, flprog говорит, что такой блок можно использовать только 1 в проекте. Скажите как-нибудь это можно исправить?

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

PDM регулятор

#25

Сообщение Sancho » 12.12.2019{, 08:36}

Renigant, встречный вопрос - это необходимо для разгрузки фазы, или это будут отдельные регуляторы?
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

PDM регулятор

#26

Сообщение Renigant » 12.12.2019{, 08:37}

Sancho писал(а):
12.12.2019{, 08:36}
Renigant, встречный вопрос - это необходимо для разгрузки фазы, или это будут отдельные регуляторы?
Это необходимо для разгрузки фазы.

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

PDM регулятор

#27

Сообщение Sancho » 12.12.2019{, 08:47}

Добавьте для управления всеми симисторами оптроны с детектором нуля и используйте один сигнал управления.

Отправлено спустя 2 минуты 19 секунд:
Для наглядности :)
СпойлерПоказать
3fasу_01.jpg
3fasу_01.jpg (56 КБ) 471 просмотр
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

PDM регулятор

#28

Сообщение Renigant » 12.12.2019{, 08:55}

Так и сделал 19 пин у меня отслеживает 0, а 11 управляет симистором. к 11 пину я подключил обе платы управления симистором и всё бы хорошо, но при значении где-то 40-60 тэны начинают работать практически на полную и вообще количество импульсов не соответствует установленным значениям на входе блока PDM.

Отправлено спустя 16 минут 27 секунд:
Sancho писал(а):
12.12.2019{, 08:49}
Для наглядности
Я так понимаю для этого необходимо что-то дописать в блоке? т.к мой вариант на двух других фазах открывает где попало, а не в 0.

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

PDM регулятор

#29

Сообщение Sancho » 12.12.2019{, 09:24}

Renigant,
Sancho писал(а):
12.12.2019{, 08:49}
для управления всеми симисторами оптроны с детектором нуля
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

PDM регулятор

#30

Сообщение Renigant » 12.12.2019{, 09:34}

У меня везде стоят платы https://ru.aliexpress.com/item/32802025 ... 3edXin7Neс детектором 0, но как их подвязать к Ардуино без добавления в проект ещё блоков pdm?

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

PDM регулятор

#31

Сообщение Sancho » 12.12.2019{, 11:47}

Renigant, Заменить оптроны управления симисторами на другие, с ZERO-CROSS, например MOC3063
Детектора нуля для мк хватит одного.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

PDM регулятор

#32

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

Sancho писал(а):
12.12.2019{, 11:47}
Renigant, Заменить оптроны управления симисторами на другие, с ZERO-CROSS, например MOC3063
Детектора нуля для мк хватит одного.
Sancho, Я так понял с первой платы отслеживаю 0 (у меня пин19), на других платах я меняю оптроны и подаю сигнал на управление PDM (у меня пин11). Две другие платы будут отслеживать 0 сами.

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

PDM регулятор

#33

Сообщение Sancho » 12.12.2019{, 12:16}

Renigant писал(а):
12.12.2019{, 12:12}
Две другие платы будут отслеживать 0 сами.
Сами управляющие оптосимисторы будут разрешать включаться только когда нужно. Детекторы перехода сетевого напряжения через ноль, резисторы+диодный мост+сам оптрон, на них задействованы не будут.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

PDM регулятор

#34

Сообщение Renigant » 12.12.2019{, 12:22}

А для чего тогда мы отслеживаем ноль, если можно только подавать сигнал на включение?

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

PDM регулятор

#35

Сообщение Sancho » 12.12.2019{, 13:26}

Renigant, Я столько не напишу, уж звиняйте. Картинка в посте 27. Один сигнал - достаточно для конкретного случая.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

PDM регулятор

#36

Сообщение Renigant » 12.12.2019{, 13:46}

Sancho, Спасибо, буду пробовать.

Akina
Рядовой
Сообщения: 2
Зарегистрирован: 27.11.2018{, 01:31}
Репутация: 0
Имя: Андрей

PDM регулятор

#37

Сообщение Akina » 27.01.2020{, 23:24}

Sancho писал(а):
13.03.2018{, 10:17}
Необходим детектор нуля, пин 2, выходной оптрон по пину 6 может быть с zero cross, может без.
Но в файле PDM_Brezenhem_v2.ubl нет упоминаний о прерываниях или о втором пине, правильно ли я понял что для второй версии детектор нуля не нужен? А нужно использовать оптопару с zero cross.

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

PDM регулятор

#38

Сообщение Sancho » 28.01.2020{, 08:39}

Akina, О каком конкретно блоке идёт речь?
Для переменки нужен детектор нуля, по нему идёт подсчёт периодов.
Для однофазной нагрузки тип оптрона управления симистором не важен.
Для трёхфазной - наличие zero-cross обязательно. Детектор нуля - только на одной фазе.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Akina
Рядовой
Сообщения: 2
Зарегистрирован: 27.11.2018{, 01:31}
Репутация: 0
Имя: Андрей

PDM регулятор

#39

Сообщение Akina » 28.01.2020{, 23:16}

Akina писал(а):
27.01.2020{, 23:24}
нуля
Речь идёт о блоке PDM_Brezenhem v2 который у вас во вложениях. В первом посте

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

PDM регулятор

#40

Сообщение Sancho » 29.01.2020{, 10:13}

Akina писал(а):
28.01.2020{, 23:16}
Речь идёт о блоке PDM_Brezenhem v2 который у вас во вложениях. В первом посте
Без детектора - это для постоянки.
Для переменки - написано "Для переменки".
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость