- MSP430 com IAR: Primeiros passos
- Acionamento de Motor de Passo com MSP430
- MSP430 – Modos de Low-Power
- MSP430 Driver Library
Um motor de passo pode ser uma boa escolha sempre que movimentos precisos são necessários. Eles podem ser usados em aplicações onde é necessário controlar vários fatores, tais como: ângulo de rotação, velocidade, posição e sincronismo.
Os motores de passo são dispositivos eletromecânicos que convertem pulsos elétricos em movimentos mecânicos que geram variações angulares.
São altamente precisos. Possuem três estados de funcionamento: parado, ativado com rotor travado ou girando. Funcionam em malha aberta. São acionados eletronicamente. A seguir exemplos de equipamentos que possuem motor de passo:
- Impressoras;
- Discos rígidos;
- Scanners;
- Câmeras de vídeo;
- Alinhamento telescópio;
- Antenas parabólicas;
- Aparelhos médicos;
- Robóticos;
- Automação industrial.
Motor de Passo
Um motor de passo possui três estados:
- Parado: Pelo menos uma das bobinas fica energizada e o motor permanece estático num determinado sentido. Nesse caso há consumo de energia, mas em compensação o motor se mantém alinhado numa posição fixa;
- Desligado: Não há alimentação suprindo o motor. Nesse caso não existe consumo de energia, e todas as bobinas estão desligadas. Na maioria dos circuitos este estado ocorre quando a fonte de alimentação é desligada;
- Rodando: As bobinas são energizadas em intervalos de tempos determinados, impulsionando o motor a girar numa direção.
Modo de Operação do Motor de Passo
Para acionar o motor as bobinas devem ser acionadas de maneira sequencial conforme o modo de operação desejado. A sua velocidade é controlada através da frequência de acionamento das bobinas.
Full-step – Passo completo 1: Somente uma bobina é energizada a cada passo, possibilitando menor torque, pouco consumo de energia, maior velocidade.
Full-step – Passo completo 2: Duas bobinas são energizadas a cada passo, possibilitando maior torque. Consome mais energia que o Passo completo 1 e oferece maior velocidade.
Half-step – Meio passo: A combinação do passo completo 1 e do passo completo 2 gera um efeito de meio passo. Consome mais energia que os passos anteriores, porém é muito mais preciso que os passos anteriores. O torque é próximo ao do Passo completo 2, porém a velocidade é menor que as dos passos anteriores.
Para mudar a direção de rotação do motor, simplesmente inverta a sequência dos passos conforme os exemplos abaixo:
Nesse projeto com o motor de passo, construí uma BoosterPack para a LaunchPad MSP-EXP430G2.
Detalhe do hardware
Esse hardware composto por MSP430 LaunchPad MSP-EXP430G2, ULN2003 (que nada mais é do que um array de transistores Darlington, que trabalha com tensões de até 50V e suporta uma corrente de até 500mA) e potenciômetro de 10 K ohms.
A figura 1 exibe o esquema elétrico do BoosterPack desenvolvido:
A figura 2 exibe a placa construída em placa padrão com footprint para encaixe na LaunchPad:
Código-Fonte para acionamento do Motor de Passo
O código-fonte a seguir foi utilizado para teste do acionamento do motor de passo utilizando o BoosterPack desenvolvido:
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
/**************************************************************************************************************************************************************************** Projeto: Motor de Passo Autor: Evandro Teixeira ****************************************************************************************************************************************************************************/ #include "io430.h" #include "stdio.h" // Variaveis Globais unsigned int ADC; unsigned int temp; unsigned int temp_off; // Prototipo das Funções void iniMSP(void); void delay (unsigned int t); void read_adc(void); int main(void) { iniMSP(); while(1) { read_adc(); temp = 2000 + (50*ADC); temp_off = 1000 + (10*ADC); P1OUT = 160; delay(temp); P1OUT = 0; delay(temp_off); P1OUT = 64; P2OUT = 1; delay(temp); P1OUT = 0; P2OUT = 0; delay(temp_off); P2OUT = 18; delay(temp); P2OUT = 0; delay(temp_off); P2OUT = 36; delay(temp); P2OUT = 0; delay(temp_off); } } /**************************************************************************************************************************************************************************** Inicializa o MSP430 ****************************************************************************************************************************************************************************/ void iniMSP(void) { WDTCTL = WDTPW + WDTHOLD; ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupcao habilitada ADC10CTL1 = INCH_1; // input A1 ADC10AE0 |= 0x02; // PA.1 ADC option select P1DIR |= 0xfD; // DEFINE PORT P1 COMO SAIDA P2DIR |= 0xff; // DEFINE PORT P2 COMO SAIDA } /**************************************************************************************************************************************************************************** Função Deley ****************************************************************************************************************************************************************************/ void delay(unsigned t) { do (t--); while (t != 0); } /**************************************************************************************************************************************************************************** Função Read_ADC ****************************************************************************************************************************************************************************/ void read_adc(void) { ADC10CTL0 |= ENC + ADC10SC; // Inicio da amostra e conversao __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR forca saida ADC = ADC10MEM; // ATRIBIU DA CONVERSÃO PARA VARIAVEL ADC } // ADC10 ISR (Interrupt Service Routine) #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) { __bic_SR_register_on_exit(CPUOFF); // Limpa bit CPUOFF do 0(SR) } /**************************************************************************************************************************************************************************** |
Conclusão
A seguir os pontos positivos e negativos.
Pontos Positivos
Os motores de passo possuem como vantagem em relação aos outros tipos de motores disponíveis os seguintes pontos:
- Seguem uma lógica digital: Diz-se que o motor de passo segue uma lógica digital, pois seu acionamento é feito através de pulsos elétricos que ativam sequencialmente suas bobinas, fazendo o rotor se alinhar com as mesmas e, assim, provocando um deslocamento do mesmo;
- Alta precisão em seu posicionamento: O posicionamento do motor de passo é preciso uma vez que o rotor sempre se movimentará em ângulos bem determinados, chamados “passos”, cujo erro de posicionamento é pequeno e não acumulativo (em geral 5%);
- Precisão no torque aplicado: As variações no torque aplicado por um motor de passo são pequenas, tendo em vista seu funcionamento;
- Excelente resposta à aceleração e desaceleração: O movimento que um motor de passo produz é resultado das ativações em sequência de suas bobinas. A resposta para tais solicitações de aceleração e desaceleração é rápida pois o rotor se alinha rapidamente com a(s) bobina(s) que se encontra(m) energizada(s).
Pontos Negativos
Em relação com outros tipos de motores, podemos destacar os seguintes fatos como desvantagens no uso de motores de passo:
- Baixo desempenho em altas velocidades: O aumento de rotação no motor de passo (sua aceleração) é gerado pela variação no tempo entre o acionamento de uma bobina e a seguinte. Entretanto é necessário um rápido chaveamento de um solenóide energizado para outro, de forma que tal velocidade seja mantida, o que muitas vezes é complexo e pouco eficiente;
- Requer certo grau de complexidade para ser operado: Pelo fato de usar uma lógica digital não basta apenas ligar o motor de passo a uma fonte de energia, que o mesmo começará a girar sem parar. Sua complexidade reside no fato de ser necessário um aparato para controlá-lo, ativando sequencialmente seus solenóides. O “custo computacional” e a complexidade do dispositivo de controle cresce à medida que o número de passos aumenta, uma vez que mais passos requerem um maior número de terminais (fios) a serem ativados e controlados;
- Ocorrência de ressonância por controle inadequado: Como todos os objetos que existem, o motor de passo também tem uma frequência de ressonância. Caso as revoluções do mesmo se dê nesta frequência, este pode começar a oscilar, aquecer e perder passos. Este problema pode ser contornado mudando-se o modo de operação do motor: utilizando-se meio-passo ou o passo completo (“full-step”) com as bobinas energizadas duas a duas.
Ola Evandro teixeira tudo bom?
gostaria em fazer uma pergunta, como posso gravar a rotaçao de uma motor de passo em um sistema embarcado, posso monitorar os pulsos que o motor gera ao rotacinar o motor manualmente?
Olá boa tarde.
É possível desenvolver um algoritmo mais elaborador que possa contar o numero de pulso, o periodo etc.
Existe também solução dedica a controle de motor de passo,
https://eletronicos.mercadolivre.com.br/pecas-componentes/ci-l6203-para-driver-motor
http://www.ti.com/motor-drivers/stepper-driver/Applications.html
Evandro nesse esquemático elétrico do BoosterPack o que seriam esses J1, J2, J3, J4 e U2?