Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Ищите дары леса и готовьте изысканные блюда на лесной ферме с ресторанчиками!

Грибники: дары леса

Фермы, Симуляторы, 2D

Играть

Топ прошлой недели

  • AlexKud AlexKud 41 пост
  • Animalrescueed Animalrescueed 45 постов
  • AirinSolo AirinSolo 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
9
ChipCraft
ChipCraft
26 дней назад
Лига Новых Технологий

Практическая реализация энкодера с использованием датчика HOA0902 и STM32⁠⁠

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

Устройство датчика:

  • Внутри установлен светодиод (ИК-излучатель), который подсвечивает импульсный диск;

  • С противоположной стороны находятся два фотоприемника (фототранзистора);

  • Эти два фотоприемника расположены со смещением относительно друг друга (90° фазовый сдвиг).

 HOA0902-11

HOA0902-11

В данной статье будут рассмотрены

  • Физические принципы работы HOA092-11;

  • Схема подключения к микроконтроллеру STM32F030CCTx;

  • Программная реализация (расчет пройденного пути, скорости и направления движения, а также вывод информации на дисплей).

Технические характеристики HOA092-11

Ссылка на техническую документацию HOA0902-11 [https://static.chipdip.ru/lib/059/DOC000059035.pdf]

  • Напряжение питания [ 4.5 - 5.5В ];

  • Тип выхода [ NPN открытый коллектор ];

  • Слот (зазор) [ 3.2 мм ];

  • Минимальный механический период (разрешение) [ предназначен для работы с механическим периодом равным 0,036 in (≈ 0.914 мм), что дает разрешение до 0,018 in (≈ 0,457 мм) ];

  • Температурный диапазон эксплуатации [ от -40°C до +70°C ]|.

Применение

  • Высокоточные оптические энкодеры;

  • Системы позиционирования в робототехнике;

  • Прецизионные системы контроля скорости вращения;

  • Линейные и ротационные измерительные системы.

Принцип работы HOA0902

  1. Инфракрасный излучатель (IRED) генерирует постоянный поток ИК-излучения;

  2. Кремниевый NPN фототранзистор выполняет функцию приемника излучения;

  3. Оптический зазор между излучателем и приемником обеспечивает зону детектирования.

Режимы работы:

  • Выход(SPEED(TACH)) - генерирует импульс при каждом пересечении порога освещенности, т.е. как только импульсный диск будет проходить через щель, появляется импульс (ширина 8 микросекунд, частота 125 kHz), как раз этот импульс я и буду обрабатывать в микроконтроллере.

В данном проекте используется импульсный диск он состоит из 16 "окон", за одно прохождение "окна", датчик будет выдавать контроллеру по 2 импульса,

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

Один приемник (канал A) находится точно по центру окна, когда другой (канал B) находится уже на краю (или наоборот).

Это приводит к тому, что сигналы с каналов A и B сдвинуты относительно друг друга на 90 электрических градусов.

Зачем это нужно?

Такой сдвиг (квадратура) решает сразу несколько критически важных задач:

1. Определение направления вращения (главная причина)
Это самая важная функция, схема обработки сигнала в датчике смотрит, какой канал опережает.

  • Если канал A опережает канал B → вращение по часовой стрелке.

  • Если канал B опережает канал A → вращение против часовой стрелки.

2. Повышение разрешения

Удвоение количества импульсов достигается за счет обработки двух сдвинутых по фазе сигналов, что позволяет извлекать из одной механической конструкции вдвое больше полезной информации, в данной статье датчик HOA0902-11, через который проходит импульсный диск имеющий 16 "окон" при полном обороте, будет выдавать 32 импульса, таким образом получается более точное измерение угла, расстояния и скорости, что позволяет разрешению увеличиваться.

  • 16 импульсов - шаг угла 360° / 16 = 22.5°;

  • 32 импульса - шаг угла 360° / 32 = 11.25°.

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

  • Выход направления (DIRECTION) - это логический вывод, который формируется внутри датчика HOA0902-11 из сравнения сигналов А и В, т.е. датчик сам определяет направление вращения и выдает это как отдельный цифровой сигнал:

    DIRECTION = 0 (LOW) - вращение вперед (например, по часовой стрелке);

    DIRECTION = 1 (HIGHT) - вращение назад (против часовой стрелки).

Таким образом, не нужно в МК сравнивать А и В, чтобы вычислять направление - датчик сам это делает, достаточно просто повесить прерывание.

!!! Очень важная информация, так как датчик HOA0902-11 работает по +5В, подключать напрямую сигналы "SPEED(TACH)" и "DIRECTION(DIR)" к микроконтроллеру STM32 (у которого логика работы по +3В) опасно, есть риск повреждения выводов, в следствии МК может просто выйти из строя.

 Осциллограмма сигнала SPEED(TACH) (до делителя)

Осциллограмма сигнала SPEED(TACH) (до делителя)

 Осциллограмма сигнала DIRECTION(DIR) (до делителя)

Осциллограмма сигнала DIRECTION(DIR) (до делителя)

Для того чтобы напряжение было приемлемым, для МК, необходимо поставить делители напряжения, на сигналы "SPEED" и "DIRECTION".

 Осциллограмма сигнала SPEED(TACH) (после делителя)

Осциллограмма сигнала SPEED(TACH) (после делителя)

 Осциллограмма сигнала DIRECTION(DIR) (после делителя)Схема подключения HOA0902-11 и дисплея к микроконтроллеру STM32F030CCTx

Осциллограмма сигнала DIRECTION(DIR) (после делителя)Схема подключения HOA0902-11 и дисплея к микроконтроллеру STM32F030CCTx

На данной схеме изображено подключение датчика HOA0902-11 и дисплея, к микроконтроллеру STM32F030CCTx, а также реализация преобразователя со стабилизатором напряжения

 Схема подключения HOA0902-11 и дисплея к микроконтроллеру STM32F030CCTx

Схема подключения HOA0902-11 и дисплея к микроконтроллеру STM32F030CCTx

Перечень элементов

Пояснения к схеме

Выводы NRST и BOOT0

Вывод NRST(reset) используется для аппаратного сброса МК, подключается через резистор R7(10кОм) к питанию +3В - подтягивает NRST к логической "1", конденсатор С5(0,1мкФ), формирует RC-цепочку, используется для подавления помех и автосброса при включении питания, данный пример схемы гарантирует корректный старт МК после подачи питания, защищает от ложных срабатываний при скачках напряжения.

 Подключение NRST и BOOT0

Подключение NRST и BOOT0

Вывод BOOT0 определяет, откуда МК будет загружать программу после сброса:

  • BOOT0 = 0 - загрузка из Flash-памяти(основной режим работы);

  • BOOT0 = 1 - загрузка из системной памяти (встроенный загрузчик через UART, I2C, SPI).

В схеме вывод подтянут резистором R8 к земле (логический "0"), это обеспечивает автоматическую загрузку программы из flash-памяти после старта, если потребуется использовать встроенный загрузчик, можно временно подать "1" на BOOT0.

Обвязка питания VCC и VA

МК имеет несколько выводов питания:

  • VCC - основное цифровое питание (3.3В);

  • VA - питание аналоговой части (АЦП, компараторы и т.д.).

На выводах VCC и VA уставлен конденсатор С6 (0.1мкФ), он фильтрует высокочастотные помехи, возникающие при переключении логики, конденсатор ставиться как можно ближе к выводам МК, также дополнительно установлен танталовый конденсатор 4.7мкФ, он сглаживает низкочастотные колебания и стабилизирует питание аналоговой части.

Микросхема DA1 - MP2315 представляет собой синхронный понижающий (buck) DC-DC преобразователь с интегрированными силовыми MOSFET-ключами. Высокая частота переключения (до 2.2 МГц), компактный корпус и широкий диапазон входных напряжений (от 4.5 В до 24 В), ссылка на техническую документацию MP2315 [https://www.alldatasheet.com/datasheet-pdf/pdf/1035056/MPS/MP2315.html].

Микросхема DA2 - LP2985 представляет собой малошумящий стабилизатор, предназначен для преобразования входного напряжения +5В в стабильное напряжение +3В, используемое МК и периферийными узлами, ссылка на техническую документацию LP2985 [https://www.alldatasheet.com/datasheet-pdf/pdf/99706/TI/LP2985.html].

Подключение датчика HOA0902-11

  • Сигнал SPEED(TACH) - подключается через делитель R1 и R3, к выводу МК-12(PA2);

  • Сигнал DIR(DIRECTION) - подключается через делитель R4 и R5, к выводу МК-13(PA3).

Подключение дисплея

  • Сигнал SDA - подключается к выводу 21(PB10);

  • Сигнал SCL - подключается к выводу 22(PB11).

Настройка микроконтроллера STM32F030CCTx в CubeIDE

Настройка выводов

Вывод PA2 настроен на внешнее прерывание (EXTI) (выполняет роль триггера для подсчета импульса) к нему подключается сигнал SPEED(TACH) датчика HOA0902-11, каждый раз, когда через окно датчика проходит импульсный диск, датчик формирует импульс, далее он фиксируется аппаратным модулем EXTI, который:

  • Генерирует прерывание;

  • Устанавливает флаг encoderDone;

  • Делегирует дальнейшую обработку в функцию encoder_Handler().

Вывод PA3(DIRECTION) (GPIO_INPUT), используется для определения направления вращения.

Настройка таймеров

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

 Настройка TIM3 в CubeMX

Настройка TIM3 в CubeMX

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

 Настройка TIM14

Настройка TIM14

Настройка приоритетов

  • EXTI line 2 and 3 interrupts - [0];

  • TIM13 - [1];

  • TIM14 - [2].

Настройка Clock

Реализация программного кода

Ссылка на скачивание исходного кода [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_исходный_код - Исходный код для Encoder_HOA0902-11_STM32F030CCT6], а также видео тестирования энкодера [#исскуствомк_тестирование_Encoder].

Библиотеку для работы с дисплеем я взял с [https://github.com/afiskon/stm32-ssd1306/tree/master]

Функция display_init()

Выполняет начальную инициализацию дисплея, подключенного по интерфейсу I2C(на базе контроллера SSD1306)

  • Инициализируется драйвер дисплея;

  • Выполняется заливка экрана черным цветом;

  • На дисплее на 2 секунды отображается стартовый экран с надписью ''ChipCraft";

  • После задержки экран очищается для дальнейшей работы.

Функция encoder_Handler() обработчик инкрементального энкодера

  • Вызывается при установке флага encoderDone, который формируется в прерывании внешнего входа (EXTI);

  • Определяется направление вращения вала датчика по состоянию пина DIRECTION_Pin:

    • RESET - движение вперед (инкремент счетчика);

    • SET - движение назад (декремент счетчика).

  • Вызывается метод get_distance_m() для расчета дистанции.

Функция display_update()

Отвечает за визуализацию информации на дисплее:

  • Экран предварительно очищается с помощью ssd1306_Fill(Black);

  • В верхней части по центру отображается надпись "Encoder";

  • Ниже последовательно выводятся:

    • количество импульсов;

    • дистанция;

    • скорость.

  • Буфер графики передается на дисплей вызовом ssd1306_UpdateScreen()

Функция float get_distance_m()

Возвращает текущее значение пройденного пути в метрах, расчет выполняется как произведение общего числа импульсов pulse_counter на метрический коэффициент DIST_PER_STEP_M, который определяется из геометрии колеса и количества "окон" импульсного диска.

Формула расчета дистанции

где:

  • N - Число импульсов;

  • D - Диаметр колеса;

  • PPR - количество импульсов на оборот.

HAL_TIM_PeriodElapsedCallback Функция обратного вызова, выполняется при переполнении таймера

  • Каждые WINDOW_TIME_S секунд фиксируется количество импульсов в pulse_counter_window;

  • После чтения счетчик сбрасывается;

  • Рассчитывается скорость

    Формула расчета скорости

окно - это фиксированный промежуток времени, в течении которого производится расчет количества импульсов от датчика, в данном проекте будет 100 мс (0.1 с)

  • Скорость определяется как отношение пройденного пути за окно.

где S - путь в окне, t - длительность окна.

также в данной функции вызывается display_update(), для визуализации текущих значений на дисплее.

Модуль process_Encoder

Модуль proj_main()

  • Выполняется инициализация дисплея;

  • Запуск таймеров;

  • Запуск функции encoder_Handler().

Вывод

В результате проделанной работы реализована полноценная система измерения и отображения параметров энкодера, на базе датчика HOA0902-11 и микроконтроллера STM32F030CCTx.

Тест энкодера


Если статья показалась Вам интересной, буду рад выпустить для Вас еще множество статей исследований по всевозможным видам устройств, так что, если не хотите их пропустить – буду благодарен за подписку на мой ТГ-канал: https://t.me/ChipCraft.

Показать полностью 23 1
[моё] Инженер Программа Энкодер Stm32 Электроника Гифка Видео Вертикальное видео Короткие видео Длиннопост
0
2
Pashaass
Pashaass
1 год назад

Как обнулить значения энкодера Kawasaki⁠⁠

Итак
Имеем bx 100 и контроллер t52
После некоторого простоя без питания садится батарейка энкодеров
В результате имеем сбитые положения осей

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

Сначала сбрасываем счетчик
Потом в обнуление.

Получаем это, 4-ю и 7ю не обнулял, но потом получилось что 7ю тоже надо

Далее записываем данные в блок положения работа в пространстве
Меню это находится в константах, но просто так оно не появится, нужен р-код числа пи(2 знака после запятой)

Перезагружаем контроллер

После загрузки, обнуляем уже по I-метках

Сопоставляем все метки, после чего процедуру обнуления производим заново

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

На этом все!
Мы молодцы, вы тоже)

Показать полностью 3
[моё] Промышленность Робототехника Энкодер Длиннопост
5
58
SKsphn
1 год назад
Arduino & Pi

Определение направления вращения колёсика мыши (неоптической)⁠⁠

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

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

Если смотреть с этой стороны, то правой крайний пин общий, остальные переменные.

Если смотреть с этой стороны, то правой крайний пин общий, остальные переменные.

Попробую использовать, если получится сделаю пост о том, что получилось.

Показать полностью 1
[моё] Физика Arduino Эксперимент Мышь Энкодер Электроника Самоделки Видео
17
3
Programma.Boinc
Programma.Boinc
3 года назад

МОДЕРНИЗАЦИЯ ТЕЛЕСКОПА «СИНТЕЗ» В КрАО РАН⁠⁠

МОДЕРНИЗАЦИЯ ТЕЛЕСКОПА «СИНТЕЗ» В КрАО РАН


С. В. Назаров1, А. С. Харченко2, А. С. Кривенко1

1Крымская астрофизическая обсерватория РАН, 2АО ЦНТЭЭ


В 1978 г. в Крымской астрофизической обсерватории был введен в строй передовой по

тем временам телескоп «Синтез». Целью создания экспериментального телескопа была

отработка технологий создания сегментированной оптики, а также системы контроля

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

двум осям.


В начале 2018 г. было принято решение о его восстановлении с созданием новой оптики

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

восстановления, модернизации телескопа и первые результаты.


MODERNIZATION OF THE TELESCOPE ”SINTEZ” AT THE CRAO RAS

S. V. Nazarov1, A. S. Kharchenko2,A.S.Krivenko1

1Crimean astrophysical observatory RAS, 2CNTEE

In 1978, at the Crimean Astrophysical Observatory, the ⵼Sintez⵼ telescope, was put into

operation. The goal of creating of this experimental telescope was to develop technologies for

creating segmented optics, as well as a system for controlling the spatial position of mirrors,

including the ability to compensate for turbulence in the Earth’s atmosphere thanks to the

fast movements of each mirror along two axes.

At the beginning of 2018, a decision was made to restore it with the creation of a new optics

and control system. In this work, we present a detailed description of the telescope restoration

and upgrade process and the first results.


Введение


В 1978 г. в Крымской астрофизической обсерватории был введен в строй экспериментальный телескоп «Синтез» (он же АСТ-1200). Установлен он в павильоне с откатной крышей на экваториальной монтировке вилочного типа. Оптика выполнена по кассегреновской схеме с тонким ситалловым сегментированным главным зеркалом. Оно состоит из шести одинаковых подвижных шестиугольных сегментов и одного центрального неподвижного диаметрами по 40 см [1].


Цель эксперимента — выяснить принципиальную возможность постройки больших по

диаметру зеркал, чем зеркало крупнейшего в мире (на тот момент) телескопа БТА в САО.


Основные цели строительства «Синтеза» перечислены ниже.


1. Отработка технологии создания сегментированной оптики для облегчения конструкции главного зеркала.


2. Создание системы высокоточного контроля пространственного положения зеркал, в

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


С середины 1980-х до 2018 г. телескоп находился на консервации. Анализ его состоя-

ния выявил хорошую сохранность и лишь незначительные повреждения, образовавшиеся

за 35 лет хранения. Однако электронные системы управления монтировкой, сельсинами

и позиционированием зеркал устарели и морально, и физически. Современные устройства

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


В связи с этим было принято решение о создании фактически нового телескопа на

базе существующей механической системы (павильон, вилка, приводы и труба). К началу

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

эксплуатацию «Синтеза» на базе временного телескопа.


Научные задачи: фотометрия и астрометрия широкого круга объектов, алертные наблюдения (в частности, послесвечений гамма-всплесков), поисковые работы (новые и сверхновые, килоновые, транзиенты и др.).


Аппаратное устройство системы

Временный телескоп:

1. Рефлектор Ньютона 1765/350, гид 60 мм.

2. Две камеры (основная QHY9 и гидирующая QHY5).

3. Электрофокусер на базе Arduino.

4. Колесо фильтров Starlight Xpress 7х1.25”.

Монтировка телескопа «Синтез» экваториальная вилочная, два идентичных привода, в

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

1. Двигатель грубого движения, ДПТ 110 В, 750 Вт, 2500 об/мин, момент инерции

0.52 Н · м2.

2. Двигатель тонкого движения, ДПТ 110 В, 250 Вт, 3000 об/мин, момент инерции

0.098 H · м2.

3. Шаговый двигатель часового ведения, 27 В, 6.3 А.

4. Электромагнитный тормоз вала двигателя грубого движения.

5. Сельсин-датчик грубого наведения, один оборот соответствует одному обороту теле-

скопа.

6. Сельсин-датчик точного наведения, один оборот соответствует одному градусу перемещения телескопа.

7. Дополнительно на каждую ось установлен 12-битный абсолютный энкодер ЛИР ДА

119-А, который используется вместо грубого сельсина.


Для управления приводами и датчиками разработан модуль движения, состоящий

• из драйвера двигателя постоянного тока на 110 В, 10—15 А — 2 шт.;

• драйвера шагового двигателя на 27 В, 15 А, аналогичный драйверу ДПТ, — 1 шт.;

• контроллера движения на процессоре STM32F103, включающего в себя:


– два интерфейса RS-485 с гальванической развязкой;

– аналоговую часть для подключения сельсина;

– пять дискретных выходов изолированных;

– восемь дискретных входов изолированных;

– выходы для управления двигателями и входы датчиков тока;

– питание 18—36 В изолированное;

– встроенное ПО для управления по протоколу Modbus/RTU с автономным выполнением функции движения с заданной скоростью в заданную координату, разгона и торможения с учетом ограничений.


Программное обеспечение


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


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


Для управления телескопом с любого из компьютеров локальной сети «Синтез»

использована новая разработка ASCOM Remote, позволяющая организовать доступ к

ASCOM–устройствам по сети с использованием протокола ASCOM Alpaca.


В настоящее время наблюдения производятся следующим образом:


1. Открывается крыша (с помощью ASCOMPad или NINA).

2. Включается питание монтировки (ASCOMPad).

3. Телескоп распаковывается и наводится на произвольную точку на небе (NINA или

Cartes du Ciel).

4. Включается часовое ведение.

5. Получается пробный кадр.

6. Делается астрометрия полученного кадра с помощью astrometry.net или локального

солвера.

7. Выполняется синхронизация телескопа с полученными координатами.

8. Телескоп наводится на объект наблюдения.

9. Включается гидирование (PhD2).

10. Производится съемка наблюдаемого объекта (NINA).

11. Телескоп наводится на следующий объект.


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


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

определять координаты телескопа. Предположительно источником ошибки является крепление энкодера на оси телескопа либо деформация самой оси. В настоящее время идет

работа по подключению второго (грубого) сельсина и измерению положения телескопа с

его помощью. Для компенсации ошибки наведения перед началом наблюдений производит-

ся астрометрия пробного кадра и вносятся поправки (с помощью функции синхронизации,

реализованной в драйвере монтировки).


Первые наблюдения


Осенью 2020 г. в качестве пробной научной задачи была начата систематическая съемка

по программе астрометрических наблюдений спутников Урана и Нептуна совместно с ГАО

РАН. Приемником является камера QHY-9 на сенсоре KAF 8300M, размер пикселя 5.4 мкм,

масштаб 630 mas/pix, рабочее поле 35 Ч 26⵼. Типичное время накопления 45 с.


Часть наблюдений проводилась с включенным в экспериментальном режиме автогидом

на базе малого рефрактора 50/183 мм и камеры QHY5L-II-M. Автогидирование позволило

компенсировать периодику по оси альфа на масштабах в 180 с.


К началу декабря 2020 г. удалось провести более 170 наблюдений спутников Нептуна и

500 спутников Урана. Проницание составило 19m, астрометрические ошибки около 50 mas.


Перспективы


Планируется наладить работу колеса фотометрических фильтров, увеличить диапазон

доступных выдержек, написать драйверы монтировки и крыши для распространенного

стандарта INDI (Linux), определить области безопасных перемещений телескопа, отработать взаимодействие с погодной станцией, настроить автоматическую астрометрию кадров,

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

восстановление работоспособности системы при сбоях.


Ориентировочные сроки: полная автоматизация телескопа — 2022 г., создание нового

метрового зеркала — 2023—2024 гг.


Предполагаемая оптическая система главного телескопа — цельное параболическое или

гиперболическое главное зеркало с корректором и приемником в прямом фокусе с аберрациями, укладывающимися в пиксель 9 мкм на поле зрения не менее 30 Ч 30⵼.


Главным преимуществом этого инструмента станет полная автоматизация: начало и

завершение наблюдений по сигналам от метеодатчиков, возможность работы как по заранее


заданному списку задач и алертам, так и онлайн-взаимодействие с веб-интерфейсом для

удаленного доступа к телескопу коллег из других организаций.


Библиографические ссылки


[1] Ustinov N. D., Vasilev A. S., Vysotskii Iu. P. et al. AST-1200 astronomical telescope having a

sectional main mirror // Optiko Mekhanicheskaia Promyshlennost. — 1985. — Vol. 52. — P. 22–25.

[2] Basov N. G., Dimov N. A., Gvozdev M. I. et al. New Astronomical Telescope AST-1200 with a

Segmented Actively Controlled Primary Mirror // The MMT and the Future of Ground-Based

Astronomy. — 1979. — Vol. 385. — P. 185.

Показать полностью 4
Астрономия Космос Крао Энкодер Лиза Алерт Оптика Синтез Длиннопост Текст
0
199
CyberLabs
CyberLabs
3 года назад
Arduino & Pi

Подключение энкодера к Ардуино и полнофункциональный код обработки для него⁠⁠

Энкодер - это устройство преобразования механического перемещения или угловых изменений положения в цифровой сигнал. В статье рассматривается самый популярный в DIY сообществе инкрементальный энкодер EC11 с кнопкой. При его вращении на выходах A и B формируются TTL сигналы в виде импульсов сдвинутые между собой по фазе на 90 градусов. Таким образом с его помощью, можно определить направление и скорость вращения, а так же рассчитать угол поворота. В отличие от потенциометров, энкодер KY-040 гораздо надежней и долговечный.

Немного подробностей

Собирая один из проектов с использованием encoder. Я не смог найти код для Ардуино выполняющий все мои условия. Так как для проекта нужно обрабатывать следующие команды: "Вращение без нажатия", "Вращение с нажатием", "Нажатие" и "Длинное нажатие", а так же требуется стабильная работа энкодера. Скетчи использующие один пин с прерыванием INT0 или INT1, работают отвратительно и при вращении вала энкодера вылетает очень много ошибок. Код без использования прерываний работает стабильно, но он не работает в фоновом режиме, его нужно встраивать в тело основной программы, что в свою очередь приводит к не своевременному срабатыванию обработчика и пропускам при вращении энкодера. Еще хуже обстоят дела с обработкой нажатия с вращением вала энкодера и обычным с нажатием. Пришлось написать свой код обработки, который исключает описанные выше проблемы. С дребезгом контактов я не стал бороться программно, так как это приводит к задержкам обработки. Проще и надежней использовать керамические конденсаторы.

Схема подключения энкодера к Ардуино

Для считывания сигналов с выходов EC-11, нужно использовать три цифровых входа Arduino. В схеме подключения я использовал редко используемые мной в своих проектах выводы Arduino(A1, A2 и A3). Внешние подтягивающие резисторы отсутствуют, так как я использовал внутреннюю подтяжку микроконтроллера. Конденсаторы нужны для гашения импульсов дребезга контактов. Если у вас новый и хороший энкодер, то можно обойтись и без них. Но на кнопку в любом случае потребуется конденсатор, так как ее дребезг неизбежен.


Используемые в схеме компоненты:

Arduino nano - 1 шт.

Энкодер EC11 -1 шт.

Соединительные повода - 4 шт.

Керамические конденсаторы 0,1 мкФ - 3 шт.

Скетч для Ардуино

Для того что бы отслеживать изменение положения энкодера в фоновом режиме, я использую прерывание PCINT1. Обработка всех функций происходит в прерывании, обработчик в зависимости от произошедшего действия изменяет переменную enc_state. Если значение переменной enc_state=0 - ничего не произошло, enc_state=1 - экодер вращался без нажатия, enc_state=2 - экодер вращался с нажатием, enc_state=3 - было нажатие на кнопку, enc_state=4 - было длинное нажатие на кнопку, Прерывание будет срабатывать каждый раз по изменению состояния входов, как с высокого уровня на низкий, так и наоборот. То есть при одном щелчке энкодера прерывание сработает 4 раза. Или по 2 раза для каждого из входов. Но обработчик выдаст сигнал поворота только 1 раз на все 4 прерывания.

Код обработчика при каждом срабатывании записывает в переменную lastcomb состояние входов, к которым подключен энкодер. И ждет состояние когда выходы A и B будут замкнуты на GND, это гарантированный сигнал того, что энкодер вращается. После того как этот сигнал получен, обработчик проверяет в какую сторону было вращение. Для этого он сравнивает его предыдущее значение из переменной lastcomb и в зависимости от фазы сдвига определит в какую сторону был поворот ротора. Как я писал ранее, сложнее всего отслеживать нажатие кнопки.

Так как использовать определенные тайминги я не планировал, потому, что они неизбежно приводят длительным задержкам работы обработчика и основной программы, или требуют использование таймера, которых в микроконтроллере всего 3 шт. их, как правило никогда не хватает. Собственно проблема состояла в том, чтобы разделить "нажатие с последующим вращением" от простого нажатия. В итоге как вы уже можете убедиться, я решил эту задачу. Оптимизацией кода я не стал заниматься, потому как все работает и меня все устраивает. Для наглядности в коде все действия с энкодером, отображаются в Serial мониторе программы Adruino IDE.

/*
При публичном размещении кода ссылка на первоисточник обязательна.
*/
#define btn_long_push 1000 // Длительность долинного нажатия кнопки
volatile uint8_t lastcomb=7, enc_state, btn_push=0;
volatile int enc_rotation=0, btn_enc_rotate=0;
volatile boolean btn_press=0;
volatile uint32_t timer;
//********************************
void setup()
{
pinMode(A1,INPUT_PULLUP); // ENC-A
pinMode(A2,INPUT_PULLUP); // ENC-B
pinMode(A3,INPUT_PULLUP); // BUTTON
PCICR = 0b00000010; // PCICR |= (1<<PCIE1); Включить прерывание PCINT1
PCMSK1 = 0b00001110; // Разрешить прерывание для A1, A2, A3
Serial.begin(115200);
}
//****************************************

void loop()

{

switch (enc_state)

{

case 1: {

Serial.print("Вращение без нажатия ");

Serial.println(enc_rotation);

}

break;

case 2: {

Serial.print("Вращение с нажатием ");

Serial.println(btn_enc_rotate);

}

break;

case 3: Serial.println("Нажатие кнопки ");

break;

case 4: Serial.println("Длинное нажатие кнопки ");

break;

}

enc_state=0; //обнуляем статус энкодера

}


//****************************************
ISR (PCINT1_vect) //Обработчик прерывания от пинов A1, A2, A3
{
uint8_t comb = bitRead(PINC, 3) << 2 | bitRead( PINC, 2)<<1 | bitRead(PINC, 1); //считываем состояние пинов энкодера и кнопки
if (comb == 3 && lastcomb == 7) btn_press=1; //Если было нажатие кнопки, то меняем статус
if (comb == 4) //Если было промежуточное положение энкодера, то проверяем его предыдущее состояние
{
if (lastcomb == 5) --enc_rotation; //вращение по часовой стрелке
if (lastcomb == 6) ++enc_rotation; //вращение против часовой
enc_state=1; // был поворот энкодера
btn_enc_rotate=0; //обнулить показания вращения с нажатием
}
if (comb == 0) //Если было промежуточное положение энкодера и нажатие, то проверяем его предыдущее состояние
{
if (lastcomb == 1) --btn_enc_rotate; //вращение по часовой стрелке
if (lastcomb == 2) ++btn_enc_rotate; //вращение против частовой
enc_state=2; // был поворот энкодера с нажатием
enc_rotation=0; //обнулить показания вращения без нажатия
btn_press=0; //обнулить показания кнопки
}
if (comb == 7 && lastcomb == 3 && btn_press) //Если было отпускание кнопки, то проверяем ее предыдущее состояние
{
if (millis() - timer > btn_long_push) // проверяем сколько прошло миллисекунд
{
enc_state=4; // было длинное нажатие
} else {
enc_state=3; // было нажатие
}
btn_press=0; //обнулить статус кнопки
}
timer = millis(); //сброс таймера
lastcomb = comb; //сохраняем текущее состояние энкодера
}

Заключение

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

Если у Вас остались вопросы и замечания, пишите их в комментариях. Я с удовольствием на них отвечу.

Показать полностью 2
[моё] Arduino Энкодер Своими руками Видео Длиннопост
41
40
WinterCuter
WinterCuter
4 года назад
Arduino & Pi

Энкодер на STM32 (arduino, platformio)⁠⁠

Использование энкодера вместе с STM32 с прерываниями.

Код лежит тут https://ideone.com/9oMlVS (сильно не пинайте, в первые использую подобный сервис).

Кусочек в прерываниях где-то увидел, не могу вспомнить где, но он сюда подошел.

Готовых решений в интернете не нашел, а из готовых библиотек ни одна не заработала как я хотел.

Оформлять в библиотеку не стал, просто есть как есть.

Показать полностью
[моё] Arduino Энкодер Программирование Микроконтроллеры Видео
18
9
vitae2000
4 года назад

FLProg_Решаем проблему с шагом энкодера⁠⁠

Пошаговая подготовка к будущему проекту.

[моё] Энкодер Flprog Шаги Индикар Триггер Arduino Уно Видео
3
308
engine9
engine9
4 года назад
Сообщество Ремонтёров

Вскрытие энкодера колёсика мыши⁠⁠

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

Выпаял при помощи оплётки и сосновой канифоли.


Вскрывается путём отгибания "лапок" металлической части, вот так.

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

Вымыл при помощи зубной щетки с заостренными щетинками, в изопропаноле. Видно как щетки протерли колею в металле. Годы работы!

Впаиваем обратно, отмываем смолу.

Колесо отлично работает, но почему-то перестала работать кнопка левого клика :)

Показать полностью 6
[моё] Ремонт техники Энкодер Компьютерная мышка Длиннопост
216
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии