Atualização (17/07/2025): Temos bastante estoque de todos os nossos produtos, encontre-nos também em e    comprar agora

Conecte diferentes motores ao seu SBC

Neste tutorial veremos como conectar os tipos de motores mais comuns ao SBC. Também mostraremos como lidar com eles com alguns exemplos. Os tipos mais comuns de motores são:

  • Os motores DC são baratos e fáceis de controlar, apenas uma saída de energia é necessária e pode ser ativada com um sinal PWM.

  • Os servomotores são semelhantes aos motores DC, mas incluem pequenos componentes eletrônicos e um potenciômetro interno para formar um circuito de controle fechado, que permite controlar o ângulo de rotação. O controle é por PWM também, mas neste caso o sinal de controle é de baixa potência e o estágio de potência é integrado no próprio servomotor.

  • Os motores de passo possuem vários enrolamentos e necessitam de uma sequência para serem controlados, mas em troca oferecem grande precisão, pois avançam passo a passo cada vez que a polaridade de seus enrolamentos é invertida.

1. Motores DC

Para controlar um motor DC, vamos conectá-lo ao SBC conforme indicado no diagrama a seguir:

Precisamos conhecer alguns parâmetros do nosso motor, especificamente a relação entre os volts aplicados e a velocidade do motor ou Kv.

A classe Dc_Motor representa o motor DC, controlado por um PWM em 50Hz. Como pode ser observado, alguns parâmetros devem ser fornecidos, como a tensão de alimentação e a constante Kv, bem como o pino a ser utilizado. Em troca, obtemos duas funções: set_voltage e set_speed.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
classe Motor DC: FREQ_Hz = 50
    def __init__( eu, pino, vm, kv ):
        eu.vm = vm
        eu.kv = kv
        eu.pino = pino
        eu.idiota = SBC.Dout()
        eu.idiota.set_pwm( eu.alfinete, eu.FREQ_Hz, 0 )
        eu.set_tensão( 0 )
    
    def tensão_definida( eu, v ): pulse_percent_on = 100 *v/eu.vm
        eu.idiota.set_pwm( eu.alfinete, eu.FREQ_Hz, 100-pulso_percent_on )
    
    def definir_velocidade( eu, rotações):
        eu.set_voltage(rpm/eu.kv)

Um exemplo de uso seria o seguinte:

>>> tempo de importação
>>> importar sbc_mtr
>>> motor = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> print("Controle de tensão")
Controle de tensão
>>> motor.set_voltage( 6 )
>>> time.sleep( 1 )
>>> motor.set_voltage( 0 )
>>> print("Controle de velocidade")
Controle de velocidade
>>> motor.set_speed( 100 )
>>> time.sleep( 1 )
>>> motor.set_speed( 0 )

2. Servo motores

O servo motor usa um único pino de controle para controlar o ângulo de rotação de um motor.

 O código da classe Servo_Motor:

 1 2 3 4 5 6 7 8 9 10 11 12 13 14
classe Servo-motor: FREQ_Hz = 50
    DUTY_MIN_ms = 0.5
    DUTY_MAX_ms = 2.5
    
    def __init__( eu, PIN ):
        eu.pino = pino
        eu.idiota = SBC.Dout()
        eu.idiota.set_pwm( eu.alfinete, eu.FREQ_Hz, 0 )
        
    def ângulo definido( eu, angle_deg ): duty_ms = eu.DUTY_MIN_ms + (eu.DUTY_MAX_ms-eu.DUTY_MIN_ms)*ângulo_deg/ 180
        pulse_percent_on = eu.FREQ_Hz*dever_ms/ 10
        eu.idiota.set_pwm( eu.alfinete, eu.FREQ_Hz, 100-pulso_percent_on )

E um exemplo de uso:

>>> tempo de importação
>>> importar sbc_mtr
>>> motor = sbc_mtr.Servo_Motor( "DOUT3" )
>>> print("Ajuste o ângulo para 90 graus" )
Defina o ângulo para 90 graus
>>> motor.set_angle( 90 )
>>> time.sleep( 1 )
>>> print("Ajuste o ângulo para 0 graus" )
Defina o ângulo para 0 graus
>>> motor.set_angle( 0 )

3. Motores de passo

Para conectar um motor de passo, seguiremos um esquema semelhante ao da figura:

O código da classe Stepper_Motor é basicamente uma máquina de estado que implementa a tabela mostrada acima.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
classe Motor_de passo:
   
    def __init__( eu, pinos ):
        eu.pins = pins
        eu.idiota = SBC.Dout()
        eu.estado = 0
        eu.passos = 0
        eu.dir = 1
        eu.cronômetro = máquina.Cronômetro( -1 )
    
    def passo( eu, direção ):
        if( eu.estado == 0 ):
            eu.idiota.escrever( eu.alfinetes[0], 1 )
            eu.idiota.escrever( eu.alfinetes[1], 1 )
            eu.idiota.escrever( eu.alfinetes[2], 0 )
            eu.idiota.escrever( eu.alfinetes[3], 0 )
        elif( eu.estado == 1 ):
            eu.idiota.escrever( eu.alfinetes[0], 0 )
            eu.idiota.escrever( eu.alfinetes[1], 1 )
            eu.idiota.escrever( eu.alfinetes[2], 1 )
            eu.idiota.escrever( eu.alfinetes[3], 0 )
        elif( eu.estado == 2 ):
            eu.idiota.escrever( eu.alfinetes[0], 0 )
            eu.idiota.escrever( eu.alfinetes[1], 0 )
            eu.idiota.escrever( eu.alfinetes[2], 1 )
            eu.idiota.escrever( eu.alfinetes[3], 1 )
        elif( eu.estado == 3 ):
            eu.idiota.escrever( eu.alfinetes[0], 1 )
            eu.idiota.escrever( eu.alfinetes[1], 0 )
            eu.idiota.escrever( eu.alfinetes[2], 0 )
            eu.idiota.escrever( eu.alfinetes[3], 1 )
        eu.passos += direção
        eu.estado = (eu.estado + direção) & 0x03
    
    def definir_velocidade( eu, passos_s, direção ):
        if( passos_s e direção):
            eu.cronômetro.inicial(período=int(1000 /passos_s), modo=máquina.Cronômetro.PERIÓDICO, retorno de chamada=lambda tmr: eu.passo(direção) )
        outro:
            eu.cronômetro.deinit()

Por fim, um exemplo de uso:

>>> tempo de importação
>>> importar sbc_mtr
>>> motor = sbc_mtr.Stepper_Motor( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> print("Passo a passo" )
Passo a passo
>>> para i no intervalo (100):
... motor.passo( 1 )
... tempo.sleep_ms(10)
>>> print("Contínuo" )
Melhoria
>>> motor.set_speed( 100, -1 )
>>> time.sleep( 1 )
>>> motor.set_speed( 0, 0 )

Se você gostou deste conteúdo, você pode nos seguir no Twitter, YouTube, Facebook or LinkedIn para ficar atualizado de conteúdo como este.

Tem alguma dúvida ou pedido?
Contate-nos! Responderemos <24 horas!

ícone
Contato ArduSimple
Fechar

Quer saber mais sobre GPS/RTK?

1. Nossa equipe de engenharia entrará em contato com você para resolver qualquer dúvida
2. Manteremos você atualizado sobre promoções e lançamentos de novos produtos
3. Você só receberá notícias nossas quando tivermos notícias importantes, não enviaremos spam para seu e-mail