This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| pt:examples:motor:dc [2015/12/14 14:23] – Criação deste novo documento. artica | pt:examples:motor:dc [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | < | ||
| + | ====== Motor DC ====== | ||
| + | |||
| + | // | ||
| + | [HW] [[en: | ||
| + | [AVR] [[en: | ||
| + | [LIB] [[en: | ||
| + | |||
| + | ===== Teoria ===== | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Motores de corrente contínua (ou motores DC) de ímã permanente são muito comuns em diferentes aplicações, | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | 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, | ||
| + | |||
| + | 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, | ||
| + | |||
| + | Motores DC são controlados por microcontroladores, | ||
| + | |||
| + | 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), | ||
| + | |||
| + | ===== 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 " | ||
| + | |||
| + | A placa de combinaçãodo HomeLab permite conectar até quatro motores DC. Basicamente, | ||
| + | |||
| + | ^ Entrada A ^ Entrada B ^ Saida A ^ Saida B ^ Resultado | ||
| + | | 0 | ||
| + | | 1 | ||
| + | | 1 | ||
| + | | 0 | ||
| + | |||
| + | 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; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | 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, | ||
| + | |||
| + | 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 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 < | ||
| + | #include < | ||
| + | |||
| + | // Main program | ||
| + | int main(void) | ||
| + | { | ||
| + | // Variable of speed | ||
| + | int speed; | ||
| + | |||
| + | // Start of ADC | ||
| + | adc_init(ADC_REF_AVCC, | ||
| + | |||
| + | // DC1 & DC2 motor initialization (without timer prescaler) | ||
| + | // HomeLab II | ||
| + | // | ||
| + | // | ||
| + | // HomeLab III | ||
| + | dcmotor_drive_pwm_init(1, | ||
| + | dcmotor_drive_pwm_init(2, | ||
| + | |||
| + | |||
| + | // Endless loop | ||
| + | while (true) | ||
| + | { | ||
| + | // Reading potentiometer value (average of 4) | ||
| + | speed = adc_get_average_value(15, | ||
| + | // 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) | ||
| + | | ||
| + | | ||
| + | } | ||
| + | } | ||
| + | </ | ||