Генератор ШИМ сигнала с изменением скважности
Таймеры-счетчики
Таймером называется средство микропроцессора, служащее для измерения времени и реализации задержек. Основой таймера служит суммирующий счетчик, который считает количество импульсов генератора тактовой частоты. Для таймера могут быть указаны:
- разрядость таймера;
- коэффициент предварительного деления;
- диапазон изменения счетного регистра;
- режим работы.
Разрядность таймера представляет собой разрядность двоичного счетчика, используемого для его реализации и определяет верхнюю допустимую границу счетного регистра. Например, для 8-разрядного таймера верхняя граница счетного регистра будет 2 8 -1 = 255.
Предварительный делитель – делитель частоты тактового сигнала, работающий как один или несколько последовательно соединенных T-триггеров. Таймер изменяет свое значение на 1 каждые n сигналов тактового импульса. n называют коэффициентом предварительного деления .
Зная частоту тактового генератора fosc и коэффициент предварительного деления Kpre, легко определить частоту таймера по формуле:
Время одного тика таймера соответственно будет
Полное время счета таймера (время перебора всех допустимых значений двоичного счетчика) определится как
Например, если требуется реализовать задержку 1с на 8-разрядном таймере с коэффициентом предварительного деления Kpre=1 и тактовой частотой fosc=8 МГц, имеем
tic = 0,125 мкс;
Tcount = 0,125*2 8 = 32 мкс
1с/32мкс = 31250 повторений
Широтно-импульсная модуляция
Широтно-импульсная модуляция (ШИМ) – импульсный сигнал постоянной частоты и переменной скважности.
Скважность есть отношения периода следования импульса к длительности импульса.
С помощью задания скважности (длительности импульсов) можно менять среднее напряжение на выходе ШИМ.
Обратная величина, то есть отношение длительности импульса к периоду, называется коэффициентом заполнения .
Разрядностью ШИМ называется разрядность таймера, используемого для формирования ШИМ-сигнала.
Существуют два основных режима работы ШИМ:
- быстрый ШИМ;
- фазовый ШИМ.
Быстрый ШИМ
Период ШИМ определяется максимальным значением, до которого считает счетчик. В этот момент ШИМ-сигнал устанавливается в «1». При достижении счетчиком значения, поданного на второй вход цифрового компаратора, осуществляется сброс выходного ШИМ-сигнала.
Фазовый ШИМ
В данном режиме счетчик работает как суммирующий и считает от 0 до максимального значения, а при достижении максимального значения работает как вычитающий, считая до 0.
При совпадении значения счетчика с некоторым установленным значением, происходит переключение выхода ШИМ.
Частотно-импульсная модуляция — сигнал переменной частоты и постоянной скважности, равной 2. При таком виде модуляции изменяется период сигнала, а длительность импульса всегда составляет половину периода.
Широтно-импульсная модуляция (ШИМ). Аналоговая и цифровая
Принцип ШИМ – широтно-импульсная модуляция заключается в изменении ширины импульса при постоянстве частоты следования импульса. Амплитуда импульсов при этом неизменна.
Широтно-импульсное регулирование находит применение там, где требуется регулировать подаваемую к нагрузке мощность. Например, в схемах управления электродвигателями постоянного тока, в импульсных преобразователях, для регулирования яркости светодиодных светильников, экранов ЖК-мониторов, дисплеев в смартфонах и планшетах и т.п.
Большинство вторичных источников питания электронных устройств в настоящее время строятся на основе импульсных преобразователей, применяется широтно-импульсная модуляция и в усилителях низкой (звуковой) частоты класса D, сварочных аппаратах, устройствах зарядки автомобильных аккумуляторов, инверторах и пр. ШИМ позволяет повысить коэффициент полезного действия (КПД) вторичных источников питания в сравнении с низким КПД аналоговых устройств.
Широтно-импульсная модуляция бывает аналоговой и цифровой.
Аналоговая широтно-импульсная модуляция
Как уже упоминалось выше, частота сигнала и его амплитуда при ШИМ всегда постоянны. Один из важнейших параметров сигнала ШИМ – это коэффициент заполнения, равный отношению длительности импульса t к периоду импульса T. D = t/T. Так, если имеем сигнал ШИМ с длительностью импульса 300 мкс и периодом импульса 1000 мкс, коэффициент заполнения составит 300/1000 = 0,3. Коэффициент заполнения также выражается в процентах, для чего коэффициент заполнения умножается на 100%. По примеру выше процентный коэффициент заполнения составляет 0,3 х 100% = 30%.
Скважность импульса – это отношение периода импульсов к их длительности, т.е. величина, обратная коэффициенту заполнения. S = T/t.
Частота сигнала определяется как величина, обратная периоду импульса, и представляет собой количество полных импульсов за 1 секунду. Для примера выше при периоде 1000 мкс = 0,001 с, частота составляет F = 1/0,001 – 1000 (Гц).
Смысл ШИМ заключается в регулировании среднего значения напряжения путем изменения коэффициента заполнения. Среднее значение напряжения равно произведению коэффициента заполнения и амплитуды напряжения. Так, при коэффициенте заполнения 0,3 и амплитуде напряжения 12 В среднее значение напряжения составит 0,3 х 12 = 3,6 (В). При изменении коэффициента заполнения в теоретически возможных пределах от 0% до 100% напряжение будет изменяться от 0 до 12 В, т.е. Широтно-импульсная модуляция позволяет регулировать напряжение в пределах от 0 до амплитуды сигнала. Что и используется для регулирования скорости вращения электродвигателя постоянного тока или яркости свечения светильника.
Сигнал ШИМ формируется микроконтроллером или аналоговой схемой. Этот сигнал обычно управляет мощной нагрузкой, подключаемой к источнику питания через ключевую схему на биполярном или полевом транзисторе. В ключевом режиме полупроводниковый прибор либо разомкнут, либо замкнут, промежуточное состояние исключается. В обоих случаях на ключе рассеивается ничтожная тепловая мощность. Поскольку эта мощность равна произведению тока через ключ на падение напряжения на нем, а в первом случае к нулю близок ток через ключ, а во втором напряжение.
В переходных состояниях на ключе присутствует значительное напряжение с прохождением значительного тока, т.е. значительна и рассеиваемая тепловая мощность. Поэтому в качестве ключа необходимо применение малоинерционных полупроводниковых приборов с быстрым временем переключения, порядка десятков наносекунд.
Если ключевая схема управляет светодиодом, то при малой частоте сигнала светодиод будет мигать в такт с изменением напряжения сигнала ШИМ. При частоте сигнала выше 50 Гц мигания сливаются вследствие инерции человеческого зрения. Общая яркость свечения светодиода начинает зависеть от коэффициента заполнения – чем ниже коэффициент заполнения, тем слабее светится светодиод.
При управлении посредством ШИМ скорости вращения двигателя постоянного тока частота ШИМ должна быть очень высокой, и лежать за пределами слышимых звуковых частот, т.е. превышать 15-20 кГц, в противном случае двигатель будет «звучать», издавая раздражающий слух писк с частотой ШИМ. От частоты зависит и стабильность работы двигателя. Низкочастотный сигнал ШИМ с невысоким коэффициентом заполнения приведет к нестабильной работе двигателя и даже возможной его остановке.
Тем самым, при управлении двигателем желательно повышать частоту сигнала ШИМ, но и здесь существует предел, определяемый инерционными свойствами полупроводникового ключа. Если ключ будет переключаться с запаздываниями, схема управления начнет работать с ошибками. Чтобы избежать потерь энергии и добиться высокого коэффициента полезного действия импульсного преобразователя, полупроводниковый ключ должен обладать высоким быстродействием и низким сопротивлением проводимости.
Сигнал с выхода ШИМ можно также усреднять посредством простейшего фильтра низких частот. Иногда можно обойтись и без этого, поскольку электродвигатель обладает определенной электрической индуктивностью и механической инерцией. Сглаживание сигналов ШИМ происходит естественным путем в том случае, когда частота ШИМ превосходит время реакции регулируемого устройства.
Реализовать ШИМ можно посредством компаратора с двумя входами, на один из которых подается периодический пилообразный или треугольный сигнал от вспомогательного генератора, а на другой модулирующий сигнал управления. Длительность положительной части импульса ШИМ определяется временем, в течение которого уровень управляющего сигнала, подаваемого на один вход компаратора, превышает уровень сигнала вспомогательного генератора, подаваемого на другой вход компаратора.
При напряжении вспомогательного генератора выше напряжения управляющего сигнала на выходе компаратора будет отрицательная часть импульса.
Коэффициент заполнения периодических прямоугольных сигналов на выходе компаратора, а тем самым и среднее напряжение регулятора, зависит от уровня модулирующего сигнала, а частота определяется частотой сигнала вспомогательного генератора.
Цифровая широтно-импульсная модуляция
Существует разновидность ШИМ, называемая цифровой ШИМ. В этом случае период сигнала заполняется прямоугольными подымпульсами, и регулируется уже количество подымпульсов в периоде, что и определяет среднюю величину сигнала за период.
В цифровой ШИМ заполняющие период подымпульсы (или «единички») могут стоять в любом месте периода. Среднее значение напряжения за период определяется только их количеством, при этом подымпульсы могут следовать один за другим и сливаться. Отдельно стоящие подымпульсы приводят к ужесточению режима работы ключа.
В качестве источника сигнала цифровой ШИМ можно использовать COM-порт компьютера с 10-битовым сигналом на выходе. С учетом 8 информационных битов и 2 битов старт/стоп, в сигнале COM-порта присутствует от 1 до 9 «единичек», что позволяет регулировать напряжение в пределах 10-90% напряжения питания с шагом в 10%.
Генератор с регулируемой частотой и скважностью
. Применить данный регулируемый генератор импульсов возможно при самых различных видах работ по настройке узлов и схем электронной аппаратуры. Проверка схем импульсных источников питания, оценка параметров УНЧ при прохождении прямоугольного сигнала, цифровые схемы. Возможно настраивать электронные музыкальные инструменты, точно задавая частоту нот. Частота задаётся с точностью до 4-х знаков.
Схема регулируемого генератора импульсов
Работа генератора
. В обычном режиме отображается либо частота, либо коэффициент, разряды при этом не мигают, коррекция отключена.
. Если отображена частота, то для отображения коэффициента нужно нажать одну из кнопок Кзап+ или Кзап-. Произойдёт переход к показаниям коэффициента с выводом на пол/секунды подсказки “PULS”.
. Если отображается коэффициент, то переход к отображению частоты произойдёт по нажатию одной из кнопок коррекции частоты Fosc+ или Fosc-.
Регулировка частоты выходного сигнала
Регулировка коэффициента заполнения импульсом
(скважности)
. Для коррекции коэффициента заполнения нажимаются кнопки Кзап+ Кзап- в режиме отображения коэффициента. При этом после вывода подсказки “PULS” два разряда коэффициента мигают с частотой 2 герца – доступна коррекция процента заполнения импульсного сигнала.
. При нажатии кнопок Fosc+ Fosc- в режиме коррекции коэффициента происходит переход к отображению текущей частоты.
. Если в режиме коррекции ни одна из кнопок не нажимается дольше 10 секунд – происходит автоматический переход к режиму отображения корректируемых показаний – мигание отключается.
. При выставленной нулевой частоте (на индикаторе все нули) генератор отключен, на выходе RB3 выставлен низкий логический уровень.
. Изменение рабочей частоты на выходе прибора во время коррекции происходит после отпускания кнопки. На время пересчёта и смены частоты выходной сигнал обнуляется (примерно на 1 миллисекунду).
. Прошивку микроконтроллера для данной схемы можно приобрести у автора, при условии, что Вы обязуетесь не распространять её через интернет и не передавать кому-либо ещё. Стоимость прошивки 350 рублей. Оплата через Яндекс-деньги.
Автор конструкции
Виталий Антонов
Челябинск
Email указан на схеме
Генерируем ШИМ на микроконтроллере STM32F100 для полумостового преобразователя напряжения.
Широтно-импульсная модуляция (ШИМ, англ. pulse-width modulation (PWM)) — процесс управления мощностью, подводимой к нагрузке, путём изменения скважности импульсов, при постоянной частоте
В микроконтроллерах stm ШИМ можно генерировать несколькими способами. Один из них программный — подача нуля и единицы на логический вывод в нужное время, и аппаратный — используя один из таймеров контроллера.
В данной заметке рассмотрим второй способ.
Здесь как и везде для инициализации периферии я предпочитаю использовать STM32 Standard Peripheral Libraries, почему я так делаю — скорость при инициализации не нужна, а код получается максимально информативным (но это мои заморочки, можете делать по другому).
Для генерации будем использовать таймер 1 ( TIM1 )
А теперь по пунктам, что нам нужно сделать.
- инициализировать все необходимые компоненты микроконтроллера:
- тактовый генератор
- ножки ввода вывода
- таймер
- запустить таймер
Установка настроек тактирования ядра и периферии микроконтроллера производится с помощью функций драйвера RCC (файлы stm32f10x_rcc.c и stm32f10x_rcc.h )
Так как мы используем внешний кварц 8 МГц без PLL необходимо настроить работу тактового генератора от него и выключить PLL ку, за что отвечают строчки.
лучше понять систему тактирования позволит скриншот из утилиты STM32CubeMX:
Теперь необходимо разобраться какие нам нужны выводы для нашего ШИМ. И здесь весьма полезной окажется также самая программа.
Я выбрал два канала ШИМ — так как собирался использовать его в качестве управляющего сигнала для преобразователя, что то вроде этого (только здесь мостовая схема):
Схему объяснять не буду, так как она совершенно не связана с данной программой — это другое устройство, сходство лишь в двух каналах ШИМ.
Инициализируем наши ножки (все функции и структуры находятся в файле stm32f10x_gpio.h ) :
Сначала, для уменьшения энергопотребления настраиваем все выводы на вход, а затем необходимые выводы настраиваем на альтернативную функцию.
Теперь самое интересное — настройка таймера ( stm32f10x_tim.h ):
Что бы понять что здесь происходит необходимо приложить небольшие усилия. Сначала инициализируется счетчик таймера, а затем два канала сравнения.
Рассмотрим структуру TIM_TimeBaseStructure :
Как выбираются данные значение:
Допустим, мне необходимо получить частоту следования импульсов равную 100 кГц, то есть мне нужно тактовую частоту разделить на какое то число и получить необходимую частоту.
В данном случае частота 8 000 000 Гц, а необходимо 100 000 Гц, то есть наш делитель будет
8 000 000 / 100 000 = 800
Значит в период необходимо записать значение 800 — 1 (от 0 до 799 как раз 800 отсчётов).
TIM_Prescaler и TIM_ClockDivision устанавливаем в значение 1, так как больше делить нашу частоту нет необходимости.
Из интересного — это TIM_CounterMode , — указывает как необходимо считать такты, для понимания необходимо заглянуть в даташит.
В моем случае используется TIM_CounterMode_CenterAligned1 , в данном случае это удобно — так как собирают использовать deadtime, так называемое мертвое время между включениями транзисторов, для исключения варианта когда один транзистор еще не закрылся, а второй уже открывается, так я ещё хочу и иметь возможность менять это время, но это тема другой дискуссии, здесь мы лишь настраиваем ШИМ. При чем частота при TIM_CounterMode_CenterAligned1 будет уже не 100, а 50 кГц.
Теперь стоит пояснить про поля структуры TIM_OCInitStructure :
Вот так будет выглядеть ШИМ (извиняюсь, что не в масштабе), тут сразу видно как будет переключаться вывод при настройке TIM_OCMode в значение TIM_OCMode_PWM1 или в значение TIM_OCMode_PWM2 .
В итоге у нас должен будет получиться ШИМ с заполнением:
- 100% * (800 — 60) / 800 = 90 %
- 100% * 50 / 800 = 6,25 %
Разница вычислений объясняется картинкой выше.
Строчка TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); указывает, что установка новых значений в регистр сравнения будет происходить только в момент обновления счетчика, что весьма важно при генерации сигнала для управления преобразователем.
Теперь в основной программе осталось вызвать по очереди все эти функции и запустить таймер командой:
А для изменения процента заполнения можно использовать прямую запись в регистр сравнения, что значительно быстрее.
Базовая комплектация
цифровых генераторов ZET 7060-G
В базовый комплект поставки генераторов входит:
- цифровой генератор ZET 7060-G;
- панель установочная на DIN рейку для пластиковых модулей 71×39;
- комплект эксплуатационной документации.
Цифровые генераторы соответствуют требованиям Директивы 2011/65/EU (ROHS, ROHS II) об ограничении использования опасных веществ (Pb, Hg, Cd, Cr(VI)) в электрическом и электронном оборудовании и изготавливаются по бессвинцовой технологии, в соответствии с требованиями Европейского Сообщества
Управление сервоприводом SG90 без микроконтроллера
Попался под руку популярный недорогой сервопривод SG90. И задумалось управлять им, но без микроконтроллера. В этой статье я изложу ход мыслей разработчика при реализации одного из вариантов решения.
Кому интересно, прошу под кат.
Надо управлять сервоприводом, но без микроконтроллера.
Знания
Всем известно, что опыт и знания помогают творить и находить решения. На страницах Гиктаймса немало примеров использования сервопривода с применением контроллеров. В них подробно рассказано про систему управления сервоприводом. Примем этот опыт других разработчиков за знания необходимые нам для решения задачи. Сервопривод SG90 управляется ШИМ сигналом, параметры которого определяют положение ротора. Период ШИМ около 20 мС, длительность сигнала управления от 500 до 2100 мкС.
Задача
Идея и знания порождают задачу, которую необходимо решить. Сформулируем задачу для воплощения идеи. Это что-то вроде Технического Задания. Кажется, все просто, надо взять генератор импульсов с изменяемой скважностью, подключить питание к сервоприводу, а с генератора подать управляющий сигнал. Особо отметим, что в требованиях есть изменения скважности — то есть должны быть органы управления или пользовательский интерфейс.
Реализация
Вот тут и начинаются муки творчества: что взять и где взять? Можно найти готовый лабораторный импульсный генератор, например Г5-54 с ручками, кнопками, выставить нужные параметры, подключить генератор к сервоприводу. Однако это громоздко и не все могут позволить себе такую роскошь. Поэтому разработчики, опираясь на свой опыт и знания, пытаются совместить желание (идею-задачу) и возможности (материальные и творческие) для реализации задачи. Материальные возможности — это та “жаба”“А сколько и чего я хочу потратить на реализацию идеи?” Творческие возможности — это, “посмотрю-ка я, что у меня уже есть”. Это не обязательно какие-то материальные ценности, а опыт и знания предыдущих разработок, которые можно приспособить под реализацию. Также не лишним будет поискать (погуглить), что кто-то уже реализовывал что-то подобное. Для сокращения вариантов решения необходимо самому добавлять дополнительные требования, ограничивающие фантазии реализации. Например, добавим к требованиям еще одно условие, пусть это будет материальное ограничение, реализация должна быть недорогой.
Поиск альтернатив
Воспользовавшись интернетом, поищем варианты, которые предлагает СЕТЬ. Зададим в поиске: “генератор прямоугольных импульсов с переменной скважностью”. Получим очень много вариантов, как с применением интегральных таймеров NE555 (отечественный аналог КР1006ВИ1), так и на логических микросхемах. Из всего разнообразия я выбрал вариант генератора на инверторе с триггером Шмитта на входе. Во-первых, он самый простой, во-вторых, требует минимум деталей и самое интересное использует единственный логический элемент из шести, если, например, использовать микросхему 74HC14.
Схема такого генератора выглядит так:
Немного теории
Теория гласит, что частота такого генератора равна f = 1/T = 1/(0.8*R*C). Для получения требуемой частоты требуется выбрать номинал одного из элементов, задающих частоту. Так как логический элемент выполнен по технологии КМОП, то имеет большое входное сопротивление, поэтому можно применять элементы задающие небольшие рабочие токи. Выберем емкость С1 из ряда распространенных номиналов, например 0.47 мкФ. Тогда для получения требуемой частоты (50Гц) резистор должен быть приблизительно 53 кОм, но такого резистора в стандартном ряду нет, поэтому выберем 51 кОм.
На выходе такого генератора формируется сигнал близкий к меандру, поэтому нам необходимо скорректировать схему таким образом, чтобы она удовлетворяла требованиям задания. Для получения регулируемой длительности импульса на выходе необходимо изменить режим перезарядки конденсатора от высокого уровня на выходе, а именно, сократить время перезарядки. Для этого добавим в схему еще два элемента: диод и переменный резистор. Подойдет любой маломощный импульсный диод.
Тогда схема примет следующий вид:
Казалось бы: все, задача решена, но в крайних положениях переменного резистора поведение сервопривода нестабильно. Это связано с тем, что значение длительности импульсов, в крайних положениях переменного резистора, не соответствует требуемым. Лично мне также не по душе применение переменного резистора, поэтому я хочу изменить интерфейс управления, добавив новую “хотелку” в техническое задание, например чтобы скважность менялась в зависимости от освещенности. Для этого есть простое и недорогое решение: применить в качестве регулирующего элемента фоторезистор GL55xx (используют в проектах Arduino), изменение сопротивления которого лежит в широком диапазоне.
Далее начинается самое интересное. Расчетных формул для получения значений сопротивлений обеспечивающих требуемые длительности импульсов нет, поэтому на уровне интуиции (опытным путем, с помощью переменного резистора) определяем значения сопротивления, при которых устанавливаются требуемые значения длительностей импульсов. Затем изменяем схему так, чтобы при изменении сопротивления фоторезистора общее сопротивление изменялось, устанавливая требуемые значения длительностей импульсов.
Итоговая схема принимает следующий вид:
Пояснения к итоговой схеме
Конденсатор С1 номиналом 0.47 мкФ, определяет время перезаряда. Резистор R1 номиналом 51 кОм задает основную частоту повторения импульсов в районе 50 Гц. Комбинация резисторов R2-R4 в сумме будет изменяться в диапазоне от 2.5 кОм до 24 кОм в зависимости от освещенности. Вместе с диодом D1 эти резисторы будут влиять на время перезаряда конденсатора С1 при действии положительного импульса на выходе логического элемента, тем самым определять его длительность.
Результат
Подключив данный генератор к входу управления сервопривода получим возможность управлять им, изменяя освещенность фоторезистора. На видео можно посмотреть, что из этого получилось:
На этом казалось бы все, но могу предложить развитие данной разработки. Так как мы использовали всего один из шести логических элементов входящих в корпус микросхемы, то можно собрать еще пять генераторов и подключить их к другим сервоприводам. Подключив к исполнительным рычагам сервоприводов заслонки, которые будут перекрывать световой поток у фоторезисторов, управляющих другими сервоприводами, можно получить забавное поведение сервоприводов, но этот эксперимент предлагаю провести самостоятельно.
- ИМС LM358N в корпусе SO8 (DA1), 1 шт.
- Резисторы 20кОм в корпусе 0805 (R1,R2,R4-R6), 5 шт.
- Резисторы 10кОм в корпусе 0805 (R7,R8), 2 шт.
- Любой переменный резистор с шагом выводов 5мм и сопротивлением 50кОм
- Конденсаторы 0,1мкФ в корпусе 0805 (C1,C2,C4), 3шт.
- Конденсатор танталовый 47мкФ, 16В, типоразмера С, T491C476K016AT (C3), 1шт.
Работает плата достаточно стабильно. На видео видно, как меняется яркость светодиода. Неудобство только в том, что используется лишь половина диапазона резистора R3. То есть в первой и последней четверти положения вала напряжение остается без изменения.
Файл печатной платы в формате Sprint Layout 5.0 можно скачать по ссылке.