====== Strela: инструкция, примеры использования и документация ====== [[amp>product/strela|Strela]] — это Arduino-совместимая платформа, разработанная Амперкой и предназначенная для уменьшения времени на постройку роботов и упрощения работы с ними. Она выполнена на основе микроконтроллера ATMega32u4 и обладает большим количеством цифровых и аналоговых входов/выходов, выведенных на [[сенсоры:3-провода|трёхштырьковые контакты]]. Плата содержит DC-DC-преобразователь, позволяет управлять двумя коллекторными моторами постоянного тока до 2 А на один канал с напряжением до 24 В, подключать модули беспроводной связи и LCD-экран. {{ :продукты:strela:strela.0.png?nolink& |}} ===== Краткое руководство по использованию ===== Плата программируется в [[articles:arduino-ide-install|Arduino IDE]]. Для начала работы с платой достаточно выбрать в меню //Инструменты → Плата → Arduino Leonardo// и соответствующий COM-порт. ==== Управление GPIO ==== {{ :продукты:strela:gpio.png?nolink& |}} Часть контактов на платформе Strela относятся к основному микроконтроллеру, а часть — к I²C-расширителю портов ввода-вывода. На аппаратном уровне доступ к этим портам ввода-вывода очень сильно различается, но вы можете не переживать по этому поводу. Для облегчения работы с платой в среде Arduino IDE была создана библиотека [[https://github.com/amperka/Strela|Strela]]. Все примеры будут с этой библиотекой. Простой пример управления этими контактами: // Подключим библиотеку для работы с I2C-расширителем портов #include // Подключим библиотеку Strela #include void setup() { uPinMode(P9, OUTPUT); // это Arduino GPIO. Мы настроим его на выход uPinMode(P10, OUTPUT); // а это — I²C-GPIO. Его мы тоже настроим на выход } void loop() { uDigitalWrite(P9, HIGH); // подадим на P9 высокий уровень uDigitalWrite(P10, HIGH); // подадим на P10 высокий уровень delay(1000); uDigitalWrite(P9, LOW); // подадим на P9 низкий уровень uDigitalWrite(P10, LOW); // подадим на P10 низкий уровень delay(1000); } Легко можно обнаружить, что разница в управлении контактами Arduino и контактами I²C-расширителей портов отсутствует, если использовать функции ''uPinMode'', ''uDigitalWrite'' и ''uDigitalRead'' из библиотеки Strela вместо привычных ''pinMode'', ''digitalWrite'' и ''digitalRead''. Конечно, можно использовать и привычные функции управления цифровыми контактами, но они будут работать только с Arduino-контактами. Остальные функции для работы с контактами, такие как ''analogWrite'' или ''analogRead'' остаются без изменения и работают только с предназначенными для них Arduino-контактами. Обратите внимание на обозначение пинов в коде. Вместо привычных цифр, которые используются в Arduino Leonardo, для обозначения номеров контактов используются значения P9 и P10. Это сделано для унификации доступа к контактам с различным способом управления, а также для упорядочивания пинов. Давайте теперь считаем уровень с ножек: // Подключим библиотеку для работы с I2C-расширителем портов #include // Подключим библиотеку Strela #include void setup() { uPinMode(P9, INPUT); // это Arduino GPIO. Мы настроим его на вход uPinMode(P10, INPUT); // а это — I²C-GPIO. Его мы тоже настроим на вход Serial.begin(9600); //Подготовим к работе Serial-порт while (!Serial) { // Так как Strela работает на том же контроллере, что и Arduino Leonardo, ; // необходимо дождаться подключения виртуального Serial-порта } } void loop() { Serial.print("P9 - "); //Считаем значение с P9 // и отправим его в последовательный порт Serial.println(uDigitalRead(P9)); Serial.print("P10 - "); //Считаем значение с P10 // и отправим его в последовательный порт Serial.println(uDigitalRead(P10)); delay(500); } Если посмотреть в терминал, можно увидеть первое отличие — порт P10 будет возвращать 1, а порт P9 — случайное значение. Это происходит потому, что I²C-расширитель портов на своих входах имеет встроенный подтягивающий резистор на 100 кОм. Обычно это нисколько не мешает. ==== Встроенные кнопки и светодиоды ==== Работать со встроенными кнопками и светодиодами можно при помощи тех же функций ''uDigitalRead'' и ''uDigitalWrite''. Так как заранее известно, что светодиоды должны управляться цифровым выходом, а считывать нажатие кнопки нужно с цифрового входа, функция ''uPinMode'' для этих контактов ни к чему не приводит. Их даже не нужно указывать в секции ''setup'', так как библиотека Strela инициализирует периферию автоматически. // Подключим библиотеку для работы с I2C-расширителем портов #include // Подключим библиотеку Strela #include void setup() { } void loop() { uDigitalWrite(L1, HIGH); // Зажгём перывый светодиод delay(1000); uDigitalWrite(L1, LOW); // И погасим его delay(1000); } В следующем примере мы будем считывать значение с кнопок и зажигать светодиоды. Будем зажигать светодиод под тем же номером, что и нажатая кнопка. // Подключим библиотеку для работы с I2C-расширителем портов #include // Подключим библиотеку Strela #include void setup() { } void loop() { for (byte i = S1; i <= S4; ++i) // Будем проверять состояние кнопок по очереди { byte buttonNumber = i - S1; //Определим номер текущей кнопки bool buttonState = uDigitalRead(i); //Считаем положение кнопки //Подадим считанное значение с кнопки на светодиод с тем же номером uDigitalWrite(L1 + buttonNumber, buttonState); } } ==== Пищалка ==== Добавим к предыдущему скетчу звуковое сопровождение: // Подключим библиотеку для работы с I2C-расширителем портов #include // Подключим библиотеку Strela #include void setup() { } void loop() { for (byte i = S1; i <= S4; ++i) // Будем проверять состояние кнопок по очереди { byte buttonNumber = i - S1; //Определим номер текущей кнопки bool buttonState = uDigitalRead(i); //Считаем положение кнопки if (buttonState) //Если она была нажата... tone(BUZZER, 1000, 50); //...пикнем пищалкой с частотой 1000 Гц, 50 мс //Подадим считанное значение с кнопки на светодиод с тем же номером uDigitalWrite(L1 + buttonNumber, buttonState); } } ==== Управление коллекторными двигателями ==== {{ :продукты:strela:strela-motors.png?nolink& |}} Теперь перейдём к работе с двигателями. О характеристиках рекомендуемых двигателей и источников питания можете прочитать в разделе [[продукты:strela?&#силовая_часть|«Силовая часть»]]. // Подключим библиотеку для работы с I2C-расширителем портов #include // Подключим библиотеку Strela #include void setup() { motorConnection(1, 0);// Я неправильно прикрутил один мотор //поэтому, чтобы их не перекручивать //можно воспользоваться этой функцией. //Направление вращения мотора 1 будет изменено. } void loop() { //Моторы управляются функцией drive(int m1, int m2). //m1 (m2) - это скорость вращения мотора 1 (2). //Скорость регулируется в пределах от -255 до 255 //Если это число положительное - мотор будет вращаться вперёд, //если отрицательное - назад. //Фаза 1 uDigitalWrite(L1, HIGH); // Зажгли светодиод 1 drive(127, 127); //Средний ход вперёд delay(2000); // в течении 2 секунд. //Фаза 2 uDigitalWrite(L2, HIGH); // Зажгли светодиод 2 drive(127, 0); //Поворот на право delay(1000); // в течении 1 секунды //Фаза 3 uDigitalWrite(L3, HIGH); // Зажгли светодиод 3 drive(-255, -255); //Полный назад delay(1000); // в течении 1 секунды //Фаза 4 uDigitalWrite(L4, HIGH); // Зажгли светодиод 4 for (int i = 0; i <= 255; ++i) { drive(i, -i); //Разворот на месте с ускорением delay(1); } //Фаза 5 drive(0, 0); //Стоп for (int i = L1; i <= L4; i++) { uDigitalWrite(i, LOW); // Гасим все светодиоды } // Всё, приехали while (true) ; } ==== Управление шаговым двигателем ==== {{ :продукты:strela:strela_stepper.png?nolink& |}} // Подключим библиотеку для работы с I2C-расширителем портов #include // Подключим библиотеку Strela #include void setup() { } void loop() { // Шаговый двигатель управляется при помощи // функции stepperMotor(int stepsToMove, int stepDelay); // stepsToMove — это количество шагов которые должен // сделать шаговый двигатель. // Если это число положительное — мотор крутится в одну сторону, // если отрицательное - в другую. // stepDelay — это пауза между шагами в миллисекундах. // От этой величины зависит скорость вращения мотора. // Чем больше пауза, тем медленнее вращается мотор // Функция stepperMotor() управляет врщением мотора только в // полушаговом режиме. В этом режиме шаговый двигатель // развивает наибольшую мощность и точность позиционирования. // Быстро шагаем 200 раз вперёд stepperMotor(200, 5); // Медленно шагаем 200 раз назад. // Мотор вернётся в исходное положение stepperMotor(-200, 10); } ==== Жидкокристаллический дисплей ==== {{ :продукты:strela:strela-lcd.png? |}} Подключим к плате LCD-экран [[http://files.amperka.ru/datasheets/MT-08S2A.pdf|MT-08S2A]]. Управлять мы им будем при помощи библиотеки [[https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads|LiquidCrystal_I2C]]. Мы уже добавили гарантированно работающую версию этой библиотеки в папку с библиотекой [[https://github.com/amperka/Strela|Strela]], поэтому отдельно её устанавливать не нужно. // Подключим библиотеку для работы с I2C-расширителем портов #include // Подключим библиотеку Strela #include // Подключим библиотеку для работы с LCD-эраном через I2C #include // Создадим объект lcd, который будет выводить текст на экран LiquidCrystal_I2C lcd(LC_ADDR, LCEN, LCRW, LCRS, LC4, LC5, LC6, LC7); void setup() { //Инициализация экрана. У нашего экрана 8 символов 2 строки lcd.begin(8, 2); //Переместим курсор в начало первой стройки (символ 0, строка 0) lcd.home(); //Печатаем строку lcd.print("Hello"); //Переместим строку в начало второй строки (символ 0, строка 1) lcd.setCursor(0, 1); //Печатаем строку lcd.print("World!"); //Пауза, чтобы успеть насладиться результатом delay(2000); } void loop() { // Далее будем просто выводить время прошедшее со старта скетча //Очищаем экран lcd.clear(); // выставляем курсор в положение 0, 0 lcd.home(); // Пишем первую строку lcd.print("Uptime:"); // переместим курсор в начало второй строки lcd.setCursor(0, 1); // узнаем время прошедшее со старта скетча в миллисекундах unsigned long time = millis(); // и выведем его на экран lcd.print(time); //Пауза, чтобы успеть насладиться результатом delay(500); } ==== Управление через ИК приемник ==== Одним из самых простых способов управления роботом, является управление инфракрасный пультом. Подключите [[amp>product/ir-receiver|ИК приемник]] в специальный разъем. {{ :продукты:strela:strela_ireceiver.png?nolink |}} Для работы С ИК приемником мы изменили библиотеку IRremote, скачать которую можно здесь {{:продукты:strela:irremote.zip|}} // бибилиотека для работы со стрелой #include // бибилиотека для ИК приёмника #include // даем имя пину подключения ИК приёмника int RECV_PIN = P12; // даем имя пину на котором расположен встроенный светодиод int LED_PIN = L1; // указываем к какому пину подключен ИК приёмник IRrecv irrecv(RECV_PIN); decode_results results; void setup() { // инициируем открытие сериал порта и указываем его скорость Serial.begin(9600); // запускаем работу ИК приемника irrecv.enableIRIn(); } void loop() { // принимаем данные с ИК пульта if (irrecv.decode(&results)) { // выводим данные в сериал монитор в 16-тиричной системе Serial.println(results.value, HEX); // код нашей кнопки "вкл" "1689D02F" // У вас он будет дугой // проверяем совпадают ли данные с пульта с данными, // которые передает пульт при нажатии нашей кнопки // перед строкой данных соответствующих кнопкам // ставится 0х , что обозначает 16-тиричную систему исчислений if (results.value == 0x1689D02F) { // если совпадают- включаем светодиод uDigitalWrite(LED_PIN, HIGH); } // если ИК приемник получает данные соответствующие // нажатию другой нашей кнопки на пульте- выключаем светодиод if (results.value == 0x1689E01F) { uDigitalWrite(LED_PIN, LOW); } // ждем следующее значение irrecv.resume(); } //делаем задержку delay(100); } ==== Управление роботом с мобильного телефона через Bluetooth-модуль ==== {{ :продукты:strela:bluetoothandmotors.png?nolink& |}} Подключим к плате [[amp>product/bluetooth-bee|Bluetooth Bee]]. Будем управлять нашим роботом дистанционно с помощью мобильного телефона на ОС Android. Для Android существует огромное количество приложений, при помощи которых можно управлять Arduino при помощи Bluetooth. В данном случае для управления Strela мы использовали [[https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller|Arduino Bluetooth RC Car]]. //Arduino Bluetooth RC Car in Strela //Original App: //https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller #include // Библиотека для работы с I2C #include // Библиотека для работы со Стрелой int velocity = 0; //Здесь будет храниться значение скорости int defaultSpeed = 100; // это число мы будем использовать в логике поворотов void setup() { Serial1.begin(9600); //Bluetooth Bee по умолчанию использует эту скорость motorConnection(1, 0); // Я неправильно прикрутил один мотор //поэтому, чтобы их не перекручивать //можно воспользоваться этой функцией. //Направление вращения мотора 1 будет изменено. } void loop() { if (Serial1.available() > 0) //Если появились новые команды { control(); //вызываем функцию управления } //Здесь можно написать ещё много своего кода } void control() // функция управления { char dataIn = Serial1.read(); //Считаем значение пришедшей команды if (dataIn == 'F') //Если пришла команда "F" drive(velocity, velocity); //едем вперёд else if (dataIn == 'B') //или если пришла команда "B" drive(-velocity, -velocity); //едем назад else if (dataIn == 'L') //или если пришла команда "L" drive(-velocity, velocity); //поворачиваем налево на месте else if (dataIn == 'R') //или если пришла команда "R" drive(velocity, -velocity); //поворачиваем направо на месте else if (dataIn == 'I') //или если пришла команда "I", едем вперёд и направо drive(defaultSpeed + velocity, defaultSpeed - velocity); else if (dataIn == 'J') //или если пришла команда "J", едем назад и направо drive(-defaultSpeed - velocity, -defaultSpeed + velocity); else if (dataIn == 'G') //или если пришла команда "I", едем вперёд и налево drive(defaultSpeed - velocity, defaultSpeed + velocity); else if (dataIn == 'H') //или если пришла команда "H", едем назад и налево drive(-defaultSpeed + velocity, -defaultSpeed - velocity); else if (dataIn == 'S') //или если пришла команда "S", стоим drive(0, 0); else if (dataIn == 'U') //или если "U", зажигаем "передние фары" { uDigitalWrite(L2, HIGH); uDigitalWrite(L3, HIGH); } else if (dataIn == 'u') //или если "u", гасим "передние фары" { uDigitalWrite(L2, LOW); uDigitalWrite(L3, LOW); } else if (dataIn == 'W') //или если "W", зажигаем "задние фары" { uDigitalWrite(L1, HIGH); uDigitalWrite(L4, HIGH); } else if (dataIn == 'w') ////или если "w", гасим "задние фары" { uDigitalWrite(L1, LOW); uDigitalWrite(L4, LOW); } // если к нам пришло значение от 0 до 9 else if (((dataIn - '0') >= 0) && ((dataIn - '0') <= 9)) velocity = (dataIn - '0') * 25; //сохраняем новое значение скорости else if (dataIn == 'q') //если "q" - полный газ! velocity = 255; } Вот что из этого получилось: {{youtube>WyJQ7y7ito0?large}} ===== Элементы платы ===== Теперь рассмотрим подробнее все компоненты и разъёмы, которые можно встретить на плате с точки зрения схемотехники. ==== Микроконтроллер ATmega32u4==== {{ :продукты:strela:strela-elem-amega.png?nolink& |}} В плате использован микроконтроллер **ATMega32u4** с прошитым загрузчиком Arduino Leonardo. Микроконтроллер программируется через USB-порт в [[arduino-быстрый-старт:start|Arduino IDE]]. Работая с платой в Arduino IDE, необходимо выбирать плату Arduino Leonardo. == Контакты для управления мощной нагрузкой == Контакты питания пинов **P1–P4** соединены короткими и широкими контактными дорожками с DC–DC преобразователем. Это позволяет подключать к этим контактам достаточно мощную нагрузку, например [[робототехника:сервоприводы|сервоприводы]]. Так же они подходят для подключения [[сенсоры:цифровые|цифровых сенсоров]]. == Контакты для аналоговых датчиков == Пины **P4-P9**, а так же **P11** и **P12** могут быть использованы не только как цифровые входы/выходы. Они так же подходят для подключения [[сенсоры:аналоговые|сенсоров с аналоговым сигналом]]. == Соответствие контактов Strela и Arduino Leonardo == ^ Strela ^ Arduino Leonardo ^ Доступные функции ^ | **P1** | 11 |Цифровой вход/выход, [[конспект-arduino:шим|ШИМ]].| | **P2** | 13 |Цифровой вход/выход, [[конспект-arduino:шим|ШИМ]].| | **P3** | 5 |Цифровой вход/выход, [[конспект-arduino:шим|ШИМ]].| | **P4** | 6, A7 |Цифровой вход/выход, [[конспект-arduino:шим|ШИМ]], аналоговый вход.| | **P5** | A3 |Цифровой вход/выход, аналоговый вход.| | **P6** | A2 |Цифровой вход/выход, аналоговый вход.| | **P7** | A1 |Цифровой вход/выход, аналоговый вход.| | **P8** | A0 |Цифровой вход/выход, аналоговый вход.| | **P9** | 8, A8 |Цифровой вход/выход, аналоговый вход.| | **P11** | A4 |Цифровой вход/выход, аналоговый вход.| | **P12 (IR)** | A5 |Цифровой вход/выход, аналоговый вход. Strela использует этот же контакт как **вход для ИК-приёмника**. Управление с бытового ИК-пульта управления возможно с помощью библиотеки [[https://github.com/shirriff/Arduino-IRremote|IRremote]].| == Контакты специального назначения == Некоторые стандартные контакты имеют специальное назначение, поскольку именно они управляют установленным на Strela оборудованием, или отвечают за коммуникацию. ^ Контакты Arduino Leonardo ^ Конфигурация ^ Функция ^ | 12 | OUTPUT | Пищалка — встроенный [[конспект-arduino:пьезодинамик|пьезодинамик]], который воспроизвоидт звук с помощью стандартной функции [[конспект-arduino:терменвокс?s[]=tone|tone()]].| | 7 | INPUT | Этот контакт подключён к I2С-расширителям портов, для обнаружения изменения напряжения на их входах. Этот контакт можно использовать для [[конспект-arduino:перетягивание-каната?s[]=attachinterrupt|прерывания основной программы по изменению уровня]].| | 9 | OUTPUT |Подключён к драйверу двигателей. Используется для задания скорости вращения мотора М1 при помощи [[конспект-arduino:шим|ШИМ]].| | 10 | OUTPUT |Подключён к драйверу двигателей. Используется для задания скорости вращения мотора М2 при помощи [[конспект-arduino:шим|ШИМ]].| | 4 | OUTPUT |Подключён к драйверу двигателей. Используется для задания направления вращения мотора М1.| | ~ (PE2) | OUTPUT |Подключён к драйверу двигателей. Используется для задания направления вращения мотора М2.| == Коммуникация == ^ Порт связи ^ Контакты Arduino Leonardo ^ Функция ^ Использование ^ | **Serial** | 0, 1 | RX, TX |Используется для связи по последовательному протоколу с модулем беспроводной связи, если он подключён, или с другими устройствами. Программно передача происходит с помощью [[http://arduino.cc/en/reference/serial|Serial1]]. Если в вашем проекте не используются устройства с последовательным протоколом, эти контакты могут быть использованы как обычные цифровые пины.| | **SPI** | 14, 15, 16 | MISO, SCK, MOSI |SPI-порт доступен на колодке ICSP {{ :продукты:strela:icsp.png?nolink&100|}}. Используется для связи по протоколу SPI. Передача данных происходит с помощью библиотеки [[http://arduino.cc/en/Reference/SPI|SPI]]. Если в вашем проекте не используются периферийные устройства с подключением по SPI, эти контакты могут быть использованы как обычные цифровые пины. Контактная колодка ICSP может использоваться для программирования платы с помощью [[программирование:работа-с-attiny-через-stk500-и-чистый-си|программатора]].| | **I2С(TWI)** | 2, 3 | SDA, SCL |Используются для коммуникации по шине I2С. По этим пинам управляются встроенные I2С-расширители портов, поэтому использовать их в других целях не получится. К ним может быть подключено и другое оборудование, управляемое по I2С. Передача данных происходит с помощью библиотеки [[http://arduino.cc/en/reference/wire|Wire]].| | **USB** | USB-разъём тип B | Виртуальный Serial-порт |Используется для прошивки платы из Arduino IDE и связи по последовательному протоколу с компьютером. Программно передача происходит с помощью [[http://arduino.cc/en/reference/serial|Serial]].| == Площадка для подключения модулей беспроводной связи == {{ :продукты:strela:bee.png?nolink&|}} На плате присутствует площадка для подключения модулей беспроводной связи формата [[беспроводная-связь:настройка-xbee-series-2|XBee]]. Это могут быть модули для связи по протоколу XBee, Bluetooth или Wi-Fi. На площадке установлен линейный регулятор напряжения на 3,3 В. Ведь именно это напряжение является традиционным для XBee-модулей. Общение между модулем беспроводной связи и платой происходит через последовательный интерфейс. При написании кода этот последовательный интерфейс доступен через объект ''Serial1''. При необходимости модули XBee могут перезагружать микроконтроллер ATmega32u4, выставляя на контакте 12 площадки логическую единицу. == Сброс == На плате присутствует переключатель, который бывает полезен при отладке или при подготовке к старту на соревнованиях. В положении «RESET» контакт Reset микроконтроллера замыкается на землю. В таком положении на микроконтроллер подано напряжение, но он не работает. Чтобы запустить микроконтроллер необходимо перевести рычажок в положение «ON». ==== Силовая часть ==== {{ :продукты:strela:strela-elem-power.png?nolink& |}} == Питание == Клеммники под винт для подключения питания на плате обозначены как **PWR**. К ним подключается источник питания, который будет использоваться для питания моторов. Напряжение питания должно быть в пределах 7–24 В постоянного тока. {{:продукты:magic-fogg.png?nolink |}}**//Внимание!//** При подключении питания соблюдайте полярность. Неправильное подключение может привести к непредсказуемому поведению или выходу из строя платы или источника питания. На плате три контура питания. * Первый — //силовой//, напряжение на который приходит с клеммника PWR. От этого контура запитана микросхема **H-моста L298P**, моторы и **DC-DC-преобразователь LM2596-5.0**. {{:продукты:energy_attentions.png?nolink |}}**//Важно!//** Не все источники питания подходят для работы с моторами. Для корректной работы DC-DC преобразователя источники питания должны быть способны обеспечить напряжение выше 7 В при резких скачках нагрузки или при включении моторов на полную мощность. Если источник питания не рассчитан на мощность, необходимую двигателям, просадка напряжения при росте нагрузки ниже 7 В может привести к перезагрузке управляющего контроллера, и связанным с этим неадекватным поведением платы. Этому требованию соответствуют только **литий-ионные** и **никель-металлгидридные** аккумуляторы, или блоки питания необходимой мощности. Поэтому питать робота от обычной "Кроны" не стоит. * Источником напряжения для второго контура питания может быть DC-DC преобразователь или USB. Это контур //управления//. Напряжение в этом контуре — 5 В. От него запитаны микроконтроллер, I2С-расширители, логика H-моста и преобразователь напряжения на 3,3 В для питания модулей беспроводной связи. Это же напряжение подано на все трёхштырьковые контакты. Напряжение в 5 В может быть подано как с USB, так и с клеммника PWR. При этом при подключении по USB будет работать только контур управления, напряжение на H-мосту будет недостаточным для работы двигателей. При одновременном подключении платы по USB и через колодки PWR питание будет подаваться только от PWR. * Третий контур питания используется для питания модуля беспроводной связи и его обвязки через площадку для подключения модулей связи. Напряжение питания в этом контуре — 3,3 В. == Клеммники для подключения двигателей == Клеммники под винт для подключения нагрузки на плате обозначены как **-М1+ -М2+**. Нагрузка разделена на 2 канала. Первый канал на плате имеет обозначение «М1», второй канал имеет обозначение «М2». Каждый канал управляется независимо. Обозначения «+» и «-» показывают воображаемые начало и конец обмотки: если подключить два коллекторных двигателя таким образом, чтобы их одноимённые контакты щёточного узла соответствовали одному и тому же обозначению на плате, то, при подаче на H-мост L298P одинаковых управляющих импульсов, моторы будут вращаться в одну и ту же сторону. == Характеристики драйвера двигателей L298p == ^ Параметр ^ Мин. ^ Макс. ^ Ед. изм. ^ | Напряжение питания двигателей | 7 | 24 | В | | Продолжительный ток на канал * | — | 2 | А | | Пиковый прерывистый ток на канал (80% включение, до 10 мс) | — | 2,5 | А | | Пиковый непрерывный ток на канал (до 100 мкс) | — | 3 | А | * для достижения максимума необходимо дополнительное охлаждение чипа L298P == Характеристики DC-DC преобразователя LM2596-5.0 == ^ Параметр ^ Мин. ^ Номинал. ^ Макс. ^ Ед. изм. ^ | Напряжение питания силовой части | 7 | — | 24 | В | | Выходное напряжение | 4,75 | 5 | 5,25 | В | | Ток нагрузки | — | — | 3 | А | ==== Расширители портов ввода-вывода ==== {{ :продукты:strela:strela-elem-i2c.png?nolink& |}} На плате установлены два I2С-расширителя портов ввода-вывода PCA9554. ^ Адрес ^ Функция ^ | 0×20 |Управление светодиодами L1-L4, получение информации о нажатии кнопок S1-S4.| | 0×21 |Управление контактом P10 и LCD-экраном MT-08S2A при помощи библиотеки [[https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads|LiquidCrystal_I2C]]. Если LCD-экран не используется, можно использовать свободные контакты как дополнительные порты ввода-вывода.| == Характеристики I²С-расширителей портов ввода-вывода PCA9554 == ^ Параметр ^ Номинал. ^ Ед. изм. ^ | Напряжение питания | 5 | В | | Максимальный входной ток одного контакта | 20 | мА | | Максимальный выходной ток одного контакта | 50 | мА | | Максимальный ток через контакты питания | 85 | мА | ==== Индикация ==== {{ :продукты:strela:strela-elem-leds.png?nolink& |}} == Индикация питания платы == При правильном подключении питания через клеммник PWR, загорается светодиод индикации питания. Если полярность питания перепутана, или питание по какой-то причине не подано, светодиод гореть не будет. Из-за большой ёмкости фильтрующего конденсатора, установленного на плате, светодиод индикации питания в некоторых случаях может кратковременно продолжать гореть и после отключения питания. Этот светодиод может тускло гореть при питании платы от USB. == Индикация питания микроконтроллера == Индикатор питания микроконтроллера горит, если на микроконтроллер ATmega32u4 подано напряжение. == Индикация направления и скорости вращения двигателей == При высоком логическом уровне на пине управления направлением вращения, т.е. вращении вперёд, индикатор светится зелёным светом. При этом полярность напряжения на клеммниках для подключения двигателей соответствует обозначению «+» и «-» на плате. При низком уровне, т.е. при реверсе светодиод светится красным цветом. Яркость свечения светодиодов зависит от скорости вращения соответствующих моторов — чем выше скорость, тем ярче светится светодиод. == Индикатор передачи данных по USB == Светодиоды **RX** и **TX** светятся во время передачи данных через виртуальный последовательный интерфейс. При получении данных светится зелёный светодиод RX, при передаче — красный светодиод TX. == Индикаторы передачи данных через беспроводной модуль == * **RSSI** — индикатор мощности сигнала XBee-модулей. Чем ярче горит индикатор, тем больше мощность сигнала принимаемого XBee-модулем. Этот светодиод выполняет свою функцию только с модулями XBee. * **ASC** — индикатор подключения к сети XBee-модулей. Если модуль не подключён, светодиод постоянно горит. Светодиод мигает при подключении к сети. Частота мигания зависит от роли модуля. Подробнее можно узнать из [[https://www.sparkfun.com/datasheets/Wireless/Zigbee/XBee-Datasheet.pdf|технического описания XBee]]. ===== Размеры платы ===== {{ :продукты:strela:размеры.png?direct&650 |}} ===== Ссылки ===== * [[amp>product/strela|Платформа Strela]] в магазине. * [[http://www.youtube.com/watch?v=bF-vQtCNr0I|Видеообзор платформы Strela]] * [[http://files.amperka.ru/schematics/strela-schematic.png|Принципиальная схема платформы Strela]] * [[https://github.com/amperka/Strela|Библиотека Strela для удобства работы с платой]] * [[http://files.amperka.ru/datasheets/ATMega32u4.pdf|Техническое описание ATmega32u4]] * [[http://files.amperka.ru/datasheets/lm2596.pdf|Техническое описание DC-DC-преобразователя LM2596-5.0]] * [[http://files.amperka.ru/datasheets/l298.pdf|Техническое описание H-моста L298P]] * [[http://files.amperka.ru/datasheets/PCA9554_9554A.pdf|Техническое описание расширителя цифровых портов PCA9554]] * [[http://files.amperka.ru/datasheets/MT-08S2A.pdf|Техническое описание LCD-экрана MT-08S2A-2YLG]]