1. O que é PWM?
PWM geralmente se refere à modulação por largura de pulso. A modulação por largura de pulso é um método de controle analógico que modula a polarização da base do transistor ou da porta do transistor MOS de acordo com a alteração da carga correspondente para realizar a alteração do tempo de condução do transistor ou do transistor MOS, desse modo realizando mudanças na saída de uma fonte de alimentação regulada por comutação. Este método pode manter a tensão de saída da fonte de alimentação constante quando as condições de trabalho mudam, e é uma tecnologia muito eficaz para controlar o circuito analógico usando o sinal digital do microprocessador. É amplamente utilizado em muitos campos, desde medição e comunicação até controle e conversão de energia.
PWM on MAIX BIT: Módulo de modulação por largura de pulso, PWM suportado por hardware, pode especificar qualquer pino (0 a 47 pinos), cada PWM depende de um temporizador, ou seja, quando o temporizador está vinculado à função PWM, ele não pode ser usado como um temporizador normal. Como existem 3 temporizadores, cada temporizador possui 4 canais, ou seja, no máximo 12 canais de formas de onda PWM podem ser gerados ao mesmo tempo
Dois, use
1. Construtor
pwm = machine.PWM(tim, freq, duty, pin, enable=True)
Crie um novo objeto PWM com os parâmetros especificados.
Descrição do parâmetro:
tim: Cada PWM depende de um timer para gerar formas de onda, então um objeto timer precisa ser passado aqui, e o ID do timer e o número do canal freq devem ser especificados quando o objeto timer deve ser
inicializado :
Serviço de freqüência de forma de onda PWM: Ciclo de trabalho PWM, que se refere à porcentagem do nível alto em todo o ciclo, valor: [0,100]
[pino]: Pino de saída PWM. Você não pode configurá-lo, mas use fm para gerenciar o mapeamento de pinos uniformemente.
enable : Se deve começar a gerar formas de onda imediatamente, o padrão é True, e começar a gerar formas de onda PWM nos pinos especificados imediatamente após o objeto ser gerado
2. Método
1、
pwm.init(tim, freq, duty, pin, enable=True)
construtor semelhante
2、
pwm.freq(freq)
Obtenha ou defina a frequência PWM
Descrição do parâmetro:
freq : frequência PWM, parâmetro opcional, se nenhum parâmetro for passado, a configuração da etapa retornará apenas o valor da frequência atual
3、
pwm.duty(duty)
Obtenha ou defina o ciclo de trabalho PWM
Descrição do parâmetro:
dever : O ciclo de trabalho PWM é opcional, se nenhum parâmetro for passado, a configuração da etapa retornará apenas o valor atual do ciclo de trabalho
4、
pwm.enable()
Habilite a saída PWM para gerar forma de onda imediatamente no pino especificado
5、
pwm.disable()
Desative a saída PWM, o pino especificado não gera mais forma de onda
6、
pwm.deinit()
Faça logoff do hardware PWM, libere os recursos ocupados e desligue o relógio PWM
3. Luz de respiração RGB
Respirando luz, a luz do LED aumenta gradualmente após ligar e mantém por alguns segundos quando atinge o máximo e, em seguida, escurece gradualmente até que se apague. Depois de desligar por alguns segundos, ele muda gradualmente de escuro para claro, e esse ciclo continua. Se a velocidade do ciclo estiver em sincronia com a respiração humana, é o efeito lendário da luz respiratória. Este efeito pode ser obtido por PWM, e diferentes graus de brilho e escuridão podem ser alcançados ajustando o ciclo de trabalho de PWM.
código de luz respiratória
from machine import Timer,PWM
import time
io_led_blue = 14
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
ch = PWM(tim, freq=500000, duty=50, pin=io_led_blue)
duty=0
dir = True
while True:
if dir:
duty += 10
else:
duty -= 10
if duty>100:
duty = 100
dir = False
elif duty<0:
duty = 0
dir = True
time.sleep(0.1)
ch.duty(duty)
Depois de executar o código online, descobrimos que a luz do LED aumentou gradualmente depois que a luz azul foi ligada e, quando atingiu o ponto mais brilhante, diminuiu gradualmente até apagar.
luz respiratória
Analise o código:
importe os objetos Timer e PWM do pacote da máquina.
Importe o objeto timer
para definir uma variável io_led_blue com valor 14, ou seja, Pin13/IO13. Qual pino do chip está conectado ao pino específico do LED, por favor consulte a introdução da placa de desenvolvimento anterior Veja o diagrama esquemático.
O ID do temporizador é especificado, que é o temporizador 0 e o canal 0.
Ao alterar constantemente o ciclo de trabalho para alterar o tempo de alto nível, alterando assim o brilho da lâmpada
4. Servo PWM
Controle do mecanismo de direção:
O controle do mecanismo de direção geralmente requer um pulso de base de tempo de cerca de 20 ms, e a parte de alto nível do pulso é geralmente a parte do pulso de controle de ângulo na faixa de 0,5 ms ~ 2,5 ms. Tomando o servo de ângulo de 180 graus como exemplo, a relação de controle correspondente é a seguinte:
0,5ms------------0 grau;
1,0ms------------ 45 graus;
1,5ms------------90 graus;
2,0ms-----------135 graus;
2,5ms-----------180 Gastar;
o código
from machine import Timer,PWM
import time
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
ch = PWM(tim, freq=50, duty=2.5, pin=15)
duty=2
ch.duty(duty)
ch.enable()
while True:
ch.duty(duty)
for x in range(3):
duty = 2.5 + x*6
ch.duty(duty)
print("duty=",ch.duty())
time.sleep(3)
O efeito após a execução, porque as condições são limitadas, esta miniplaca é usada para fonte de alimentação
, a linha de sinal do servo é conectada ao PIN15, porque a divisão de frequência está entre 0-100 e é um número inteiro, portanto, alguns graus não pode ser transferido
servo PWM
Resumir
Ainda é necessário aprender a usar o PWM do MAIX BIT para lançar as bases para o acompanhamento do gimbal.