Как работает поворотный энкодер. взаимодействие с ардуино

Обзор серий оптических энкодеров серий EM14 и EN

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

Оптические энкодеры EN и EM14 обладают всеми перечисленными свойствами (таблица 3).

Таблица 3. Серии бесконтактных оптических энкодеров Bourns

Параметр Наименование
EM14 EN
Технология Оптическая
Тип Инкрементальный
Установочный диаметр, мм 14 21×16
Класс защиты IP54 IP40
Фиксация +
Дополнительный выключатель +
Материал вала Металл
Ручка Металл
Монтаж В отверстия или с помощью гибкого кабеля
Разрешение, имп/об 8, 16, 32, 64 25, 50, 64, 100, 125, 128, 200, 256
Максимальная частота вращения, об/мин 120 300; в версии с дополнительным подшипником – до 3000
Уровень выходных сигналов TTL, CMOS, HCMOS TTL, CMOS
Цикличность до сбоя, миллионов оборотов 2 10 или 20

Серия EM14 является оптическим аналогом контактных серий. Максимальная частота для EM14 составляет 120 об/мин, срок жизни увеличен до 2 миллионов оборотов.

Еще одним преимуществом EM14 является базовое исполнение IP54, что делает возможным применение этой серии в промышленных приложениях.

Энкодеры EM14 идеально подходят для построения систем управления в различных областях электроники:

  • в профессиональной аудиотехнике (мониторы, эквалайзеры, гитарные усилители);
  • измерительной технике (осциллографы, анализаторы спектра);
  • авиационной технике (авиационные учебные симуляторы, системы контроля авиатраффика);
  • промышленной технике (управление электродвигателями, промышленные джойстики, пульты операторов);
  • медицинской техника (УЗИ, рентгеновские установки);

Серия EN имеет максимальное разрешение до 256 импульсов на оборот. Это позволяет применять данные энкодеры не только для определения направления и скорости вращения, но и для определения положения ротора электродвигателей и сервоприводов. Дополнительное преимущество серии EN – максимальная частота вращения до 3000 об/мин.

Использование подшипников позволило увеличить срок службы до 200 миллионов оборотов

Эта серия применяется в особо чувствительных приложениях (профессиональная аудиотехника), в промышленной и бытовой автоматизации (сервоприводы).

Оптические энкодеры питаются от напряжения 5 В (рисунок 7). Выходные сигналы каналов не требуют подтяжки и имеют уровень TTL /КМОП.

Рис. 7. Внутренняя схема оптических энкодеров Bourns

Установка

Автоматическая

  • Открой the Arduino IDE
  • Зайди в Файл > Настройки
  • Вставь этот адрес в Дополнительные ссылки для менеджера плат:
  • Открой Инструменты > Плата > Менеджер плат…
  • Подожди загрузку списка
  • Листай в самый низ, пока не увидишь GyverCore
  • Жми Установка
  • Закрой окно
  • Выбери плату в Инструменты > Плата > GyverCore > ATmega328 based
  • Готово!
  • Примечание: новая версия компилятора по умолчанию идёт для Windows 64, если нужно для win32 или Linux – нужно установить вручную. Идём в C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\2.0\tools\avr-gcc, удаляем оттуда всё и кладём туда файлы из архива нужной версии (папка avr-gcc в корне данного репозитория)

Ручная

  • Файлы из папки GyverCore в этом репозитории положить по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\2.0\
  • Версия компилятора по умолчанию для Windows 64, если нужна другая – читай выше как установить

Установка, подключение и тестирование энкодеров

Энкодер выбирают, исходя из требований к системе и параметров контроллера и частотного преобразователя. Самым важным критерием выбора этого оборудования является разрешение или количество импульсов, генерируемых за один оборот. Чем больше импульсов передает устройство на котроллер или частотный преобразователь, тем выше точность позиционирования положения вала при низкой скорости. Для точного регулирования при низкой частоте вращения необходимо не менее 20 импульсов на один период квантования контроллера.

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

Энкодер крепится к валу двигателя, редуктора или другого передаточного устройства

При его установке важно обеспечить жесткое соединение. Скольжение и люфт снижают точность позиционирования и регулирования

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

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

При наладке привода ПК, где установлено соответствующее ПО, соединяют с интегрируемым или внешним контроллером. Далее открывают соответствующий раздел в меню котроллера и частотного преобразователя. Затем определяют тип энкодера, вводят его параметры.

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

  • Автоматически определяет тип и разрешение датчика.
  • Выполняет расчет времени замера ПИД-регулятора.
  • Проверяет тип перемещения и выбор времени подсчета количества импульсов.
  • Рассчитывает коэффициент прямой связи.

Если энкодер не работает, следует проверить качество контактных соединений. Если подсчет импульсов инкрементального датчика осуществляется в обратную сторону, необходимо поменять кабели, подключенные к каналам A и B и A/ и B/.

Энкодер: Примеры применения

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

Теоретически энкодеры бывают двух видов – инкрементальные и абсолютные. Абсолютные нужны там, где в любой момент времени (в том числе, в момент подачи питания) нужно знать точное положение объекта. Но сейчас, с использованием обработки при помощи контроллеров, абсолютные энкодеры практически не используются. Тем более учитывая, что их цена в несколько раз выше, чем у инкрементальных энкодеров.

Как подключаются энкодеры

Подключить энкодер легко – ведь это фактически датчик с транзисторными выходами. В простейшем случае, выход энкодера можно подключить ко входу счетчика, и запрограммировать его на измерение скорости.

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

Энкодеры подключают не только к контроллеру. Он также может подключаться к преобразователю частоты, питающему электродвигатель. Таким образом, появляется возможность точного позиционирования, а также поддержания нужной скорости и момента вращения двигателя без использования контроллера.

Монтаж энкодеров

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

Существуют энкодеры с полым валом, которые надеваются непосредственно на измеряемый вал и там фиксируются. Там даже нет такого понятия, как несоосность. Их гораздо проще монтировать, и они надежнее в эксплуатации. Чтобы энкодер при этом не прокручивался, используется лишь металлический поводок. На фото ниже показан энкодер с полым валом (обозначен В21.1), надетый на вал редуктора:

Производители энкодеров

Среди российских производителей энкодеров мне известен лишь только Питерский СКБ ИС, который производит энкодеры марки ЛИР. К сожалению, российского промышленного оборудования сейчас почти не производится, и ЛИРы применяются лишь в военном и лабораторном оборудовании.

По этой причине автор имеет дело только с энкодерами зарубежного производства. Производителей энкодеров много – их производят почти все производители полупроводниковых датчиков. Чаще всего встречаюсь с энкодерами Autonics – как и в случае с датчиками, в России представлен большой ассортимент. Другие известные производители энкодеров – немецкий Sick, японский Omron, и несколько китайских брендов.

Использование тех или иных марок энкодеров обусловлены часто не техническими причинами, поскольку их параметры и надежность практически идентичны. Тут скорее политические мотивы – производители комплектующих любыми путями стараются, чтобы их продукция вошла в состав больших производственных линий, чтобы таким образом закрепиться на рынке.

Рассмотрим несколько примеров использования энкодеров в реальном оборудовании.

Измерение скорости полотна

В данном примере, инкрементальный энкодер ELCO используется для измерения скорости бумажного полотна при производстве бумаги. Энкодер закреплен на бумаговедущем валу через муфту, скорость вращения которого однозначно говорит о скорости бумаги.

При помощи системы «энкодер+контроллер» можно вычислить мгновенную скорость, а также погонную длину произведенной продукции:

Источник

Простое приложение

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

Принципиальная схема примера приложения с использованием поворотного энкодера на Arduino

Схема построена на базе платы Arduino Uno. Для графического интерфейса используется LCD дисплей Nokia 5110. В качестве средств управления добален механический поворотный энкодер с кнопкой и RC-фильтрами.

Собранная схема примера использования поворотного энкодера на Arduino

Мы разработаем простое программное меню, в котором и продемонстрируем работу поворотного энкодера.

Распиновка и схема энкодера

Распиновка энкодера

Схема энкодера

К кому обратиться?

Специализированный сервисный центр «Кернел» выполнит профессиональное подключение, настройку (юстировку) и программирование энкодеров любых производителей в сжатые сроки и за разумные деньги.

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

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

Мы уверенны в качестве выполненных работ и даем гарантию на все виды работ, включая настройку и программирование энкодера шесть месяцев.

Как с нами связаться

Вас заинтересовало предложение по подключению, настройке и программированию энкодеров? Задайте их нашим менеджерам. Связаться с ними вы можете несколькими способами:

  • Заказав обратный звонок (кнопка в правом нижнем углу сайта)
  • Посредством чата (кнопка расположена с левой стороны сайта)
  • Либо позвонив по номеру: +7(8482) 79-78-54; +7(917) 121-53-01
  • Написав на электронную почту: 89171215301@mail.ru

Вот далеко не полный список производителей промышленной электроники и оборудования, ремонтируемой в нашей компании.

Источник

Важные страницы

  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макро, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)

Варианты интерфейсов энкодеров

Параллельный двоичный интерфейс представляет параллельную шину данных с определенной разрядностью. Например, для чисел от 0…1024 (разрешение 0,35 градуса) достаточно 10 разрядов (210=1024), 10 проводников шины. Для чисел 0…720 к сожалению тоже придется использовать 10 проводников, потому что 29=512. Поэтому энкодеры с таким разрешением (10 бит) после числа 719 сразу переходят на число 0. Для надежного считывания некоторые производители закладывают в такие энкодеры еще один сигнал триггера-защелки, по которому блокируется изменение выходного значения. В остальных случаях рекомендуется использовать цифровые фильтры для борьбы с помехами.

Двоично-десятичным интерфейс (BCD) представляет тоже параллельную шину данных, но с более человекочитаемым форматом чисел. В BCD-представлении используются только 10 возможных комбинаций 4-битового числа вместо 16. Поэтому существуют запрещённые комбинации битов: 1010(1010), 1011(1110), 1100(1210), 1101(1310), 1110(1410) и 1111(1510). Числа в виде десятков от 10 до 90 записываются в следующие 4 бита. Числа в виде сотен от 100 до 900 записываются в следующие 4 бита. И числа в виде тысяч от 1000 до 9000 записываются в следующие 4 бита. Поэтому для комбинации энкодера с 1024 значениями потребуется 4 + 4 + 4 + 1 = 13 бит (проводов).

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

Таблица вариантов кодирования абсолютных энкодеров
Обычное (двоичное) кодирование Кодирование по методу Грея
DEC Binary HEX DEC Binary HEX
0000 0h 0000 0h
1 0001 1h 1 0001 1h
2 0010 2h 3 0011 3h
3 0011 3h 2 0010 2h
4 0100 4h 6 0110 6h
5 0101 5h 7 0111 7h
6 0110 6h 5 0101 5h
7 0111 7h 4 0100 4h
8 1000 8h 12 1100 Ch
9 1001 9h 13 1101 Dh
10 1010 Ah 15 1111 Fh
11 1011 Bh 14 1110 Eh
12 1100 Ch 10 1010 Ah
13 1101 Dh 11 1011 Bh
14 1110 Eh 9 1001 9h
15 1111 Fh 8 1000 8h

Rotary Encoder Arduino Example

Let’s make a practical example of it using the Arduino. The particular module that I will use for this example comes on a breakout board and it has five pins. The first pin is the output A, the second pin is the output B, the third pin is the Button pin and of course the other two pins are the VCC and the GND pin.

We can connect the output pins to any digital pin of the Arduino Board.

You can get the components needed for this Arduino Tutorial from the links below:

  • Rotary Encoder Module………………. Amazon / Banggood / AliExpress
  • Arduino Board …………………………… Amazon / Banggood / AliExpress
  • Breadboard and Jump Wires ……… Amazon / Banggood / AliExpress

Disclosure: These are affiliate links. As an Amazon Associate I earn from qualifying purchases.

Прерывания в Arduino

Начнём с того, что не все пины “могут” в прерывания. Да, есть такая штука, как pinChangeInterrupts, но о ней мы поговорим в продвинутых уроках. Сейчас нужно понять, что аппаратные прерывания могут генерировать только определённые пины:

МК / номер прерывания INT 0 INT 1 INT 2 INT 3 INT 4 INT  5
ATmega 328/168 (Nano, UNO, Mini) D2 D3
ATmega 32U4 (Leonardo, Micro) D3 D2 D0 D1 D7
ATmega 2560 (Mega) D2 D3 D21 D20 D19 D18

Как вы поняли из таблицы, прерывания имеют свой номер, который отличается от номера пина. Есть кстати удобная функция , которая принимает номер пина и возвращает номер прерывания. Скормив этой функции цифру 3 на Ардуино нано, мы получим 1. Всё по таблице выше, функция для ленивых.

Подключается прерывание при помощи функции :

  • – номер прерывания
  • – имя функции-обработчика прерывания (её нужно создать самому)
  • – “режим” работы прерывания:
    • (низкий) – срабатывает при сигнале LOW на пине
    • (рост) – срабатывает при изменении сигнала на пине с LOW на HIGH
    • (падение) – срабатывает при изменении сигнала на пине с HIGH на LOW 
    • (изменение) – срабатывает при изменении сигнала (с LOW на HIGH и наоборот)

Также прерывание можно отключить при помощи функции , где pin – опять же номер прерывания.

А ещё можно глобально запретить прерывания функцией и снова разрешить их при помощи . Аккуратнее с ними! остановит также прерывания таймеров, и у вас “сломаются” все функции времени и генерация ШИМ.

Давайте рассмотрим пример, в котором в прерывании считаются нажатия кнопки, а в основном цикле они выводятся с задержкой в 1 секунду. Работая с кнопкой в обычном режиме, совместить такой грубый вывод с задержкой – невозможно:

volatile int counter = 0;  // переменная-счётчик

void setup() {
  Serial.begin(9600); // открыли порт для связи

  // подключили кнопку на D2 и GND
  pinMode(2, INPUT_PULLUP); \

  // D2 это прерывание 0
  // обработчик - функция buttonTick
  // FALLING - при нажатии на кнопку будет сигнал 0, его и ловим
  attachInterrupt(0, buttonTick, FALLING);
}

void buttonTick() {
  counter++;  // + нажатие
}

void loop() {
  Serial.println(counter);  // выводим
  delay(1000);              // ждём
}

Итак, наш код считает нажатия даже во время задержки! Здорово. Но что такое ? Мы объявили глобальную переменную , которая будет хранить количество нажатий на кнопку. Если значение переменной будет изменяться в прерывании, нужно сообщить об этом микроконтроллеру при помощи спецификатора , который пишется перед указанием типа данных переменной, иначе работа будет некорректной. Это просто нужно запомнить: если переменная меняется в прерывании – делайте её .

Ещё несколько важных моментов:

  • Переменные, изменяемые в прерывании, должны быть объявлены как
  • В прерывании не работают задержки типа
  • В прерывании не меняет своё значение и
  • В прерывании некорректно работает вывод в порт (), также не стоит там его использовать – это нагружает ядро
  • В прерывании нужно стараться делать как можно меньше вычислений и вообще “долгих” действий – это будет тормозить работу МК при частых прерываниях! Что же делать? Читайте ниже.

Программирование энкодера

Современные энкодеры внутри себя имеют микроконтроллер (процессор) все данные энкодера передаются по цифровому последовательному интерфейсу, наиболее распространённый RS485. В процессоре энкодера хранятся данные о двигателе, в котором этот датчик установлен (ток, напряжение, инерция, угол смещения ротора, индуктивности и естественно тип двигателя с серийным номером).

Именно поэтому новые энкодеры просто поставить на оборудование не получится, придется программировать. Программирование энкодера производится с помощью компьютера со специальным программным обеспечением либо с помощью программатора.

Модели Ардуино

Платы Arduino

Вот мы и добрались до самих плат Ардуино, которых на данный момент появилось великое множество благодаря открытости платформы: все схемы и исходные коды находятся в открытом доступе, и вы можете сделать свою версию платы и продавать её, чем активно занимаются китайцы. Единственный пункт: слово Arduino – зарегистрированная торговая марка, и свою плату вам придется назвать как-то по-другому, отсюда и появились всякие Искры, Бузины и прочие так называемые Arduino совместимые платы. Разновидностей плат очень много, но используют они одни и те же модели микроконтроллеров. От модели микроконтроллера зависит объем памяти и количество ног, ну и есть некоторые специальные фишки. На большинстве моделей Arduino стоят 8-битные МК от AVR с кварцевым генератором на 16 МГц (либо ниже), то есть по производительности платы на ATmega не отличаются, отличаются только объемом памяти, количеством ног и интерфейсов/таймеров. Модели Ардуино с МК от производителя ARM, например Arduino DUE, в разы мощнее своих собратьев за счёт 32-битного процессора, но это совсем другая история.

Параметр ATtiny85 ATmega328 ATmega32u4 ATmega2560
Кол-во ног 8 32 44 100
Из них доступны 5 23 24 86
Flash память 8 Kb 32 Kb 32 Kb 256 Kb
EEPROM память 512 bytes 1 Kb 1 Kb 4 Kb
SRAM память 512 bytes 2 Kb 2.5 kB 8 Kb
Каналов АЦП 3 (4 с rst) 6 (8 в SMD корпусе) 12 16
Каналов PWM 3 6 7 15
Таймеры 2х 8bit 2х 8bit 2х 8bit 2х 8bit
    1х 16bit 2х 16bit 4х 16bit
Serial интерфейс Нет х1 х1 х4
I2C интерфейс Нет Да Да Да
Прерывания 1 (6 PCINT) 2 (23 PCINT) 5 (44 PCINT) 8 (32 PCINT)
Платы на его основе Digispark, LilyTiny Uno, Nano, Pro Mini, Lilypad, Strong Leonardo, Micro, Pro Micro, BS Micro Mega, Mega Pro

Таким образом вы должны сразу понять, что, например, Ардуино Уно=Нано=Про Мини=Лилипад по своим возможностям и взаимозаменяемости. Или Леонардо=Про Микро. Ссылки на недорогие китайские Ардуины вы можете найти у меня на сайте. Точно там же вы найдёте ссылки на кучу датчиков, модулей и другого железа, которое можно подключить к Arduino. О возможностях ардуино по работе с другими железками поговорим в одном из следующих уроках.

Бесплатные учебники по Ардуино на русском

Выполнив первые уроки, а большинство знакомство с микроконтроллером начинает с самого простого задания — подключения светодиода к плате, вы поймете, что сделать какое-то устройство или проект на Ардуино своими руками довольно просто. Суть микроконтроллеров в том, что они рассчитаны на любителей, у которых нет больших знаний в программирование и они даже полные чайники в электротехнике.

Книги и учебники по Ардуино для начинающих

 
Быстрый старт с набором Arduino (PDF)
Книга содержит полезную информацию для ознакомления с Arduino и практические эксперименты с иллюстрациями. Авторы пособия подробно рассказали, как установить программное обеспечение на компьютер и изложили 14 простых проектов, где для работы необходимо минимум первоначальных электронных компонентов.

Учебник содержит уже 33 урока по программированию Ардуино с использованием различных модулей и датчиков. Российские авторы изложили в своем учебнике практические уроки с цветными иллюстрациями и подробными комментариями, все скетчи из книги можно скачать из Интернета по ссылкам, указанным в уроках.

Учебник переведен на русский и содержит подробные уроки для программирования микроконтроллера от известного автора. К плюсам данной книги можно отнести ссылки на информационный сайт, а также наличие видео уроков от Джереми Блума на YouTube (они тоже переведены на русский язык и озвучены).

 
Arduino и Raspberry Pi в проектах IoT (PDF)
Книга рассчитана на опытных пользователей и содержит уроки по Ардуино для создания проектов с использованием Intemet of Things (Интернета вещей). Показана организация доступа к сети Интернет, отправка и получение данных с использованием IoT сервисов

Уделено внимание обмену данными с помощью GPRS/GSM Shield.

Книги с интересными проектами на Ардуино

 

25 крутых проектов с Arduino (PDF)

Книга содержит описание и руководство по сборке 25 крутых проектов на Ардуино. Марк Геддес написал руководство, где подробно расписано начало программирования в среде Arduino IDE, правила сборки электрических схем на макетной плате, даны инструкции с примерами интересных проектов для начинающих с нуля.

 

Проекты с использованием Arduino (PDF)

Учебник с наиболее глубоким изучением языка программирования Arduino, каждая команда разобрана автором в отдельном разделе с примером скетча. В учебнике есть раздел с обзором различных плат Arduino и подробно рассмотрено подключение радио модулей для создания проектов на дистанционном управлении.

 

77 проектов для Arduino (PDF)

Книга «77 проектов для Arduino» автор Петин В.А. подойдет как, для начинающих программистов, так и для тех, кто хорошо освоил Ардуино и хочет сделать самостоятельно интересные проекты на микроконтроллере. Начните сборку проектов на Ардуино с подборкой литературы от лучших авторов на нашем сайте.

Скачать книги можно, как на компьютер, так и на телефон. Так как язык Arduino основан на языке программирования C++, то на мобильном устройстве можно начать изучать основы, а на компьютер скачать учебник по Ардуино на русском бесплатно и без регистрации. Первым делом рекомендуем вам прочитать, что такое Ардуино и что с ним можно сделать, особенно если вы еще не работали с этими платами.

Список математических функций

Математических функций Arduino поддерживает очень много, малая часть из них являются макро функциями, идущими в комплекте с Arduino.h, все остальные же наследуются из мощной C++ библиотеки math.h

Функция Описание
Косинус (радианы)
Синус (радианы)
Тангенс (радианы)
Модуль для float чисел
Остаток деления x на у для float
Возвращает дробную часть, целую хранит по адресу iptr http://cppstudio.com/post/1137/
То же самое, но для float
Корень квадратный
Корень квадратный для float чисел
Кубический корень
Гипотенуза ( корень(x*x + y*y) )
Квадрат ( x*x )
Округление до целого вниз
Округление до целого вверх
http://cppstudio.com/post/1121/
x*2^exp http://cppstudio.com/post/1125/
Экспонента (e^x)
Косинус гиперболический (радианы)
Синус гиперболический (радианы)
Тангенс гиперболический (радианы)
Арккосинус (радианы)
Арксинус (радианы)
Арктангенс (радианы)
Арктангенс (y / x) (позволяет найти квадрант, в котором находится точка)
Натуральный логарифм х ( ln(x) )
Десятичный логарифм x ( log_10 x)
Степень ( x^y )
Проверка на nan (1 да, 0 нет)
Возвр. 1 если x +бесконечность, 0 если нет
Возвращает ненулевое значение только в том случае, если аргумент имеет конечное значение
Возвращает x со знаком y (знак имеется в виду + -)
Возвращает ненулевое значение только в том случае, если _X имеет отрицательное значение
Возвращает разницу между x и y, если x больше y, в противном случае 0
Возвращает x*y + z
Возвращает большее из чисел
Возвращает меньшее из чисел
Возвращает целую часть числа с дробной точкой
Математическое округление
Математическое округление (для больших чисел)
Округляет указанное значение с плавающей запятой до ближайшего целого значения, используя текущий режим округления и направление
Функция Значение
Возвращает меньшее из чисел и
Возвращает большее из чисел
Модуль числа
Ограничить диапазон числа между  и
Перевести диапазон числа (от до ) в новый диапазон (от до ). – получить с аналогового входа значения 0-100 вместо 0-1023. Работает только с целыми числами!
Математическое округление
Перевод градусов в радианы
Перевод радиан в градусы
Квадрат числа
Константа Значение Описание
127 Макс. значение char, int8_t
255 Макс. значение byte, uint8_t
32767 Макс. значение int, int16_t
65535 Макс. значение unsigned int, uint16_t
2147483647 Макс. значение long, int32_t
4294967295 Макс. значение unsigned long, uint32_t
2.718281828 Число e
1.442695041 log_2 e
0.434294482 log_10 e
0.693147181 log_e 2
2.302585093 log_e 10
3.141592654 pi
1.570796327 pi/2
0.785398163 pi/4
0.318309886 1/pi
0.636619772 2/pi
1.128379167 2/корень(pi)
1.414213562 корень(2)
0.707106781 1/корень(2)
__builtin_nan(“”) nan
__builtin_inf() infinity
3.141592654 Пи
1.570796326 пол Пи
6.283185307 два Пи
2.718281828 Число Эйлера е
0.01745329 Константа перевода град в рад
57.2957786 Константа перевода рад в град

Скорость вычислений

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

  • Arduino (на AVR) не имеет “хардверной” поддержки вычислений с плавающей точкой (float), и эти вычисления производятся при помощи отдельных инструментов и занимают гораздо больше времени, чем с целочисленными типами
  • Чем “массивнее” тип данных, тем дольше производятся вычисления, т.е. действия с 1-байтными переменными производятся быстрее, чем с 4-х байтными
  • Деление (и поиск остатка от деления) производится отдельными инструментами (как операции с float), поэтому эта операция занимает больше времени, чем сложение/вычитание/умножение. Для оптимизации скорости вычислений есть смысл заменять деление умножением на обратное число (даже на float)

Резюмируя всё вышесказанное хочу показать вам вот такую табличку, в которой показано время не оптимизированных компилятором вычислений разных типов данных, время указано в микросекундах (мкс) для тактовой частоты 16 МГц. Операция деление также соответствует операции “остаток от деления”, %:

Тип данных Время выполнения, мкс
Сложение и вычитание Умножение Деление, остаток
int8_t 0.44 0.625 14.25
uint8_t 0.44 0.625 5.38
     
int16_t 0.89 1.375 14.25
uint16_t 0.89 1.375 13.12
int32_t 1.75 6.06 38.3
uint32_t 1.75 6.06 37.5
     
float 8.125 10 31.5

Эта информация дана чисто для ознакомления и париться о скорости вычислений не нужно, т.к. большинство из них будут оптимизированы. Когда могут возникнуть проблемы с недостатком скорости вычисления? Я столкнулся с этим только один раз в проекте “LED кубик“, где Ардуина вычисляла закон движения пары десятков точек по наклонной плоскости по подробной физической модели. Вот там да, я заметил, как микросекунды вычислений превращались в миллисекунды. Для простых проектов без тысяч вычислений, честно, не парьтесь =)

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий