Conhecimento prévio: [HW] User Interface Module, [HW] Combo module, [AVR] Counters/Timers, [AVR] Analog-to-digital Converter, [LIB] Motors, [LIB] Analog to Digital Converter
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).
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.
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.
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.
// 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; } }
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.
// 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); } }