четверг, 27 февраля 2014 г.

Апгрейд мозгов

Не так давно отдал свою плату Arduino человеку, который не может заказать себе новую, так что временно остался без мозгов :)

Опять же, давно думал о переходе на что-то более мощное и универсальное — в частности, ARM.

И вот на днях заказал Raspberry Pi Model B. Как только она приедет, можно будет продолжать эксперименты. Stay tuned :)

пятница, 20 сентября 2013 г.

Вторая жизнь старого жесткого диска: крутим мотор с помощью MTD6501C

Привет!


Сегодня я хочу рассказать (и показать) вам о первом шаге на пути к летающим аппаратам. Речь пойдет о двигателях, которые вращают пропеллеры самолёта.

Почитав немножко форумы авиамоделистов, я понял, что из электрических двигателей наиболее в ходу бесколлекторные движки. Но их использование сопряжено с одной трудностью: ввиду своей конструкции их нужно кормить не постоянным током, а тремя синусоидальными токами. Нужно это для того, чтобы по очереди включать катушки двигателя, заставляя магнитный сердечник совершать еще одну часть оборота. Подробнее про такие движки можно почитать здесь.

После некоторых поисков и экспериментов (пытался в качестве драйвера использовать Arduino, безуспешно) я нашел одно компактное и простое решение: MTD6501C от Microchip.

Характеристики микросхемки внушительные: способность работать с питанием от 2 до 14 вольт, встроенная защита от короткого замыкания, перегрева и блокировки мотора, управление посредством ШИМ и/или питающего напряжения. Ну просто сказка! В даташите к этой железячке есть схема подключения с необходимой обвязкой, которую я распаял на макетной плате (и ведь не поленился же, доехал до Чип-и-Дипа:).



Здесь красный, зеленый и синий проводки идут к катушкам мотора, оранжевый нужно соединить с землей на контроллере, белый подключить к питанию (в своем эксперименте я использовал +5В на Arduino), еще один красный (тот, что уходит вниз) — управляющий контакт, на него подаём ШИМ. Как видите, всё просто.

Собственно, вот как это всё ведет себя будучи включенным:



Здесь я распаял еще пару кнопок для изменения скорости, делал вот по этому руководству.
Ниже скетч, который рулит контроллером в этом видео:


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 двигатель ведет себя несколько нестабильно: видимо, нужно дополнительно пошаманить с обвязкой.

На этом всё. Оставляйте свои комментарии, и спасибо за внимание!

четверг, 29 августа 2013 г.

init

Привет, и добро пожаловать!

Сегодня я решил создать блог, в котором мог бы рассказать о своих экспериментах с электроникой.

Немного предыстории.
Меня давно восхищают самолеты, до сих пор воспринимаю их как некое чудо! :) Когда-то даже мечтал о работе, связанной с авиацией, но не подхожу по физическим параметрам.
Еще одна вещь, от которой я без ума — это роботы. То, что железка может выполнять какие-то сложные манипуляции под управлением компьютера — это же восхитительно! Благодаря этим малым мы можем значительно улучшить нашу жизнь, и я рад жить во время, когда роботы как раз приходят нам на помощь.
Ну, и так уж вышло, что я работаю программистом, да и вообще люблю ковыряться в компьютерах и прочем железе :)

Этот проект есть попытка совместить оба этих направления в одном: делать маленькие самолеты, способные выполнять какую-нибудь полезную работу — например, перевозить грузы из пункта А в пункт Б. Пока требования простые: устройство должно стабильно двигаться в воздухе, ориентироваться в пространстве с помощью GPS/Глонасс, уметь выполнять взлет и посадку (и оставаться после этого рабочим), по возможности обмениваться данными с компьютером.

Теперь о том, с чем я начинаю. В арсенале на данный момент у меня есть: плата с контроллером Arduino Mega 2560, парочка сервоприводов SG90, пять микросхем MTD6501C для управления двигателями, и несколько трехфазных бесколлекторных движков из жестких дисков (разместив ВКонтакте объявление, я нашел людей, отдавших мне старые, но рабочие винчестеры, спасибо им большое!). Разумеется, компьютер, оборудование для пайки и ЛУТ, батарейки и прочая мелочь имеется.

Следующий пост будет о микросхемках-драйверах MTD6501C и о том, как бодро они крутят шпиндель :)

Буду рад и благодарен за любые комментарии и конструктивную критику.
Спасибо за внимание!