quinta-feira, 4 de setembro de 2014

Fazendo o motor funcionar

Tudo começou na eletrônica. Foi a primeira parte que foi feita. 

A configuração básica é uma combinação do arduino (que posteriormente foi substituído pelo microcontrolador atmega328), placa controladora OSMC e o motor Ampflow A28-400.

Arduino (posteriormente apenas o atmega328)
OSMC
Ampflow A28-400



Inicialmente apenas fiz a placa OSMC funcionar com o arduino para fazer o motor girar. Tive alguns problemas com a minha placa OSMC, pois ela tinha alguns resistores queimados quando comprei, mas isso foi uma particularidade da minha placa, que não deve ocorrer com outras pessoas (essa história fica para outro post).

Foi difícil de encontrar na internet um simples desenho de qual pino é qual no conector que existe na OSMC, então segui o caminho das trilhas na placa e consegui encontrar o seguinte esquema de pinos:

Pinos da placa OSMC

Os dois primeiros são o GROUND (lembre-se de que todos os componentes do seu projeto devem ter um ground comum). Eles são conectados um no outro. Os pinos BLI, BHI, ALI e AHI são utilizados para controlar o motor. Disable desabilita a placa OSMC. O pino Bat. Volt pode ser lido por uma entrada analógica para verificar a voltagem da bateria. Os dois últimos são uma saída regulada de 12V da placa OSMC.

Um bom companheiro que me ajudou demais a entender o funcionamento da placa foi o datasheet do chip HIP4081AIPZ (http://www.intersil.com/content/dam/Intersil/documents/hip4/hip4081a.pdf), que é o chip de ponte H que controla a placa OSMC. Esse chip é uma ponte H específica para trabalhar com mosfets necessários para lidar com a alta amperagem para movimentar o motor. Se você nunca mexeu com uma ponte H, recomendo que leia o artigo da Wikipedia sobre pontes H e faça testes usando um arduino e um chip simples como o L293D ou o L298N (uma busca simples por "L293D arduino" no Google traz uma infinidade de tutoriais de como fazer um motor elétrico girar nas duas direções).

Pequeno teste para botar o motor para girar

Voltando à placa OSMC (e inevitavelmente ao chip HIP4081AIPZ), os controles básicos dela são feitos pelas portas AHI, BHI, ALI e BLI. Fuçando aqui e ali, pesquisando e testando, cheguei à uma combinação simples onde podemos ligar AHI e BHI em nível lógico 1 (HIGH) e controlar a velocidade de giro para um lado ou para o outro ligando ALI e BLI em portas com capacidade de enviar sinais PWM. Quando se quer girar para um lado, envia-se o sinal PWM na porta ALI e liga-se BLI em nível lógico 0 (LOW). Ao passo que para o outro lado, invertem-se as portas: envia-se o sinal PWM na porta BLI e liga-se ALI em nível lógico 0 (LOW).

Para frear, pode-se fazer de duas formas. AHI e BHI ligados em HIGH e ALI e BLI ligados em LOW, faz o motor frear. No meu caso, eu não precisava disso...precisava de um estado onde o motor apenas não funcionasse, que ele agisse como botar o carro no "ponto morto". Para que o motor aja desta forma, apenas bota-se todos os pinos (AHI, BHI, ALI e BLI) em nível lógico 0 (LOW).

Eu gosto de ver código. Muito texto embaralha as minhas ideias! Vou botar uns exemplos aqui de como fazer essa parada girar.
for (int i = 0; i < 255; i += 1) {
digitalWrite(disable, LOW);
digitalWrite(AHI, HIGH);
digitalWrite(BHI, HIGH);
analogWrite(ALI, i);
digitalWrite(BLI, LOW);
delay(100);
}
Agora sim estamos falando! O código acima escreve LOW no pino disable (só se escreve HIGH neste pino quando se quer realmente desabilitar a placa OSMC), HIGH nos pinos AHI e BHI, LOW no pino BLI e controla a velocidade do giro mandando o sinal PWM pro pino ALI. Dessa forma ele gira pra um lado, variando a velocidade desde 0 até 255 - pela intensidade do sinal do PWM.

for (int i = 0; i < 255; i += 1) {
digitalWrite(disable, LOW);
digitalWrite(AHI, HIGH);
digitalWrite(BHI, HIGH);
analogWrite(BLI, i);
digitalWrite(ALI, LOW);
delay(100);
}
Já este código faz quase tudo igual ao código acima, mas como queremos girar para o outro lado, desta vez ele escreve LOW no pino ALI e controla a velocidade do motor enviando o sinal PWM no pino BLI.

Veja abaixo um teste que fiz com o motor sendo controlado pela placa OSMC.

Pequeno teste para botar o motor para girar

No vídeo acima, mexi apenas nos pinos ALI e BLI, primeiro variando de 0 a 255 e depois de 255 a 0 o pino ALI e depois fazendo o mesmo processo com o pino BLI.

Repara-se no vídeo que o motor faz um barulho chato e estridente. Isso depende da frequência do PWM que se envia para o motor. Eu já fiz alguns testes e consegui chegar numa frequência que não me dá barulho nenhum no motor :) - Isso se verifica nos vídeos em que já estou testando o skate. Se você está tendo problemas com excesso de barulho e falta de torque nos seus motores DC, recomendo a leitura do seguinte artigo:
No próximo post, explicarei como fiz para medir o ângulo de inclinação, tipo de filtro utilizado e os dispositivos necessários para a medição.

Abraços!!

Nenhum comentário:

Postar um comentário