Um dos principais objetivos da robótica é a articulação de objetos. Para isso, é muito comum usar motores elétricos. No caso de robôs voadores, como os drones, os atuadores precisam de alta velocidade de rotação para girar as hélices e permitir o voo. Neste caso, os motores sem escovas (ou brushless) são frequentemente utilizados. A sua particularidade é poder atingir velocidades muito altas em comparação a outros tipos de motores – com um torque mais baixo, é claro.
Material
- Computador
- Arduino UNO
- Cabo USB A Macho/B Macho
- Brushless+ESC
Princípio de funcionamento
Os motores sem escovas são motores com três bobinas, chamados motores trifásicos. Isto significa que eles geram uma rotação contínua quando defasamos as correntes sobre as bobinas. A geração de perfis de corrente em cada bobina, para obter a velocidade desejada, requer o uso de um controlador de velocidade (chamado ESC, Electronic Speed Controller) a fim de transformar um comando PWM numa velocidade de rotação.
Esquema
O motor requer uma corrente elevada para funcionar bem, então o ESC será alimentado por uma fonte de energia externa ao microcontrolador. O controle do ESC é ligado a um pino PWM do microcontrolador.
Código
Cada vez que o código é iniciado, o ESC deve seguir um procedimento específico para se inicializar corretamente. Este procedimento é descrito na função initProcedure() e consiste numa sucessão de comandos PWM por um certo período de tempo (correspondente aos sinais dos comandos via rádio).
//Parameters const int escPin = 3; int min_throttle = 1000; int max_throttle = 2000; unsigned long currentMillis, previousMillis; void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); //Init ESC pinMode(escPin, OUTPUT); initProcedure(); } void loop() { runBrushless(); } void runBrushless() { /* function runBrushless */ //// Test Brushless routine Serial.println("running"); currentMillis = 0; previousMillis = millis(); while (currentMillis < 2000) { currentMillis = millis() - previousMillis; digitalWrite(escPin, HIGH); delayMicroseconds(1350); digitalWrite(escPin, LOW); delay(20); } Serial.println("stop"); currentMillis = 0; previousMillis = millis(); while (currentMillis < 2000) { currentMillis = millis() - previousMillis; digitalWrite(escPin, HIGH); delayMicroseconds(min_throttle); digitalWrite(escPin, LOW); delay(20); } } void initProcedure() { /* function initProcedure */ //// ESC inittialisation process previousMillis = millis(); Serial.println("throttle up"); while (currentMillis < 3000) { currentMillis = millis() - previousMillis; Serial.println(currentMillis); digitalWrite(escPin, HIGH); delayMicroseconds(max_throttle); digitalWrite(escPin, LOW); delay(20); } //beep- beep- currentMillis = 0; previousMillis = millis(); Serial.println("throttle down"); while (currentMillis < 4500) { currentMillis = millis() - previousMillis; Serial.println(currentMillis); digitalWrite(escPin, HIGH); delayMicroseconds(min_throttle); digitalWrite(escPin, LOW); delay(20); } // beep-- // 1 2 3 }
Resultado
Quando a placa Arduino é ligada e o código é executado, o ESC emite sons para informar o seu progresso na inicialização (dois bipes curtos e um longo). O motor deve então começar a funcionar.
Aplicações
- Fazer um drone voar
- Impulsionar um barco controlado à distância
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie