Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
pt:examples:motor:dc [2015/12/14 14:23] – Criação deste novo documento. articapt:examples:motor:dc [2020/07/20 12:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +<pagebreak>
 +====== Motor DC ======
 +
 +//Conhecimento prévio: 
 +[HW] [[en:hardware:homelab:digi]], [HW] [[en:hardware:homelab:combo]],
 +[AVR] [[en:avr:timers]], [AVR] [[en:avr:adc]], 
 +[LIB] [[en:software:homelab:library:module:motor]], [LIB] [[en:software:homelab:library:adc]]//
 +
 +===== Teoria =====
 +
 +[{{  :examples:motor:dc:motor_dc_picture.jpg?220|Motor DC}}]
 +
 +Motores de corrente contínua (ou motores DC) de ímã permanente são muito comuns em diferentes aplicações, onde são essenciais pequenas dimensões, alta potência e baixo preço. Devido à sua velocidade relativamente elevada, eles são utilizados em conjunto com a transmissão (à saída menor velocidade e um binário mais elevado).
 +
 +[{{  :examples:motor:dc:motor_dc_performance.png?220|O gráfico ideal de relação entre a velocidade (V), a corrente (I), potência (P), eficiência (η) e torque (T) de um motor DC.}}]
 +
 +Motores DC ímã permanente têm uma construção bastante simples e o seu controle é bastante elementar. Embora o controlo seja fácil, a sua velocidade não é precisamente determinada pelo sinal de controlo, pois depende de vários factores, principalmente do binário aplicado no veio de corrente e da alimentação. A relação entre binário e velocidade de um motor de corrente contínua ideal é linear, o que significa: quanto mais alta é a carga sobre o eixo menor é a velocidade do veio e maior é a corrente através da bobina.
 +
 +Motores DC com escova usam corrente contínua e, basicamente, não precisam de sistema eletrônico de controle especiais porque toda a comunicação necessária é feita dentro do motor. Quando o motor está a funcionar, duas escovas estáticas estão a deslizar sobre o comutador rotativo e segurando a tensão sobre as bobinas. O sentido de rotação do motor é determinado pela polaridade da corrente. Se o motor deve girar somente numa direção, então a corrente pode vir através de relé ou alguma outra conexão simples. Se o motor tem que girar em ambos os sentidos, então um circuito electrónico chamado ponte-H é usado.
 +
 +A ponte-H tem quatro transistores (ou quatro grupos) a direccionar a corrente para accionar o motor. O esquema elétrico da ponte-H é semelhante à letra H e é daí que vem o nome. A peculiaridade da ponte-H é a possibilidade de aplicar ambas as polaridades direcionais para o motor. A imagem ao lado mostra a principal economia da ponte-H com base no exemplo dos interruptores. Se dois interruptores diagonais estão fechados, o motor começa a funcionar. A direcção da rotação do motor depende em diagonal que os interruptores fecham. Na ponte-H real os interruptores são substituídas por transistores que são seleccionados de acordo com a corrente do motor e tensão.
 +
 +[{{  :examples:motor:dc:motor_h_bridge_principle.png?220|O princípio de funcionamento de ponte-H utilizado em interruptores.}}]
 +
 +Ponte-H também pode alterar o sentido de rotação além da velocidade de rotação do motor. Também existem pontes-H integradas, para a realização de correntes menores. Para maiores correntes, MOSFET-s de poder especial são usados. A ponte-H com outros produtos eletrônicos é chamado controlador ou driver do motor.
 +
 +Embora a velocidade do motor DC seja fácil de controlar, não existe garantia de que a velocidade desejada seja alcançada. A velocidade real depende de muitos factores, principalmente binário no eixo de saída do motor, corrente e outras características do motor. A velocidade e o binário de saida do motor ideal saída é linearmente dependente, isto é, quanto maior for o binário de saída, menor é a velocidade do motor, e consome mais corrente. Isto depende do tipo exacto de motor no caso de motor real.
 +
 +Um motor DC pode ser controlado com sinais analógicos ou digitais.
 +
 +Normalmente, a velocidade do motor é dependente da tensão aplicada nos terminais do motor. Se o motor alimentar uma tensão nominal, ele roda a uma velocidade nominal. Se a tensão dada ao motor é reduzida, a velocidade do motor e o binário são reduzidos também. Este tipo de controle de velocidade é também chamado de controle analógico. Isto pode ser implementado, por exemplo, usando um transistor ou um reostato.
 +
 +Motores DC são controlados por microcontroladores, e porque microcontroladores são dispositivos digitais, também é razoável controlar os motores digitalmente. Isto é conseguida através da utilização de modulação de largura de impulso (PWM - pulse with modulation), por transistores de comutação rápida on - off. A potência do motor total é algo entre parado e velocidade máxima. O tempo de todo o período de PWM quando o transistor é aberto, chamado ciclo de trabalho, que é medido em percentagem. 0% significa que o transistor está constantemente fechado e não conduz, 100% significa que o transistor está aberto e conduz. A frequência de PWM deve ser suficientemente elevada para evitar a vibração do eixo do motor. Em baixas freqüências o motor produz um ruído e, portanto, é principalmente utilizada a modulação de frequência acima de 20 kHz. No entanto, a eficiência dos transistores sofre em freqüências muito altas.
 +
 +Em comparação com o controlo analógico, o digital tem uma série de vantagens. A principal vantagem do sistema controlado por microcontroladores é que ele requer apenas uma única saída digital e não há necessidade de conversor digital-para-analógico complicado. O controlador digital também é mais eficiente porque menos energia é convertida em calor.
 +
 +Um esquema simplificado de controlo é mostrada no seguinte desenho. A tensão de controlo Vc está vindo para o pino de saída do microcontrolador e comuta o transistor Q on-off com uma frequência de aproximadamente 20 kHz. Quando o transistor Q está ligado, então a corrente total I está a atravessar o motor M. Neste caso, o transistor se comporta como um interruptor fechado e uma queda de tensão Vq é próxima de 0, e toda a tensão de entrada Vdd continua a no motor.
 +
 +A potência total que passa no transistor gem pode ser calculada pela fórmula:
 +
 +P = I * V
 +
 +P = I * Vq, e quando Vq ~ 0, então P ~ 0 W
 +
 +Isto significa que o transistor passa quase nenhuma energia no estado aberto. Uma situação semelhante é também o caso quando o transistor está no estado fechado. Neste caso, não existe fluxo de corrente através do transistor ou do motor. Agora, a energia que atravessa o transistor, é calculada como se segue:
 +
 +P = I * Vq, e quando I = 0, então P = 0 W
 +
 +Em conclusão, podemos dizer que, se o transistor é um elemento de comutação no esquema, em seguida, a eficiência do sistema é alta e a potência usada pelos transistores é baixa. Em comparação com um sistema linear (analógico), em que o transistor em estado semi-aberto consome a mesma quantidade de energia do que o do motor, que é uma grande poupança de energia. Na prática, não existe um sistema sem perdas e, de facto, as perdas ocorrem quando o transistor comuta de um estado para outro. Portanto, as perdas mais elevadas ocorrem quando os transistores são ligados em freqüências mais altas.
 +
 +===== Prática =====
 +
 +O HomeLab inclui componentes para controlar motores DC, incluindo 2 pontes-H integradas e diodos de quebra de circuitos. O motor é controlado com três sinais digitais, um deles é sinal de ligação //enable// e os outros dois são a determinação do estado dos transistores na ponte-H. Nunca pode ocorrer que dois transistores verticais sejam abertos, porque isso seria curto-circuitar a fonte de alimentação. Isto significa que o driver é concebido à prova de falhas e que só pode ser escolhida a opção de qual o transistor que é aberto (superior ou inferior) de um lado da ponte-H (de "semi-ponte"). Em outras palavras, a polaridade é seleccionada utilizando dois sinais de accionamento aplicados às duas extremidades da bobina do motor.
 +
 +A placa de combinaçãodo HomeLab permite conectar até quatro motores DC. Basicamente, para cada motor existe uma ponte-H, que é controlada com dois pinos de saída digital do microcontrolador, porque o pino de ligação está constantemente alto. Se ambos os pinos controladores têm mesmo valor, então o motor está parado, se for diferente, então ele gira na direção correspondente. O estado da ponte-H está descrita na tabela seguinte:
 +
 +^ Entrada A ^ Entrada B ^ Saida A ^ Saida B ^ Resultado                    ^
 +|  0        0        -        |  -        | O motor está parado        |
 +|  1        1        +        |  +        | O motor está parado        |
 +|  1        0        +        |  -        | O motor gira na direcção 1 |
 +|  0        1        -        |  +        | O motor gira na direcção 2 |
 +
 +Para cada motor ligado à ponte-H é operado por duas saídas digitais do microcontrolador. A velocidade do motor é controlada por temporizadores que geram sinais PWM contínuos para a ponte-H, o sentido da rotação do motor é controlado no segundo terminal. A velocidade do motor é controlada a valores relativos entre 0 e 255, em que 0 significa que o motor está parado e 255 é a velocidade máxima do movimento do motor. O código que se segue descreve uma função descrita na biblioteca do HomeLab II (ATmega2561) para controlar os motores DC.
 +
 +<code c>
 +// The setup of the pins driving pins
 +static pin dcmotor_pins[4][2] =
 +{
 + { PIN(B, 7), PIN(B, 4) },
 + { PIN(D, 1), PIN(D, 0) },
 + { PIN(D, 7), PIN(D, 6) },
 + { PIN(D, 5), PIN(D, 4) }
 +};
 +static int motorindex[4][2] =
 +{
 + { 0, 1 },
 + { 2, 3 },
 + { 4, 5 },
 + { 6, 7 }
 +};
 +// Initializing a PWM to chosen motor
 +void dcmotor_drive_pwm_init(unsigned char index, timer2_prescale prescaler)
 +{
 +  unsigned char i, pwm;
 + 
 + pin_setup_output(dcmotor_pins[index][0]);
 + pin_setup_output(dcmotor_pins[index][1]);
 + 
 + motor[index] = 1;
 +  pwm = PWMDEFAULT;
 + 
 +  // Starting all channels
 +  for(i=0 ; i<CHMAX ; i++)
 +  {
 +      // PWM state variable initialization
 +      compare[i] = pwm;           
 +      compbuff[i] = pwm;          
 +  }
 + 
 +  // Starting Timer 2 to normal mode
 +  timer2_init_normal(prescaler);
 +  // Allow Timer 2 interrupt
 +  timer2_overflow_interrupt_enable(true);
 + 
 +  // Enable global interrupts
 +  sei();
 +}
 +// Generating a PWM for chosen motor
 +void dcmotor_drive_pwm(unsigned char index, signed char direction, 
 +unsigned char speed) 
 +{
 + if(direction == -1)
 + {
 + compbuff[motorindex[index][0]] = 0x00;
 + compbuff[motorindex[index][1]] = speed;
 + }
 + if(direction == 1)
 + {
 + compbuff[motorindex[index][0]] = speed;
 + compbuff[motorindex[index][1]] = 0x00;
 +
 +}
 +</code>
 +
 +Os pinos controladores de 4 controladores de motor são determinados com o array dcmotor_pins na biblioteca. Antes de controlar os motores, a função dcmotor_drive_pwm_init com o número do motor-controlador (0-3) deve ser chamada. Ela define os pinos como saída. Também define o pré escalador do temporizador, para o HomeLab II timer2_prescale e para o HomeLab III timer_prescale, que determina a frequência do sinal PWM. No caso do HomeLab II, como o programa não tem funções que usem o temporizador, é apropriado para o valor TIMER2_NO_PRESCALE. Quando, por exemplo, são usados sensores de ultra-som, então deve ser escolhido TIMER2_PRESCALE 8, caso contrário, o desempenho do controlador pode não ser suficiente e as leituras dos sensores podem vir corrompidas. Isto não se aplica no HomeLab III. Valores mais altos do pré escalador não são recomendados, porque torna a rotação do motor intermitente, e gera vibração.
 +
 +Função dcmotor_drive_pwm é usada para controlar a velocidade do motor. Esta função tem três valores de entrada: número do motor, direção (-1, 0, +1), onde -1 é a rotação numa direção, +1 na outra direção e 0 para parar e, em terceiro lugar, a gama de velocidade de 0-255. O valor de velocidade não está associado a uma velocidade de rotação específica, é o valor relativo entre a velocidade minima e máxima do motor. A velocidade real do motor depende do tipo de motor, da carga e da tensão de alimentação. A precisão de velocidade do motor é de 8-bits, o que significa que a precisão mínima de controlo é 1/255 da velocidade máxima do motor.
 +
 +O seguinte é um exemplo de programa que controla o primeiro e o segundo motor DC de modo que o primeiro motor roda a metade da velocidade e a velocidade do segundo motor é controlada por um potenciómetro.
 +
 +<code c>
 +// Robotic HomeLab DC motor driving example program
 +#include <homelab/module/motors.h>
 +#include <homelab/adc.h>
 +
 +// Main program
 +int main(void)
 +{
 + // Variable of speed
 + int speed;
 +
 + // Start of ADC
 + adc_init(ADC_REF_AVCC, ADC_PRESCALE_8);
 + 
 + // DC1 & DC2 motor initialization (without timer prescaler)
 + // HomeLab II
 + //dcmotor_drive_pwm_init(1, TIMER2_NO_PRESCALE);
 + //dcmotor_drive_pwm_init(2, TIMER2_NO_PRESCALE);
 + // HomeLab III
 + dcmotor_drive_pwm_init(1, TIMER_NO_PRESCALE);
 + dcmotor_drive_pwm_init(2, TIMER_NO_PRESCALE);
 +
 +
 + // Endless loop
 + while (true)
 + {
 +    // Reading potentiometer value (average of 4)
 +    speed = adc_get_average_value(15, 4);
 +    // ADC value is 12-bit but DC motor input is 8-bit
 +    // conversion can be ether dividing the value with 8 or
 +    // make bit shifting to right 3 times (>>3)
 +    dcmotor_drive_pwm(1, 1, speed/8);
 +    dcmotor_drive_pwm(2, 1, 128);
 + }
 +}
 +</code>
  
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0