Сегодня я хочу рассказать (и показать) вам о первом шаге на пути к летающим аппаратам. Речь пойдет о двигателях, которые вращают пропеллеры самолёта.
Почитав немножко форумы авиамоделистов, я понял, что из электрических двигателей наиболее в ходу бесколлекторные движки. Но их использование сопряжено с одной трудностью: ввиду своей конструкции их нужно кормить не постоянным током, а тремя синусоидальными токами. Нужно это для того, чтобы по очереди включать катушки двигателя, заставляя магнитный сердечник совершать еще одну часть оборота. Подробнее про такие движки можно почитать здесь.
После некоторых поисков и экспериментов (пытался в качестве драйвера использовать Arduino, безуспешно) я нашел одно компактное и простое решение: MTD6501C от Microchip.
Характеристики микросхемки внушительные: способность работать с питанием от 2 до 14 вольт, встроенная защита от короткого замыкания, перегрева и блокировки мотора, управление посредством ШИМ и/или питающего напряжения. Ну просто сказка! В даташите к этой железячке есть схема подключения с необходимой обвязкой, которую я распаял на макетной плате (и ведь не поленился же, доехал до Чип-и-Дипа:).
Собственно, вот как это всё ведет себя будучи включенным:
Здесь я распаял еще пару кнопок для изменения скорости, делал вот по этому руководству.
Ниже скетч, который рулит контроллером в этом видео:
int motorPin = 9; int motorSpeed = 200; int speedStep = 5; const int upButtonPin = 2; const int downButtonPin = 3; int buttonState = 0; void setup() { // initialize the pushbutton pin as an input: pinMode(upButtonPin, INPUT); pinMode(downButtonPin, INPUT); } void loop() { //process Up button buttonState = digitalRead(upButtonPin); if (buttonState == HIGH) { if(motorSpeed < 255) motorSpeed += speedStep; Serial.println(motorSpeed); } //process down button buttonState = digitalRead(downButtonPin); if (buttonState == HIGH) { if(motorSpeed > 200) motorSpeed -= speedStep; Serial.println(motorSpeed); } analogWrite(motorPin, motorSpeed); delay(100); }
Здесь тоже всё просто: десять раз в секунду считываем состояние кнопок и обновляем скорость при необходимости. Такой узкий диапазон (200..255) я выбрал потому, что между 100 и 200 двигатель ведет себя несколько нестабильно: видимо, нужно дополнительно пошаманить с обвязкой.
На этом всё. Оставляйте свои комментарии, и спасибо за внимание!
