Какой самый простой способ генерировать ШИМ без микроконтроллера?

15

Какой быстрый и элегантный способ генерировать ШИМ без микроконтроллера для управления серводвигателем? С помощью потенциометра или других способов управления рабочим циклом с фиксированным периодом.

  • извините за беспорядок, я хочу контролировать хобби сервопривод.
pstan
источник
Вы действительно имеете в виду управление двигателем как часть системы сервоуправления, или вы спрашиваете об управлении "хобби серво"? Смотрите дополнение к моему ответу.
Олин Латроп
1
Зачем тебе ШИМ? ШИМ часто является просто способом для микро приближения к аналоговой функции управления. Если вам действительно нужно аналоговое напряжение или ток, возможно, есть гораздо лучшие способы сделать это.
Фотон
2
@ThePhoton Если он управляет сервоприводом для хобби, PWM - это то, что требуется в качестве управляющего сигнала.
Ник Джонсон
Если вы отбросите требование фиксированного периода, дельта-сигма-генератор будет очень простым решением. Я видел реализации с одним операционным усилителем и несколькими резисторами / конденсаторами. Это предполагает, что вы не говорите о RC-сервоприводе.
Джиппи
1
@jippie - Что такое генератор дельта-сигма? Я знаю, что АЦП с дельта-сигмой нуждается в генераторе, но я всегда предполагал, что это обычное дело, поскольку он не является частью самого преобразователя.
Стивенвх

Ответы:

25

Я рекомендую (GASP!) 555 таймер в «нестабильном» режиме . В ссылке вы найдете все необходимое, но я скопировал их здесь только для вас!

Нестабильный режим дает вам переменную частоту ШИМ, а также позволяет настраивать рабочий цикл (временные и временные уравнения в линии).

Схема:

Таймер 555, нестабильный режим

Примечание: я бы добавил электролитический колпачок через Vcc (положительный вывод) и GND (отрицательный вывод), чтобы уменьшить влияние провалов в напряжении источника питания.

Частота ШИМ:

Выходная частота таймера 555 в нестабильном режиме

Некоторая защита моего ответа по сравнению с другими в этом посте. Большинство других ответов требуют промежуточного сигнала для генерации переменного сигнала ШИМ, такого как метод общего треугольника / компаратора. Я не вижу особого смысла в создании генератора треугольных волн (существенной схемы в себе) просто в качестве промежуточного шага для решения вашей проблемы.

555 - отличный аналоговый чип и делает то, что вам нужно. Я бы хотел, чтобы люди не ненавидели их так сильно.

kevlar1818
источник
2
Мне нравятся 555, но я думаю, что @supercat прав в том, что один 555 не сможет дать вам сигнал с фиксированной частотой и переменным коэффициентом заполнения. C заряжается через R1 + R2 и разряжается через R2. Если вы увеличите R2, вы увеличите время включения и выключения, а, следовательно, и период. Если вы увеличиваете R1, вы увеличиваете только время, но также и период. Если вы увеличите C, вы будете увеличивать все время, включая период. Вам нужно два 555. Один в нестабильном режиме, который будет определять период, запускающий второй, в моностабильном режиме, который будет определять коэффициент заполнения.
Телаклаво
5
«В ссылке вы найдете все, что вам нужно». Нет, это неправильный способ ответить. Укажите подробности здесь.
Стивенвх
1
Я не ненавижу 555, я просто хочу, чтобы люди не называли их лучшим решением для всего . Сингл 555 - не лучший способ управления сервоприводом для хобби.
Стивенвх
1
@Telaclavo - Вы правы; Вы не можете изменять рабочий цикл и поддерживать постоянную частоту. Однако, как упоминает WoutervanOoijen, вам не нужна жестко фиксированная частота для запуска сервопривода. Изменение коэффициента заполнения, вероятно, приводит к колебанию частоты импульсов примерно на 10-20% (приблизительная оценка), что должно быть достаточно точным для большинства сервоприводов. И опять же, вам не нужно настраивать рабочий цикл для управления сервоприводом в любом случае.
kevlar1818
2
@stevenvh Вы дайте мне знать, когда Википедия умирает. Даже если это произойдет, как показал Дин в своем комментарии выше, 555 настолько распространен (был), что было бы трудно не найти старую книгу, небольшой блог или хобби-сайт с информацией о них.
kevlar1818
8

Ye Olde Phashioned способ сделать ШИМ с аналоговым управляемым рабочим циклом, это сравнить аналоговый сигнал управления с треугольной волной. Вы делаете генератор треугольных волн, который работает на желаемой частоте ШИМ. Он подается на отрицательный вход компаратора, а аналоговый сигнал управления на положительный вход. Результатом является либо полный максимум, либо полный минимум, но коэффициент заполнения линейно пропорционален управляющему сигналу. Например, ранние аудиоусилители класса D работали по этому принципу.

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

Добавлено:

Марк Рэйджес отметил, что когда вы говорите «серводвигатель», вы можете иметь в виду маленькие двигатели-хобби с контролем положения, используемые в модельных самолетах и ​​тому подобное. Мой ответ относится к управлению двигателем, предполагая, что у вас есть аналоговое напряжение, пропорциональное тому, как сильно вы хотите управлять двигателем. Это не относится к этим "хобби серво". Они управляются не ШИМ в обычном смысле этого слова, а шириной импульсов, которые обычно должны повторяться от 1 до 2 мс каждые 20-50 мс или около того. Если этот вопрос действительно касается хобби-сервоприводов, то это нужно исправить, чтобы прояснить это.

Олин Латроп
источник
Хотя это и решает задачу, важно отметить, что @pstan хочет управлять сервоприводом, и поэтому наличие генератора функций в его реализации, вероятно, не будет очень переносимым.
kevlar1818
1
Рабочие циклы серводвигателя, как правило, довольно низкие, например, 10% или менее. А сервопривод напрямую использует ширину импульса, а не среднее значение, поэтому лучше использовать схему, которая отделяет ширину импульса от частоты повторения.
Маркрагес
1
@kevlar: я перепроверил свой ответ и до сих пор не вижу упоминания о генераторе функций. Все, что я сказал, это то, что вам нужна треугольная волна или что-то достаточно близкое. Вам, конечно, не нужен генератор функций, чтобы сделать один из них.
Олин Латроп
@Markrages: А? Моторы видят среднее значение последовательности импульсов, если оно достаточно быстрое. Несколько 100 Гц достаточно хороши для большинства двигателей. Сервопривод осуществляется по схеме управления, о которой ОП не спрашивал. Кажется, у него уже есть аналоговый уровень, пропорциональный тому, как тяжело управлять двигателем.
Олин Латроп
@Markrages: Мне только что пришло в голову, что вы говорите о хобби-серво, которые хотят иметь импульс 1-2 мс каждые 20 мс или около того? Ваш комментарий имеет некоторый смысл в этом свете, но ОП вообще не упоминал серво для хобби.
Олин Латроп
7

Треугольная волна. Компаратор. Порог контроля. Это основной способ сделать это.

PP

введите описание изображения здесь

Сначала сгенерируйте прямоугольную волну 50 Гц. Самый простой способ:

введите описание изображения здесь

Ω

REXTCEXT

T=REXT×CEXT

μΩ

ΩΩ

Я мог бы сделать это с двумя LM555, но мне нужно больше внешних компонентов.

edit (о микроконтроллерах)
Я согласен с Олином (см. комментарии), что исключение микроконтроллера недальновидно (Олин сказал "глупо"). Было время, когда разработка микроконтроллера была сложной, но сегодня это уже не так. Вы также можете иметь интерфейс программирования за несколько евро. Тогда решение выглядело бы настолько простым, что ни одно неконтроллерное решение не могло с ним конкурировать: вы берете ATTiny5 (Olin берет PIC10F220) в SOT23-6. Подключите развязывающий конденсатор к силовым разъемам и потметр к входу АЦП. Это оно! 3 (три) компонента. Преобразование показаний АЦП в импульсный выходной сигнал настолько прост, что это даже нелепо даже для начинающего программиста.

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

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

stevenvh
источник
Какой способ получить треугольную волну?
м.Алин
1
@ m.Alin - Если вы хотите очень чистый треугольник, это правильный путь. Но вход инвертора в моем генераторе также приближается к треугольнику, хотя наклоны действительно экспоненциальные.
Stevenvh
1
на местном уровне 555 здесь дешевле, чем 74HCT1G14. +1 КСТАТИ. \
Стандартный Sandun
3
@stevenvh "Если вы хотите очень чистый треугольник, это правильный путь." По вашей логике это совершенно неприемлемо. Пожалуйста, включите это в ваш очень информативный и полный ответ.
kevlar1818
2
@pstan - Если ваши характеристики не слишком высоки, вы, вероятно, используете схему 555. Это далеко от совершенства: частота меняется в зависимости от рабочего цикла, а управление не линейно. Треугольник генератор + Компаратор решает эти недостатки.
Stevenvh
4

Самый простой способ генерировать ШИМ-сигнал - это подать пилообразную волну или треугольную волну на один вход аналогового компаратора, а управляющее напряжение - на другой. Если нельзя получить чистую треугольную волну, можно разумно приблизить ее, пропустив прямоугольную волну через RC-фильтр так, чтобы выходной сигнал фильтра колебался между примерно 1 / 4VDD и 3 / 4VDD, а затем масштабирование управляющего напряжения в компаратор, так что управляющее напряжение, которое должно давать 0,01% рабочего цикла, будет переведено в самое низкое напряжение фильтрованной прямоугольной волны, а управляющее напряжение, которое должно дать 99,99% рабочего цикла, будет преобразовано в самое высокое напряжение фильтруемого прямоугольная волна Это даст ширину импульса, которая не совсем линейно пропорциональна амплитуде, но достаточно близка для многих целей.

Supercat
источник
1
И это именно то, что делает схема NE555 в соответствии с предложением kevlar1818 ...
Cees Meijer
2
@CeesMeijer: автор попросил изменить рабочий цикл и фиксированный период. Я не знаю ни одного способа использовать один 555 для преобразования управляющего напряжения в волну с фиксированной частотой и переменной нагрузкой. Хотя это может очень хорошо послужить генерацией волны треугольника для подачи в компаратор.
Суперкат
Прошло 20 лет с тех пор, как я построил эту схему, поэтому мне пришлось искать это. И действительно, ты прав. Я использовал внешний триггер, чтобы получить постоянную частоту. Вы можете использовать второй 555 для этого, хотя.
Сис Мейер
2

Я рекомендую использовать низковольтную (BiCMOS) схему управления питанием, такую как UCC3803 . Рабочая частота может быть легко установлена ​​с помощью простых R и C, а управление рабочим циклом легко осуществляется с помощью потенциометра. Он будет работать на шине 5V.

выдержка из спецификации TI UC3842

UCC3803 совместим по выводам с ШИМ-контроллерами серии UCx84x. Если вы хотите сделать легкий ШИМ, вы можете использовать приведенную выше схему, опуская R1, 2N2222 и 5k ISENSE, отрегулируйте кастрюлю (просто привяжите контакт 3 к земле). Вы также можете пропустить два последовательных резистора 4,7 кОм с погрешностью регулировки амперметра и перейти непосредственно к Vref и Gnd или использовать явный делитель напряжения, если настройка не требуется. (Вы не указали, нужно ли вам легко менять рабочий цикл).

Микросхема способна проехать около 1А тока. (Если ваш серводвигатель имеет вход ШИМ, это спорный вопрос.)

Адам Лоуренс
источник
«может потребоваться внешний драйвер для питания двигателя». Вы уверены? Я всегда думал, что вход ШИМ - это просто слаботочный уровень сигнала. Для питания сервопривод имеет третье соединение.
Стивенвх
Кроме того, я просто помню, что рабочий цикл составляет всего 5-10%. Это может быть правильным способом подачи энергии.
Stevenvh
Это приятно. Но все же учитывается множество внешних компонентов.
Стандартный Sandun
Больше похоже на UEMIG: ненужный генератор EMI. :-(
stevenvh
Также, кажется, нужен минимум 10В вход. Может быть, не лучший выбор ...
Stevenvh