Qual é a maneira mais simples de gerar PWM sem um microcontrolador?

15

Qual é a maneira rápida e elegante de gerar PWM sem um microcontrolador para controlar um servo motor? Com potenciômetro ou outras formas de controlar o ciclo de trabalho com período de correção.

  • desculpe pela bagunça, eu quero controlar um servo de hobby.
pstan
fonte
Você realmente quer dizer controlar um motor como parte de um sistema de servocontrole ou está perguntando sobre como controlar um "servo de hobby"? Veja a adição à minha resposta.
Olin Lathrop
1
Por que você quer PWM? O PWM geralmente é apenas uma maneira de um micro aproximar uma função de controle analógico. Se o que você realmente deseja é uma tensão ou corrente analógica, provavelmente há maneiras muito melhores de fazê-lo.
The Photon
2
@ ThePhoton Se ele está controlando um servo de passatempo, é necessário o PWM como sinal de controle.
Nick Johnson
Se você abandonar o requisito de período fixo, um oscilador delta-sigma seria uma solução muito simples. Já vi implementações com um único opamp e um punhado de resistores / capacitores. Isso pressupõe que você não esteja falando de servo-RC.
Jippie # 25/12
1
@jippie - O que é um oscilador delta-sigma? Sei que um ADC delta-sigma precisa de um oscilador, mas sempre assumi que era uma coisa comum, pois não é realmente parte do próprio conversor.
Stevenvh 25/05

Respostas:

25

Eu recomendo o temporizador (GASP!) 555 no modo "astable" . Você encontrará tudo o que precisa no link, mas eu os copiei aqui apenas para você!

O modo Astable fornece uma frequência PWM variável e também permite um ciclo de trabalho ajustável (equações de tempo alto e baixo no link).

O circuito:

555 Temporizador, modo astable

Nota: eu adicionaria uma tampa eletrolítica em Vcc (derivação positiva) e GND (derivação negativa) para reduzir o efeito de quedas na tensão da fonte de alimentação.

A frequência PWM:

Frequência de saída do temporizador 555 no modo astable

Alguma defesa para minha resposta em comparação com outras neste post. A maioria das outras respostas requer uma forma de onda intermediária para gerar um sinal PWM variável, como o método de onda / comparador de triângulo comum. Não vejo muito sentido em construir um gerador de ondas triangulares (um circuito significativo em si) como um passo intermediário para resolver o seu problema.

O 555 é um ótimo chip analógico e faz exatamente o que você precisa. Eu gostaria que as pessoas não as odiassem tanto.

kevlar1818
fonte
2
Eu gosto dos 555s, mas acho que o @supercat está certo, pois um único 555 não poderá fornecer um sinal de frequência fixa e taxa de serviço variável. C é carregado através de R1 + R2 e descarregado através de R2. Se você aumentar o R2, aumentará os tempos de ativação e desativação e, portanto, o período. Se você aumentar R1, você só aumenta o tempo, mas também o período. Se você aumentar C, aumentará todos os tempos, incluindo o período. Você precisa de dois 555s. Um, no modo astável, que determinará o período, acionando um segundo, no modo monoestável, que determinará a taxa de serviço.
Telaclavo
5
"Você encontrará tudo o que precisa no link". Não. Essa não é a maneira correta de responder. Forneça os detalhes aqui.
Stevenvh 25/05
1
Não odeio o 555, desejo que as pessoas não se refiram a eles como a melhor solução para tudo . Um único 555 não é a melhor maneira de controlar um servo de hobby.
Stevenvh 25/05
1
@Telaclavo - Você está correto; você não pode variar o ciclo de trabalho e manter a frequência constante. No entanto, como WoutervanOoijen menciona, você não precisa de uma frequência rigidamente fixa para executar um servo. A variação do ciclo de trabalho provavelmente cria uma oscilação de 10 a 20% (estimativa aproximada) na frequência de pulso, que deve ser precisa o suficiente para a maioria dos servos. E, novamente, você realmente não precisa ajustar o ciclo de serviço para controlar um servo de qualquer maneira.
Kevlar1818
2
@stevenvh Você me avisa quando a Wikipedia morrer. Mesmo assim, como Dean mostrou com seu comentário acima, o 555 é (era) tão onipresente que seria difícil não encontrar um livro antigo, um blog pequeno ou um site de hobby com informações sobre eles.
Kevlar1818
8

A maneira Ye Olde Phashioned de fazer PWM com ciclo de trabalho controlado analógico é comparar o sinal de controle analógico com uma onda triangular. Você cria um gerador de ondas triangulares que funciona na frequência PWM desejada. Isso é alimentado na entrada negativa de um comparador e o sinal de controle analógico na entrada positiva. O resultado é alto ou baixo, mas o ciclo de serviço é linearmente proporcional ao sinal de controle. Os amplificadores de áudio de classe D anteriores trabalhavam com esse princípio, por exemplo.

Em muitos casos, o PWM não precisava ser super linear, portanto a onda triangular não precisa ter arestas perfeitamente retas. Permitir que eles sejam um pouco exponenciais pode simplificar o circuito.

Adicionado:

Mark Rages apontou que, quando você diz "servo motor", pode estar se referindo aos pequenos motores passivos controlados por posição usados ​​em modelos de aviões e similares. Minha resposta se aplica ao controle de um motor, supondo que você tenha uma tensão analógica proporcional à intensidade com que deseja acionar o motor. Não se aplica a esses "servos de hobby". Eles não são controlados pelo PWM no senso comum desse termo, mas pela largura dos pulsos que geralmente precisam ser de 1 a 2 ms repetidos a cada 20 a 50 ms ou mais. Se esta pergunta é realmente sobre servos de hobby, deve ser corrigida para deixar isso claro.

Olin Lathrop
fonte
Embora isso realize a tarefa, é importante observar que o @pstan deseja acionar um servo e, portanto, ter um gerador de funções em sua implementação provavelmente não será muito portátil.
Kevlar1818
1
Os ciclos de serviço do servomotor são geralmente bastante baixos, como 10% ou menos. E o servo usa a largura do pulso diretamente, não o valor médio, por isso é melhor usar um circuito que dissocie a largura do pulso da taxa de repetição.
markrages 24/05
1
@ kevlar: Voltei a verificar minha resposta e ainda não vejo menção a um gerador de funções lá. Tudo o que eu disse foi que você precisa de uma onda triangular ou algo próximo o suficiente. Você certamente não precisa de um gerador de funções para criar um deles.
Olin Lathrop
@ Markrages: Hein? Os motores veem a média de um trem de impulsos se for rápido o suficiente. Alguns 100 Hz são bons o suficiente a esse respeito para a maioria dos motores. A parte servo é realizada pelo esquema de controle, que o OP não perguntou. Parece que ele já tem um nível analógico proporcional à força do motor.
Olin Lathrop
@ Markrages: Ocorreu-me que você está falando sobre servos de hobby, que querem um pulso de 1-2 ms a cada 20 ms ou mais? Seu comentário faz algum sentido sob essa luz, mas o OP não mencionou os servos de hobby.
Olin Lathrop
7

Onda triângulo. Comparador. Limiar de controle. Essa é a maneira básica de fazer isso.

PP

insira a descrição da imagem aqui

Primeiro gere uma onda quadrada de 50Hz. Maneira mais simples:

insira a descrição da imagem aqui

Ω

REXTCEXT

T=REXT×CEXT

μΩ

ΩΩ

Eu poderia ter feito isso com dois LM555s, mas precisaria de mais componentes externos.

editar (sobre microcontroladores)
Concordo com Olin (ver comentários) que a exclusão de um microcontrolador é míope (Olin disse "bobo"). Houve um tempo em que o desenvolvimento de um microcontrolador era complicado, mas hoje isso não é mais verdade. Você também pode ter uma interface de programação por alguns euros. A solução pareceria tão fácil que nenhuma solução que não seja do controlador pode competir com ela: você usa um ATTiny5 (Olin usa um PIC10F220) em um SOT23-6. Conecte um capacitor de desacoplamento às conexões de energia e o medidor de potenciômetro na entrada ADC. É isso aí! 3 (três) componentes. Converter a leitura do ADC em uma saída de largura de pulso é tão fácil que é quase ridículo, mesmo para um programador iniciante.

Depois de começar com eles, você verá que os microcontroladores geralmente oferecem uma solução mais simples e mais flexível do que com outros ICs ou componentes discretos.

uma nota
de sua outra pergunta que eu ver que você faça uso de microcontroladores. Por que você quer evitá-los aqui?

stevenvh
fonte
Qual é o caminho para obter uma onda triangular?
m.Alin
1
@ m.Alin - Se você quer um triângulo muito limpo, esta é a maneira correta. Mas a entrada do inversor no meu oscilador também se aproxima de um triângulo, embora as inclinações sejam realmente exponenciais.
Stevenvh 25/05
1
falando localmente, o 555 é mais barato que o 74HCT1G14 aqui. +1 BTW. \
Standard Sandun
3
@stevenvh "Se você quer um triângulo muito limpo, esta é a maneira correta." Pela sua lógica, isso é completamente inaceitável. Inclua isso na sua resposta muito informativa e completa.
Kevlar1818
2
@pstan - Se suas especificações não forem muito altas, você provavelmente usaria o circuito 555. Está longe de ser perfeito: a frequência varia com o ciclo de trabalho e o controle não é linear. O gerador de triângulo + comparador resolve esses inconvenientes.
Stevenvh 26/05
4

A maneira mais simples de gerar um sinal PWM é alimentar uma onda dente de serra ou onda triângulo em uma entrada de um comparador analógico e uma tensão de controle na outra. Se não for possível obter uma onda triangular pura, é possível aproximar razoavelmente uma passando uma onda quadrada através de um filtro RC, de modo que a saída do filtro oscila entre aproximadamente 1 / 4VDD e 3 / 4VDD e depois escalando a tensão de controle no comparador, de modo que a tensão de controle a, que deve produzir 0,01% do ciclo de trabalho, seja convertida para a tensão mais baixa da onda quadrada filtrada, e a tensão de controle, que deve produzir ciclo de trabalho de 99,99%, seja traduzida para a tensão mais alta do filtro filtrado onda quadrada. Isso produzirá uma largura de pulso que não é linearmente proporcional à amplitude, mas é próxima o suficiente para muitos propósitos.

supercat
fonte
1
E isso é exatamente o que o circuito NE555 não como proposto por kevlar1818 ...
Cees Meijer
2
@CeesMeijer: O pôster solicitava um ciclo de trabalho variável e período fixo. Não conheço nenhuma maneira de usar um único 555 para converter uma tensão de controle em uma onda de ciclo variável de frequência fixa. Isso poderia servir muito bem para gerar uma onda triangular para alimentar um comparador.
Supercat 24/12 /
Faz 20 anos desde que construí este circuito, então tive que procurar isso. E de fato você está certo. Eu usei um gatilho externo para obter uma frequência constante. Você poderia usar um segundo 555 para isso.
Cees Meijer
2

Eu recomendo usar um IC de controle de fonte de alimentação de baixa tensão (BiCMOS) como o UCC3803 . A frequência de operação pode ser facilmente configurada com um simples R e C, e o controle do ciclo de serviço é feito facilmente com um potenciômetro. Ele operará em um trilho de 5V.

excerto da folha de dados TI UC3842

O UCC3803 é compatível com os pinos da série UCx84x de controladores PWM. Se você deseja fazer um PWM fácil, pode usar o esquema acima, omitindo R1, o 2N2222 e o 5k ISENSE ajustam o pote (apenas amarre o pino 3 no chão). Você provavelmente também pode omitir os dois resistores de 4,7k em série com o pot de ajuste do amplificador de erro e ir diretamente para Vref e Gnd, ou usar um divisor de tensão explícito se o ajuste não for necessário. (Você não especificou se precisa alterar facilmente o ciclo de serviço).

O IC é capaz de conduzir em torno de 1A de corrente. (Se o seu servomotor tiver uma entrada PWM, este é um ponto discutível.)

Adam Lawrence
fonte
"pode ​​precisar de um driver externo para realmente alimentar o motor". Você tem certeza? Eu sempre pensei que a entrada PWM é apenas um nível de sinal de baixa corrente. Para energia, um servo tem uma terceira conexão.
Stevenvh 25/05
Além disso, lembro que o ciclo de trabalho é de apenas 5 a 10%. Essa pode ser a maneira correta de fornecer energia.
Stevenvh 25/05
Isso é legal. Mas ainda conta com muitos componentes externos.
Standard Sandun
Parece mais um UEMIG: Gerador de EMI desnecessário. :-(
stevenvh 25/05
Também parece precisar de uma entrada mínima de 10V. Talvez não a melhor escolha ...
stevenvh