ШИИМ 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 раз.

SVS55
Сержант
Сообщения: 109
Зарегистрирован: 11.12.2016{, 13:56}
Репутация: 1
Откуда: Омская область г.Тара
Имя: Виталий

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

#21

Сообщение SVS55 » 06.10.2017{, 09:20}

Слимпер, Не могли бы Вы немного добавить входов выходов в  :Блок ШИМ 10Бит, PWM REG T1, а точнее вход для включения и выключения ШИМ и выход интеджер
Новичок

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

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

#22

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

SVS55 писал(а):Слимпер, Не могли бы Вы немного добавить входов выходов в  :Блок ШИМ 10Бит, PWM REG T1, а точнее вход для включения и выключения ШИМ и выход интеджер
А зачем входы выключения, подайте вход  PWM_1 0 и не будет импульсов.
Про выход не понял.

SVS55
Сержант
Сообщения: 109
Зарегистрирован: 11.12.2016{, 13:56}
Репутация: 1
Откуда: Омская область г.Тара
Имя: Виталий

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

#23

Сообщение SVS55 » 06.10.2017{, 15:06}

av, Я вчера пробовал с ним разобраться частота доходила до 4 кГц
Новичок

SVS55
Сержант
Сообщения: 109
Зарегистрирован: 11.12.2016{, 13:56}
Репутация: 1
Откуда: Омская область г.Тара
Имя: Виталий

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

#24

Сообщение SVS55 » 06.10.2017{, 15:24}

av, В нагрузке ШИМ ничего пока нет кроме осцила. при значении в периоде 50 выдает 20кГц
Вложения
12332.flp
(476.62 КБ) 120 скачиваний
Последний раз редактировалось SVS55 06.10.2017{, 15:34}, всего редактировалось 1 раз.
Новичок

SVS55
Сержант
Сообщения: 109
Зарегистрирован: 11.12.2016{, 13:56}
Репутация: 1
Откуда: Омская область г.Тара
Имя: Виталий

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

#25

Сообщение SVS55 » 06.10.2017{, 15:47}

период 40 - частота - 25кГц  скважность 50% 512
период 30 - частота - 33кГц
период 20 - частота - 50кГц
период 10 - частота - 100кГц
период  5  - частота - 200кГц
период  1  - частота -  1мГц
Новичок

SVS55
Сержант
Сообщения: 109
Зарегистрирован: 11.12.2016{, 13:56}
Репутация: 1
Откуда: Омская область г.Тара
Имя: Виталий

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

#26

Сообщение SVS55 » 06.10.2017{, 16:02}

Сейчас повесил нагрузку НСМ -? пищалку пищит естественно при изменении периода. осцилки смотрю Hantek DSO5202P
Новичок

SVS55
Сержант
Сообщения: 109
Зарегистрирован: 11.12.2016{, 13:56}
Репутация: 1
Откуда: Омская область г.Тара
Имя: Виталий

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

#27

Сообщение SVS55 » 06.10.2017{, 16:13}

av, Автор рекомендует ниже 100 период не опускать  (хотя это надо тестировать)

Добавлено (06.10.2017, 16:13)
---------------------------------------------
av писал(а):Слимпер   с какой максимальной частотой ШИМ может работать данный блок ?
я проверил частоту.
Новичок

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

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

#28

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

av писал(а):Уважаемый Слимпер  могли бы вы ткнуть носом в указанный блок "Энкодер_С". Поиск по сайту результатов не дал. Заранее благодарен.
Когда то выкладывал. Вот  еще раз ссылка

Аватара пользователя
ElectroMechaniC
Сержант
Сообщения: 230
Зарегистрирован: 21.09.2016{, 06:50}
Репутация: 1
Откуда: Донецк
Имя: Юрий

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

#29

Сообщение ElectroMechaniC » 12.02.2018{, 20:45}

Перезалейте блок с настраиваемым периодом пожалуйста! Страница для скачивания не доступна
:newrus: Все в руках человека. Поэтому всегда мойте руки перед и зад! :victory:
:smile225: :smile469: :smile427:

Аватара пользователя
prmres
Рядовой
Сообщения: 8
Зарегистрирован: 30.01.2018{, 20:19}
Репутация: 0
Откуда: Курская обл.
Имя: Prmres

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

#30

Сообщение prmres » 22.02.2018{, 01:54}

не только лишь все!

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

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

#31

Сообщение Ivan_Kornege » 22.02.2018{, 08:28}

Актуальные версии блоков находятся ШИМ 10 БИТ с изменяемым периодом
Ссылка Рабочая. Модераторы поправили. (модератор :wizard: )

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

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

#32

Сообщение Di123 » 23.07.2020{, 15:20}

в описании сказано что если выход неиспользуется допустим на нано я взял пвм1 - 9 а на остальные два поставил 0
то 10 вывод мне нельзя уже использовать ?
или для простейших целей можно допустим выключатель поставить на него ?

Отправлено спустя 5 минут 35 секунд:
и не понятно
два шима одновременно можно использовать ?

допустим на нано 9 и 10

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

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

#33

Сообщение Di123 » 27.08.2020{, 14:10}

можете написать блок шим на втором таймере ?
3 и 11
интересует исключительно возможность выставлять самому частоту в данном случае 1 гц

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

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

#34

Сообщение Di123 » 19.11.2020{, 07:42}

ваш блок а именно PWM_CONST_T1 не настраивается в версии 7,1,1 тоесть он ничего не сохраняет из периода
помогает только если в версии 6,3,1 выставить в вашем блоке нужные настройки и скопировать блок в версию 7,1,1 тогда настройки он перетаскивает с собой

как вариант лечение проблемы

Аватара пользователя
RedSky
Лейтенант
Сообщения: 575
Зарегистрирован: 19.12.2016{, 20:07}
Репутация: 72
Откуда: Днепропетровск
Имя: Алексей

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

#35

Сообщение RedSky » 19.11.2020{, 08:25}

Di123 писал(а):
19.11.2020{, 07:42}
не настраивается в версии 7,1,1
Когда меняете значение нужно Enter нажать, не нужно в 6й версии менять. А вот отредактировать может не получится - редактор не даёт функцию вставить.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

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

#36

Сообщение Di123 » 19.11.2020{, 08:39}

действительно
а я галочку подтвердить нажимал
видимо косяк 7 версии раз галочка не работает

Sergey1982
Рядовой
Сообщения: 4
Зарегистрирован: 19.07.2022{, 12:41}
Репутация: 0
Имя: Сергей

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

#37

Сообщение Sergey1982 » 22.07.2022{, 23:05}

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

VNL64T
Рядовой
Сообщения: 37
Зарегистрирован: 22.01.2024{, 05:37}
Репутация: 3
Имя: Алекс

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

#38

Сообщение VNL64T » 24.01.2024{, 00:11}

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

Код: Выделить всё

#include "flprogUtilites.h"
#include <TimerOne.h>
unsigned long period_75068646_1;
int PWM_1_75068646_1;
int PWM_2_75068646_1;
int PWM_3_75068646_1;
boolean flag_75068646_1= false;
unsigned int P_75068646_1=2000;
int S1_75068646_1=0;
int S2_75068646_1=0;
int S3_75068646_1=0;
void setup()
{
    Timer1.initialize(); // инициализировать timer1
    Timer1.setPeriod(P_75068646_1);
    if(9!=0)
    {
          	Timer1.pwm(9 , 0); // задать шим сигнал на выводе pin, коэффициент заполнения 0%
    }
    if(0!=0)
    {
          	Timer1.pwm(0 , 0); // задать шим сигнал на выводе pin, коэффициент заполнения 0%
    }
    if(0!=0)
    {
          	Timer1.pwm(0 , 0); // задать шим сигнал на выводе pin, коэффициент заполнения 0%
    }
}
void loop()
{
    //Плата:1
    period_75068646_1 = 0;
    PWM_1_75068646_1 = 0;
    PWM_2_75068646_1 = 0;
    PWM_3_75068646_1 = 0;
    if ((period_75068646_1!=P_75068646_1)&&(period_75068646_1>0))
    {
        	Timer1.setPeriod(period_75068646_1);
        	flag_75068646_1 = true;
    }
    if(9!=0)
    {
        	if(PWM_1_75068646_1!= S1_75068646_1||flag_75068646_1==true)
        {
            Timer1.setPwmDuty(9 ,  PWM_1_75068646_1);
        }
    }
    if(0!=0)
    {
        	if(PWM_2_75068646_1!= S2_75068646_1 ||flag_75068646_1==true)
        {
            Timer1.setPwmDuty(0 ,  PWM_2_75068646_1);
        }
    }
    if(0!=0)
    {
        	if(PWM_3_75068646_1!= S3_75068646_1 ||flag_75068646_1==true)
        {
            Timer1.setPwmDuty(0 ,  PWM_3_75068646_1);
        }
    }
    S1_75068646_1= PWM_1_75068646_1;
    S2_75068646_1= PWM_2_75068646_1;
    S3_75068646_1= PWM_3_75068646_1;
    if (period_75068646_1>0)
    {
        P_75068646_1=period_75068646_1;
    }
}
Отправлено спустя 10 минут 17 секунд:
Слимпер, Добрый вечер..

VNL64T
Рядовой
Сообщения: 37
Зарегистрирован: 22.01.2024{, 05:37}
Репутация: 3
Имя: Алекс

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

#39

Сообщение VNL64T » 28.01.2024{, 14:07}

Запустил.,на 328p. работает..
Что интересно как самостоятельный блок т.е. без управления из программы а с прописанными константами, на выходе довольно точно соблюдается период и заполнение, при попытке управления из схемы вся точность улетучивается..

Отправлено спустя 2 минуты 49 секунд:
А и сильно мешает что при указании период 0 по умолчанию 2000.., решается сбросом в 0 заполнения но лишний блок на схеме если требуется работа с фиксированной константой заполнения..

ecoins
Полковник
Сообщения: 3043
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 462
Откуда: Шатура
Имя: Энвер

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

#40

Сообщение ecoins » 28.01.2024{, 21:09}

VNL64T писал(а):
28.01.2024{, 14:10}
Запустил.,на 328p. работает..
Что интересно как самостоятельный блок т.е. без управления из программы а с прописанными константами, на выходе довольно точно соблюдается период и заполнение, при попытке управления из схемы вся точность улетучивается..

Отправлено спустя 2 минуты 49 секунд:
А и сильно мешает что при указании период 0 по умолчанию 2000.., решается сбросом в 0 заполнения но лишний блок на схеме если требуется работа с фиксированной константой заполнения..
В целом плохая идея, особенно AVR. При росте проекта начнутся прболемы.
Переходите на другие платформы.
На RP2040 на втором ядре совсем хорошо такие задумки получаются. Недавно для одной локальной задачи генерил необходимую последовательность с частотой 300кгц. ШИМ наверное с частотой 150-200кГц получится.

Ответить

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