ШИИМ 10 БИТ пользовательский блока на Си

Пользовательские блоки ПИД регуляторов, прочих регуляторов и для работы с ШИМ выходами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#1

Сообщение Слимпер » 07.07.2016{, 21:07}

Попалась мне на глаза интересная библиотека TimerOne, одна из функций возможность генерировать 10 Битный ШИМ с настраиваемым периодом.

Решил сделать блок:

Название :Блок ШИМ 10Бит

Разрядностью 10Бит (0-1023)
Период можно настраивать

Получилось два блока.
Описание:


PWM_CONST_(CODE)
СпойлерПоказать
Блок  ШИМ
Разрядностью 10Бит (0-1023)
Период можно настраивать
!!!!Возможны конфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)

Входа
PWM_1, PWM_2, PWM_3 - задается скважность ШИМ в виде значений 0-1023

Параметры
period – Период ШИМ в микросекундах
меньше 100 лучше не ставить
Верхний предел 8388480 (8,4секунды)

pin_1, pin_2, pin_3 - номер пина соответствующего входам PWM_1, PWM_2, PWM_3
Если вход не используется, то надо выставлять 0.
Возможно использовать для следующих пинов
Arduino Uno          9, 10
Arduino Leonardo     9, 10, 11
Arduino Mega          11, 12, 13

encoder - Совместно сблоком Энкодер_С
Сделал для возможности использовать ШИМ, при примении  блока Энкодер_С, в этом режиме параметр period неиспользуется
Период ШИМ будет равен значению  period из блока Энкодер_С

! Блок Энкодер_С должен размещятся в проекте раньше Блок ШИМ
PWM_REG_(CODE)
СпойлерПоказать
Блок ШИМ
Разрядностью 10Бит (0-1023)
Период можно настраивать
!!!!Возможны конфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)

Входа
PWM_1, PWM_2, PWM_3 - задается скважность ШИМ в виде значений 0-1023
period – Период ШИМ в микросекундах (если оставить пустым будет период 2000мкс)
Меньше 100 лучше не ставить (хотя это надо тестировать)
Верхний предел 8388480 (8,4секунды)

Параметры
pin_1, pin_2, pin_3 - номер пина соответствующего входам PWM_1, PWM_2, PWM_3
Если вход не используется, то надо выставлять 0.
Возможно использовать для следующих пинов
Arduino Uno              9, 10
Arduino Leonardo     9, 10, 11
Arduino Mega          11, 12, 13
Возможно использовать для следующих пинов
Arduino Uno                  9, 10
ArduinoLeonardo          9, 10, 11
ArduinoMega                11, 12, 13


!!!!Возможны конфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)

Еще два блока полный аналог предыдущих, только используется Timer3 (есть только в ArduinoLeonardo ArduinoMega)

PWM_CONST_T3
PWM_REG_T3-CODE


Возможно использовать для следующих пинов
Arduino Leonardo     5
Arduino Mega            2, 3, 5


Если у кого есть осциллограф (и не лень),  проверти правильность работы и минимальной возможный период.

Обновление

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

Актуальные версии блоков находятся ШИМ 10 БИТ с изменяемым периодом 

Все вопросы и предложения в эту тему.
Последний раз редактировалось Слимпер 12.07.2016{, 04:38}, всего редактировалось 1 раз.

Аватара пользователя
DerAlex
Лейтенант
Сообщения: 437
Зарегистрирован: 06.09.2015{, 08:39}
Репутация: 11
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#2

Сообщение DerAlex » 08.07.2016{, 04:02}

Выхода можно любые использовать?
аврора

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#3

Сообщение Слимпер » 08.07.2016{, 04:34}

DerAlex писал(а):Выхода можно любые использовать?
 
Слимпер писал(а):Возможно использовать для следующих пинов
Arduino Uno                  9, 10
Arduino Leonardo          9, 10, 11
Arduino Mega                11, 12, 13
Есть еще одна Библиотека TimerThree она задействует Timer3 ( есть Leonardo, Mega )
Если сделать блок на этой библиотеки то можно будет задействовать ШИМ на пинах:

Arduino Leonardo     5
Arduino Mega          2, 3, 5
Последний раз редактировалось Слимпер 08.07.2016{, 04:45}, всего редактировалось 1 раз.

Аватара пользователя
DerAlex
Лейтенант
Сообщения: 437
Зарегистрирован: 06.09.2015{, 08:39}
Репутация: 11
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#4

Сообщение DerAlex » 08.07.2016{, 05:26}

Период ШИМ общий для всех каналов ?Или можно для каждого канала отдельно выставить ?

Добавлено (08.07.2016, 05:26)
---------------------------------------------
Нужный блок , прямо скажем. А то вот как пришлось извращаться. Посмотрите тему =ПАДЕНИЕ ЧАСТОТЫ ГЕНЕРАТОРА=
аврора

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#5

Сообщение Слимпер » 08.07.2016{, 06:24}

DerAlex писал(а):Период ШИМ общий для всех каналов ?Или можно для каждого канала отдельно выставить ?
В описании библиотек прямо не сказано, но эксперименты показали что общий.

Но если сделать еще один блок на базе TimerThree  Timer3 ( есть Leonardo, Mega ) то можно будет сделать два независимых периода.
DerAlex писал(а):Нужный блок , прямо скажем. А то вот как пришлось извращаться. Посмотрите тему =ПАДЕНИЕ ЧАСТОТЫ ГЕНЕРАТОРА=
Кстати сейчас Период ШИМ настраивается один раз в параметрах  блока.
Надо будет вечером попробовать сделать вариант с с настройкой через вход.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#6

Сообщение Слимпер » 08.07.2016{, 18:56}

Слимпер писал(а):Кстати сейчас Период ШИМ настраивается один раз в параметрах  блока.Надо будет вечером попробовать сделать вариант с с настройкой через вход.
Сделал Вариант с заданием Периода по входу. То есть можно изменять во время работы программы.  Смотреть в первом сообщении

П.С. У кого есть возможность просьба протестировать правильность работы.
Последний раз редактировалось Слимпер 09.07.2016{, 16:41}, всего редактировалось 1 раз.

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

ШИИМ 10 БИТ пользовательский блока на Си

#7

Сообщение CraCk » 08.07.2016{, 19:04}

Нубский вопрос. А зачем ето нужно?

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#8

Сообщение Слимпер » 08.07.2016{, 19:33}

CraCk писал(а):Нубский вопрос. А зачем ето нужно?
Если вы про измени периода шим. Ну выше уже упоминали тему ПАДЕНИЕ ЧАСТОТЫ ГЕНЕРАТОРА, в ней как раз обсуждали подобную задачу.

А вообще стандартная частота ШИМ Arduino  500ГЦ, что далеко не всегда подходит.
Сам пробовал раньше регулировать обороты Компьютерного вентилятора 12В, регулировалось но вентилятор при этом пел (издавал противные звуки), по этому отказался от этой затеи.
А вот сейчас можно будет поднять частоту скажем до 5кГц, и думаю писка не будет.

Аватара пользователя
DerAlex
Лейтенант
Сообщения: 437
Зарегистрирован: 06.09.2015{, 08:39}
Репутация: 11
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#9

Сообщение DerAlex » 08.07.2016{, 19:47}

В теме ПАДЕНИЕ ЧАСТОТЫ ГЕНЕРАТОРА обсуждалась работа генератора в приборе проверки форсунок для автомобиля.Там как раз требовался генератор с независимой перестройкой частоты и скважности.

Добавлено (08.07.2016, 19:47)
---------------------------------------------
Без блока предложенного Слимпер, пришлось городить огород.
Использовалось два блока, блок генератора ,скоростной счетчик в режиме задержки и еще внешний триггер RS.Сейчас это возможно без излишних выкрутасов.
Последний раз редактировалось DerAlex 08.07.2016{, 19:48}, всего редактировалось 1 раз.
аврора

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

ШИИМ 10 БИТ пользовательский блока на Си

#10

Сообщение CraCk » 08.07.2016{, 21:02}

СПС за ответы. А уменьшать можно?

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#11

Сообщение Слимпер » 08.07.2016{, 21:13}

CraCk писал(а):СПС за ответы. А уменьшать можно?
Период ШИМ можно регулировать в пределах от 100мкс (может и меньше) до 8.38с
Если я не путаю с переводами, Частота получается от 10кГц до 0.12Гц
Последний раз редактировалось Слимпер 08.07.2016{, 21:14}, всего редактировалось 1 раз.

Аватара пользователя
DerAlex
Лейтенант
Сообщения: 437
Зарегистрирован: 06.09.2015{, 08:39}
Репутация: 11
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#12

Сообщение DerAlex » 10.07.2016{, 07:20}


Программа генератора с использованием блока ШИМ.
Вложения
5516497.png
аврора

Аватара пользователя
DerAlex
Лейтенант
Сообщения: 437
Зарегистрирован: 06.09.2015{, 08:39}
Репутация: 11
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#13

Сообщение DerAlex » 10.07.2016{, 07:29}

Вложения
4614169.jpg
аврора

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#14

Сообщение Слимпер » 10.07.2016{, 09:17}

DerAlex писал(а):Программа генератора с использованием блока ШИМ.
А осциллографом не проверяли, ШИМ правильный получатся? А то у меня нечем проверить .
Последний раз редактировалось Слимпер 10.07.2016{, 19:23}, всего редактировалось 1 раз.

Аватара пользователя
DerAlex
Лейтенант
Сообщения: 437
Зарегистрирован: 06.09.2015{, 08:39}
Репутация: 11
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#15

Сообщение DerAlex » 11.07.2016{, 07:29}

Пока не проверял.

Добавлено (11.07.2016, 07:29)
---------------------------------------------
На слух заметно, что только в крайнем положении движка переменного резистора СКВАЖНОСТЬ наиболее сильное изменение звучания.Вечером подключу осциллограф . погляжу в чем дело.
аврора

Электронщик
Рядовой
Сообщения: 22
Зарегистрирован: 29.03.2016{, 10:41}
Репутация: 0

ШИИМ 10 БИТ пользовательский блока на Си

#16

Сообщение Электронщик » 11.07.2016{, 14:05}

Слимпер писал(а):Если у кого есть осциллограф (и не лень),  проверти правильность работы и минимальной возможный период.
Слимпер, Вы гений! 
Было действительно лень, но попытался проверить этот блок и о чудо, он заработал!
Слимпер! писал(а):PWM_REG-CODE-.ubi(97Kb)
 Числа 5, 10, 25, 50, 100 и 200 подтверждаю, периоду в микросекундах соответствуют. Абсолютная погрешность менее 0,1 мкс.
Скважность равна 50% при числе 512.
Надо дальше поисследовать.
Мега 2560.
Последний раз редактировалось Электронщик 11.07.2016{, 14:11}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#17

Сообщение Слимпер » 11.07.2016{, 16:23}

Электронщик писал(а):Слимпер, Вы гений!
  Спасибо на добром слове, но я просто сделал блок на базе уже готовой библиотеке.

Добавлено (11.07.2016, 16:23)
---------------------------------------------
Еще два блока полный аналог предыдущих, только используется Timer3 (есть только в ArduinoLeonardo, ArduinoMega)

PWM_CONST_T3
PWM_REG_T3-CODE


Возможно использовать для следующих пинов
Arduino Leonardo     5
Arduino Mega            2, 3, 5


Ссылки в первом сообщении

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ШИИМ 10 БИТ пользовательский блока на Си

#18

Сообщение rw6cm » 11.07.2016{, 17:22}

Слимпер, Если не секрет, как вам удается редактировать свое первое сообщение в теме?
Win10-64, FLProg (portable)

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

ШИИМ 10 БИТ пользовательский блока на Си

#19

Сообщение Слимпер » 11.07.2016{, 19:15}

rw6cm писал(а):Слимпер, Если не секрет, как вам удается редактировать свое первое сообщение в теме?
А я сам не знаю, почему здесь пока получается, а других нет, то ли еще время не вышло с момента последнего редактирования (я его уже несколько раз правил).
А вообще то, надо наверное попросить по работе сайта, предложить возможность автору темы дать возможность редактировать перовое сообщение.

Электронщик
Рядовой
Сообщения: 22
Зарегистрирован: 29.03.2016{, 10:41}
Репутация: 0

ШИИМ 10 БИТ пользовательский блока на Си

#20

Сообщение Электронщик » 12.07.2016{, 16:11}

Период установил 5 мкс.
С входа PWM_1 на 11 ногу таймера вывел ШИМ= 512.
С входа PWM_2 на 12 ногу вывел ШИМ= 100.
Хотел посмотреть на положение фронтов двух сигналов относительно друг друга.
Картинку привести не могу, лень перетаскивать с осц-фа, но картина странная. Фронты импульсов не совпадают, ни какие. не понятно как таймер формирует эти импульсы.
Импульс ШИМ= 100 находится посередине импульса ШИМ= 512.
Поменял значение 512 на 1000, импульс ШИМ= 100 стоит посередине 1000-ного.
Поменял период с 5 на 100, картина не изменилась.
Задействовал дополнительно вход PWM_3 на 13 ногу и вывел ШИМ= 100.
Импульсы на 12 и 13 ногах совпадают полностью.
Поменял на входе PWM_3  ШИМ с 100 на 200, импульс ШИМ 100 расположился внутри интервала импульс ШИМ 200.
Т.о., импульсы с входов PWM_2 и PWM_3 располагаются посередине импульса с входа PWM_1.
Работает следующее правило: импульсы ШИМ располагаются симметрично относительно общей точки на оси времени, расположенной посередине длительности импульса, задаваемой  по входу PWM_1 .
Было интересно, как можно использовать Ардуину в среде FLProg для реализации импульсных многофазных приложений, пока не понятно.
Последний раз редактировалось Электронщик 12.07.2016{, 17:42}, всего редактировалось 1 раз.

Ответить

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