mirror of
https://github.com/eddyem/mmpp.git
synced 2025-12-06 10:35:16 +03:00
1031 lines
52 KiB
TeX
1031 lines
52 KiB
TeX
\documentclass[a4paper,12pt]{extarticle}
|
||
\usepackage{listings}
|
||
\usepackage{ed}
|
||
\def\lstref#1{(см.~листинг~\ref{#1})}
|
||
\lstset{basicstyle=\small\ttfamily,breaklines=true,extendedchars=true,aboveskip=1em,belowcaptionskip=5pt,
|
||
prebreak = \hbox{\normalfont\small\hfill\green{\ensuremath{\hookleftarrow}}},
|
||
postbreak = \hbox to 0pt{\hss\normalfont\small\green{\ensuremath{\hookrightarrow}}\hspace{1ex}},
|
||
commentstyle=\color{blue},showspaces=false,showstringspaces=false,
|
||
stringstyle=\bfseries\color[rgb]{0.6,0,1},
|
||
keywordstyle=\bfseries\color[rgb]{0,0.1,0.5},
|
||
tabsize=4}
|
||
\nocolon
|
||
\def\Z{Цейсс--1000\xspace}
|
||
\title{Многорежимный фотометр--поляриметр (MMPP) телескопа \Z. Техническая документация.}
|
||
\author{Емельянов~Э.В. \and Москвитин~А.С.\and Фатхуллин~Т.А.}
|
||
\graphicspath{{./imgs/}}
|
||
\begin{document}
|
||
\maketitle
|
||
\tableofcontents
|
||
|
||
|
||
\section{Описание прибора}
|
||
MMPP (Multi-Mode Photometer-Polarimeter) "--- многорежимный фотометр-поляриметр телескопа \Z
|
||
предназначен для проведения фотометрических и поляриметрических исследований. Прибор оснащен двумя турелями
|
||
USB-HSFW (Edmund Optics) с пятью позициями для 50-мм фильтров, анализатором линейной поляризации и
|
||
четвертьволновой пластиной. Основным светоприемником фотометра является ПЗС Eagle~V ($2048\times2048\,$пикс),
|
||
позволяющий проводить научные исследования в диапазонах от~300 до~1050\,нм с максимумом чувствительности
|
||
около 600\,нм. Данный ПЗС оснащен водяным охлаждением. Также прибор рассчитан на использование с быстрым
|
||
КМОП-светоприемником Andor NEO~5.5 ($2560\times2160\,$пикс) в режиме <<быстрой фотометрии>> и <<lucky
|
||
imaging>>.
|
||
|
||
В фотометрическом режиме в течение ночи без переоснащения прибора возможна работа в восьми фотометрических
|
||
полосах. Изменение рабочего набора фильтров выполняется посредством замены колес в турелях (пять наборов колес
|
||
описаны в конфигурации интерфейса управления прибором; нестандартные наборы потребуют изменения конфигурации).
|
||
|
||
На рис.~\ref{MMPP_optsch} приведена схема расположения узлов MMPP. Непосредственно на входном фланце закреплен
|
||
транслятор поворотной платформы фазовой пластины диаметром 25\,мм. Далее располагается транслятор поворотной
|
||
платформы анализатора поляризации диаметром 50\,мм. Последними в корпусе установлены турели фотометрических
|
||
фильтров. К задней стенке прибора крепится фланец светоприемника: ПЗС или CMOS.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=\textwidth]{sch}
|
||
\caption{Оптическая схема прибора. Обозначения: 0~-- входное окно (плоскость фланца телескопа), 1~--
|
||
четвертьволновая пластина, 2~-- анализатор поляризации, 3~и~4~-- интерференционные фильтры, 5~-- выходное
|
||
окно. Eagle, Andor~-- плоскости расположения соответствующих светоприемников.}
|
||
\label{MMPP_optsch}
|
||
\end{pict}
|
||
|
||
|
||
Исходные коды прошивки системы управления, утилит командной строки, принципиальные схемы и pdf-файлы с
|
||
чертежами прибора размещены в отдельном репозитории github\footnote{\url{https://github.com/eddyem/mmpp}}.
|
||
|
||
\section{Оптические характеристики}
|
||
\paragraph{Характеристики прибора}
|
||
\begin{list}{}{}
|
||
\item Теоретическое невиньетированное поле: $11.4'$~в режиме фотометрии, $10.9'$~в режиме линейной поляризации
|
||
(оба размера "--- диагонали ПЗС-светоприемника), $2.6'$~в режиме циркулярной поляризации;
|
||
\item диагональ светоприемников: ПЗС "--- $10.3'$, КМОП "--- $5.6'$;
|
||
\item кривые пропускания фильтров приведены на рис.~\ref{filters_curves};
|
||
\item
|
||
\end{list}
|
||
|
||
|
||
\TODO[картинки]
|
||
\begin{pict}
|
||
%\includegraphics{}
|
||
\caption{Кривые пропускания фотометрических фильтров системы Джонсона--Коузинса.}
|
||
\label{filters_curves}
|
||
\end{pict}
|
||
|
||
\comment[характеристики]{четвертьволновой и поляроида}
|
||
|
||
\paragraph{Характеристики ПЗС-светоприемника}
|
||
\TODO[Тимур]
|
||
|
||
\section{Механика}
|
||
\subsection{Элементы механики MMPP}
|
||
Поворотные платформы фазовой пластины и анализатора поляризации установлены на цилиндрических направляющих,
|
||
позволяющих при помощи соединения винт-гайка вводить и выводить их из пучка посредством шаговых двигателей.
|
||
Шаг винтового соединения составляет 1\,мм, т.е. поворот шаговых двигателей на один шаг приводит к перемещению
|
||
трансляторов на 5\,мкм. Перемещение трансляторов ограничено датчиками Холла~A1101. Точность установки
|
||
нуль-пункта трансляторов составляет $\pm0.13\,$мм. В положении <<0>> оба транслятора полностью выведены из
|
||
пучка. Полный ход транслятора фазовой пластины составляет около $67.5\,$мм (13500~шагов), транслятора
|
||
анализатора поляризации "--- около $145\,$мм (29000~шагов). Положение <<в пучке>> определяется юстировкой
|
||
прибора, которую необходимо производить каждый раз после вмешательства в положение трансляторов или концевых
|
||
датчиков. В среднем для транслятора фазовой пластины оно составляет 11400~шагов, а для транслятора анализатора
|
||
поляризации "--- 16400~шагов.
|
||
|
||
Четвертьволновая фазовая пластинка приводится во вращение при помощи поворотной платформы 8MPR16-1 фирмы
|
||
Standa, в которой аналоговый датчик Холла (служащий для определения нуль-пункта) заменен на A1101 (с
|
||
встроенным компаратором и триггером Шмидта). Для вращения анализатора поляризации используется поворотная
|
||
платформа 8MR190-2-4233 фирмы Standa. В ней в качестве нуль-пункта используется концевой выключатель.
|
||
Конструктивные изменения данной платформы заключаются в удалении разъема типа DS9 и подключения проводки
|
||
напрямую (при помощи пайки).
|
||
|
||
Точность установки нуль-пунктов обеих поворотных платформ составляет~$\pm5'$. Дискрет поворотной платформы
|
||
фазовой пластины составляет~$0.75'$ (80~шагов на $1\degr$), дискрет анализатора поляризации "--- $0.6'$
|
||
(100~шагов на $1\degr$).
|
||
|
||
Монтаж фотометра на фланце телескопа \Z выполняется в соответствии с положением меток на фланцах
|
||
телескопа и прибора. Аналогично по расположению меток устанавливаются светоприемники. Для удобства
|
||
визуализации позиционный угол фланца телескопа должен быть установлен в положение~$337.5\degr$.
|
||
|
||
\subsection{Система управления}
|
||
Так как турели Edmund Optics представляют собой самостоятельные устройства с управлением по USB, система
|
||
управления прибором имеет модульную структуру. В приборе размещен USB-концентратор, к которому подключены обе
|
||
турели с фильтрами, а также преобразователь интерфейсов USB$\leftrightarrow$TTL для работы с модулями
|
||
управления парой шаговых двигателей.
|
||
|
||
\subsubsection{Турели}
|
||
Протокол управления турелями HSFW Edmund Optics не был документирован фирмой-изготовителем, поэтому был
|
||
восстановлен методом обратной разработки. Устройство работает через HID-интерфейс и не нуждается для работы в
|
||
правах суперпользователя.
|
||
Для управления устройством разработана утилита
|
||
\verb'HSFW_management'\footnote{\url{https://github.com/eddyem/eddys_snippets/tree/master/HSFW_management},
|
||
там же "--- примеры работы с утилитой} \lstref{hsfwman}, полностью реализующая возможности турелей: поиск
|
||
среди устройств по идентификатору, названию колеса или названию фильтра; перемещение заданного колеса в
|
||
требуемую позицию; реинициализация с перемещением в стартовую позицию; сохранение сведений о фильтрах в
|
||
различных колесах в EEPROM устройства.
|
||
|
||
Турели поддерживают до пяти разных колес с фильтрами. Маркировка колес выполняется при помощи постоянного
|
||
магнита, вклеиваемого в соответствующее отверстие на колесе. При подготовке нового колеса необходимо
|
||
убедиться, что маркирующий магнит вклеен в соответствии с полярностью остальных магнитов
|
||
(см.~рис.~\ref{wheel_naming}). Буквой <<P>> на рисунке обозначено положение магнита, отмечающее положение
|
||
одного из фильтров <<в пучке>>; <<A>>, <<B>> и <<C>> "--- магниты, маркирующие колесо (магниты <<D>> и <<E>>
|
||
расположены дальше и в кадр не вошли). Магнит <<A>> всегда должен присутствовать, маркируя положение
|
||
нуль-пункта, позиции с <<B>> по <<E>> могут быть свободными (в этом случае колесо определяется как <<A>>),
|
||
либо в одной из них может находиться магнит для соответствующей маркировки.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{Wmark0}\hfil\includegraphics[width=0.49\textwidth]{Wmark1}
|
||
\caption{Маркировка колес с фотометрическими фильтрами.}
|
||
\label{wheel_naming}
|
||
\end{pict}
|
||
|
||
\begin{lstlisting}[caption=Краткая справка по параметрам утилиты {\tt HSFW\_manage},label=hsfwman]
|
||
-H, --home переместиться в стартовую позицию
|
||
-N, --wheel-name=arg название колеса
|
||
-W, --wheel-id=arg буквенный идентификатор колеса
|
||
-h, --help отобразить эту справку
|
||
-i, --filter-id=arg идентификатор фильтра, например, "A3"
|
||
-n, --filter-name=arg название фильтра
|
||
-p, --f-position=arg номер позиции фильтра
|
||
-s, --serial=arg серийный номер турели (с начальными нулями)
|
||
--list список имен только присутствующих устройств
|
||
--list-all список всех сохраненных имен
|
||
--rename переименовать сохраненные имена
|
||
колес/фильтров
|
||
--resetnames сбросить все названия в значения по умолчанию
|
||
\end{lstlisting}
|
||
|
||
\subsubsection{Управление шаговыми двигателями}
|
||
Каждый линейный транслятор в совокупности с соответствующей поворотной платформой и управляющим контроллером
|
||
оформлен как отдельное устройство. Протокол управления приведен в приложении~\ref{MMPP_control}.
|
||
|
||
Все управляющие контроллеры размещаются на одной сигнальной шине UART (протокол: 8N1). Сигналы Tx контроллеров
|
||
подключаются по схеме <<открытый сток>> с использованием внешней или слабой внутренней подтяжки. Скорость
|
||
интерфейса задается в настройках контроллера, по умолчанию это 115200~бод.
|
||
|
||
Система управления построена на основе микроконтроллера STM32F030 (см.~рис.~\ref{MMPP_scheme}). Запись
|
||
микропрограммы выполняется посредством встроенного в микроконтроллер бутлоадера (для его активации на плате
|
||
размещены кнопки <<boot>> и <<reset>>). При помощи датчика тока MAX471 возможно измерение потребляемого
|
||
двигателями в процессе работы тока. Микроконтроллер формирует сигналы STEP\slash DIR, которые преобразуются в
|
||
силовые сигналы для шаговых двигателей при помощи модулей на основе драйверов DRV8825. В случае замены
|
||
драйверов, до подключения шаговых двигателей требуется выставить предельный потребляемый ток в соответствии с
|
||
таблицей~\ref{MotCurrents} в приложении. Драйверы работают в режиме дробления шага на~16, однако, система
|
||
управления не позволит переместить шаговый двигатель на дробное количество шагов, т.к. после окончания
|
||
движения двигатель обесточивается.
|
||
|
||
Система обеспечивает плавный разгон и торможение двигателей (кроме ситуаций наезда на концевик). Интерфейсы
|
||
подключения концевых выключателей различаются: для двигателя~1 концевики подключаются к аналоговым входам МК,
|
||
что позволяет параллельно ним установить дополнительные кнопки управления с сильной подтяжкой (резисторы
|
||
сопротивлением 47~кОм) к земле. Данные кнопки выведены на лицевую панель прибора и позволяют управлять
|
||
перемещением трансляторов без компьютера (для проверки работоспособности системы и перемещения транслятора
|
||
анализатора поляризации при замене нижней турели светофильтров).
|
||
|
||
Номер контроллера (по умолчанию "--- 0) хранится во внутренней флеш-памяти МК. Контроллер анализатора
|
||
поляризации имеет номер~1, контроллер фазовой пластины "--- 2. В случае замены контроллера до установки его в
|
||
прибор необходимо провести базовые настройки в соответствии со списком на стр.~\pageref{MMPP_basesettings}.
|
||
|
||
Сразу после включения питания контроллеры находятся в неинициализированном состоянии. Для их инициализации в
|
||
ручном режиме необходимо сместить все позиционные устройства в положительном направлении на небольшую величину
|
||
(для гарантированного съезда с нулевого концевика), а затем двигать их в отрицательном направлении на
|
||
количество шагов, превышающее рабочий диапазон "--- для установки на нулевые концевики. Далее до следующего
|
||
отключения питания эту процедуру проводить не нужно.
|
||
|
||
Для удобства управления устройствами MMPP разработана утилита
|
||
\verb'MMPP_control'~\footnote{\url{https://github.com/eddyem/mmpp/tree/master/MMPP_control}}. Краткий
|
||
перечень параметров утилиты:
|
||
|
||
\def\t#1{{\ttfamily #1}}
|
||
\begin{description}
|
||
\item[\ttfamily -A, --absmove] --- абсолютное движение, данный параметр используется для задания абсолютной
|
||
величины количества шагов (аргументы \t{-L} и \t{-l}) или угла в градусной мере (аргументы \t{-R} или
|
||
\t{-r}), без этого параметра подразумевается задание аргумента относительно текущего положения;
|
||
\item[\ttfamily E, --reset] --- выполнить программный сброс заданного контроллера, для сброса обоих
|
||
контроллеров необходимо указать: \t{-E1 -E2};
|
||
\item[\ttfamily -L, --lin1=arg] --- переместить линейный транслятор поляроида на заданное количество шагов;
|
||
\item[\ttfamily -R, --rot1=arg] --- повернуть поляроид на заданный угол (в градусной мере);
|
||
\item[\ttfamily -S, --stop] --- прекратить движение (оба контроллера получают сигнал остановить любое
|
||
движение);
|
||
\item[\ttfamily -a, --sendraw=arg] --- отправить неформатированные <<сырые>> данные в порт, например, для
|
||
передачи команд или получения значений, выходящих за рамки стандартных аргументов утилиты;
|
||
\item[\ttfamily -b, --baudrate=arg] --- скорость связи (например, 115200), по умолчанию ее значение "--- 9600;
|
||
\item[\ttfamily -d, --comdev=arg] --- название устройства последовательного порта, \t{/dev/ttyUSB0} по
|
||
умолчанию;
|
||
\item[\ttfamily -h, --help] --- отображение справки по параметрам;
|
||
\item[\ttfamily -l, --lin2=arg] ---переместить линейный транслятор волновой пластины на заданное количество
|
||
шагов;
|
||
\item[\ttfamily -p, --pidfile=arg] --- название pid-файла (по умолчанию "--- \t{/tmp/MMPP\_control.pid});
|
||
\item[\ttfamily -q, --quiet] --- <<тихий>> режим для вызова из внешних программ (на стандартный вывод
|
||
отображается лишь необходимый минимум информации в виде <<параметр=значение>>, стандартный поток ошибок
|
||
отображается без изменений);
|
||
\item[\ttfamily -r, --rot2=arg] --- повернуть волновую пластину на заданный угол (в градусной мере);
|
||
\item[\ttfamily -s, --status] --- отображение текущего состояния фотометра;
|
||
\item[\ttfamily -t, --temp] --- отображение примерной температуры обоих микроконтроллеров;
|
||
\item[\ttfamily -w, --wait] --- ожидание завершения всех движений, заданных в предыдущих запусках утилиты с
|
||
<<асинхронным>> параметром \t{-y};
|
||
\item[\ttfamily -y, --async] --- <<асинхронное>> движение: сразу после передачи команды движения утилита
|
||
завершается, не ожидая окончания движения.
|
||
\end{description}
|
||
|
||
Коды возврата утилиты заданы в начале файла \t{main.c}. Они имеют следующее значение:
|
||
\begin{description}
|
||
\item[0, RET\_ALLOK] нормальное завершение работы;
|
||
\item[1, RET\_NOTFOUND] при запуске утилиты не найдено ни одного отвечающего контроллера, либо не получен
|
||
ответ от искомого контроллера при передаче команды;
|
||
\item[2, RET\_ONLYONE] при запуске обнаружен лишь один контроллер;
|
||
\item[3, RET\_COMMERR] ошибка связи или формата передаваемых \slash принимаемых данных;
|
||
\item[4, RET\_CANTINIT] невозможно инициализировать контроллер установкой на нулевой концевик;
|
||
\item[5, RET\_WAITERR] ошибка, возникшая во время ожидания завершения выполнения предыдущих передвижений;
|
||
\item[9, RET\_ERROR] прочая ошибка (из libsnippets);
|
||
\item[255, RET\_HELPCALL] запуск утилиты с параметром \t{-h}.
|
||
\end{description}
|
||
|
||
|
||
\section{Интерфейс системы управления}
|
||
\comment[Тимур]{конфигурационный файл колес}
|
||
\label{wheels_config}
|
||
|
||
\section{Приложения}
|
||
\subsection{Замена колес с фильтрами}
|
||
Доступ к колесам турелей осуществляется через лицевую панель фотометра (см.~рис.~\ref{turwhls}). Для замены
|
||
соответствующего колеса необходимо ослабить винт, фиксирующий колесо в турели, открыть крышку турели, поменять
|
||
колеса, затянуть фиксирующий винт и закрыть крышку турели.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.48\textwidth]{turABclosed}\hfil\includegraphics[width=0.48\textwidth]{turABopened}
|
||
\caption{Крышки турелей. На рис.~слева отмечено положение винтов, фиксирующих крышки. На рис.~справа "---
|
||
турели с открытыми крышками.}
|
||
\label{turwhls}
|
||
\end{pict}
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.6\textwidth]{sidebtns}
|
||
\caption{Кнопки ручного управления механизмом линейных трансляторов: 1~и~2~-- перемещение транслятора
|
||
анализатора поляризации в отрицательном и положительном направлении, соответственно; 3~и~4~-- аналогичные
|
||
перемещения транслятора фазовой пластины.}
|
||
\label{buttons}
|
||
\end{pict}
|
||
|
||
|
||
Доступ к фиксирующему винту нижней турели осуществляется через боковую крышку (см.~рис.~\ref{wheelscrews}
|
||
справа). Чтобы ослабить этот винт, необходимо сначала переместить транслятор анализатора поляризации
|
||
(контроллер \No\,1) на концевик~1. Это реализуется либо через интерфейс управления прибором, либо посредством
|
||
сервисных кнопок, расположенных над боковой крышкой. Первая и вторая кнопки управляют транслятором
|
||
анализатора поляризации, третья и четвертая "--- транслятором фазовой пластины. В каждой группе нажатие левой
|
||
кнопки вызывает движение транслятора в сторону концевика~0, нажатие правой "--- в сторону
|
||
концевика~1~(см.~рис.~\ref{buttons}).
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.48\textwidth]{turAscrew}\hfil\includegraphics[width=0.48\textwidth]{turBscrew}
|
||
\caption{Расположение винтов, фиксирующих колеса в турелях. Слева~-- винт верхней турели, справа~-- нижней.}
|
||
\label{wheelscrews}
|
||
\end{pict}
|
||
|
||
Фиксирующий винт верхней турели находится под закрепленной посредством магнитов крышке вблизи фланца
|
||
светоприемника (см.~рис.~\ref{wheelscrews} слева). Чтобы не потерять крышку во время замены колеса верхней
|
||
турели, рекомендуется закрепить ее так, как указано на рисунке. Вращением отмеченной на рисунке шайбы можно
|
||
ослабить или затянуть фиксатор колеса верхней турели.
|
||
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.48\textwidth]{wheels_sch}\hfil\includegraphics[width=0.48\textwidth]{wheelBopened}
|
||
\caption{Схема расположения колес в турелях (слева) и частично извлеченное из нижней турели колесо с
|
||
фильтрами.}
|
||
\label{wheelscheme}
|
||
\end{pict}
|
||
|
||
На внутренней поверхности крышки лицевой панели прибора нанесена схема расположения колес в турелях по
|
||
отношению к падающему свету (см.~рис.~\ref{wheelscheme}). Колеса располагаются встречно друг к другу. Следует
|
||
размещать колеса в соответствии со схемой в случае, когда установленные фильтры имеют рабочее направление.
|
||
В колесе нижней турели (т.е. первой со стороны фланца прибора) свет падает \textbf{на заднюю поверхность}
|
||
колеса (противоположную маркировке и крепежу фильтров). В колесе же верхней турели свет падает \textbf{на
|
||
переднюю поверхность} колеса.
|
||
|
||
Расположение фильтров в колесе должно быть указано в соответствующем конфигурационном файле интерфейса
|
||
системы управления прибором (см.~стр.~\pageref{wheels_config}).
|
||
|
||
После окончания замены колес турели находятся в неинициализированном состоянии. Для их инициализации
|
||
необходимо выполнить одну из процедур: либо проводить замену с отключенным питанием контроллера (в этом
|
||
случае инициализация турелей произойдет автоматически, однако, необходимо будет выполнить инициализацию
|
||
подвижных элементов MMPP), либо при помощи интерфейса системы управления или утилиты \verb'HSFW_manage'
|
||
установить оба колеса в положение <<home>>.
|
||
|
||
|
||
\subsection{Методика установки нуль-пунктов}
|
||
Для установки нуль-пунктов линейных трансляторов используются вспомогательные рамки с натянутыми на них
|
||
нитяными крестами (см.~рис.~\ref{aux_frames}). Рамки устанавливаются вместо оптических узлов: фазовой
|
||
пластины, анализатора поляризации и двух фильтров. Контрольный выходной крест натягивается также на фланец
|
||
ПЗС-светоприемника. Для контрольной засветки оптического тракта используется крестообразный лазерный
|
||
осветитель, устанавливаемый на специальном фланце во входном окне прибора. Регулировочными винтами необходимо
|
||
добиться совмещения центра изображения креста осветителя с центром нитяного креста на фланце ПЗС. Дальнейшая
|
||
юстировка производится визуально, либо при помощи вспомогательной видеокамеры с объективом-трансфокатором.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.6\textwidth]{frames}
|
||
\caption{Вспомогательные юстировочные рамки.}
|
||
\label{aux_frames}
|
||
\end{pict}
|
||
|
||
Юстировка турелей фильтров производится следующим образом. При помощи интерфейса системы управления либо
|
||
утилиты \verb'HSFW_manage' в обеих турелях выставляются позиции с нитяными крестами. Далее путем регулировки
|
||
трех фиксирующих винтов турель центруется относительно удерживающего цилиндра. После центровки турелей оба
|
||
колеса необходимо установить в положение <<hole>>, чтобы освободить оптический тракт для установки
|
||
нуль-пунктов линейных трансляторов.
|
||
|
||
%\begin{pict}
|
||
%\includegraphics{}
|
||
%\caption{Схема установки турелей с фильтрами.}
|
||
%\label{turrets_centering}
|
||
%\end{pict}
|
||
|
||
Для определения нуль-пунктов трансляторов можно использовать кнопки на боковой панели прибора, при помощи
|
||
которых необходимо грубо совместить перекрестие нити в соответствующем оптическом узле с изображением креста
|
||
осветителя. Точное совмещение выполняется при помощи интерфейса системы управления или утилиты
|
||
\verb'MMPP_control'. По данным \verb'MMPP_control' определяются положения нуль-пунктов \lstref{zeropoints}
|
||
транслятора анализатора поляризации (Pol: M0POS) и фазовой пластины (L/4: M0POS).
|
||
|
||
\begin{lstlisting}[caption=({\tt MMPP\_control -s}),label=zeropoints]
|
||
Pol: M0ST M0LEFT M0POS - M1ST M1LEFT M1POS || L/4: M0ST M0LEFT M0POS - M1ST M1LEFT M1POS
|
||
Pol: STOP 0 16400 - STOP 0 0 || L/4: STOP 0 11400 - STOP 0 0
|
||
ESW00 ESW01 ESW10 ESW11 || ESW00 ESW01 ESW10 ESW11
|
||
RLSD RLSD HALL RLSD || RLSD RLSD HALL RLSD
|
||
\end{lstlisting}
|
||
|
||
Для определения положений нуль-пунктов анализатора поляризации и четвертьволновой пластины необходимо
|
||
использовать дополнительное оборудование (см.~рис.~\ref{pol_zero}): осветитель, оснащенный поляризатором с
|
||
известным направлением поляризации, а также формирователь круговой поляризации с известным направлением
|
||
вращения (поляризатор и четвертьволновая пластина). Возможно также определение нуль-пунктов поляризационной
|
||
оптики при помощи наблюдения стандартов с линейной и круговой поляризацией.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.6\textwidth]{polzro}
|
||
\caption{Осветитель для калибровки нуль-пунктов поляризационной моды.}
|
||
\label{pol_zero}
|
||
\end{pict}
|
||
|
||
|
||
Определение нуль-пункта анализатора поляризации производится при помощи вспомогательного поляроида,
|
||
осветителя с объективом и светоприемника (при достаточной яркости осветителя в качестве светоприемника
|
||
возможно использовать фоторезистор). Получить поляризованный в данной плоскости свет можно при помощи
|
||
куска поляризующей пленки из жидкокристаллических мониторов. Юстировка плоскости поляризатора производится
|
||
при помощи поляризационной стопы, поляризационной призмы (например, призмы Глана) или поляризатора с известным
|
||
направлением плоскости поляризации.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.6\textwidth]{photores}
|
||
\caption{Пример графика зависимости сопротивления фоторезистора от интенсивности освещения. Окружностями
|
||
отмечены измеренные данные, линией~-- степенная аппроксимация.}
|
||
\label{photores_cali}
|
||
\end{pict}
|
||
|
||
После юстировки осветителя необходимо осветить им оптический тракт прибора и сфокусировать на светоприемнике.
|
||
Далее требуется линеаризовать показания светоприемника. Это можно сделать, изменяя степень заполнения ШИМ
|
||
источника питания осветителя (осветителем может выступать светодиод, для минимизации влияния импульсного
|
||
характера осветителя на точность измерений рекомендуется задавать максимальную частоту ШИМ, от 100\,кГц и
|
||
выше). В случае использования фоторезистора освещенность хорошо аппроксимируется функцией $I =
|
||
a\cdot\exp(b-\ln R)$ (см.~рис.~\ref{photores_cali}). Далее строится зависимость освещенности светоприемника от
|
||
угла вращения и по аппроксимации параболой областей вблизи минимумов освещенности определяется положение
|
||
скрещенных поляризатора и анализатора, откуда можно определить положение нуль-пункта анализатора поляризации.
|
||
|
||
После определения нуль-пункта анализатора он выставляется в положение~$90\degr$ по отношению к осветителю, и в
|
||
пучок вводится фазовая пластина. Измеряя интенсивность прошедшего света в зависимости от угла вращения
|
||
четвертьволновой пластины определяются положения плоскостей ее экстремальных скоростей. Точные значения углов
|
||
определяются аналогично "--- из аппроксимации участков вблизи минимумов освещенности
|
||
(см.~рис.~\ref{phase_cali}). Для используемой в MMPP четвертьволновой пластины угол между плоскостями
|
||
экстремальных скоростей в полосе~R составляет $91.7\degr$. Определить, какая из плоскостей соответствует
|
||
максимальной фазовой скорости, можно при помощи источника циркулярно поляризованного света с известным
|
||
направлением вращения плоскости поляризации.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.6\textwidth]{lambda4}
|
||
\caption{Интенсивность излучения вблизи плоскостей экстремальных скоростей фазовой пластины. Нулю
|
||
каждой кривой соответствут угол: голубой~-- $56.9\degr$, красный~-- $148.8\degr$, желтый~-- $237.0\degr$,
|
||
фиолетовый~-- $328.6\degr$.}
|
||
\label{phase_cali}
|
||
\end{pict}
|
||
|
||
\subsection{Порядок сборки и замены узлов прибора}
|
||
В случае замены блока питания прибора проверить наличие внутреннего соединения корпуса и минусовой шины. Если
|
||
сопротивление между ними превышает несколько сотен килоом, соединить минусовую шину и корпус резистором
|
||
мощностью~0.25\,Вт и сопротивлением~220\,кОм.
|
||
|
||
Подключение проводов UART: Rx/Tx преобразователя UART-USB к Tx/Rx контроллеров; дополнительно можно установить
|
||
сильную (около 4.7\,кОм) подтяжку между +3.3\,В и Rx преобразователя.
|
||
|
||
Порядок разборки прибора следующий (соответственно, порядок сборки "--- обратный).
|
||
|
||
\newcount\acnt\acnt1\def\nxt{\textbf{\the\acnt. }\advance\acnt1}
|
||
\nxt Снять фланец светоприемника \look{ass001}.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.7\textwidth]{ass-001}
|
||
\caption{Фотометр со снятым фланцем светоприемника.}
|
||
\label{ass001}
|
||
\end{pict}
|
||
|
||
\nxt Снять боковые крышки \look{ass002}. Во время съема левой крышки (с боковым люком) отключить провода
|
||
управления линейными трансляторами от панели с кнопками.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-002}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-003}
|
||
\caption{Боковые крышки сняты.}
|
||
\label{ass002}
|
||
\end{pict}
|
||
|
||
\nxt Отсоединить проводники USB и питания турелей, снять верхнюю плиту MMPP, на которой размещен узел
|
||
крепления турелей \look{ass005}.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.7\textwidth]{ass-005}
|
||
\caption{Отделена панель с креплением турелей.}
|
||
\label{ass005}
|
||
\end{pict}
|
||
|
||
\nxt Открутить шесть винтов, крепящих панель турелей к верхней плите фотометра. При сборке
|
||
удостовериться, что находящееся вблизи прямоугольного окна резьбовое соединение крепления фланца
|
||
светоприемника соответствует изображенному на рис.~\ref{ass006} слева (у данного экземпляра подрезана сторона
|
||
вблизи винта фиксации колеса верхней турели).
|
||
|
||
\begin{pict}
|
||
\includegraphics[height=0.25\textheight]{ass-006}\hfil
|
||
\includegraphics[height=0.25\textheight]{ass-007}
|
||
\caption{Снятие панели крепления турелей.}
|
||
\label{ass006}
|
||
\end{pict}
|
||
|
||
\nxt При помощи шестигранника на тонкой длинной рукоятке (либо длинной плоской отвертки) ослабить винты,
|
||
фиксирующие турели на центрующем кольце (рис.~\ref{ass009} слева). Снять с кольца турели, вынуть кольцо из
|
||
панели турелей и открутить от панели крепежные стойки.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-009}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-010}
|
||
\caption{Отсоединение турелей.}
|
||
\label{ass009}
|
||
\end{pict}
|
||
|
||
\nxt Отсоединить от задней стенки фотометра электрическую проводку \look{ass011}.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.7\textwidth]{ass-011}
|
||
\caption{Проводка, прикрепленная к задней стенке MMPP.}
|
||
\label{ass011}
|
||
\end{pict}
|
||
|
||
\nxt Отключить от контроллера анализатора поляризации шлейфы двигателей ротатора и линейного транслятора.
|
||
Раскрутить винты, крепящие платформу анализатора поляризации к линейному транслятору (рис.~\ref{ass012}
|
||
слева). Отделить ротатор анализатора поляризации от платформы. На задней стороне ротатора раскрутить винты,
|
||
удерживающие накладку поляроида. Извлечь поляроид.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-012}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-013}
|
||
\caption{Отсоединение платформы анализатора поляризации.}
|
||
\label{ass012}
|
||
\end{pict}
|
||
|
||
\nxt Снять крышки, закрывающие силовые соединения блока питания и крышку с силовым разъемом и тумблером
|
||
питания. Открутить винты крепления блока питания к корпусу фотометру. Обратить внимание на то, что при сборке
|
||
указанный на рисунке~\ref{ass014} справа винт должен быть вкручен до установки блока питания.
|
||
|
||
\begin{pict}
|
||
\includegraphics[height=0.25\textheight]{ass-014}\hfil
|
||
\includegraphics[height=0.25\textheight]{ass-015}
|
||
\caption{Снятие крышек блока питания.}
|
||
\label{ass014}
|
||
\end{pict}
|
||
|
||
\nxt Ослабить винты на клеммнике блока питания. Отсоединить проводку и вынуть блок питания.
|
||
На рис.~\ref{ass016} справа изображена крышка тумблера и разъема питания. Конфигурация разъема питания
|
||
следующая: контакт~1~-- заземление, 2~-- нуль, 3~-- фаза. Фазовый контакт посредством плавкого
|
||
цилиндрического предохранителя на $0.5\div1\,$А соединяется с тумблером питания.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-016}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-017}
|
||
\caption{Отсоединение блока питания и силовых элементов.}
|
||
\label{ass016}
|
||
\end{pict}
|
||
|
||
\nxt Отсоединить всю доступную проводку. Открутить винты, крепящие боковые накладки к фланцу прибора
|
||
\look{ass018}. С левой накладки снять USB-концентратор и входной разъем USB.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-018}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-020}
|
||
\caption{Снятие боковых накладок и отключение USB-концентратора.}
|
||
\label{ass018}
|
||
\end{pict}
|
||
|
||
\nxt Перевернуть прибор вверх фланцем, открутить все винты крепления стоек, кроме пары для каждой стойки.
|
||
Оставшиеся винты открутить, сдвинув прибор к краю стола \look{ass021}.
|
||
|
||
\begin{pict}
|
||
\includegraphics[height=0.25\textheight]{ass-021}\hfil
|
||
\includegraphics[height=0.25\textheight]{ass-024}
|
||
\caption{Снятие стоек с креплением элементов линейного транслятора анализатора поляризации.}
|
||
\label{ass021}
|
||
\end{pict}
|
||
|
||
\nxt Отсоединить от фланца прибора стойки с элементами линейного транслятора анализатора поляризации и
|
||
управляющего контроллера \look{ass025}.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-025}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-026}
|
||
\caption{Отсоединение стоек.}
|
||
\label{ass025}
|
||
\end{pict}
|
||
|
||
\nxt Отсоединить с фланца прибора всю проводку. Открутить винты, крепящие пластину ротатора фазовой пластины
|
||
к С-образному кронштейну и снять пластину с ротатором \look{ass027}.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-027}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-028}
|
||
\caption{Снятие ротатора четвертьволновой пластины.}
|
||
\label{ass027}
|
||
\end{pict}
|
||
|
||
\nxt Открутить винты, стягивающие пластину и ротатор. Снять ротатор фазовой пластины. Открутить фиксатор и
|
||
извлечь фазовую пластину. Выкрутить винты, крепящие С-образный кронштейн к подшипниковым узлам транслятора и
|
||
отделить кронштейн \look{ass029}.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-029}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-030}
|
||
\caption{Отсоединение ротатора от пластины, съем кронштейна.}
|
||
\label{ass029}
|
||
\end{pict}
|
||
|
||
\nxt Снять направляющие линейного транслятора фазовой пластины. Ослабить крепление винта подачи в
|
||
соединительной муфте шагового двигателя. Снять винтовой узел. Снять шаговый двигатель. Отсоединить от
|
||
скоб и снять узлы концевиков. Снять с фланца скобы крепления концевиков \look{ass031}.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-031}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-032}
|
||
\caption{Освобождение поверхности фланца.}
|
||
\label{ass031}
|
||
\end{pict}
|
||
|
||
\nxt Со стойки с диагональными откосами ребер жесткости снять крышку доступа к турелям. Открутить откосы и
|
||
элементы транслятора анализатора поляризации (см.~рис.~\ref{ass033} слева). Со второй стойки снять
|
||
цилиндрическую направляющую с узлами ее крепления и отсоединить проводку.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-033}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-034}
|
||
\caption{Разборка узлов линейного транслятора анализатора поляризации.}
|
||
\label{ass033}
|
||
\end{pict}
|
||
|
||
\nxt Ослабить в муфте шагового двигателя крепление винта подачи. Снять винт с креплениями. Снять
|
||
контроллер шаговых двигателей и узлы концевиков. Снять шаговый двигатель \look{ass035}.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-035}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-036}
|
||
\caption{Разборка узлов линейного транслятора анализатора поляризации.}
|
||
\label{ass035}
|
||
\end{pict}
|
||
|
||
\nxt Отсоединить от панели ребра жесткости (см.~рис.~\ref{ass037}). При необходимости разобрать оставшиеся
|
||
мелкие узлы прибора.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-037}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-039}
|
||
\caption{Прибор в разобранном виде.}
|
||
\label{ass037}
|
||
\end{pict}
|
||
|
||
\if0
|
||
\begin{pict}
|
||
\includegraphics[width=0.49\textwidth]{ass-000}\hfil
|
||
\includegraphics[width=0.49\textwidth]{ass-000}
|
||
\caption{.}
|
||
\label{ass000}
|
||
\end{pict}
|
||
\fi
|
||
|
||
|
||
\subsection{Система управления линейными трансляторами и поворотными платформами прибора}
|
||
\label{MMPP_control}
|
||
\subsubsection{Принципиальная схема}
|
||
Разработанная на основе микроконтроллера STM32F030F4P6 система управления шаговыми двигателями имеет
|
||
модульную структуру. Один модуль управляет двумя биполярными шаговыми двигателями (напряжение питания 12\,В)
|
||
с опросом пары аналоговых и пары цифровых (активны при замыкании на нуль) концевиков. На
|
||
рис.~\ref{MMPP_scheme} приведена принципиальная схема одного модуля.
|
||
|
||
\begin{pict}
|
||
\includegraphics[width=\textwidth]{steppers}
|
||
\caption{Принципиальная схема модуля управления шаговыми двигателями.}
|
||
\label{MMPP_scheme}
|
||
\end{pict}
|
||
|
||
Суппрессор~D1 совместно с резисторами~R3 и~R4 (допустимо уменьшить при необходимости сопротивление резисторов
|
||
до $68\div100\,$Ом) обеспечивает антистатическую защиту входов микроконтроллера по линии UART.
|
||
|
||
Кнопки~SW1 (<<reset>>) и~SW2 (<<boot>>) обеспечивают выбор режима загрузки микроконтроллера и аппаратный
|
||
сброс при отладке (для перехода в режим встроенного загрузчика по UART необходимо нажать кнопку <<boot>>,
|
||
затем, удерживая ее, нажать и отпустить кнопку <<reset>>, после чего отпустить кнопку <<boot>>; далее при
|
||
помощи утилиты \verb'stm32flash' или команды \verb'make boot' можно записать файл прошивки во флеш-память
|
||
микроконтроллера).
|
||
|
||
Транзистор~Q1 на входе цепи питания обеспечивает защиту от переполюсовки (при подаче питания в правильной
|
||
полярности p-канальный MOSFET находится в открытом состоянии, при переполюсовке он закрыт).
|
||
|
||
Датчик~U2 (MAX471) служит для измерения тока, потребляемого шаговыми двигателями во время работы. Выход
|
||
датчика является источником тока (500\,мкА на каждый Ампер измеряемого тока). Резистор~R6 выступает в качестве
|
||
его нагрузки, в результате чего напряжение на выходе RC-фильтра на~R7 и~C8 изменяется по закону 0.75\,В на
|
||
каждый Ампер измеряемого тока.
|
||
|
||
Делитель на резисторах~R8 и~R9 позволяет измерять напряжение в цепи питания прибора. Стабилитрон~D3
|
||
ограничивает напряжение, подаваемое на вход АЦП микроконтроллера, величиной менее~3.5\,В. Фильтр на~R10 и~C9
|
||
обеспечивает сглаживание пульсаций и быстрых изменений напряжения. Выходное напряжение примерно в 5.7~раз
|
||
меньше входного.
|
||
|
||
Драйверы шаговых двигателей DRV8825 в виде чип-модулей устанавливаются в соответствующие гнезда. Подтяжка
|
||
контактов модуля M0$\div$M2 к питанию задает требуемый микрошаговый режим. Конденсаторы~C10 и~C11 (low ESR,
|
||
минимум 100\,мкФ) обеспечивают сглаживание пульсаций напряжения питания во время работы драйверов.
|
||
|
||
Разъемы~J3 и~J8 служат для подключения шаговых двигателей и концевых выключателей. Напряжение питания на
|
||
датчики Холла для защиты LDO~U1 подается через резистор~R11. Конденсатор~C7 обеспечивает потребление датчика
|
||
Холла во время переходных процессов. Антистатическая защита выходов концевых выключателей обеспечивается
|
||
резисторами~R12, R13, R15 и~R22 и суппрессором. Резисторы~R23 и~R24 обеспечивают подтяжку к питанию
|
||
аналоговых концевиков, имеющих три градации: 0, Vdd/2 и Vdd. Таким образом, кнопки управления линейными
|
||
трансляторами необходимо тоже подтянуть к земле резисторами сопротивлением 47\,кОм.
|
||
|
||
Отдельно назначение каждого вывода микроконтроллера рассмотрено в таблице~\ref{MCUpins}.
|
||
|
||
|
||
\begin{tbl}
|
||
\caption{Назначение выводов микроконтроллера. Тип: AIN~-- аналоговый вход, PUPD~-- выход push\slash pull,
|
||
OD~-- выход open drain, FIN~-- плавающий вход, FINPU~-- вход с подтяжкой к Vdd.}
|
||
\label{MCUpins}
|
||
\begin{tabular}{|c|c|l|}
|
||
\hline
|
||
\tabstrut\bf Pin & \bf Тип & \bf Назначение \\
|
||
\hline
|
||
PA0 & AIN & Ток шагового двигателя \tabstrut \\
|
||
PA1 & AIN & Напряжение питания (12\,В) \\
|
||
PA2 & AIN & Концевик~1 двигателя~0 \\
|
||
PA3 & AIN & Концевик~0 двигателя~0 \\
|
||
PA4 & PUPD & Такты драйвера двигателя~0 (TIM14\_CH1) \\
|
||
PA5 & PUPD & Подача питания на двигатель~1 \\
|
||
PA6 & PUPD & Такты драйвера двигателя~1 (TIM3\_CH1) \\
|
||
PA7 & PUPD & Направление вращения двигателя~1 \\
|
||
PA9 & OD & USART1 Tx \\
|
||
PA10& FIN & USART1 Rx \\
|
||
PA13& FINPU& Концевик~0 двигателя~1 \\
|
||
PA14& FINPU& Концевик~1 двигателя~1 \\
|
||
PB1 & PUPD & Управление питанием датчика тока \\
|
||
PF0 & PUPD & Подача питания на двигатель~0 \\
|
||
PF1 & PUPD & Направление вращения двигателя~0 \\
|
||
\hline
|
||
\end{tabular}
|
||
\end{tbl}
|
||
|
||
\subsubsection{Протокол управления}
|
||
Управление контроллерами производится по шине UART (8N1, скорость задана в конфигурации, по умолчанию
|
||
9600\,бод). Команды передаются в строковом режиме: признаком окончания команды является символ новой строки.
|
||
Микроконтроллер не обрабатывает принимаемые данные до формирования валидной строки. Символы пробела или
|
||
табуляции внутри строки игнорируются. Первым в строке следует номер контроллера (16-битное беззнаковое
|
||
целое). Данный номер сохраняется во флеш памяти МК во время его инициализации. Каждый модуль обрабатывает лишь
|
||
те команды, которые адресованы ему, либо же имеют широковещательную адресацию (в этом случае в качестве адреса
|
||
указывается -1). Так как вывод данных микроконтроллером при получении широковещательного идентификатора не
|
||
блокируется, не рекомендуется использовать широковещательные посылки при наличии более одного устройства на
|
||
линии связи (кроме посылок экстренного останова, сброса и т.п.).
|
||
|
||
После идентификатора контроллера следует текст команды и (опционально) ее аргументы. В случае, если команда
|
||
валидна, контроллер возвращает строку <<ALLOK>>. Если команда не распознана, возвращается маркер ошибки
|
||
<<BADCMD>>. В случае же ошибок в аргументах команды возвращается маркер ошибки <<ERR>>. Если команда
|
||
возвращает какую-либо информацию, она следует сразу за маркером <<ALLOK>>. Данные, занимающие более одной
|
||
строки текста, завершаются маркером <<DATAEND>>. Если команда лишь требует выполнения определенного действия,
|
||
маркер <<ALLOK>> возвращается после установления возможности выполнения данного действия. В силу синхронного
|
||
характера интерфейса связи, команды, требующие длительного времени на исполнение (например, перемещение
|
||
объекта) не выводят в случае ошибки или достижения заданного положения никаких данных, процесс их исполнения
|
||
необходимо контролировать периодическим запросом состояния модуля.
|
||
|
||
Первым символом в строке команды должен быть один из следующих:
|
||
|
||
\begin{description}\def\itm#1{\rlap{#1}\phantom{(ничего)}}
|
||
\item[(ничего)] команда <<ping>>, в ответ на которую устройство выдает сообщение <<ALIVE>>;
|
||
\item[\itm{G}] команда-геттер;
|
||
\item[\itm{M}] работа с двигателями;
|
||
\item[\itm{R}] программная перезагрузка микроконтроллера (первый после перезагрузки геттер <<status>> вернет
|
||
значение <<SOFTRESET=1>>);
|
||
\item[\itm{S}] команда-сеттер;
|
||
\item[\itm{W}] команда записи во флеш-память значений конфигурации из оперативной памяти.
|
||
\end{description}
|
||
|
||
|
||
Программная перезагрузка контроллера может использоваться для повторной инициализации счетчиков положения
|
||
двигателей (по опорным концевикам нуль-пунктов). Команду записи данных во флеш-память необходимо вызывать
|
||
после изменения конфигурации параметров контроллера и проверки геттером <<configuration>> их значения (за
|
||
исключением скорости интерфейса UART все изменения конфигурационных данных сразу отражаются на поведении
|
||
контроллера).
|
||
|
||
\paragraph{Команды-геттеры.}
|
||
Данные команды предназначены для вывода в терминал определенной информации. Данные выводятся сразу за маркером
|
||
<<ALL OK>>. В случае, если они занимают лишь одну строку (возвращается только один параметр), маркер конца
|
||
данных не выводится, при выводе же более одного параметра конец вывода обозначается маркером <<DATAEND>>.
|
||
|
||
\begin{description}\def\itm#1{\rlap{#1}\phantom{XX}}
|
||
\item[\itm{A}] запрос результатов измерения АЦП:
|
||
\begin{description}
|
||
\item[\itm{D}] значение Vdd$\cdot100\,$В, например, {\tt VDD=330} ($Vdd=3.3\,$В);
|
||
\item[\itm{I}] потребляемый обоими моторами ток I$\cdot100\,$А, например, {\tt IMOT=70} ($I=0.7\,$А);
|
||
\item[\itm{M}] напряжение питания U$\cdot100\,$В, например, {\tt VMOT=1193} ($U=11.93\,$В);
|
||
\end{description}
|
||
\item[\itm{C}] получение текущих значений параметров конфигурации, например,
|
||
\begin{verbatim}
|
||
CONFSZ=36
|
||
DEVID=2
|
||
V12NUM=605
|
||
V12DEN=94
|
||
I12NUM=3
|
||
I12DEN=4
|
||
V33NUM=1
|
||
V33DEN=1
|
||
ESWTHR=500
|
||
MOT0SPD=3
|
||
MOT1SPD=2
|
||
MAXSTEPS0=50000
|
||
MAXSTEPS1=50000
|
||
USARTSPD=9600
|
||
INTPULLUP=1
|
||
REVERSE0=0
|
||
REVERSE1=1
|
||
USTEPS=16
|
||
ACCDECSTEPS=50
|
||
DATAEND
|
||
\end{verbatim}
|
||
|
||
\item[\itm{R}] получение <<сырых>> данных с АЦП:
|
||
\begin{description}
|
||
\item[0] ток ШД;
|
||
\item[1] напряжение 12\,В;
|
||
\item[2] концевик~1 двигателя~0;
|
||
\item[3] концевик~0 двигателя~0;
|
||
\item[4] внутренняя температура;
|
||
\item[5] Vdd.
|
||
\end{description}
|
||
например,
|
||
\begin{verbatim}
|
||
ADC[0]=189
|
||
ADC[1]=2317
|
||
ADC[2]=4088
|
||
ADC[3]=4090
|
||
ADC[4]=1703
|
||
ADC[5]=1525
|
||
DATAEND
|
||
\end{verbatim}
|
||
|
||
\item[\itm{S}] состояние двигателей (возвращает описанные ниже переменные \verb'MOTORx', \verb'ESWxy',
|
||
\verb'POSx' и \verb'STEPSLEFTx').
|
||
|
||
\item[\itm{T}] условная температура микроконтроллера, например, \verb'TEMP=365'.
|
||
|
||
\end{description}
|
||
|
||
\paragraph{Геттеры состояния.}\label{stategetters}
|
||
В переменных \verb'MOTORx' ({\tt x} "--- номер двигателя, 0 или 1) хранится текущее состояние конечного
|
||
автомата шаговых двигателей.
|
||
Ее значение может быть одним из следующих:
|
||
\begin{description}\def\itm#1{\rlap{#1}\phantom{STOPZERO}}
|
||
\item[\itm{ACCEL}] состояние разгона "--- начало движения;
|
||
\item[\itm{DECEL}] состояние торможения "--- окончание движения;
|
||
\item[\itm{MOVE}] движение с постоянной скоростью;
|
||
\item[\itm{MOVETO0}] бесконечное движение до достижения концевика~0;
|
||
\item[\itm{MOVETO1}] бесконечное движение до достижения концевика~1;
|
||
\item[\itm{MVSLOW}] движение с наименьшей постоянной скоростью (в случае перемещения на малое количество
|
||
шагов);
|
||
\item[\itm{SLEEP}] ожидание команд, движение отсутствует;
|
||
\item[\itm{STOP}] окончание движения (по запросу);
|
||
\item[\itm{STOPZERO}] окончание движения с обнулением положения;
|
||
\item[\itm{UNKNOWN}] неизвестное состояние "--- ошибка.
|
||
\end{description}
|
||
|
||
Переменные \verb'ESWxy', где {\tt y}~-- номер концевика (0 или 1), {\tt x}~-- номер двигателя (0 или 1)
|
||
отражают состояние концевых выключателей и кнопок.
|
||
|
||
\begin{description}\def\itm#1{\rlap{#1}\phantom{RLSD}}
|
||
\item[\itm{BTN}] (только для концевиков двигателя~0) нажата кнопка;
|
||
\item[\itm{ERR}] (только для концевиков двигателя~0) уровень вне допустимых диапазонов;
|
||
\item[\itm{HALL}] активен датчик Холла (логический~0);
|
||
\item[\itm{RLSD}] концевик неактивен (логическая~1).
|
||
\end{description}
|
||
|
||
Текущее положение (в шагах) двигателя характеризуется переменной \verb'POSx' ({\tt x}~-- номер мотора, 0
|
||
или~1). Если ее значение отрицательно, требуется инициализация данного двигателя (движение до концевика~0).
|
||
|
||
Во время движения геттер состояния возвращает также значение переменной \verb'STEPSLEFTx' "--- оставшееся
|
||
количество шагов.
|
||
|
||
В случае, если до вызова геттера состояния контроллера произошел его сброс (программный сброс, инициированный
|
||
пользователем, либо сброс, инициированный watchdog'ом), геттер вернет дополнительно одну из двух переменных:
|
||
\verb'SOFTRESET=1' или \verb'WDGRESET=1'.
|
||
|
||
Внимание! После вызова данного геттера переменные не завершаются маркером <<DATAEND>>!
|
||
Пример:
|
||
\begin{lstlisting}
|
||
SOFTRESET=1
|
||
MOTOR0=SLEEP
|
||
POS0=-1
|
||
ESW00=ERR
|
||
ESW01=BTN
|
||
MOTOR1=SLEEP
|
||
POS1=-1
|
||
ESW10=HALL
|
||
ESW11=HALL
|
||
\end{lstlisting}
|
||
|
||
\paragraph{Команды работы с двигателями.}
|
||
Следующим символом после этой команды должен быть номер двигателя (0 или 1), в случае ошибки будет возвращен
|
||
ответ \verb'Num>1'. В данной группе всего две команды:
|
||
\begin{description}\def\itm#1{\rlap{#1}\phantom{Mnum}}
|
||
\item[\itm{Mnum}] перемещение двигателя на \textbf{num} (положительное или отрицательное целое) шагов, в
|
||
случае ошибки возможны следующие варианты ответа:
|
||
\begin{description}\def\itm#1{\rlap{#1}\phantom{TooBigNumber}}
|
||
\item[\itm{BadSteps}] \textbf{num} не является числом;
|
||
\item[\itm{IsMoving}] двигатель находится в состоянии движения;
|
||
\item[\itm{OnEndSwitch}] двигатель находится на концевике, запрещающем движение в заданном направлении;
|
||
\item[\itm{ZeroMove}] \textbf{num} равно нулю;
|
||
\item[\itm{TooBigNumber}] значение \textbf{num} превышает системное \verb'MAXSTEPSx';
|
||
\end{description}
|
||
|
||
\item[\itm{S}] остановить двигатель.
|
||
\end{description}
|
||
|
||
\paragraph{Команды-сеттеры.}
|
||
При нормальном завершении команда-сеттер изменяет значение соответствующей переменной в оперативной памяти и
|
||
(за исключением скорости интерфейса UART) данные изменения сразу же отражаются на поведении контроллера. Для
|
||
постоянного сохранения изменений во флеш-памяти МК необходимо дать команду записи во флеш-память после всех
|
||
проведенных изменений и их проверки.
|
||
|
||
\begin{description}\def\itm#1{\rlap{#1}\phantom{M\#num}}
|
||
\item[\itm{A num}] установка количества шагов (\verb'ACCDECSTEPS'), в течение которого движение будет
|
||
производиться с ускорением (на старте) или замедлением (на финише); в случае, если требуется
|
||
переместить двигатель на меньшее количество шагов, движение будет производиться с минимальной
|
||
скоростью (равной произведению \verb'MOTxSPD' на значение макроса \verb'LOWEST_SPEED_DIV');
|
||
\item[\itm{C\#num}] изменение значения текущей скорости двигателя с номером \textbf{\#} на \textbf{num}
|
||
(данное изменение действует лишь до окончания движения двигателя);
|
||
\item[\itm{Dvnum}] установка знаменателя (\textbf{d}enominator, \verb'xxxDEN') величины \textbf{v} (D, I или
|
||
M~-- в соответствии с геттером значения измерений АЦП) в \textbf{num};
|
||
\item[\itm{Evnum}] установка числителя (num\textbf{e}rator, \verb'xxxNUM') (аналогично \textbf{Dvnum});
|
||
\item[\itm{I num}] изменение значения идентификатора (\verb'DEVID', целое число) контроллера;
|
||
\item[\itm{M\#num}] установка максимального диапазона (\verb'MAXSTEPS#', \textbf{num} от~1 до~65535) шагового
|
||
двигателя \textbf{\#};
|
||
\item[\itm{P num}] (\verb'INTPULLUP') включение (\textbf{num} равно нулю) или отключение (\textbf{num}
|
||
отсутствует или любое, кроме нуля) внутренней подтяжки на UART Tx;
|
||
\item[\itm{R\#num}] (\verb'REVERSE#') реверсивное движение двигателя \textbf{\#} (\textbf{num} равное нулю
|
||
отключает реверс), в режиме реверса меняется только направление вращения двигателя, но не
|
||
обрабатываемые концевики;
|
||
\item[\itm{S\#num}] изменение значения максимальной скорости (\verb'MOT#SPD') двигателя с номером
|
||
\textbf{\#} на \textbf{num} (максимальная скорость устанавливается после окончания движения с
|
||
ускорением и не зависит от текущей скорости, \textbf{C\#num});
|
||
\item[\itm{T num}] изменение пороговых величин (\verb'ESWTHR', \textbf{num} в ADU) для градации состояний
|
||
концевика двигателя~0 (0..num~-- датчик Холла, 2048-num..2048+num~-- пользовательская кнопка,
|
||
4096-num..4095~-- свободное состояние);
|
||
\item[\itm{U num}] изменение скорости UART (\verb'USARTSPD');
|
||
\item[\itm{u num}] установка количества микрошагов (\verb'USTEPS') в одном шаге; это число должно быть
|
||
степенью двойки (до~32 включительно).
|
||
\end{description}
|
||
|
||
\paragraph{Сеттеры скорости двигателей.}
|
||
Для установки значения скорости в \textbf{N} шагов в секунду, используются сеттеры \textbf{C} или \textbf{S}.
|
||
Их аргумент имеет значение $3000/N$. Например, чтобы дать команду контроллеру с идентификатором <<0>>
|
||
изменить текущую скорость вращения двигателя~0 на 50~шагов в секунду, необходимо передать команду
|
||
\textbf{0SC060} (0~-- номер контроллера, S~-- сеттер, C~-- текущая скорость, 0~-- двигатель~0, $60=3000/50$).
|
||
|
||
\paragraph{Сеттеры числителя и знаменателя.} Сеттеры \textbf{Dxnum} (знаменатель) и \textbf{Exnum}
|
||
(числитель) устанавливают величины соответствующих аппроксимаций к коэффициентам перевода измеренных АЦП
|
||
величин из ADU в физические величины. Следует учитывать, что при расчетах используется беззнаковая
|
||
целочисленная 32-битная математика, поэтому во избежание переполнения не следует задавать слишком большие
|
||
величины. В качестве параметра \textbf{x} используется мнемоника из соответствующего геттера (\textbf{D}~--
|
||
Vdd, \textbf{I}~-- потребляемый ток, \textbf{M}~-- напряжение питания). Для преобразования числа с плавающей
|
||
точкой в несократимую арифметическую дробь можно использовать функцию Octave \verb'rat()'. Например, для
|
||
преобразования коэффициента~$1.23$ в несократимую дробь с точностью~$0.1$:
|
||
{\lstset{language=Octave}
|
||
\begin{lstlisting}
|
||
[N D] = rat(1.23,0.01)
|
||
N = 16
|
||
D = 13
|
||
\end{lstlisting}}
|
||
Полученное приближение~$16/13=1.2308$ лежит в заданных точностных рамках.
|
||
|
||
\paragraph{Сеттер идентификатора устройства.} Сразу после получения нового идентификатора, устройство
|
||
перестает откликаться на команды со старым идентификатором. Поэтому в случае проблем (устройство
|
||
<<потеряно>>) необходимо произвести перезагрузку устройства кратковременным нажатием на кнопку <<reset>> или
|
||
кратковременным отключением питания. Если же устройство является единственным на линии связи, можно
|
||
обратиться к нему по <<широковещательному>> идентификатору <<-1>>.
|
||
|
||
|
||
\subsubsection{Состояние устройства и базовые настройки}
|
||
Состояние устройства в \verb'MMPP_control' отображается четырьмя строками, например:
|
||
\begin{lstlisting}
|
||
Pol: M0ST M0LEFT M0POS - M1ST M1LEFT M1POS || L/4: M0ST M0LEFT M0POS - M1ST M1LEFT M1POS
|
||
Pol: STOP 0 16400 - STOP 0 0 || L/4: STOP 0 11400 - STOP 0 0
|
||
ESW00 ESW01 ESW10 ESW11 || ESW00 ESW01 ESW10 ESW11
|
||
RLSD RLSD HALL RLSD || RLSD RLSD HALL RLSD
|
||
\end{lstlisting}
|
||
|
||
Нечетные строки "--- название полей в четных строках. Две вертикальные линии разделяют поля первого и второго
|
||
контроллера (в первой группе они имеют соответствующие пометки: <<Pol>> и <<L/4>>).
|
||
\begin{description}\def\itm#1{\rlap{#1}\phantom{MxLEFT}}
|
||
\item[\itm{MxST}] состояние двигателей~0 и~1;
|
||
\item[\itm{MxLEFT}] количество оставшихся шагов;
|
||
\item[\itm{MxPOS}] текущее положение двигателей;
|
||
\item[\itm{ESWxy}] состояние концевика \textbf{y} двигателя \textbf{x}.
|
||
\end{description}
|
||
Значение полей описано в пункте <<Геттеры состояния>> на стр.~\pageref{stategetters}.
|
||
|
||
В <<тихом>> режиме, задаваемом флагом \t{-q},состояние устройства отображается как перечень параметров и их
|
||
значений. Например,
|
||
\begin{lstlisting}
|
||
POLMOTOR0=MOVE
|
||
POLSTEPSLEFT0=742
|
||
POLPOS0=4558
|
||
POLESW00=RLSD
|
||
POLESW01=RLSD
|
||
POLMOTOR1=MOVE
|
||
POLSTEPSLEFT1=7289
|
||
POLPOS1=32411
|
||
POLESW10=RLSD
|
||
POLESW11=RLSD
|
||
L4MOTOR0=MOVE
|
||
L4STEPSLEFT0=642
|
||
L4POS0=4358
|
||
L4ESW00=RLSD
|
||
L4ESW01=RLSD
|
||
L4MOTOR1=MOVE
|
||
L4STEPSLEFT1=1542
|
||
L4POS1=6458
|
||
L4ESW10=RLSD
|
||
L4ESW11=RLSD
|
||
\end{lstlisting}
|
||
Т.е. в данном случае просто копируются значения всех переменных, выдаваемых контроллерами по запросу текущего
|
||
состояния, с добавлением префикса \t{POL} для контроллера поляроида и \t{L4} для контроллера фазовой пластины.
|
||
|
||
\paragraph{Базовые настройки.}\label{MMPP_basesettings}
|
||
Параметры текущей конфигурации контроллера можно получить при помощи геттера конфигурации. Например,
|
||
\begin{lstlisting}[caption=Базовые настройки контроллеров]
|
||
./MMPP_control -a 1GC
|
||
Send raw string: 1GC
|
||
Receive: CONFSZ=36
|
||
DEVID=1
|
||
V12NUM=605
|
||
V12DEN=94
|
||
I12NUM=3
|
||
I12DEN=4
|
||
V33NUM=1
|
||
V33DEN=1
|
||
ESWTHR=500
|
||
MOT0SPD=3
|
||
MOT1SPD=5
|
||
MAXSTEPS0=50000
|
||
MAXSTEPS1=50000
|
||
USARTSPD=9600
|
||
INTPULLUP=1
|
||
REVERSE0=1
|
||
REVERSE1=0
|
||
USTEPS=16
|
||
ACCDECSTEPS=50
|
||
DATAEND
|
||
|
||
./MMPP_control -a 2GC
|
||
Send raw string: 2GC
|
||
Receive: CONFSZ=36
|
||
DEVID=2
|
||
V12NUM=605
|
||
V12DEN=94
|
||
I12NUM=3
|
||
I12DEN=4
|
||
V33NUM=1
|
||
V33DEN=1
|
||
ESWTHR=500
|
||
MOT0SPD=3
|
||
MOT1SPD=2
|
||
MAXSTEPS0=50000
|
||
MAXSTEPS1=50000
|
||
USARTSPD=9600
|
||
INTPULLUP=1
|
||
REVERSE0=0
|
||
REVERSE1=1
|
||
USTEPS=16
|
||
ACCDECSTEPS=50
|
||
DATAEND
|
||
\end{lstlisting}
|
||
|
||
В случае замены контроллера необходимо записать в новый чип конфигурацию, соответствующую заменяемому.
|
||
Важными параметрами являются \verb'DEVID' (идентификатор устройства), \verb'ESWTHR' (порог реакции на
|
||
изменение уровня на концевиках двигателя~0, \verb'MOTxSPD' (предельные скорости соответствующих двигателей),
|
||
\verb'MAXSTEPSx' (максимальное количество шагов данного двигателя), \verb'INTPULLUP' (при отсутствии внешней
|
||
подтяжки шины~Tx контроллеров отключенная подтяжка приведет к неработоспособности), \verb'USARTSPD' (скорость
|
||
шины UART), \verb'REVERSEx' (направление вращения двигателя) и \verb'ACCDECSTEPS' (количество шагов для
|
||
ускорения\slash замедления движения).
|
||
|
||
\paragraph{Значения предельных токов DRV8825.} \label{MotCurrents}
|
||
Предельные токи определяются по уровню напряжения на подстроечных резисторах DRV8825.
|
||
Анализатор поляризации: M0 (подвижка) 0.5\,В, M1 (ротатор) 3.1\,В.
|
||
Фазовая пластина: M0 (подвижка) 0.9\,В, M1 (ротатор) 0.25\,В.
|
||
|
||
\comment[ФОТО!]{добавить табличку со значениями напряжений + фотографию, как настраивать}
|
||
\end{document}
|