Инженерный тур. 1 этап
Этот небольшой курс посвящен началу работы с микроконтроллерами серии STM32. В курсе содержится необходимая теоретическая информация, а также вопросы для самопроверки, которые не дают баллов, но помогают проверить полученные знания. Их можно использовать для самоподготовки.
Чтобы лучше усвоить курс, желательно немного знать язык программирования С/С++. Также для более полного погружения в курс желательно скачать и установить на ПК программное обеспечение для работы с микроконтроллерами семейства STM32 — STM32CubeIDE. Скачать ПО можно по ссылке: https://disk.yandex.ru/d/Xa1IOzaG2j__7Q.
Программирование микроконтроллеров STM32 — неотъемлемая компетенция профиля Спутниковые системы, и готовиться к ней можно начать уже сейчас. Умение работать с микроконтроллерами пригодится на заключительном этапе для ролей программист микроконтроллеров и инженер связи. К тому же STM32 — одна из самых востребованных серий среди современных микроконтроллеров.
Тест сделан по версии STM32CubeIDE v1.11.
Задания-тесты созданы в большей степени в виде гайда, который предлагается пройти, чтобы познакомиться с ПО. Тесты несложны, но для ответа на вопросы необходимо выполнить несколько последовательных действий в самой IDE. Чтобы прохождение гайдов не вызывало больших затруднений, желательно иметь представлении о программировании на С/С++ и начальное понимание о работе микроконтроллеров.
Наверное, слово «микроконтроллер» хоть раз было у каждого на слуху. И не без причины, ведь сейчас микроконтроллеры используются в большинстве современных устройств.
Микроконтроллер представляет собой небольшую микросхему, однако в устройствах, от которых не требуется сложных вычислительных операций, именно он играет управляющую роль. Прежде всего микроконтроллеры (как видно из их названия) предназначены для управления периферийными устройствами, такими как различные сенсоры, двигатели, сервоприводы и пр.
Микроконтроллеров существует множество, однако в заданиях уделяется внимание серии STM32, а точнее, микроконтроллеру STM32F103. В упрощенном виде его структура представлена на схеме ниже (структура других микроконтроллеров будет немного отличаться, однако общие принципы почти у всех аналогичны).
Ядро микроконтроллера управляет входящими запросами и доступом к памяти. Во flash-память пользователь может записать свой программный код, состоящий из базовых команд, который с помощью микроконтроллера будет управлять подключенными к нему устройствами.
Базовые команды определяются архитектурой микроконтроллера. В большинстве случаев код для микроконтроллера пишется на языках Assembler или С/С++, однако встречаются и другие варианты.
Перед загрузкой на микроконтроллер написанный код компилируется, то есть проверяется на синтаксические ошибки, переводится в массив из 0 и 1 и собирается определенным образом. После этого код передается на ядро микроконтроллера по соответствующему интерфейсу (об этом будет сказано подробнее дальше) и записывается определенным образом в память микроконтроллера.
В области flash-памяти есть область, в которой находится загрузчик (bootloader), позволяющий многократно перезаписывать программу пользователя во flash-память. В настройках микроконтроллера по умолчанию эта область памяти остается неперезаписываемой.
Матрица шин контролирует передачу данных в необходимые области. Также по ней передаются данные от микроконтроллера для периферийных устройств и обратно. Преобразователь шин нужен, чтобы микроконтроллер смог подстроиться под использование того интерфейса, по которому будет общаться с периферийным устройством.
Помимо возможности записи управляющей программы во flash-память, существует также опция записать ее в оперативную память. Это может понадобиться в тех случаях, когда необходимо, чтобы код отработал всего один раз: при перезагрузке микроконтроллера оперативная память очистится, в отличие от flash-памяти.
Системный таймер, прежде всего, нужен для отсчета времени самого микроконтроллера и синхронизации различных процессов: при работе с некоторыми устройствами синхронизация крайне важна. Тактирование — отдельная большая тема в микроконтроллерах, к которой мы вернемся чуть позже.
В зависимости от сложности периферийного устройства, для его управления может понадобиться как простой порт ввода-вывода общего назначения, представляющий собой всего один контакт с регулируемым уровнем напряжения, так и более сложный определенный интерфейс информационного обмена, состоящий из нескольких линий (несколько из них будет рассматриваться дальше). Микроконтроллеры, как правило, поддерживают основные способы информационного обмена. В программе управления, записываемой во flash-память, можно инициализировать тот или иной способ информационного обмена.
Здесь дано краткое описание структуры микроконтроллера серии STM32. Более подробно можно ознакомиться по ссылке: https://robocraft.ru/arm/711.
Космокот Кас решил загрузить программу на свой новый, только что приобретенный микроконтроллер. Однако ничего не получилось. Если учесть, что у космокота все подключено правильно, то где возможна ошибка в самом микроконтроллере? Выберите один вариант ответа, самый вероятный:
- загрузчик;
- оперативная память;
- порты ввода-вывода;
- матрица шин.
1.
Память микроконтроллера — не монолитное пространство. Она разделена на множество ячеек, называемых регистрами. В случае с STM32 регистр — это ячейка памяти длиной 32 б. С помощью регистров происходит управление портами ввода-вывода, интерфейсами, таймерами и прочим.
Каждый регистр имеет свой адрес. Чтобы осуществить управление нужным узлом (например, включить или выключить его), необходимо записать в регистр определенную комбинацию из нулей и единиц. А чтобы, например, узнать состояние интересующего узла, нужно считать значение соответствующего регистра.
Чтобы осуществлять чтение или запись в регистр, необходимо знать его адрес, по которому к нему можно обратиться. Весь перечень регистров, их назначение и то, какая последовательность нулей и единиц задает определенное управление, описывается разработчиком микроконтроллера в документации (register map, или карте регистров). Ниже для примера приведен скриншот из даташита на микроконтроллер STM32F103C8, на котором в первой колонке указаны адреса регистров, а во второй колонке — узел, которым они управляют (ADC — аналого-цифровой преобразователь, GPIO — порты ввода/вывода).
0x4001 2800 - 0x4001 2BFF |
ADC2 |
0x4001 2400 - 0x4001 27FF |
ADC1 |
0x4001 2000 - 0x4001 23FF |
GPIO Port G |
0x4001 1C00 - 0x4001 1FFF |
GPIO Port F |
0x4001 1800 - 0x4001 1BFF |
GPIO Port E |
0x4001 1400 - 0x4001 17FF |
GPIO Port D |
0x4001 1000 - 0x4001 13FF |
GPIO Port C |
0x4001 0C00 - 0x4001 0FFF |
GPIO Port B |
0x4001 0800 - 0x4001 0BFF |
GPIO Port A |
На схеме (рис. 1.3) представлено более подробное устройство памяти микроконтроллера.
Область flash-памяти занимает адреса с 0x00000000 до 0x1FFFFFFF. На адресах 0x1FFFX000 находится загрузчик. По умолчанию программный код пользователя загружается в пространство памяти с адресами 0x08000000–0x080X000.
Обычно для управления и настройки одного узла используется несколько регистров. Чтобы с самими регистрами было удобнее работать, им дают имена (и не только самим регистрам, но и битам в регистрах тоже). Эти имена можно найти все также в даташите. Рассмотрим это на примере системного таймера, который упоминался раньше. Для его настройки используется всего четыре регистра.
| Адрес регистра | Имя регистра | Назначение регистра |
|---|---|---|
0xE000E010 |
SYST_CSR |
Регистр управления и статуса |
0xE000E014 |
SYST_RVR |
Регистр, хранящий загружаемое в таймер значение (максимально возможное количество тиков), от которого он считает до нуля, после чего перезагружается |
0xE000E018 |
SYST_CVR |
Регистр, хранящий текущее значение счетчика системного таймера |
0xE000E01C |
SYST_CALIB |
Регистр калибровки |
Работу таймера можно настроить на разную частоту, и от этого будет зависеть, сколько отсчетов он будет делать в секунду. Некоторые программные операции выполняются не просто за доли секунд, а за всего за несколько микросекунд. И чтобы обеспечить необходимую точность, таймер должен работать с нужной частотой. Один из битов регистра SYST_CSR как раз позволяет настроить точность работы таймера.
Чтобы узнать, сколько времени прошло с момента запуска работы микроконтроллера, следует считать значение с регистра SYST_CVR.
Более подробно о системном таймере можно почитать по ссылкам:
- http://easyelectronics.ru/arm-uchebnyj-kurs-systick-sistemnyj-tajmer.html.
- https://www.rotr.info/electronics/mcu/arm_systick.htm.
Обычно существует стандартный набор библиотек, который позволяет упростить процесс программирования и не писать код управления микроконтроллером, непосредственно задавая значения регистров: вместо этого используются типовые функции. Однако иногда прямого обращения к регистрам не избежать, поэтому необходимо понимать, что это такое. При компиляции программа управления приобретает бинарный или шестнадцатибитный формат, который и позволяет записать в микроконтроллер всю необходимую информацию в соответствующие регистры. Внизу на скриншоте показано, как выглядит сформированный файл программы в том виде, как он будет записан в регистры микроконтроллера.
Обратите внимание на то, что, как и говорилось выше, первый доступный для записи адрес flash-памяти — 0x08000000.
Более подробно о регистрах можно почитать по ссылке (если материал оказался сложным, можно вернуться к нему чуть позже, после прохождения следующего раздела): https://habr.com/ru/post/407083/.
Какое значение и в какой регистр таймера нужно записать космокоту Касу, если ему необходимо, чтобы таймер обнулялся каждые 15363 тиков? Ответ укажите в шестнадцатеричной системе счисления (без указателя 0х, незначащих нулей и пробелов).
Подсказка: к записываемому в соответствующий регистр значению всегда автоматически будет добавляться. Учтите это при выборе ответа.
E000E014 <- 4E90.
В программе управления, если сильно упрощать, можно выделить две основные части: часть для преднастройки параметров микроконтроллера и основную исполняемую часть, которая выполняется циклически, пока на микроконтроллере есть питание.
Для разработки программ для микроконтроллеров используют специальные среды разработки (IDE — integrated development environment). Для STM32 можно использовать несколько таких IDE, но впоследствии мы преимущественно будем использовать официальную STM32CubeIDE. Для выполнения следующих заданий нелишним будет ее установить. Напомним, что ПО можно скачать по ссылке: https://disk.yandex.ru/d/Xa1IOzaG2j__7Q.
После установки STM32CubeIDE запустите ее. На экране появится форма для выбора рабочего пространства. Можно выбрать его по умолчанию, предлагаемое самой программой. Здесь будут храниться проекты участников.
В открывшемся окне в боковом меню выберите Start New STM32 project. Далее на экране появится список выбора микроконтроллера или отладочной платы для нового проекта, в первой вкладке которого предлагается выбрать тип микроконтроллера, а во второй — название отладочной платы. Выберите из списка микроконтроллер, с которым предстоит работать: stm32f103c8t6.
Далее необходимо будет ввести название проекта и нажать Finish.
После этого STM32CubeIDE предложит подкачать необходимые для работы файлы. Согласитесь на подкачку файлов, необходимо будет некоторое время подождать (лучше использовать vpn). Затем откроется файл с расширением .ioc, в котором будет представлен выбранный микроконтроллер.
Почти каждый вывод микроконтроллера (пин) на представленной схеме можно настроить. Для этого нужно кликнуть по выводу левой кнопкой мыши и выбрать нужный режим настройки вывода. К настройке пинов вернемся чуть позднее. Пока просто соберем пустой проект и посмотрим на него. Для этого нажмите на значок шестеренки в верхней панели меню. Это действие сгенерирует код в соответствии с настройками по умолчанию.
Генерация проекта займет немного времени. После того как она закончится, слева отобразится дерево проекта.

Файлы проекта, как правило, представляют собой пары заголовочных файлов с расширением .h и исполняемых файлов с расширением .c. По общепринятым правилам в заголовочных файлах объявляются константы и определяются функции, а в исполняемых прописывается рабочий код для функций. Пара файлов .h и .c способна образовывать библиотеку, которая может использоваться в основном рабочем файле main.c. Так как IDE прежде всего облегчает работу с микроконтроллером и позволяет программировать его, не запоминая множество регистров и их необходимых значений, то в проекте по умолчанию подключено множество библиотек, начиная со стандартных для языка С, заканчивая специализированными библиотеками для микроконтроллеров STM32, называемых HAL.
Если развернуть содержание папки core, то можно увидеть основные заголовочный и исполняемый файлы: main.h и main.c. Помимо этого подключается несколько файлов, которые по умолчанию задают работу системного таймера и прочих узлов микроконтроллера.

Рассмотрим подробнее файл main.c. Двойное нажатие по наименованию файла откроет его в IDE. На начальный момент большая часть этого файла — комментарии. Обратите внимание, многие комментарии содержат слова USER CODE. Это те области, в которые нужно писать код. Тогда при новой генерации проекта он не будет стерт.
Помимо комментариев в этом файле еще содержатся:
- строка
#include "main.h", которая подключает заголовочный файл к исполняемому (стандартное действие при работе с несколькими файлами для языка С);. - функция
void SystemClock_Config(void), задающая конфигурацию тактирования микроконтроллера, в том числе и работу системного таймера; - функция
int main(void)— самая основная функция в данном файле, именно она используется для программирования микроконтроллера и именно с ней впоследствии предстоит работать.
Обратите внимание, что в функции int main(void) есть следующие строки:
HAL_Init();Эта строчка вызывает инициализацию функций
HAL— типовых функций, которыми мы будем пользоваться.SystemClock_Config();Эта строчка вызывает функцию инициализации настроек тактирования.
while(1)Бесконечный цикл, который в большей степени определяет работу микроконтроллера.
При работе микроконтроллера вызывается функция main со всеми указанными настройками, а цикл while(1) будет повторяться до тех пор, пока питание не будет отключено.
Если возвращаться к тезису, что программа для микроконтроллера состоит из двух частей, то первая часть с преднастройками будет выполняться один раз, и она описывается в функции main до цикла while. Само тело вызываемых функций выносится в другие части файла, как сделано, например, с функцией SystemClock_Config.
Цикл while, в данном случае, вторая часть программы, исполняемая. Внутри цикла под код отведено место после строки /* USER CODE BEGIN 3 */.
Космокот Кас решил вынести инициализацию необходимых настроек для своих устройств в отдельную функцию, задав ее следующим образом (строка № 50 Init_All_Devices).
/* Privite function prototypes ------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
void Init_All_Devices(void);
/* USER CODE BEGIN PFP */
В каком блоке функции main можно вызвать функцию Init_All_Devices?
Варианты ответа:
USER CODE 1;USER CODE Init;USER CODE SysInit;USER CODE 2;USER CODE 3.
4.
Для удобства работы с микроконтроллером его размещают на отладочной плате. Отладочная плата содержит необходимые электронные компоненты для стабильной работы микроконтроллера и выведенные его контакты для подключения периферии.
Одной из широко распространенных отладочных плат является Blue Pill.
Помимо самого микроконтроллера на отладочной плате можно найти вспомогательные светодиоды для индикации, кварцевые резонаторы на 8 МГц и 32 КГц и перемычки для изменения доступа к памяти.
SWD (Serial Wire Debug, четыре контакта на схеме справа: SWCLK, SWIO, питание и земля) — интерфейс для прошивки и отладки микроконтроллера. Он дает возможность с помощью STM32CubeIDE посмотреть, как работает программа, позволяя остановить ее в любом месте и посмотреть построчно, что происходит при ее выполнении. Такой режим очень полезен при поиске ошибок. Помимо этого, через SWD можно и прошить микроконтроллер.
Для прошивки микроконтроллеров используются специальные устройства — программаторы. Для STM32, как правило, выполняет функцию программатора ST-Link. В случае с платой Blue Pill он подключается по четырем проводам по интерфейсу SWD. С помощью ST-Link можно и прошивать микроконтроллер, и отлаживать загружаемую в него программу.
ST-Link V2 |
Blue Pill |
|---|---|
|
|
(2) (4) (5) или (6) (7) или (8) |
|
Кварцевые резонаторы являются внешними источниками тактирования для микроконтроллера. Более подробно о них можно почитать по ссылке: http://mypractic.ru/urok-5-sistema-taktirovaniya-stm32.html (здесь используется CubeMX, однако STM32CubeIDE сделан на его основе, поэтому можно также попрактиковаться и в программе; для перехода на вкладку Clock Configuration дважды кликните по файлу с расширением .ioc в дереве вашего проекта и выберите соответствующую вкладку вверху окна с видом микроконтроллера).
Перемычки BOOT0 и BOOT1 управляют тем, какая область памяти будет запускаться при подаче питания на плату. Изначально обе перемычки стоят в нулевом положении, как показано на фото.
Этот режим соответствует тому, что при подаче питания на плату выполнение программы начнется со считывания flash-памяти микроконтроллера и последующему ее выполнению. Режим стандартный, он используется в большинстве случаев. Когда плата прошивается через ST-Link, перемычки не нужно переставлять.
Если переставить нижнюю перемычку BOOT1 в положение 1, то при подаче питания на плату будет запущен загрузчик, который позволит загрузить программу во flash-память без использования ST-Link. Этот режим бывает полезен, если под рукой не оказалось самого ST-Link или нет возможности использовать стандартный интерфейс SWD (вместо SWD можно заменить на UART).
Если переставить обе перемычки на 1, то это позволит запустить работу с оперативной памятью. Такой режим используется достаточно редко, и в дальнейшем нам не понадобится.
Космокот Кас не смог прошить плату, используя ST-Link. В чем может быть неполадка? Выберите все возможные варианты:
- на плате отсутствует разъем
microusb; - неисправен один или несколько контактов интерфейса
SWD; - неправильно подключен
ST-Link; - на плате отсутствуют светодиоды;
- не подключен
UART.
2, 3.
GPIO (General Purpose Input-Output) — это выводы общего назначения, доступные для прямого управления. На плате Blue Pill пины микроконтроллера выведены по бокам платы и имеют подписи в виде заглавной буквы и номера (A1, A5, B6 и т. д.).
Почти все пины могут работать как выводы общего назначения (GPIO), управление которыми сводится к двум действиям: подать высокий уровень напряжения (в случае с STM32 — 3,3 В) или подать низкий уровень напряжения (0 В). Таким образом можно зажигать и гасить подключенные к пинам светодиоды, работать с транзисторами, а также с некоторыми драйверами. Обобщая вышесказанное, можно сказать, что GPIO — это цифровой сигнал, в котором 0 соответствует 0 В, а 1 — 3,3 В (хотя иногда бывает наоборот).
Помимо GPIO, есть также более сложные способы управлять устройствами, например, широтно-импульсная модуляция или ШИМ (PWM), а также такие интерфейсы, как UART (Serial), I2C, SPI, CAN. Некоторые из них будут рассмотрены позднее.
Работа каждого пина GPIO может быть задана как исходящий или входящий режим. Когда пин GPIO работает в исходящем режиме, это значит, что микроконтроллер управляет им, подавая и убирая с него напряжение в соответствии с программным кодом. Если же работа GPIO задана во входящем режиме, микроконтроллер будет измерять на заданном пине уровень напряжения и выдавать логический 0, если напряжения нет, или логическую 1, если напряжение на пине есть.
Все пины разделены на группы A, B, C и D. В каждой группе есть свое количество пинов GPIO. Поэтому полный номер пина выглядит, например, как РА8. Это значит, что будет использоваться восьмой пин из группы А. Далее эта информация понадобится для написания кода для управления пинами.
Более подробно о GPIO можно прочитать, например, здесь: http://mypractic.ru/urok-6-porty-vvoda-vyvoda-stm32.html.
Рассмотрим работу GPIO на классическом примере. На плате Blue Pill есть встроенный светодиод, который уже по умолчанию подключен к пину PC13 (на фото он горит зеленым).

Просто так он гореть не будет: на него нужно подать напряжение. И сделать это можно программно с помощью стандартной функции.
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
Функция HAL_GPIO_WritePin() и будет задавать напряжение на светодиоде. Типовой аргумент функции GPIOC указывает, что используются порты из группы C, а GPIO_PIN_13 говорит о том, что в группе используется тринадцатый пин. Состояние пина GPIO_PIN_SET соответствует наличию напряжения на нем, а GPIO_PIN_RESET — его отсутствию.
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(LED_PIN_GPIO_Port, LED_PIN_Pin, GPIO_PIN_RESET);
HAL_Delay(1000);
Функция HAL_Delay(1000) задает задержку в 1 с, то есть целую секунду программа просто считает тики по своему системному таймеру.
Космокот Кас запутался в функция управления GPIO, надо помочь ему соотнести, что делает функция и ее наименование:
- Функция установки состояния порта вывода
GPIO. - Функция инверсии состояния порта вывода
GPIO. - Функция чтения состояния порта ввода
GPIO.
- функция установки состояния порта вывода
GPIO—HAL_GPIO_WritePin; - функция инверсии состояния порта вывода
GPIO—HAL_GPIO_TogglePin; - функция чтения состояния порта ввода
GPIO—HAL_GPIO_ReadPin.
Предположим, что имеется простая система, в которой в зависимости от дискретного сигнала (принимающего значения 0 или 1) фоторезистора происходит переключение состояния реле (вкл или выкл). Проще говоря, логика работы следующая:
- если на фоторезистор падает свет, то он выдает значение, равное 1;
- если на фоторезистор находится в тени, то он выдает значение, равное 0;
- если сигнал с фоторезистора равен 1, то реле переходит в состояние вкл;
- если сигнал с фоторезистора равен 0, то реле переходит в состояние выкл.
В данном случае фоторезистор выступает в качестве источника входного сигнала для микроконтроллера, а контакт управления реле является выходным сигналом. Для реализации необходимой инициализации пинов воспользуемся режимом GPIO — ввода/вывода данных. Пусть для реализации такой схемы работы будут использоваться пины PA0 и PA1.
Зададим PA0 как входной сигнал. Для этого необходимо дважды кликнуть в дереве проекта на файл с расширением .ioc. Это вернет нас на вкладку с микроконтроллером. Кликните по пину PA0 и выберите из списка GPIO_Input, это определит его работу как входного сигнала. Затем кликните по пину PA1 и определите его как выходной, выбрав GPIO_Output.
main.c. Обратите внимание, что добавилась новая функция static void MX_GPIO_Init(void). В ней есть строки, отвечающие за инициализацию пинов PA0 и PASTM32CubeIDE самостоятельно сконфигурировала эти части кода, чтобы упростить программирование микроконтроллера. Если потребуется изменить настройки пинов, то при следующей генерации проекта эти части кода также поменяются. /*Configure GPIO pin Output Level*/
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
/*Configure GPIO pin : PA0 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pin : PA1 */
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
Каждая строчка кода определяет режим работы пина. По первым двум строчкам и по последней можно понять, что PA0 задается как входной (GPIO_MODE_INPUT), а PA1 — как выходной (GPIO_MODE_OUTPUT). Дополнительно для выходного пина указывается скорость его работы (сейчас это неважно, однако в некоторых проектах скорость реакции пина может влиять на качество работы всей системы).
Дополнительно узнать о том, что такое GPIO_NOPULL и о других режимах GPIO можно по ссылке: http://we.easyelectronics.ru/STM32/prakticheskiy-kurs-stm32-urok-1---gpio-porty-vvoda-vyvoda.html.
Вернемся к логике работы системы. Ее можно описать следующей блок-схемой.

Действие «Чтение данных с датчика» (в роли датчика выступает как раз фоторезистор) в данном случае будет задаваться типовой функцией HAL_GPIO_ReadPin. Единице соответствует состояние, когда на пине PA0 есть напряжение (то есть уровень напряжения 3,3 В), а нулю — когда напряжения нет (то есть уровень напряжения — 0 В).
Включение и выключение реле происходит за счет подачи на пин PA1 напряжения. Например, при напряжении в 3,3 В на пине PA1 реле будет включаться, а при напряжении 0 В — выключаться. Чтобы подать напряжение на пин, можно воспользоваться функцией HAL_GPIO_WritePin.
while(1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if( HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET ) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
}
else {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
GPIOA указывает обеим функциям, что используются порты из группы A, к которой и принадлежат пины PA0 и PA1, это указано в их названии (например, для пинов PB0 и PB1 нужно было бы указать GPIOB). Переменная, содержащая в названии сочетание GPIO_PIN_, указывает номер пина в группе. Состояние пина GPIO_PIN_SET соответствует наличию напряжения на нем, а GPIO_PIN_RESET — его отсутствию.
Приведенный код можно прописать в цикле while(1) в качестве небольшой тренировки. После того как это будет сделано, нужно кликнуть на значок молотка в верхнем меню, чтобы собрать проект.
Если все функции прописаны правильно, то сообщения об ошибках не возникнет.
После этого кликните правой кнопкой мыши по функции HAL_GPIO_ReadPin и выберите Open Declaration. Откроется новый файл с описанием функций HAL для управления пинами GPIO. Весь перечень функций отобразится в окне справа (рис. 1.18).
Найдите там функцию HAL_GPIO_TogglePin и попробуйте по описанию разобраться, что она делает.
Определите, какое управление системой задает код ниже.
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if (HAL_GPIO_ReadPin(GPIOA, GPIO_Pin_0) || HAL_GPIO_ReadPin(GPIOA,
GPIO_Pin_0) == GPIO_PIN_SET)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_Pin_1);
}
}
/* USER CODE END 3 */
Варианты ответа:
- при наличии света на датчике реле включается, а при отсутствии света — выключается;
- при наличии света на датчике реле выключается, а при отсутствии света — включается;
- состояние реле стало зафиксированным;
- при отсутствии света на датчике реле включается, а при отсутствии света — выключается;
- при отсутствии света на датчике реле выключается, а при отсутствии света — включается;
- при наличии света на датчике реле меняет свое состояние на противоположное;
- при отсутствии света на датчике реле меняет свое состояние на противоположное;
- логика работы системы не изменилась.
6.
Когда речь идет о работе с датчиками, часто возникает необходимость в выводе данных на экран в удобном формате, которые с него приходят. Для того чтобы данные с датчика, считываемые микроконтроллером, отобразились на экране монитора, необходимо настроить обмен данным. Часто обмен идет по так называемому протоколу UART. По нему, например, данные можно передать через подключение по USB-порту.
UART — Universal Asynchronous Receiver-Transmitter — универсальный асинхронный приемо-передатчик. Этот интерфейс соединяет между собой два устройства четырьмя проводами и позволяет вести передачу данных в обоих направлениях. Интерфейс UART — широко распространенный способ построения обмена информацией между устройствами.
Как правило, в любом интерфейсе присутствует два стандартных провода: питание и земля (VCC и GND). В случае с UART они тоже есть. Однако помимо этого, UART задается двумя каналами: Rx (Receiver), который принимает данные, и Tx (Transmitter), который отправляет данные.

Rx одного устройства соединяется с Tx другого устройства, и наоборот. Обмен по UART представляет собой передачу стандартной структуры бит, предполагающую небольшую вариативность. На рисунке ниже побитово представлена такая структура.
Стартовый бит определяет начало передающегося байта данных, а стоповые — его конец. Это необходимо для синхронизации передачи и последующей расшифровки переданных данных, чтобы передаваемые байты не смешивались друг с другом, если вдруг по какой-то причине один из битов потеряется или за счет помехи поменяет свое значение.
Бит четности служит для проверки корректности полученных данных. Он равен нулю, если сумма всех единиц дает четное число, и единице, если сумма всех единиц дает нечетное число.
С точки зрения электрического уровня передаваемый массив из 0 и 1 выглядит примерно следующим образом.

Также одной из важных характеристик UART является его скорость. Для упрощения синхронизации двух устройств во время передачи значения скорости обмена по UART стандартизированы и могут принимать фиксированные значения: 4800 б/с, 9600 б/с, 19,2 кбит/с, 57,6 кбит/с и 115,2 кбит/с.
Для успешной передачи информации по UART нужно нужно, чтобы оба устройства, участвующие в информационном обмене, были синхронизированы и по скорости, и по структуре передаваемых данных. Все это задается настройками для обоих устройств.
К каждому UART, как правило, подключают всего одно устройство. У микроконтроллера STM32F103C8T6 есть возможность задействовать несколько каналов UART. Если снова вернуться к схеме с распиновкой платы, то можно увидеть, какие именно пины можно использовать для UART (на схеме они обозначены как Serial).
Можно увидеть, что всего у микроконтроллера есть три UART, причем первый из них можно задать двумя способами. Такая вариативность позволяет подойти с некоторой гибкостью при распределении подключения множества устройств к выводам микроконтроллера. Будем пользоваться пинами PA9 и PA10, так как они (и по умолчанию никакие другие пины UART) позволяют еще и прошивать микроконтроллер альтернативным способом.
Однако чтобы управлять обменом по этому интерфейсу, необходимо его для начала инициализировать. Чтобы это сделать с помощью STM32CubeIDE, нужно вернуться к вкладке с распиновкой микроконтроллера. Если она закрыта, то следует дважды кликнуть на файл с расширением .ioc слева в дереве проекта.
Перейдите в меню слева в пункт Connectivity и выберите USART1 (пункт 1 на скриншоте). В появившемся меню настроек выберите Mode Asynchronous (пункт 2). После этого можете наблюдать, как еще два пина инициализируются на схеме микроконтроллера (обычно PA9 и PA10). У пинов также появятся надписи USART1_RX и USART1_TX (пункт 3).
Примечание
Обратите внимание, в тексте используется понятие UART, а у микроконтроллера используется USART. По этой ссылке можно прочитать про их отличие: https://www.rlocman.ru/review/article.html?di=16440. Однако USART в STM32CubeIDE настроен так, чтобы он стал UART.
В четвертом блоке можно увидеть настройки самого UART, о которых говорилось выше:
Baud Rate— скорость обмена, в примере используется 115200 б/с;Word Length— структура бит, по умолчанию будет формироваться 8 бит информации, а девятый бит будет содержать в себе информацию о четности;Stop Bits— количество стоповых битов, по умолчанию задается 1.
Более подробно с UART можно ознакомиться здесь: http://mypractic.ru/urok-20-interfejs-uart-v-stm32-rabota-s-nim-cherez-registry-cmsis-ispolzovanie-preryvaniya-uart.html.
Снова сгенерируйте код. И после этого найдите в файле main.c новую функцию: static void MX_USART1_UART_Init(void).
static void MX_USART1_UART_Init(void)
{
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLenght = UART_WORDLENGHT_9B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_EVEN;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
/* USER CODE END USART1_Init 2 */
}
Здесь можно увидеть все описанные выше настройки в виде параметров структуры huart1.Init.
Что такое структура, можно узнать здесь: http://www.c-cpp.ru/books/struktury.
Для передачи данных по UART используется функцияHAL_UART_Transmit(). Допустим, требуется передать строку, которую храним в переменной str. /* USER CODE BEGIN Init */
char str[] = "Hello\n";
/* USER CODE END Init */
Тогда код будет выглядеть следующим образом. while(1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), 10);
HAL_Delay(1000);
}
В качестве параметров функции HAL_UART_Transmit используются следующие:
huart1— указатель на тотUART, который используется (напомним, что у микроконтроллеров, как правило, несколько интерфейсовUART);str— указатель на массив данных (в данном случае переменнуюstr), которую хотим передать поUART;strlen(str)— количество передаваемых поUARTбайт (функцияstrlenсама считает количество байт вstr);- 10 — максимальное время в микросекундах, выделяемое на операцию (по истечении этого времени функция
HAL_UART_Transmitвозвратит ошибку по таймауту).
Если написать эту функцию в файле main.c и кликнуть правой кнопкой мыши, то можно также открыть ее описание (Open Declaration).
В новом открывшемся файле также можно посмотреть типовые функции HAL, которые можно использовать для работы с интерфейсом UART.
Найдите в открывшемся файле функции:
HAL_UART_Receive()HAL_UART_Receive_IT()
и ознакомьтесь с их описанием и тем, какие аргументы необходимо указать для их работы.
Космокот Кас решил написать код, который будет считывать данные по UART1 и отправлять их по UART2. Помогите ему, выбрав среди вариантов ниже тот, который будет работать правильно.
- C++
unsigned char USART_Buf; HAL_UART_Receive(&huart1, &USART_Buf, 1, 1000); HAL_UART_Transmit(&huart1, &USART_Buf, 1, 1000); - C++
unsigned char USART_Buf[2]; HAL_UART_Receive(&huart1, &USART_Buf, 1, 1000); HAL_UART_Transmit(&huart2, &USART_Buf, 2, 1000); - C++
unsigned char USART_Buf[2]; HAL_UART_Receive(&huart1, USART_Buf, 1, 1000); HAL_UART_Transmit(&huart2, USART_Buf, 1, 1000); - C++
unsigned char USART_Buf; HAL_UART_Receive(&huart1, USART_Buf, 1, 1000); HAL_UART_Transmit(&huart2, USART_Buf, 1, 1000);
3.
В сложных системах, содержащих множество устройств, осмысленно использование единой логики работы для всех устройств. Реализуется это с помощью применения различных интерфейсов и протоколов. I2C — один из самых простых и удобных интерфейсов, позволяющих с помощью одного микроконтроллера организовать работу множества устройств.
Шина I2C позволяет подключить одновременно до 127 устройств, которые смогут управляться от одного микроконтроллера. Управляющее устройство шины также принято называть master, а зависимые — slave. В нашем случае плата с микроконтроллером STM32F103C8T6 — master, а остальные устройства — slave.
Шина I2C состоит из двух линий: SCL и SDA. Линия SCL является линией тактирования и отвечает за синхронизацию устройств между собой по частоте работы. Линия SDA является шиной данных и отвечает за их прием и передачу.
Каждое устройство, подключенное к шине I2C, имеет свой I2C-адрес. Сообщение от микроконтроллера идет по шине, и каждое устройство проверяет, относится ли данное сообщение к нему, сравнивая свой адрес и адрес, указанный в сообщении. Обычно данный адрес задается производителем устройства и указывается в datasheet устройства.
Как правило, адрес является семибитным числом, что и накладывает ограничение в 127 устройств (т. к. 1111111 в двоичной системе — это 127).
Более подробно о шине I2C можно прочитать здесь (рекомендуем сюда заглянуть, чтобы посмотреть на схемы работы интерфейса): http://easyelectronics.ru/interface-bus-iic-i2c.html.
Снова вернемся к вкладке с распиновкой микроконтроллера. В пункте Connectivity выберите также I2C1. В настройках Mode выберите I2C I2C.
Аналогично с USART, можно увидеть, что инициализируются два пина с подписями I2C1_SDA и I2C1_SCL. Обратите внимание, у нашего микроконтроллера есть две шины I2C: I2C1 и I2C2.
Сгенерируйте код. Найдите функцию static void MX_I2C1_Init(void). Эта функция отвечает за инициализацию I2C.
Так же как и для UART, для I2C существует библиотека HAL с типовыми функциями, позволяющими построить обмен данными между устройствами. Например, функция HAL_I2C_Master_Receive() позволяет считывать данные с подчиненного микроконтроллеру устройства.
unit16_t BH1750_readLightLevel(I2C_HandleTypeDef *I2C, unit8_t addr) {
unit16_t level; // текущее измеренное значение
unit8_t buf_in[2];
while (HAL_I2C_GetState(I2C) != HAL_I2C_STATE_READY);
// ждем готовность шины I2C
HAL_I2C_Master_Receive(I2C, addr << 1, &buf_in, 2, 10);
// читаем 2 байта по адресу датчика
level = buf_in[0]; // загружаем старший байт результата
level <<= 8; // сдвигаем его вверх
level |= buf_in[1]; // добавляем младший байт результата
return level;
}
Переменная addr хранит I2C-адрес, заданный шестнадцатеричным числом. Чтобы получить семибитный адрес, необходимо осуществить побитовый сдвиг на 1 бит, что задается выражением add << 1.
Переменная level имеет размерность в 16 бит. По I2C принимаем 2 байта информации, и в переменной, чтобы получить полное значение, объединяем два полученных байта в одно число. Делается это также с помощью побитового сдвига.

Космокоту Касу необходимо считать один байт данных по адресу 0x5C, используя протокол I2C, и получить 0x9C (значение переданное со slave устройства), но свободных I2C интерфейсов не осталось, и ему пришлось реализовать программный I2C, но что-то пошло не так. Чтобы понять, что он сделал неправильно, он решил подключить осциллограф, и получил такую осциллограмму.
Что он сделал неправильно? Выберите правильные варианты ответа:
- Перепутал местами контакты
I2C. - Некорректно установил комбинацию начала пакета.
- Использовал неправильный адрес.
- Некорректно указал режим работы
Slaveустройства. - Неправильно использовал бит подтверждения при отправке адреса устройства.
- Неправильно использовал комбинацию смены направления передачи данных.
- Некорректно начал считывать данные.
- Получил неправильные данные.
- Неправильно использовал бит подтверждения при получении данных с устройства.
- Некорректно установил комбинацию конца пакета.
4, 9.
Правильный пакет.
До этого момента ни разу не упоминалось такое понятие, как прерывание, однако оно весьма важно, когда речь идет о микроконтроллерах.
Как известно, при работе микроконтроллера код, написанный в цикле while(1), будет выполняться циклично. Однако такой принцип работы не всегда удобен. Допустим, что в проектируемой системе есть датчик, который реагирует на какое-то внешнее физическое изменение окружающей среды (свет, давление и пр.). Если такие изменения происходят достаточно редко, то проверять его наличие каждый раз в цикле while(1), означает тратить вычислительные мощности впустую. К тому же, если это изменение требует быстрого реагирования, а код в цикле while(1) занимает какое-то время на выполнение, то можно вообще упустить нужный момент.
В таких случаях пользуются прерываниями. Прерывание — это действие, при котором микроконтроллер переключается с выполнения цикла while(1) (или иного процесса) на выполнение сторонней функции. Такое переключение всегда инициализируется неким событием, например, изменением показания с датчика.
Любой пин может быть настроен на работу с прерываниями, однако нельзя одновременно задействовать пины с одним и тем же номером. Так, например, нельзя одновременно настроить на работу с прерываниями пины PA0 и PC0, но PA0 и PC1 — можно.

Пример с фоторезистором и реле можно также рассмотреть с использованием прерывания. Вернитесь на вкладку с распиновкой микроконтроллера. Кликните по пину PA0 и выберите GPIO_EXTI (рис. 1.31). Эта настройка определит работу пина в режиме внешнего (аппаратного) прерывания.
Прерывания также могут быть и внутренними (программными), однако сейчас в эту тему углубляться не будем.
Далее перейдите в System Core GPIO, в настройках PA0 переключитесь на вкладку NVIC и поставьте галочку, разрешающую прерывание.
NVIC — это контроллер прерываний, неотъемлемая часть микроконтроллера. Именно он отвечает за работу с прерываниями.
Сгенерируйте код. В коде в функцииMX_GPIO_Init() должны появиться следующие строки. /* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
Первая из них назначает приоритет прерывания, а вторая разрешает прерывание.
Если в работе микроконтроллера используется несколько прерываний, то необходимо будет задать им приоритет. При возникновении двух событий, инициализирующих разные прерывания, микроконтроллер переключится на выполнение той функции прерывания, приоритет у которой будет выше.
Для обработки прерывания нужно будет добавить в файл main.c (но не в while(1), а в любую часть, выделенную как USER CODE) обработчик прерывания.
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(unit16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_0)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
}
}
/* USER CODE END 4 */
Такой код будет при высоком уровне на PA0 переключать состояние PA1.
Помимо использования прерываний на GPIO, можно также использовать прерывания на таймерах и интерфейсах типа UART, I2C и пр.
С прерываниями, на примере таймера, можно ознакомиться по следующей ссылке: http://mypractic.ru/urok-18-sistema-preryvanij-stm32-organizaciya-i-upravlenie-preryvaniyami.html.
Космокот Кас настроил микроконтроллер на работу с прерываниями по UART, I2C и GPIO, выставив им следующие приоритеты:
UART: 0;I2C: 10;GPIO: 9,
где 0 — максимальный приоритет. В ходе работы микроконтроллера события, инициализирующие прерывания, приходили в следующем порядке.
Здесь:
- \(t_1 = 120\) мкс от начала работы микроконтроллера;
- \(t_2 = 140\) мкс от начала работы микроконтроллера.
Продолжительность выполнения обработчиков прерываний занимает следующее время:
UART: 10 мкс;I2C: 25 мкс;GPIO: 15 мкс.
Укажите, что будет происходить в каждый интервал времени работы микроконтроллера.
| От 0 до 120 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
| От 120 до 125 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
| От 125 до 130 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
| От 130 до 135 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
| От 135 до 140 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
| От 140 до 145 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
| От 145 до 150 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
| От 150 до 155 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
| От 155 до 160 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
| От 160 до 165 мкс | Выполнение цикла while(1) |
Выполнение обработчика I2C |
Выполнение обработчика UART |
Выполнение обработчика GPIO |
Согласно приоритетам прерываний, до первого события, инициализирующего прерывание, будет идти выполнение цикла while(1). После первого события выполнение переключится на обработчик прерывания по I2C, которое занимает 25 мкс. Однако через 20 мкс придет более приоритетное событие на прерывание, и выполнение переключится на обработчик прерывания по UART, который будет выполнять в течение 10 мкс. Далее микроконтроллер переключится на прерывания GPIO, так как его приоритет выше, чем у I2C. Через 15 мкс микроконтроллер закончит обработку прерывания по GPIO и переключится на обработку прерывания по I2C. Далее через 5 мкс вернется в while(1).
- от 0 до 120 мкс выполнение цикла
while(1); - от 120 до 140 мкс выполнение обработчика
I2C; - от 140 до 150 мкс выполнение обработчика
UART; - от 150 до 165 мкс выполнение обработчика
GPIO.
У микроконтроллера есть возможность использовать один из нескольких источников тактирования для работы системного таймера. Для того чтобы ознакомиться с ними более подробно, рекомендуем ознакомиться с материалами по ссылке: http://mypractic.ru/urok-5-sistema-taktirovaniya-stm32.html.
От источника тактирования зависит частота, с которой смогут работать таймеры и периферийные интерфейсы. Помимо системного таймера, существуют также базовые таймеры, таймеры общего назначения и продвинутые таймеры. Более подробно о них можно почитать по следующим ссылкам:
Одно из применений таймеров общего назначения — работа с сигналами прямоугольной формы. Получая на свой вход такой сигнал, таймер может определять длительность импульсов.

Таймер может определять моменты наступления фронта и спада импульса, тем самым также определяя и его длительность. Подобного рода информация нередко используется в технических системах, например, при работе с оптическими датчиками, лежащими в основе датчиков оборотов двигателей.
Допустим, что к таймеру подключен такой оптический датчик. Если снова вернуться на вкладку с распиновкой микроконтроллера и выбрать, например, таймер 2 (TIM2), то можно увидеть, что у него в настройках есть четыре канала. Два из этих каналов можно настроить так, чтобы один из них фиксировал момент фронта импульса, а второй — момент спада импульса. Для этого необходимо в Channel1 выбрать Input Capture direct mode, а в Channel2 — Input Capture indirect mode.
Ниже есть общие настройки таймера и настройки его каналов. Посмотрим сначала на настройки каналов. В канале 1 в Polarity Selection должно стоять Rising Edge, в канале 2 — Falling Edge.

При таких настройках таймер будет работать в описанном выше режиме.
Теперь вернемся к общим настройкам таймера.

Prescaler— предделитель, который базовую частоту работы таймера делит на указанное число \(+ 1\) (то есть если не требуется уменьшение частоты работы таймера, нужно поставить 0);Counter Mode— режим отчета тиков таймера: с убыванием от установленного значения или с возрастанием до него;Counter Period— как уже говорилось, значение количества тиков, по достижении которого таймер перезагружается.
Более подробно о настройках таймера можно узнать по ссылке: http://mypractic.ru/urok-16-tajmery-stm32-v-rezhime-schetchikov-generaciya-ciklicheskix-preryvanij-ot-tajmerov.html.
Космокот Кас решил сделать таймер, который будет обнуляться каждые 2,3854724027777777777777777777778 с. Кас решил подключить таймер к HCLK с частотой 72 МГц. Помогите Касу найти Prescaler и Counter period.
Примечание
Точность вычислений до \(10^{-32}\).
Количество тиков источника на один период таймера (\(i\)) равно: \[72000000 \cdot 2{,}3854724027777777777777777777778 = 171754013.\]
Далее необходимо найти все делители числа 171754013:
\[1, 4129, 41597, 171754013.\]
Всего делителей четыре. Из них подходят 4129 и 41597. Для правильного ответа необходимо вычесть из полученных чисел единицу.
4128, 41596.
Одним из режимов работы таймера является генерация ШИМ. ШИМ — это широтно-импульсная модуляция, которая представляет собой череду прямоугольных импульсов.
ШИМ позволяет с помощью цифрового сигнала варьировать значение в диапазоне от 0 до 3,3 В с помощью генерируемых импульсов. Импульс, как и цифровой сигнал, может принимать всего два значения: 0 или 3,3 В. У каждого импульса есть длительность, а у череды импульсов есть частота, с которой они генерируются. Меняя длительность импульса и частоту импульсов, можно получить среднее значение между двумя уровнями 0 и 3,3 В за счет того, что частота генерации импульсов высокая, и управляемое устройство воспринимает сигнал не как череду отдельных импульсов, а как их некоторое усредненное значение, так как не успевает среагировать на каждый импульс отдельно.
На рисунке показано разное заполнение скважности ШИМ: от 0 до 100%. Генерируемые импульсы дают соответствующее напряжение на выходе: для 0% — 0 В, для 25% — 0,825 В, для 50% — 1,65 В и т. д., вплоть до 100%, которое соответствует максимальным 3,3 В.
Так, если на светодиод подать 3,3 В, то он будет гореть ярко. Однако ШИМ-сигнал, подаваемый на светодиод, позволит регулировать его от тусклого свечения до полной яркости.
Помимо управления яркостью светодиода, ШИМ также можно применять для управления двигателем постоянного тока. Разное заполнение скважности ШИМ повлияет на подаваемое напряжение на двигатель, что будет, в свою очередь, регулировать скорость вращения его вала.
В спутниковых системах двигатели используются в системах стабилизации и ориентации. На такой двигатель закрепляют маховик (металлический диск определенных формы и веса). Двигатель, раскручивая маховик, может управлять вращением аппарата.
Однако наличия двигателей-маховиков недостаточно для управления положением спутника в пространстве. Для корректной работы системы нужны еще датчики положения, которые могли бы определять положение аппарата относительно какого-либо ориентира.
Для того чтобы настроить таймер на работу с ШИМ, нужно выбрать настройку одного из его каналов, а именно, PWM Generation.
В настройках в режиме ШИМ Counter Period будет определять скважность ШИМ, то есть максимальное количество отсчетов для полного заполнения ШИМ. В данном примере указано значение 65535, это означает, что для сигнала 3,3 В в соответствующий регистр таймера нужно будет записать 65535, для сигнала 1,67 В — 32767 и т. д.
Космокоту Касу понадобился сервопривод, он знает, что хочет управлять им с шагом 0,18°. Сервомашинка управляется импульсами. Импульс состоит из положительного фронта от 1 до 2 мс, с частотой этих импульсов 50 Гц.
| Длина импульса, мс | Положение сервопривода, ° |
|---|---|
| 1 | 0 |
| 1,5 | 90 |
| 2 | 180 |
Примеры сигналов.
Нужно помочь Касу настроить таймер (Prescaler и Counter period) для генерации такого сигнала. Таймер подключен к HCLK с частотой 72 МГц.
Из шага 0,18° можно сделать вывод, что количество шагов изменения положения должно равняться \(180 / 0{,}18 = 1000\). Так как диапазон времени, внутри которого должны лежать эти шаги, должно быть 2-1 мс, то, следовательно, шаг изменения положения на 0,18 должен равняться 1 мкс. Тогда общее количество тиков таймера до переполнения должно равняться \(20 \textrm{\,мс} / 1 \textrm{\,мкс} = 20000\).
Зная частоту, которая приходит на вход таймера, и количество тиков до переполнения, можно высчитать предделитель для таймера \((72 \textrm{\,МГц}~/~50 \textrm{\,Гц})~/~20000 = 72\). В ответ надо записать числа на единицу меньше из-за строения таймеров микроконтроллера.
Prescaler— 71;Counter period— 19999.
В предыдущем задании уже затрагивалась тема законов управления. Все устройства, составляющие любую техническую систему, связаны единой логикой работы. Рассмотрим это на примере системы стабилизации космического аппарата, в которую может входить датчик угловой скорости и двигатель-маховик.
Датчик угловой скорости предоставляет информацию об угловой скорости космического аппарата. Из этого можно получить различные данные после обработки, например, информацию об угле поворота за определенный момент времени.
Если задачей системы является сведение угловой скорости космического аппарата к нулю, то для достижения этой цели потребуется грамотное управление маховиком. Для организации такого управления нужно учесть следующее:
- актуальную информацию о том, что происходит со спутником: в данном случае за это отвечает датчик угловой скорости;
- алгоритм управления, позволяющий сформировать необходимую команду управления на маховик;
- постоянное обновление информации по угловой скорости после отработки маховика для учета корректировок управления.
Одним из популярных алгоритмов управления, который используют в подобных задачах, является алгоритм ПИД-регулирования. О ПИД-регулировании уже написано немало статей, поэтому не будем повторяться, а просто приведем здесь одну из них для ознакомления: https://alexgyver.ru/lessons/pid/.
Космокот Кас разбирается в телеметрии систем спутника и пытается понять, корректно ли происходит работа космического аппарата. Надо помочь Касу определить состояние спутника по графикам и тому, как эти системы себя вели при старте миссии.
Нагреватель колбы с бактериями. Время переходного процесса было 8 с. Перерегулирование достигало 5%, колебаний при регулировании не замечалось.
Рис. 1.43.Система поддержания температуры электроники спутника. Время переходного процесса было 100 с. Колебания были не больше 25% уставки.
Рис. 1.44.Система ориентации спутника. Время переходного процесса было 40 с. Колебания были не больше 20% уставки.
Рис. 1.45.
Работает нормально 1, работают с ошибками — 2 и 3.
За каждым великим программистом стоит не менее великий схемотехник.
Печатная плата с микроконтроллером, позволяющая управлять спутником, датчики, с которых можно получить данные об освещенности или позиционировании аппарата, система электропитания и другие устройства — все это является результатом труда инженеров-схемотехников и специалистов по полезной нагрузке. Именно они создают сложные электронные схемы и интегрируют сенсоры, обеспечивая точное и надежное функционирование спутника на орбите.
С помощью данного тестирования участники инженерного тура вспомнят, узнают или откроют для себя новые аспекты основ схемотехники и работы с сенсорами; научатся проектировать источники питания, без которых не может функционировать ни один спутник, и узнают о том, как устроены некоторые датчики.
Для успешного освоения представленного материала и решения проверочных заданий будет полезно вспомнить раздел физики, посвященный электричеству.
Самая простая электрическая цепь состоит из источника питания, нагрузки (компонента, потребляющего электроэнергию) и соединительных проводов (это также могут быть и проводящие дорожки на печатной плате).
Источник питания поддерживает разность потенциалов между выводами, из-за чего по цепи начинает протекать электрический ток: свободные электроны отталкиваются от области, где сконцентрирован отрицательный заряд, и притягиваются к области положительного заряда. Исторически сложилось, что направление тока считают обратным движению электронов. Разность потенциалов иначе называют напряжением, и его всегда измеряют между двумя точками схемы, а ток протекает через элемент схемы, поэтому для его измерения необходимо подключать амперметр в разрыв цепи.
Одним из наиболее распространенных в электронике элементов является резистор — элемент, который сопротивляется протеканию электрического тока, поглощая при этом часть электроэнергии и рассеивая ее в виде тепла.
Взаимосвязь между сопротивлением участка цепи, падением напряжения на нем и силой протекающего через него тока определяется законом Ома. Ток стремится протекать по более «простому» пути — там, где сопротивление меньше; а чем больше напряжение, тем больше энергии для перемещения зарядов и тем, соответственно, больше электрический ток: \[I = \frac U R.\]

Казалось бы, зачем использовать в схемах резисторы, если на них теряется часть энергии? Как раз для того чтобы ограничивать протекающий в цепи ток! Без резисторов электронные компоненты, обладающие малым внутренним сопротивлением, вышли бы из строя.
Например, желтый светодиод — полупроводниковый прибор, который светится желтым светом при пропускании через него тока определенной направленности (о диодах мы поговорим чуть позже), — требует напряжения питания 2 В, но ток, протекающий через него, необходимо ограничить значением 20 мА, чтобы он не сгорел. Представим, что единственный имеющийся источник питания — это аккумулятор с напряжением на выходе 9 В.

Светодиод нужно подключить через резистор, который будет играть роль ограничителя тока. Рассчитать его сопротивление можно по закону Ома: \[U_R = U_\text{пит} - U_\text{д} = 9 \textrm{\,В} - 2\textrm{\,В} = 7\textrm{\,В};\] \[R = \frac{U_R}{I} = \frac{7\textrm{\,В}}{0{,}02 \textrm{\,А}} = 350\textrm{\,Ом}.\]
В этом вычислении руководствуемся правилом, что через последовательно подключенные элементы цепи протекает один и тот же ток, а падения напряжения на них в сумме дают значение напряжения источника.

\[U_\text{общ}=\varphi_A-\varphi_D=U_{R1}+U_{R2}+U_{R3},\] \[I_\text{общ}=I_{R1}=I_{R2}=I_{R3}.\]
При параллельном соединении элементов, наоборот, падение напряжения на них остается неизменным (так как их выводы попарно объединены, и потенциалы в этих точках одинаковы), а ток разветвляется.

\[U_\text{общ}=\varphi_A-\varphi_B=U_{R1}=U_{R2}=U_{R3},\] \[I_\text{общ}=I_{R1}+I_{R2}+I_{R3}.\]
Нужно помнить, что любой проводник обладает такой характеристикой, как удельное сопротивление — способностью пропускать электрический ток. Например, удельное сопротивление меди составляет 0,017 Ом \(\cdot\) мм\(^2\)/м при 20 °C, но с ростом температуры это значение будет увеличиваться, так как свободные заряды будут обладать большей энергией для хаотичного движения в межатомном пространстве. Так что провода, соединяющие элементы электрической цепи, имеют свое сопротивление, и на них тоже происходит падение напряжения.
Металлический провод можно представить как вытянутый цилиндр с известной площадью сечения и длиной. Чем меньше площадь сечения проводника, тем меньше электронов сможет протекать через него за одно и то же время, соответственно, сила тока уменьшится; а чем длиннее проводник, тем слабее электрический ток, так как электроны по пути будут «теряться», рассеиваться вследствие неидеальной структуры вещества.
При проектировании печатной платы (это диэлектрическая пластина с проводящими металлическими дорожками, соединяющими напаянные на нее электронные компоненты) выбор ширины проводящей дорожки определяется максимальной силой тока, протекающего через нее, и желаемым максимальным повышением температуры — как и на обычном резисторе, часть энергии на дорожке будет рассеиваться в виде тепла.
Сопротивление дорожки увеличивается с ее длиной, а площадь сечения можно рассчитать как произведение толщины медного слоя на ширину дорожки. Чем больше площадь сечения, тем меньше потери энергии на дорожке. Для медных дорожек, расположенных на поверхности печатной платы, справедливо следующее равенство (исходя из международного стандарта проектирования печатных плат IPC-2221): \[I=0{,}048 \cdot \Delta T^{0{,}44} \cdot (W \cdot H)^{0{,}725}.\]
В данной формуле \(I\) — ток в А, \(\Delta T\) — желаемое повышение температуры в градусах, \(W\) и \(H\) — соответственно ширина и толщина дорожки в мил — тысячных долях дюйма. Один мил равен 0,0254 мм.
Одной из важнейших задач при проектировании печатных плат является выбор правильной ширины дорожки. Кас-младший при разработке измерительного модуля столкнулся с проблемой — один из датчиков очень чувствителен к питающему напряжению. После размещения всех элементов на плате Кас-младший измерил длину дорожки, которая питает датчик, получилось 13,52 мм. Потребляемый датчиком ток равен 1,65 А, а отклонение напряжения не должно превышать 0,04 В. Помогите Касу-младшему подобрать минимальную ширину дорожки, чтобы датчик мог работать нормально. Толщина медной фольги 0,035 мм. Условия примите нормальными, температура 20 °C. Ответ дайте в миллиметрах, округлив до тысячных.
- Из закона Ома находим максимально допустимое сопротивление: \[I = \frac U R, \: R = \frac U I.\]
- По формуле сопротивления проводника находим требуемую ширину: \[R = \rho\frac{ l}S, \: S = WH, \: R= \rho\frac{ l}{WH}, \: \frac U I = \rho\frac{ l}{WH}, \: W = \rho\frac{ lI}{UH}.\]
- \(W = 0{,}270883\).
0,27 мм.
Резистор поглощает электроэнергию и рассеивает часть мощности в виде тепла. Но существуют элементы, которые, напротив, могут запасать часть энергии источника и затем отдавать ее на нагрузку. Такие элементы называются реактивными. Первый из них, используемый практически во всех схемах, — это конденсатор, устройство, способное накапливать электрический заряд, когда к нему приложено напряжение. Конденсатор в простейшем случае представляет собой две проводящие пластинки, находящиеся на небольшом расстоянии друг от друга, с диэлектриком между ними.
Ток, проходящий через конденсатор, меняется пропорционально скорости изменения напряжения на нем. Способность конденсатора накапливать заряд характеризуется его емкостью, обозначаемой буквой C и измеряемой в Ф (фарадах). Емкость нескольких параллельно соединенных конденсаторов равна сумме их емкостей; для последовательно соединенных конденсаторов справедливо равенство: \[\frac{1}{C_\text{общ}} = \frac{1}{C_1} + \frac{1}{C_2} + \dots + \frac{1}{C_N}.\]
Конденсатор не рассеивает мощность, а сохраняет ее в виде внутренней энергии электрического поля, которая высвобождается при его разряде. Конденсатор можно представить как резистор, сопротивление которого обратно пропорционально его емкости и частоте протекающего через него сигнала. В цепи постоянного тока, когда конденсатор уже заряжен, между его обкладками не может протекать электрический ток, и он становится эквивалентен разрыву электрической цепи — резистору с бесконечным сопротивлением. В цепи переменного тока с увеличением частоты изменения входного сигнала эквивалентное сопротивление конденсатора будет уменьшаться.
Конденсаторы применяются в цепях переменного тока — то есть в таких цепях, где токи и напряжения меняются с течением времени. Они используются почти повсеместно: для фильтрации, генерации, шунтирования сигналов. Конденсаторы также обязательно ставят между питающими выводами микросхем, чтобы сгладить пульсации питания. Низкочастотные колебания подавляет, как правило, танталовый конденсатор большей емкости (например, 10 мкФ), а с высокочастотными справляется керамический конденсатор меньшей емкости — 0,1 мкФ.
Если заряженный конденсатор подключить к резистору, он будет постепенно разряжаться (напряжение на нем будет уменьшаться по экспоненте).

Произведение сопротивления резистора в омах и емкости конденсатора в фарадах называют постоянной времени (\(\tau\)); она измеряется в секундах. При подаче напряжения на вход \(RC\)-цепи на выходе оно установится не сразу, а время наблюдаемого переходного процесса (постепенного нарастания или убывания сигнала на выходе схемы при включении или выключении напряжения на входе) зависит от постоянной времени. Существует практическое правило для облегчения расчета \(RC\)-цепей: за время, равное \(5\tau\), конденсатор заряжается или разряжается на 99%.
Кас приобрел на рынке электроники старый, но редкий цифровой датчик, который выдает прямоугольный сигнал с амплитудой от 0 до 3,3 В, периодом 1 мс и временем импульса 0,5 мс. На выходе датчика наблюдаются сильные высокочастотные помехи, которые могут вызвать неправильное распознавание логического уровня сигнала.
Для сглаживания помех Кас хочет добавить конденсатор C на выходе датчика. Логическая единица считается надежно распознанной, если напряжение на выходе датчика держится не ниже 99% от 3,3 В в течение как минимум 0,23 мс после перехода сигнала в состояние высокого уровня.
Внутреннее сопротивление датчика составляет \(R = 1\) кОм. Помогите Касу определить максимальную емкость C, которую можно добавить для сглаживания помех, чтобы сигнал не терялся. Считайте, что логическая единица не может быть распознана после перехода сигнала в состояние низкого уровня. Ответ дайте в микрофарадах (мкФ) и округлите до сотых.
- Зная время импульса и время, в течении которого должна держаться логическая единица найдем время зарядки конденсатора: \[t =0{,}5 -0{,}23 = 0{,}27 \textrm{\,мс}.\]
- Для зарядки конденсатора до 99% требуется время равное \(5\tau\), тогда: \[\frac{t}{5} =RC,\] отсюда \[C=54 \textrm{\,мкФ}.\]
54 мкФ.
Электричество и магнетизм неразрывно связаны: любой движущийся заряд создает вокруг себя магнитное поле, поэтому и проводник с током всегда находится в им же созданном магнитном поле. Но магнитное поле само влияет на заряды: на них действует сила Лоренца.
Сила Лоренца зависит от магнитной индукции (это силовая характеристика магнитного поля, показывающая, насколько сильно оно будет влиять на движение заряда), величины заряда, его скорости и угла, под которым заряд движется относительно магнитных линий.
Если перемещать в магнитном поле проводник, то свободные заряды в нем будут двигаться таким образом, что возникнет разность потенциалов, которую называют ЭДС электромагнитной индукции. Но не обязательно двигать проводник, чтобы наблюдать это явление: можно замкнуть его в контур и изменять величину магнитного потока, проходящего через него, наблюдая возникновение ЭДС электромагнитной индукции. Она будет тем больше, чем быстрее произошло изменение магнитного потока через контур. Направление индукционного тока, который начинает течь через контур, стремится компенсировать это изменение.
То же самое происходит в замкнутой электрической цепи, когда в ней меняется сила тока, например, при включении и выключении источника питания. Переменный электрический ток в цепи вызывает пропорциональные ему изменения магнитного потока, а это, в свою очередь, порождает в цепи ЭДС электромагнитной индукции, которая в данном случае называется просто ЭДС самоиндукции. ЭДС самоиндукции всегда препятствует изменению силы тока, протекающего по цепи.
Можно увеличить наведенную ЭДС самоиндукции в проводнике, свернув его в спираль, то есть, превратив его в катушку индуктивности. В каждом витке катушки при изменении электрического тока будет наводиться ЭДС самоиндукции, и все ЭДС отдельных витков будут складываться.
Способность катушки создавать магнитное поле, а значит, и величина возникающей ЭДС, характеризуется индуктивностью, которая обозначается буквой \(L\) и измеряется в генри (Гн). Катушки индуктивности широко применяются в радиочастотных и резонансных схемах, они также могут использоваться для фильтрации сигнала.
Если конденсаторы сохраняют мощность в виде энергии электрического поля, то катушки индуктивности — в виде энергии магнитного поля. Они способны отдать эту энергию, если прервать протекание тока через катушку. Пока ток через катушку постоянен, ее можно воспринимать как участок цепи, замкнутый накоротко — резистор с нулевым сопротивлением. С увеличением частоты сигнала, как и с увеличением индуктивности катушки, ее эквивалентное сопротивление растет — она противодействует изменению протекающего через нее тока.
Катушка индуктивности и конденсатор образуют колебательный контур. Если заряженный конденсатор подключить параллельно катушке индуктивности, то конденсатор будет разряжаться, а в цепи потечет ток, который вызовет в катушке ЭДС самоиндукции. Полярность сменится, и наведенная в катушке ЭДС самоиндукции перезарядит конденсатор, после чего в цепи снова потечет ток и так далее. Эти колебания напряжения и тока будут затухающими из-за того, что все элементы — проводники, конденсатор и катушка — имеют паразитное сопротивление, на котором теряется мощность, и часть энергии будет рассеиваться в виде тепла и радиоволн. Поэтому колебания необходимо поддерживать с помощью внешнего источника. Колебательные контуры широко используются в радиотехнике в качестве фильтров, например, чтобы настраивать приемник на нужную частоту.

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

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

Для чего устанавливают ферритовую бусину на линию аналогового питания микроконтроллеров?
Варианты ответа:
- Для увеличения силы тока на аналоговом питании.
- Для уменьшения тепловыделения микроконтроллера при работе с аналоговыми сигналами.
- Для фильтрации высокочастотных помех, чтобы улучшить качество аналоговых сигналов.
- Для стабилизации напряжения на аналоговом питании.
Для фильтрации высокочастотных помех, чтобы улучшить качество аналоговых сигналов.
3.
Резисторы, конденсаторы и катушки индуктивности являются линейными элементами: изменение приложенного напряжения вызовет пропорциональное изменение тока. Также эти элементы относят к пассивным, так как у них нет встроенного источника энергии.

Современная электроника строится на основе полупроводников: полупроводниковые элементы способны изменять свои электрические характеристики в зависимости от подаваемого на них напряжения и даже усиливать его.
Диод — самый простой полупроводниковый прибор, который проводит электрический ток в одном направлении и практически не пропускает его в обратном. На условном обозначении диода направление стрелки (анода) совпадает с направлением тока.
Диод является нелинейным пассивным элементом, поэтому нельзя описать зависимость тока от напряжения на нем простой формулой. Взаимосвязь тока и напряжения нелинейных элементов отражается в вольт-амперной характеристике (ВАХ).
ВАХ диода — это зависимость тока, протекающего через диод, от приложенного к нему напряжения. Чтобы открыть диод, обычно достаточно напряжения 0,3 В для германиевых диодов и 0,7 В для кремниевых, а для светодиодов это напряжение может достигать 2 В. Как видно из графика, при напряжении меньше, чем \(U_0\), ток через диод мал и меняется слабо, а в открытом состоянии небольшое изменение напряжение приводит к резкому возрастанию тока. Этот ток не может достигать больше определенного значения, чтобы диод не сгорел. При подаче обратного напряжения ток также очень мал и почти не изменяется, пока не будет достигнуто напряжение пробоя. При пробое структура полупроводника разрушается, и диод выходит из строя, если это не стабилитрон (зенеровский диод), который работает в области пробоя.
Диоды часто используют как выпрямители — они помогают преобразовать переменный ток в постоянный. Кроме того, их ставят в качестве защиты, чтобы не допустить разрядки накопительных элементов схемы или уберечь чувствительные приборы от подключения источника питания обратной полярности, а также для ограничения напряжения.
Транзисторы, в отличие от диодов, являются активными компонентами — они способны усилить мощность входного сигнала. Они делятся на две крупные группы: биполярные и полевые. Биполярные транзисторы используются в основном в аналоговой технике, а полевые — в цифровой.
У биполярного транзистора три вывода: коллектор, база и эмиттер. Цепи база-эмиттер и база-коллектор работают как диоды. Рассмотрим работу npn-транзистора: если между коллектором и эмиттером есть разность потенциалов, то через коллектор ток потечет только в том случае, если на базу будет подано напряжение, открывающее диод база-эмиттер. Ток, протекающий через коллектор, пропорционален току базы: \[I_\text{к}=\beta I_\text{б},\] где \(\beta\) — коэффициент усиления по току.
Выходит, что небольшим током базы транзистора можно управлять большим током коллектора. При этом слишком большой ток базы создавать нельзя: необходимо сохранять напряжение между базой и эмиттером около 0,7 В, чтобы транзистор был открыт, и через эмиттер и коллектор протекал ток.
У полевого транзистора также три вывода: затвор (\(gate\)), сток (\(drain\)) и исток (\(source\)). Если приложить к стоку транзистора с \(n\)-каналом положительный, относительно истока, потенциал и подать положительное напряжение затвор-исток, то транзистор откроется, и через сток и исток потечет ток.
Логические элементы сложных цифровых электронных устройств, в том числе микропроцессоров и микроконтроллеров, на самом деле состоят из транзисторов, но не дискретных (отдельных), а произведенных на одном полупроводниковом кристалле и очень маленьких. Микроконтроллер может пропускать через свои выводы только небольшие токи: например, через один вывод общего назначения микроконтроллера STM32F103 может протекать ток не более 20 мА, а рекомендуемое значение — 8 мА. При этом микроконтроллеры часто должны управлять мощной нагрузкой. Если нагрузка включается при подаче на нее напряжения и требует большого тока, напрямую подключить ее к микроконтроллеру нельзя — он сгорит. Здесь и помогут транзисторы — управляющий вывод микроконтроллера соединяется с базой или затвором транзистора, а нагрузка включается между землей или питанием и одним из выводов транзистора, в зависимости от его типа.
Стоит помнить о том, что при протекании больших токов на транзисторе выделяется много тепла, и при проектировании электронной схемы необходимо также продумать теплоотвод.
Разрабатывая коммутацию электропитания своего спутника, космокот Кас решил заложить возможность отдельного включения питания 5 В для электромагнитных катушек, так как они не нужны все время. Кас решил, что для этой цели ему подойдут два транзистора: \(n\)-канальный транзистор BSS138 и \(p\)-канальный транзистор IRF7404, способный пропускать довольно большой ток (а катушки потребляют как раз большой ток).
Вкратце задумка Каса выглядит следующим образом: когда приходит высокий уровень сигнала PWR_ON на затвор одного из транзисторов, он открывается и начинает пропускать ток через сток, соединенный с затвором следующего транзистора. Из-за этого следующий транзистор тоже открывается, таким образом обеспечивая коммутацию между источником напряжения 5 В и питанием катушек. Для защиты от ложного срабатывания и помех к транзисторам также подключены резисторы номиналом 100 кОм.
Помогите космокоту развести плату правильно! Выберите правильный вариант трассировки участка платы из четырех вариантов, представленных ниже.
У транзистора BSS138 корпус SOT-23, а у IRF7404 — SOP-8. Транзисторы на рисунке обозначены буквой Q, а резисторы — R.
На рисунках ниже входящие и выходящие из участка схемы сигналы обозначены следующим образом:
PWR_ON— сигнал, разрешающий подачу напряжения 5 В на питание катушек;PWR— питание катушек;+5V— источник напряжения 5 В;GND— земля.
Верная трассировка на рис. 2.27. Управляющий сигнал подается на затвор n-канального транзистора, сток которого подключен к затвору \(p\)-канального транзистора. Питание подается на исток \(p\)-канального транзистора, который может пропустить большой ток, питающий катушки. Таким образом, питание катушек должно сниматься со стока \(p\)-канального транзистора. Для верного подключения также необходимо заземлить исток \(n\)-канального транзистора.
Правильная схема на рис. 2.31.

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

Напряжение на выходе такой схемы будет составлять долю от входного напряжения, зависящую от значений сопротивления резисторов \(R_1\) и \(R_2\). Предположим, что в точке, где снимается выходное напряжение, нагрузки нет (так называемый режим холостого хода — ток туда течь не будет). Тогда по закону Ома мы легко сможем посчитать сначала силу тока, протекающего в этой цепи, а затем и выходное напряжение: \[I=\frac{U_\text{вх}}{R_1+R_2};\] \[U_\text{вых}=I\cdot R_2=\frac{U_\text{вх}\cdot R_2}{R_1+R_2}.\]
Делитель напряжения полезен, когда нужно ограничить выходное напряжение, но оно всегда будет пропорционально напряжению на входе, то есть будет меняться, если первичный источник энергии нестабилен, что не подходит для питания других устройств.
Стабилитрон или зенеровский диод может обеспечить почти неизменное выходное напряжение при меняющемся питающем токе: для этого его нужно поставить в цепь в обратном включении.
При постоянном токе стабилитрон, как и любой диод, можно представить в виде резистора с сопротивлением, равным динамическому сопротивлению диода — то есть мгновенному значению отношения напряжения к току. Динамическое сопротивление зенеровского диода в режиме стабилизации изменяется обратно пропорционально току. Его выгодно использовать, когда схема питается именно от источника тока, не зависящего от напряжения. Недостатками является то, что нельзя установить выходное напряжение на заданное значение и недостаточное сглаживание пульсации входного напряжения.
Предположим, необходимо стабилизировать с помощью зенеровского диода напряжение, изменяющееся по синусоидальному закону. Напряжение на выходе, которое будет поддерживать стабилитрон, определяется его характеристикой, которую можно посмотреть в datasheet на него — обратным напряжением пробоя. Чтобы ввести стабилитрон в режим пробоя, необходимо обеспечить протекание через него обратного тока пробоя — его значение также можно узнать из спецификации на диод.

Чтобы через стабилитрон протекал необходимый ток, нужно верно подобрать номинал резистора \(R_1\). Это можно сделать, рассмотрев наихудший случай: представим, что напряжение на входе минимально. Тогда, если стабилитрон находится в режиме пробоя, на резисторе будет падать напряжение, равное разнице входного напряжения и напряжения пробоя. Сила тока, протекающего через стабилитрон, равна силе тока на резисторе, так как они соединены последовательно (рассматриваем режим холостого хода, когда нагрузка не подключена). Тогда сопротивление резистора можно рассчитать по следующей формуле: \[R_1 = \frac{U_\text{вх.мин.}-U_\text{пробоя}}{I_\text{пробоя}}.\]
Для синусоидального сигнала, меняющегося от 9 до 11 В, и стабилитрона с обратным напряжением пробоя 6,2 В напряжение на выходе без нагрузки будет незначительно колебаться под значением 6,2 В.
Но если подключить низкоомную нагрузку, в которую потечет большая часть тока, напряжение на выходе стабилитрона будет сложно назвать стабильным, так как в какой-то момент он выйдет из режима пробоя.
Улучшить схему со стабилитроном можно, отделив зенеровский диод от нагрузки эмиттерным повторителем. Эмиттерный повторитель — схема, в которой выходной сигнал снимается с эмиттера. Напряжение на нем почти равно напряжению на базе. Входное сопротивление такой схемы значительно больше выходного, поэтому эмиттерный повторитель обеспечивает усиление по току и, так как напряжение практически неизменно, по мощности.
Ток через базу мал и, соответственно, значительно уменьшается мощность, рассеиваемая на стабилитроне. С целью снижения пульсаций тока в стабилитроне можно использовать дополнительный источник тока для его питания или добавить \(RC\)-цепочку в качестве фильтра низких частот.
Схему с эмиттерным повторителем также можно улучшить, добавив дифференциальный усилитель на транзисторах \(T_3\) и \(T_4\), который вместе со схемой Дарлингтона \(T_1\) работает в качестве мощного операционного усилителя. Схема Дарлингтона — это два транзистора с соединенными коллекторами, позволяющая получить высокий коэффициент усиления. Делитель напряжения \(R_1\), \(R_2\) охватывает усилитель обратной связью и выдает на выход усиленное опорное напряжение.
Данную схему собирать из отдельных компонентов нет особого смысла, так как разброс характеристик транзисторов не позволит добиться хороших результатов. Чтобы получить стабильное напряжение заданной величины, используем готовую интегральную схему (выполненную на одной полупроводниковом кристалле) LM317 — это трехвыводной регулируемый стабилизатор.

Его особенность состоит в том, что он имеет три вывода: вход, выход и регулируемый вывод, причем между регулировочным выводом и выходом всегда поддерживается постоянное напряжение \(U_{REF}\), обусловленное внутренней схемой стабилизатора. Значение этого напряжения можно посмотреть в спецификации на конкретный стабилизатор; для LM317 оно равно 1,25 В. Ток, потребляемый регулировочным выводом, пренебрежимо мал. Регулировочный вывод и выход соединяют через делитель напряжения (резисторы \(R_1\) и \(R_2\)), чтобы можно было настраивать значение напряжения на выходе. Рекомендации по значению сопротивления резистора \(R_2\) обычно даются изготовителем, например, для LM317 подойдет резистор номиналом 240 Ом.
Если вместо резистора \(R_1\) поставить потенциометр, то изменением его сопротивления можно добиться различных значений выходного напряжения. Рассчитать значение сопротивления \(R_1\) для желаемого выходного напряжения можно следующим образом: \[U_{OUT} = U_{REF}\left(1+\frac{R_1}{R_2}\right).\]
Схемы линейных стабилизаторов сильно нагреваются, если использовать их постоянно (поэтому их используют при малой нагрузке и периодических кратковременных включениях), поэтому необходимо озаботиться отводом тепла, который можно обеспечить с помощью радиаторов.
Другой вид преобразователей напряжения — импульсные преобразователи. В них используется свойство катушки индуктивности накапливать и затем отдавать энергию. Для его работы также требуется тактовый генератор, который будет управлять транзистором в режиме ключа. Транзистор периодически прикладывает к катушке индуктивности часть напряжения, а катушка запасает энергию в магнитном поле и затем передает ее на конденсатор выходного сглаживающего фильтра. Управление выходом осуществляется за счет изменения длительности импульсов генератора.

Такие схемы могут не только стабилизировать напряжение, но и повышать его за счет магнитной энергии, которую накапливает катушка индуктивности.
Кас-младший проектирует систему питания спутника. Ему нужно согласовать напряжение солнечных батарей с бортовым напряжением 3,7 В. Для этого он решил использовать стабилизатор MIC29152, вот его типовая схема подключения.
Помогите Касу-младшему найти номинал резистора \(R_1\), чтобы на выходе стабилизатора было 3,7 В. Известно, что \(R_2 = 62\) Ом. Дайте ответ в омах, округлив до десятых. Током через пин ADJ можно пренебречь (подсказка: нужно поискать нужную для решения информацию в datasheet на стабилизатор, используйте типичные значения параметров).
- Из
datasheet’а на стабилизатор находим, что \(V_{ADJ} = 1{,}24\) В. По формуле \[R_1 = R_2\left(\frac{V_{out}}{V_ADJ} -1\right)\] находим сопротивление резистора. - \(R_1 = 123\) Ом.
123 Ом.
Космокот Кас-младший выбирает магнитометр для своего спутника на базе микроконтроллера STM32. Главные критерии отбора следующие:
- Точность измерений: магнитометр должен обеспечивать точность измерений не хуже 0,09 \(\mu T\).
- Диапазон измерений: магнитометр должен иметь диапазон измерений не менее \(\pm 8\) Гс (гаусс).
- Рабочий температурный диапазон: магнитометр должен работать в условиях от \(-40~°\)C до \(+85~°\)C.
- Интерфейсы: магнитометр должен поддерживать интерфейс
I2C. - Энергопотребление: энергопотребление должно быть менее 100 мкА в режиме ожидания.
Помогите Касу-младшему выбрать наиболее подходящий магнитометр из следующего списка:
HMC5883L;LIS3MDL;MAG3110;MMC5883MA.
Находим нужные данные в спецификациях на сенсоры и определяем, что заданным требованиям удовлетворяет только вариант 4.
4.
Используя различные схемотехнические элементы, можно управлять электрической энергией — осталось только ее найти. Находясь на Земле и нуждаясь в энергии, можно воспользоваться розеткой или, в крайнем случае, бензиновым генератором. В космосе такая роскошь непозволительна, потому спутники (за редким исключением), подобно цветам, вынуждены тянуться (солнечными батареями) к Солнцу. Но если растения справляются с этим самостоятельно, то спутникам необходима помощь инженеров.
Датчик Солнца — это устройство, используемое на спутниках и космических аппаратах для определения положения Солнца относительно ориентации самого аппарата. Они играют ключевую роль в системах ориентации и стабилизации спутников, позволяя им поддерживать правильное направление в пространстве. В зависимости от задач, поставленных перед космическим аппаратом, могут использоваться различные типы датчиков Солнца.
Грубые датчики применяются для приблизительного определения направления на Солнце. Они имеют простую конструкцию, состоящую из нескольких широких фотодиодов, каждый из которых покрывает определенный сектор неба. Если солнечный свет попадает на один из них, это означает, что Солнце находится в соответствующем секторе. Несмотря на простоту, такие датчики выполняют важную функцию, обеспечивая начальную ориентацию аппарата и помогая ему удерживать положение в пространстве. Они особенно полезны в ситуациях, когда необходима быстрая и грубая ориентация, например, сразу после выхода на орбиту.
Аналоговые датчики Солнца, также известные как дифференциальные, предлагают более высокую точность по сравнению с грубыми датчиками. Они состоят из ряда фоточувствительных элементов, например, фотодиодов, расположенных на плоскости или в виде полусферы. Когда солнечный свет попадает на датчик, он освещает различные фотодиоды с разной интенсивностью в зависимости от угла падения солнечных лучей. Сигналы с фотодиодов анализируются, и на основе разности интенсивности света между ними определяется точное направление на Солнце. Такие датчики позволяют более точно ориентировать спутник, что особенно важно для задач, требующих стабильного удержания направления, например, для спутников связи или наблюдения Земли.

Цифровые датчики Солнца представляют собой наиболее современные и точные устройства в этой категории. Они часто используют матричные фотосенсоры, такие как CMOS и CCD (CCD — Charge-Coupled Device и CMOS — Complementary Metal-Oxide-Semiconductor), на которые проецируется изображение Солнца. Компьютер анализирует положение светлого пятна на матрице и определяет угол падения солнечных лучей с высокой точностью. Эти датчики способны обеспечивать точную ориентацию даже при сложных условиях, когда необходима высокая стабильность и точность как в космических миссиях, так и для спутников, работающих на солнечных батареях.
Для спутников, выполняющих научные миссии, наблюдения Земли или другие задачи, стабильная ориентация относительно Солнца необходима для точного выполнения своих функций. В сочетании с другими датчиками, такими как звездные датчики, гироскопы и магнитометры, датчики Солнца обеспечивают комплексное решение для определения ориентации и стабилизации космического аппарата в пространстве. Они не только поддерживают корректное функционирование спутника, но и продлевают его жизненный цикл за счет эффективного управления энергопотреблением и ориентацией.
Кас, прочитав статьи о датчиках Солнца, решил усовершенствовать свой корабль, заменив в нем систему фотодиодов на новые матричные датчики, позволяющие определять направление на Солнце. Установив датчики, Кас понял, что они возвращают в его бортовой компьютер только два числа, а не три, как должно быть в векторе. Тогда он достал инструкцию и внимательно с ней ознакомился. Там было сказано, что датчик возвращает координаты пикселя матрицы, на который попало больше всего света. Также из описания устройства датчика Кас узнал, что размер матрицы \(22{,}3 \times 14{,}9\) мм, размер пикселя 0,025 мм. На расстоянии 5 мм от матрицы установлена металлическая пластина с небольшим отверстием ровно по центру.
Помогите Касу рассчитать вектор направления на Солнце в текущий момент времени, если известно, что датчик вернул числа: 117, 351. В ответе необходимо дать единичный вектор в системе координат датчика.
Координаты пикселей считать от левого верхнего края:
- ось \(Y\) — длинная сторона матрицы (направлена вправо из левого верхнего края матрицы);
- ось \(X\) — короткая (направлена вниз из левого верхнего края матрицы);
- нумерация пикселей начинается с единицы.
Ноль системы координат датчика считать центром металлической пластины, оси \(X\) и \(Y\) сонаправлены с осями координат матрицы, ось \(Z\) дополняет систему до правой тройки.
При расчете считайте, что свет попадает ровно в центр пикселя. Ответ округлите до тысячных.
Чтобы учесть, что свет попадает ровно в центр пикселя, нужно скорректировать координаты пикселя, добавив половину его размера. Затем определим обратный вектор направления на Солнце.
Определение координат центра матрицы.
Центр матрицы в пикселях: \[X_{mid} = 298, ~Y_{mid} = 446.\]
Определение координат пикселя с учетом его центра.
Координаты пикселя (117, 351) относительно центра матрицы: \[\Delta x = 117 - 0{,}5 - 298 = -181{,}5 \text{~пикселей},\] \[\Delta y = 351 - 0{,}5 - 446 = -95{,}5 \text{~пикселей}.\]
Переводим координаты из пикселей в миллиметры: \[X_{mm} = -181{,}5 \cdot 0{,}025 \text{~мм/пиксель} = -4{,}5375 \text{~мм},\] \[Y_{mm} = -95{,}5 \cdot 0{,}025 \text{~мм/пиксель} = -2{,}3875 \text{~мм}.\]
Определение вектора направления на Солнце.
Определим координаты вектора направления на Солнце, зная, что \(z = -5\) мм: \[R = (-4{,}5375 \text{~мм},-2{,}3875 \text{~мм},-5 \text{~мм}).\]
Нормировка вектора.
Вычислим длину вектора:
\[\left|R \right| = \sqrt{(-4{,}5375)^2 + (-2{,}3875)^2 + (-5)^2} \approx 7{,}16164 \text{~мм}.\]
Найдем единичный вектор:
\[R_{norm} = \left(-\frac{4{,}5375}{7{,}16164}, -\frac{2{,}3875 }{7{,}16164}, -\frac{5}{7{,}16164} \right) \approx ( -0{,}634, -0{,}333, -0{,}698).\]
Найдем обратный вектор.
Чтобы получить обратный вектор, необходимо изменить знаки всех компонентов: \[R_{reverse} =(0{,}634{,}0,333{,}0,698).\]
Единичный вектор направления на Солнце в системе координат датчика: \(R_{ans} = R_{reverse} \approx (0{,}634{,}0,333{,}0,698)\).
Спутниковая фотосъемка является одним из важнейших инструментов в современном мире, обеспечивающим беспрецедентные возможности для мониторинга и изучения Земли, космоса и атмосферы. Эта технология оказывает значительное влияние на самые разные области, от сельского хозяйства до обороны и научных исследований.
Одной из ключевых причин важности спутниковой фотосъемки является ее способность предоставлять данные в реальном времени или с минимальной задержкой, охватывая огромные территории, которые было бы невозможно или чрезвычайно дорого исследовать традиционными наземными методами. Спутники могут отслеживать изменения на поверхности планеты, наблюдать за погодными явлениями, оценивать состояния лесов, водоемов и почв, а также контролировать передвижения ледников и даже следить за активностью вулканов и землетрясениями. Эти данные жизненно важны для предотвращения и минимизации последствий природных катастроф, а также для долгосрочного планирования в области урбанизации и сельского хозяйства.
Спутниковые камеры — это сложные высокотехнологичные устройства, которые претерпели значительную эволюцию с момента первых запусков. Современные спутниковые камеры могут снимать в различных диапазонах электромагнитного спектра, от видимого света до инфракрасного и радиоволн. Это дает возможность получать изображения с разными уровнями детализации в зависимости от целей съемки. Например, инфракрасная съемка полезна для оценки состояния растительности или температуры поверхности океанов, в то время как радиоволны позволяют проникать сквозь облака и пыль, предоставляя изображения поверхности Земли даже в условиях плохой видимости.
Важной частью работы спутниковых камер является оптическая система, включающая линзы и зеркала, которые фокусируют свет на матрице детекторов. Как правило, она состоит из миллионов светочувствительных элементов, преобразующих свет в электрические сигналы. Эти сигналы затем обрабатываются и передаются на Землю для дальнейшего анализа.
Одной из самых сложных задач в спутниковой фотосъемке является обеспечение стабильности и точности. Спутники двигаются с большой скоростью, и малейшие колебания или вибрации могут исказить изображение. Для решения этой проблемы используются гироскопы и другие стабилизирующие устройства, а также алгоритмы цифровой стабилизации изображения.
Разрешение снимков также играет критическую роль. Чем выше разрешение, тем больше деталей можно увидеть на изображении. Современные спутники способны получать снимки с разрешением до нескольких десятков сантиметров на пиксель, что позволяет различать даже небольшие объекты на Земле. Однако для получения таких снимков требуется не только высококачественная оптика, но и сложные алгоритмы обработки данных, которые учитывают такие факторы, как атмосферные искажения и движение самого спутника.
Также важно отметить роль спутниковых камер в космических исследованиях. Они позволяют наблюдать за далекими объектами и изучать планеты, звезды и галактики. Съемка в разных диапазонах спектра дает возможность ученым анализировать состав и структуру космических тел, а также искать потенциально обитаемые экзопланеты.
Ключевую роль в процессе получения изображений в спутниковых камерах играют матрицы — массивы светочувствительных элементов (пикселей). Каждый пиксель — это фотодиод, который преобразует свет (попадающие на него фотоны) в электрические сигналы. Попадающий свет вызывает накопление электрического заряда. Накопленный заряд зависит от количества света, попавшего на пиксель.
Существуют два основных типа матриц, используемых в спутниковой съемке: CCD — Charge-Coupled Device и CMOS — Complementary Metal- Oxide-Semiconductor.
CCD-матрицы обладают высокой чувствительностью и точностью, что делает их особенно полезными в условиях низкой освещенности. В CCD-матрицах свет попадает на пиксели, которые собирают и накапливают электрический заряд. После завершения экспозиции заряд передается по цепочке пикселей на выходной регистр, где он считывается и преобразуется в аналоговый сигнал. Этот сигнал затем оцифровывается и превращается в цифровые данные, которые могут быть интерпретированы как изображение. Процесс требует точного синхронизированного управления, что делает CCD-матрицы более энергоемкими, но они обеспечивают высокую точность и низкий уровень шума.
CMOS-матрицы работают по-другому: каждый пиксель имеет свой собственный транзистор, который преобразует накопленный заряд в напряжение непосредственно в ячейке. Это напряжение затем оцифровывается и передается на выход для последующей обработки. CMOS-матрицы потребляют меньше энергии и обладают более высокой скоростью считывания, что делает их подходящими для съемки быстродвижущихся объектов. Хотя CMOS-матрицы могут уступать CCD-матрицам по чувствительности в условиях низкой освещенности, они позволяют интегрировать дополнительные функции, такие как аналого-цифровое преобразование на одном кристалле, что упрощает конструкцию и снижает стоимость камер.
Для получения цветного изображения матрица должна различать свет разных длин волн (красный, зеленый и синий). Это достигается с помощью цветных фильтров, наложенных на каждый пиксель. Самым распространенным способом является использование массива Байера, где каждый пиксель покрыт фильтром одного из трех цветов. Обычно на один красный пиксель приходится два зеленых и один синий, так как глаз человека более чувствителен к зеленому цвету. Такое соотношение пикселей используется в привычных нам камерах для получения изображения, наиболее близкого к тому, что видит человек, в научных же целях соотношение пикселей может быть другим — в зависимости от задач. Когда свет проходит через эти фильтры, каждый пиксель регистрирует интенсивность света определенного цвета, и затем специальный алгоритм, называемый демозаикацией, объединяет данные с различных пикселей для создания полноценного цветного изображения.
После того как свет преобразован в электрические сигналы, они проходят через аналого-цифровой преобразователь (АЦП), который превращает их в цифровые значения. Эти значения представляют собой уровни яркости для каждого пикселя. Затем цифровые данные подвергаются обработке, где применяются различные коррекции: баланс белого, коррекция экспозиции и шумоподавление. На этом этапе также может проводиться сжатие данных для уменьшения размера файла. После завершения всех этапов обработки данные собираются в единое цифровое изображение.
Выдержка — это время, в течение которого матрица подвергается воздействию света. Правильный выбор выдержки имеет решающее значение для получения качественного изображения. При короткой выдержке матрица экспонируется на протяжении короткого времени, что позволяет заморозить движение объектов на снимке. Это особенно важно для спутников, движущихся с высокой скоростью относительно поверхности Земли, так как короткая выдержка помогает избежать размытости изображения. Однако слишком короткая выдержка может привести к недостаточной экспозиции в условиях низкой освещенности, делая изображение темным и шумным.
С другой стороны, длинная выдержка позволяет матрице улавливать больше света, что полезно в условиях слабого освещения. Однако при длительной выдержке возникает риск размытости изображения из-за движения спутника, что особенно критично для съемки с высоким разрешением. Чтобы компенсировать эти факторы, в спутниковых камерах применяются технологии стабилизации изображения, такие как гироскопы и сенсоры, корректирующие движение камеры в реальном времени. Также используются алгоритмы цифровой обработки, которые анализируют серию снимков и выбирают наиболее четкие кадры.
Спутник, находящийся на орбите, должен сделать фотографию объекта на поверхности Земли. Известно, что камера спутника имеет фокусное расстояние \(f = 1\) м и разрешение матрицы \(R = 10^6\) пикселей. Сама матрица — квадратная, размер пикселя — 1 мм. Угловой размер объекта относительно спутника составляет \(\theta = 0{,}05\) рад. Камера обладает выдержкой \(t = 0{,}01\) с. Спутник движется по орбите со скоростью \(V_{orb} = 7{,}5\) км/с на высоте \(h = 500\) км над поверхностью Земли.
- Определить линейный размер объекта на поверхности Земли.
- Найти линейное разрешение камеры на данной высоте.
- Определить максимальную допустимую угловую скорость вращения спутника \(\omega_{max}\), при которой объект не сместится на изображении более, чем на 3 пикселя.
- Линейный размер объекта на поверхности Земли: \[L=h\cdot \theta=500 \text{~км}\cdot 0{,}05 \text{~рад}=25 \text{~км}.\]
Линейное разрешение камеры на поверхности Земли можно найти как: \[\delta_x = \frac{h\cdot \delta_p}{f},\] где \(\delta_p\) — размер 1 px (пикселя) на матрице.
Тогда линейное разрешение на поверхности Земли: \[\delta_x =500 \text{~м/пиксель}.\]
- Максимальная допустимая угловая скорость вращения спутника. Максимальное смещение объекта на изображении, допустимое при выдержке, — это 3 пикселя. На поверхности Земли это смещение составит: \[\delta_L = 3\cdot \delta_x =1500 \text{~м}.\] Максимальная допустимая угловая скорость вращения спутника: \[\omega_{max} =\frac{\delta_L}{h\cdot t} =0{,}003 \text{~рад/с}.\]
- 25 км;
- 500 м/пиксель;
- 0,003 рад/с.
После вывода спутника на орбиту единственным инструментом для взаимодействия с ним остается радиосвязь. Радиоволны применяются как для управления аппаратом и мониторинга его состояния, так и для реализации функционала полезной нагрузки, работающей в соответствии с общепринятыми стандартами связи, определяющими то, как сигнал формируется кодируется, а также принципы ведения радиообщения с учетом движения спутника, состояния радиоэфира, целей и задач системы и иных факторов.
С помощью данного тестирования можно познакомиться с необходимой теорией, а также начать работать с инструментом обработки сигналов GNU Radio.
Для передачи текстового, звукового или видеосообщения из точки А в точку В его необходимо подвергнуть ряду преобразований и отправить по линии связи. Важными компонентами такой линии являются:
- передатчик;
- канал связи;
- приемник.
Передатчик — устройство, формирующее сигнал для передачи и отправляющее сигнал по линии связи. Его задачей является преобразование сообщения в форму, пригодную для передачи, то есть в сигнал.
Канал связи — проводное или беспроводное соединение между передатчиком и приемником. Именно по нему происходит передача сообщения.
Приемник — устройство, осуществляющее прием сигнала и преобразование его обратно в сообщение.
Если говорить о беспроводном соединении, то в качестве основы линий связи используются радиоволны, а также инфракрасное, оптическое или лазерное излучение.
Более подробно остановимся на радиоволнах.
Радиоволны — это электромагнитные волны (распространяющееся в пространстве возмущение/изменение состояния электромагнитного поля). Определяющими характеристиками радиосвязи являются частота колебаний волн (число полных колебаний или циклов волны, совершенных в единицу времени) и длина волны (пространство, которое проходит электромагнитная энергия за время одного периода, распространяясь со скоростью света). Радиоволны в электромагнитном спектре располагаются от крайне низких частот до инфракрасного диапазона.
С учетом классификации Международным союзом электросвязи радиоволн по диапазонам, к радиоволнам относят электромагнитные волны с частотами от 0,03 Гц до 3 ТГц, что соответствует длине волны от 10 км до 0,1 мм.
Различные диапазоны частот обладают различными физическими характеристиками, определяющие такие параметры, как помехоустойчивость, максимальное расстояние передачи, проникающая способность и многое другое. Служебные каналы связи спутников чаще всего управляются радиоволнами в УКВ (ультракоротковолновом) диапазоне частот. УКВ — традиционное в СССР название диапазона радиоволн, объединяющего метровые, дециметровые, сантиметровые и миллиметровые волны (или диапазоны очень высоких частот — ОВЧ, ультравысоких частот — УВЧ, сверхвысоких частот — СВЧ и крайне высоких частот — КВЧ). То есть это все радиоволны, длина которых менее 10 м.
Любой радиосигнал — это электромагнитная волна, которая несет в себе заложенную определенным образом информацию.
Скорость, с которой распространяются радиоволны в вакууме, равна скорости света (в атмосфере эта скорость немногим меньше).
Радиосигнал имеет несколько характеристик, определяющих его свойства:
- длина волны — это расстояние между двумя повторяющимися пиками;
- частота — количество повторений в секунду (\(1 \textrm{\,Гц} = 1/\)с);
- амплитуда — максимальное значение.
У электромагнитных волн также имеется две составляющих — электрическая и магнитная. Векторы напряженности электрического поля и магнитной индукции перпендикулярны друг другу и перпендикулярны направлению распространения волны.

Рис. 3.4.

Рис. 3.5.
Длина волны определяет ее способность огибать объекты в пространстве: чем больше длина волны, тем сильнее волна будет огибать препятствующие ее прямому распространению объекты.
Верхняя часть атмосферы, лежащая на границе с космосом, называется ионосферой Земли. Из-за облучения солнечной радиацией в этом месте большое содержание свободных электронов и ионов, что способствует образованию полярных сияний, молний, а также отражению низкочастотных радиосигналов и преломлению всех остальных. Это делает низкие частоты непригодными для связи с космосом с поверхности Земли.
| Диапазон | Длина волны | Частота | Взаимодействие с ионосферой |
|---|---|---|---|
| Сверхдлинные волны (СДВ) | от 10 до 100 км | 3–30 кГц | Поглощаются ионосферой, распространяются огибающей поверхностной волной вдоль Земли |
| Длинные волны (ДВ) | от 1 до 10 км | 30–300 кГц | |
| Средние волны (СВ) | от 100 до 1000 м | от 300 кГц до 3 МГц | Днем поглощаются ионосферой, ночью отражаются |
| Короткие волны (КВ) | от 10 до 100 м | от 3 до 30 МГц | Отражаются ионосферой |
| Ультракороткие волны (УКВ) | от 0,1 мм до 10 м | от 30 МГц до 3 ТГц | Проходят сквозь ионосферу |
По способу распространения выделяют следующие виды волн:
- прямые — волны, распространяющиеся прямолинейно, аналогично свету, исходящему от источника света, не способны огибать поверхность земного шара и проходят ионосферу насквозь;
- поверхностные — волны, распространяющиеся вдоль поверхности Земли и огибающие ее выпуклость, не проходят через ионный слой;
- пространственные — волны, распространяющиеся по поверхности Земли за счет отражения от ионного слоя и поверхности Земли, за счет многочисленного отражения со временем затухают.
На рис. 3.6 цифрой 1 обозначена прямая волна, 2 и 3 — поверхностные волны, 4 — пространственная волна.

| Вид волны | Длина волны | Диапазон частот | Распространение | Применение |
|---|---|---|---|---|
| Длинные | От 1 до 10 км | 300–30 кГц | Поверхностные | Радиосвязь, радиовещание |
| Средние | От 100 до 1000 м | 3–0,3 МГц | Поверхностные | Радиовещание, радиосвязь |
| Короткие | От 10 до 100 м | 30–3 МГц | Пространственные | Радиосвязь, радиовещание, рации |
| Метровые | От 1 до 10 м | 300–30 МГц | Прямые | Радиосвязь, телевидение |
| Дециметровые | От 1 до 10 дм | 3–0,3 ГГц | Прямые | Радиолокация, радиорелейная связь, радионавигация, телевидение, мобильные телефоны, рации, микроволновые печи, спутниковая навигация |
| Сантиметровые | От 1 до 10 см | 30–3 ГГц | Прямые | Радиолокация, радиорелейная связь, интернет, спутниковое телевещание, спутниковая связь, беспроводные компьютерные сети |
| Миллиметровые | От 1 до 10 мм | 300–30 ГГц | Прямые | Радиоастрономия, высокоскоростная радиорелейная связь, радиолокация (метеорологическая, управление вооружением), медицина, спутниковая радиосвязь |
| Субмиллиметровые | От 0,1 до 1 мм | 3000–300 ГГц | Прямые | Освоение для специальных применений |
Космокот Кас поехал в далекую-далекую глубинку, чтобы навестить свою бабушку. Рассказывая ей о своих подвигах на олимпиаде, Кас обратил внимание на высокую радиомачту прямо во дворе дома. Оказалось, что она принадлежала дедушке Каса, и в периоды отсутствия почтового бота эта станция остается единственным способом связаться с миром. Но прямо перед приездом Каса старенький бабушкин дневник с инструкцией от дедушки рассыпался на страницы! Помогите по обрывкам записей из дневника восстановить контакты и используемые ими диапазоны для связи.
- Гена, 27,135 МГц, развозит хлеб на своем синем грузовике.
- Маня, 446 МГц, почтовый бот, не забыть передать талончик.
- Жучка, **** кГц, подружка из Котяткино, почему-то принимает и передает только ночью...
- Гришка, 1** МГц, летает тут на своем «авиа», кур распугивает.
- Старлинк, 10,7 ГГц, Кас мне все в письмах рассказывал, но только не говорит там никто.
- КВ;
- дециметровые;
- СВ;
- метровые;
- сантиметровые.
Любой сигнал имеет свою форму и свои характеристики. Обычно мы говорим о сигнале как о некоторой функции синуса (или косинуса) от времени, в частности, гармонический сигнал описывается уравнением: \[s(t)=A\cdot \cos(2\pi ft + \varphi).\]
Однако реальные сигналы очень редко бывают гармоническими и представляют собой сложную форму, сочетающую в себе сразу несколько различных тонов. А поэтому гораздо чаще в обработке сигналов используют другое представление сигнала, называемое спектром.

Спектр сигнала — это его математическое представление, функция, зависящая не от времени, а от частоты, и представляющая собой сумму гармоник сигнала.
Гармониками сигнала называют выражения типа: \[\sin(k\cdot \omega \cdot t) \text{ и } \cos(k\cdot \omega \cdot t),\] где \(k\) — номер гармоники, \(\omega\) — частота, \(t\) — момент времени.
При суммировании достаточно большого количества таких составляющих можно математически описать принимаемый сигнал. Такое математическое представление сигнала позволяет осуществлять его дальнейшую обработку с помощью цифровой аппаратуры. На рис. 3.8 представлено спектральное представление в диапазоне 433 МГц.
Здесь по оси абсцисс идут частоты, а по оси ординат — интенсивность сигнала в данный момент.
Разложение сигнала в гармоники реализуют с помощью так называемого преобразования Фурье, суть которого в данном курсе подробно не излагается, однако его упоминание еще не раз встретится при работе с сигналами.
Чтобы лучше понять, как работает спектр и увидеть его для разных примеров, рекомендуем обратить внимание на это приложение: https://academo.org/demos/spectrum-analyzer/.
Космокот Кас столкнулся с проблемами с микрофоном: его друзья жалуются, что у него противный посторонний шум на фоне. Кас решил для начала провести диагностику и определить, на какой частоте вмешивается посторонний шум.
Определите частоту, на которой слышен шум на пробной записи: https://drive.google.com/file/d/1yWLi9-bz8qyzvIGwfXAEWFpbxXPaXorg/view?usp=sharing. Ответ дайте в герцах.
Достаточно открыть любой спектроанализатор, чтобы увидеть частоту шума — 6000 Гц.
Каждый передаваемый сигнал имеет свою частоту. Обычно те сигналы, которые необходимо передать, являются низкочастотными (до нескольких МГц). Однако в своем первоначальном виде передавать их не всегда удобно, поэтому применяют способ передачи с помощью опорной волны, которая по частоте гораздо выше исходного сигнала. Она называется несущим колебанием (ее частота называется несущей частотой), и у него все те же характеристики, что и у любой волны: длина волны, частота и амплитуда сигнала.
Однако само по себе несущее колебание не несет никакой информации. Информацию несет в себе сигнал. И чтобы данную информацию передать из одной точки в другую, необходимо «наложить» форму сигнала на несущую частоту. Такое «наложение» осуществляется путем изменения одной или нескольких характеристик сигнала: амплитуды, частоты или фазы. Этот процесс называется модуляцией.
Модуляция (лат. modulatio — размерность) — процесс изменения одного или нескольких параметров высокочастотного несущего колебания по закону низкочастотного информационного сигнала.
Эта техника дает несколько важных преимуществ, частности, позволяет:
- сформировать радиосигнал, который будет обладать свойствами, соответствующими свойствам несущей частоты;
- использовать антенны малого размера, поскольку размер антенны должен быть пропорционален длине волны;
- избежать интерференции с другими радиосигналами
Существует несколько видов модуляции: изменение амплитуды несущего колебания для передачи сигнала называется амплитудной модуляцией (АМ), изменение частоты — частотной (FM), а изменение фазы — фазовой (PM).

Рис. 3.10.

Рис. 3.11.
Сам сигнал передается не строго на частоте несущего колебания, но и захватывает некоторые соседние частоты в некотором диапазоне. Диапазон частот, в котором передается сигнал, называется полосой частот.
Спектр АМ-сигнала состоит из трех компонент: центральная — несущая — и две боковые — модулирующие. При изменении несущей частоты происходит смещение всего АМ-сигнала по частоте.
Для ЧМ-сигналов появляется новый термин — девиация. Это отклонение частоты от несущей в процессе модуляции. Иначе говоря, чем больше девиация, тем больше ширина спектра ЧМ-сигнала.
Модуляция цифровых сигналов называется манипуляцией. Амплитудная манипуляция (Amplitude-shift keying, ASK) — преобразование сигнала, при котором скачкообразно меняется амплитуда несущего колебания.
Частотная манипуляция (Frequency-shift keying, FSK) — преобразование сигнала, при котором скачкообразно меняется частота несущего сигнала в зависимости от значения цифрового сообщения.
Фазовая манипуляция (Phase-shift keying, PSK) — процесс преобразования сигнала, при котором скачкообразно изменяется фаза несущего колебания. Существует большой класс сигналов с фазовой манипуляцией (BPSK, QPSK, 8-PSK и т. д.).
Для каждого конкретного вида модуляции спектр будет иметь свою форму.
Космокот Кас посетил экскурсию в своем городском музее. Темой экскурсии была «История связи». Благодаря бабушке Кас уже хорошо ориентировался в радиосвязи, но тем не менее с интересом рассматривал стоящий в музее телеграф. Рядом на столе лежал рисунок.
| А | Б | В |
|---|---|---|
![]() |
![]() |
![]() |
Помогите Касу определить, какая схема посылает по телеграфному проводу АМ-сигнал, ЧМ-сигнал и ФМ-сигнал?
А — ФМ, Б — АМ, В — ЧМ.
Радиосигнал изначально имеет аналоговую природу, но чтобы было возможным его обработать с помощью компьютера, необходимо его оцифровать. Сделать это можно, измеряя с постоянной периодичностью получаемый уровень сигнала. Частота, с которой происходят измерения, называется частотой дискретизации, сами измерения — сэмплами, а устройство производящие замеры — АЦП (аналого-цифровой преобразователь).
Тип радиоприемников, которые оцифровывают радиосигнал и передают его на компьютер, называется SDR (Software-defined radio). Их отличие от аналоговых радиоприемников в том, что они позволяют принимать не только центральную частоту, но и часть спектра возле нее. При этом вся обработка сигнала происходит программно, поэтому возможна только в связке с компьютером. Долгое время у человечества не было достаточных вычислительных возможностей, и только в последнее время эта технология стала по-настоящему массовой.


Например, частота дискретизации микрофона, подключенного к компьютеру или смартфону, чаще всего \(> 40\) КГц, потому что оцифрованный сигнал должен содержать в себе весь акустический диапазон (от 20 Гц до 20 КГц).
Теорема Котельникова задает достаточно строгие ограничения, которые могут доставить проблемы при работе с высокочастотными диапазонами. Однако чаще всего в приемниках не оцифровывают волну напрямую. Вместо этого задается центральная частота, после чего ее снижают на некоторую величину за счет смесителя. Так, центральная частота переносится на частоту заданного отступа, что и является промежуточной частотой для работы АЦП. Такое снижение позволяет принимать частоты сильно больше частоты дискретизации, но, как и в случае с микрофоном, теорема Котельникова ограничивает размер куска спектра, который можно оцифровать.
Помимо прочего, частота дискретизации ограничивает максимальную скорость передачи данных. Это легко увидеть на примере: допустим, передатчик модулирует сигнал на частоте 433 МГц, а приемник принимает этот сигнал и оцифровывает с частотой дискретизации 2 МГц. В этом случае передатчик может менять параметры волны 866 млн раз в секунду (согласно критерию Найквиста), а приемник может зафиксировать лишь 2 млн изменений в секунду. Получается, в данном случае узким местом в передаче данных будет именно частота дискретизации приемника.
Также у оцифровки есть еще один параметр: глубина — это количество информации, используемое под одно измерение. Чем больше информации мы используем, тем точнее будет зафиксировано измерение. Этот параметр определяется используемым АЦП. Чаще всего в SDR-приемниках используется 16 бит под одно измерение, но возможны и другие варианты. Повышение точности полезно, когда нужно различать очень малые изменения в сигнале, например, в случае приема слабого источника.
Таким образом, сигнал можно описать длинной последовательностью чисел. Именно так хранят звук wav-файлы и с таким видом данных работают приложения, например, для звонков.
Но радиоприемникам этого мало, и они эту последовательность чисел дополнительно с помощью несложных математических преобразований переводят в IQ-сигнал.
Более подробно об IQ-сигнале можно прочитать тут: https://disk.yandex.ru/i/B8-yLta-YE6gSg.

Для работы с IQ-сигналом существует множество программ, таких как SDR Sharp, SDR++, GNU Radio и входящий в его состав GQRX. На примере GQRX рассмотрим простейшую работу с IQ-сигналом, а более сложные преобразования будем совершать с GNU Radio. Рекомендуется использовать дистрибутив GNU Radio под названием Radioconda (https://github.com/ryanvolz/radioconda/releases/tag/2023.07.26). Сам GQRX, после установки Radioconda, также как и GNU Radio, будет доступен в меню Пуск или через поиск. Начнем работу с запуска GQRX. После запуска, помимо командной строки, можно увидеть окно, изображенное на рис. 3.22.
Это окно настройки источника IQ-сигнала. Нужно выбрать Device — Complex Sampled (IQ) File. После этого необходимо будет настроить параметры в строке Device String. Самый важный из них file: после равно необходимо указать полный путь до файла IQ-сигнала, заменив в нем все обратные слеши ( \ ) на прямые ( / ). Вот пример правильного параметра:
file=C:/Users/user/Downloads/CW_IQ_samprate-2016k.iq.
Для того чтобы скопировать путь до файла, выделите файл в проводнике, зажмите SHIFT и нажмите правой кнопкой мыши по нему, в меню выберите Копировать как путь. Не забудьте заменить слеши и убрать кавычки, которые копируются вместе с путем.
Примечание
Нежелательно, чтобы путь содержал кавычки, пробелы, русские символы. В этом случае программа может не найти нужный файл. Если у вас такой случай, переместите файл в корень диска, то есть чтобы путь до него был, например, C:/file.iq.
Далее обязательно необходимо указать rate, который задает sample rate записи, он обычно указан в том же месте, где загружается файл, а чаще всего и в названии самого файла. Указывать удобнее всего в научном формате, то есть, например, число \(2016000\) можно указать как \(2{,}016e6\), что значит \(2{,}016 \cdot 10^6\). Остальные параметры необязательные, но на всякий случай тоже их опишем.
freq— чисто косметический параметр, отображаемая в программе частота. Может быть любой.repeat— повторять ли файл по кругу?true— да,false— нет.throttle— ограничивать ли скорость воспроизведения файла реальной скоростью. За исключением очень редких случаев должен стоять true, иначе запись может воспроизвестись ускоренно.
После завершения настройки Device String можно нажимать OK, остальные параметры настраивать необязательно. Если появилась ошибка, перепроверьте правильность пути в параметре file. Если же все хорошо, откроется новое окно (рис. 3.23). Рассмотрим его основные органы управления.
Также могут пригодиться настройки в разделе FFT Settings, они влияют на внешний вид сигнала в программе.
Космокот Кас как-то раз разбирал свои вещи и нашел неизвестный и очень старый прибор. Оказалось, это был дедушкин радиопередатчик, в который можно было вставить перфокарту. Как раз рядом с передатчиком лежала одна из таких. Касу так и не удалось выяснить, что было записано на перфокарте. Как бы пристально он в нее ни всматривался, понимание не приходило. Поэтому он решил вставить перфокарту в передатчик и записать сигнал на SDR приемник, который удачно оказался под рукой.
Однако, записав IQ-сигнал, Кас понятия не имел, что с ним дальше делать. Помогите Касу получить послание. Напишите дословное послание в ответ строчными буквами.
*IQ запись сделана с sample rate \(= 512000\) сэмплов/с, ссылка на файл: https://drive.google.com/file/d/1Bt08W-6zNS0o8aTTd14uXMlVOky_uGos/view?usp=sharing.
Самое простое решение — посмотреть на спектр и увидеть на частоте 500 кГц идущий телеграфный сигнал, далее его записать и декодировать с помощью азбуки Морзе.
«Слава труженикам космокотовой науки!».
Продолжим работу с сигналами уже с более мощным инструментом — GNU Radio. После запуска GNU Radio автоматически должен создаться новый проект, но если этого не произошло, то создайте его сами. Для этого необходимо в меню выбрать File New QT GUI.
Сразу же можно увидеть два блока, созданных по умолчанию: Options и Variable (рис. 3.25).
Блок Variable содержит переменную с названием samp_rate. Эта переменная задает частоту дискретизации входного сигнала. Когда GNU Radio начинает работать с сигналом, то первое, что делает данное ПО — преобразует сигнал с приемника в приемлемый оцифрованный вид. Глобальная переменная samp_rate задает частоту дискретизации оцифрованного сигнала.
Поставим значение samp_rate для рабочей частоты 433 МГц, равное \(1000000\). Чтобы задать частоту выборок кликните на блок Variable, после чего откроется новое окно с настройками блока, введите значение \(1000000\) или \(1e6\), и затем нажмите Apply.

Чтобы начать обработку сигнала, необходимо для начала выбрать источник, откуда этот сигнал будет приходить. Блоки источников сигнала имеют в своем названии слово Source. Если ввести в поиске слово Source, можно увидеть, какие блоки можно использовать.

В качестве источника может использоваться файл с записью (File Source), выход с приемника (osmocom Source, RTL-SDR Source) или генерируемый самой программой простой сигнал (Signal Source).
Примечание
Более подробно о блоках GNU Radio можно узнать здесь: http://microsin.net/adminstuff/others/gnuradio-short-reference.html.
Теперь выберем выходной блок. Выходные блоки имеют в своем названии слово Sink. Из перечня выберем QT GUI Sink. В настройках блока можно установить параметр Central Frequency 433e6 и выбрать yes напротив Show RF Freq, чтобы на оси частот центральной частотой видеть не 0, а 433 МГц.
Соединив два данных блока, получим самый простой граф. Все дальнейшие графы будут собираться в длинный «конвейер». Чтобы запустить работу графа, нажмите на панели инструментов значок треугольника.
Через какое-то время появится всплывающее окно со спектром сигнала. Чтобы запомнить пик сигнала, можно в открывшемся окне поставить галочку на опции Max Hold.
Полученный сигнал может быть необходимо демодулировать. Сделать это можно, зная модуляцию исходного сигнала, с помощью соответствующих блоков. Полный список доступных блоков можно увидеть с помощью поиска Demod.

Космокот Кас вместе с другом решили купить рации и захотели их протестировать. Для этого они согласовали частоту сигнала и время сеанса связи. Чтобы проверить, что они слышат именно друг друга, собеседник Каса должен во время сеанса передать известный только ему код, и потом они его вместе проверят. К сожалению, Кас накануне много играл с рацией, и в самый ответственный момент рация разрядилась. Однако под рукой у него оказался SDR-приемник, и он успел запустить запись IQ-сигнала. Помогите Касу получить код, который передал его друг. IQ-сигнал https://disk.yandex.ru/d/zhwq8F-6Stv53Q.
sample rate: 336000 сэмплов/c.
27015.
Как уже было описано, для передачи информации с помощью радиоволн используют модуляцию сигнала. С помощью модуляции преобразуются характеристики волны в соответствии с определенными схемами преобразования.
Изначальная информация представляет собой массив битов (нулей и единиц), представляемых в виде разных уровней цифрового сигнала (зачастую высокий уровень сигнал — 1 и низкий уровень сигнала — 0).
Однако при передаче нерационально просто отправлять биты напрямую, поскольку это может привести к потерям данных и затруднит синхронизацию работы приемника и передатчика. А без синхронизации практически невозможно в массиве 0 и 1 структурировать начальный вид данных.
Для решения этой проблемы передачи данных используют пакетную связь — систему связи, в которой передаваемые (например, посредством электрических сигналов) сообщения разбиваются на пакеты (небольшие блоки определенного формата), каждый из которых снабжается начальной и конечной служебной информацией, помогающей определять начало и конец пакета данных, а также проверять его целостность и корректность.
Существует множество протоколов, которые формируют пакеты данных согласно определенным правилам. Задокументированный протокол помогает согласовать работу передающей и принимающей сторон и передавать данные более структурированно.
Как-то раз Космокот Кас нашел сайт одного радиолюбителя. До этого Кас не очень интересовался радиосвязью, но после нескольких прочитанных статей, еще большего количества прочитанных историй и несчетного количества увиденных снимков понял, как много он упустил, и твердо решил к этому приобщиться.
На сайте он обнаружил, что радиолюбитель часто проводит сеансы связи на одном из спутников ретрансляторов, передавая и принимая через него короткие текстовые сообщения. Также радиолюбитель сообщает, что его сообщения всегда будут начинаться с символов AL.
Кас обрадовался, написал простенькую программу для приема сообщений, дождался спутника и, услышав сигнал, передал его в программу. Однако в программе он не увидел ожидаемых сообщений, вместо этого там повторялся непонятный набор байт: 29 89 0D 24 24 09 24 ED A4 0D 0C AE 4C A4 24 09 24 ED A4 0E EC 2D 2E 8D 2D CC E4 0C CD EE 44 0F 2D EE AE 44 0D AC AE 6E 6C 2C EC AE 68.
Помогите Космокоту Касу получить оригинальное сообщение, отправляемое радиолюбителем. Напишите в ответе оригинальное сообщение без известных начальных символов.
Задача напрямую связана с понятием преамбулы из теории.
- Нужно перевести начальные символы в шестнадцатиричный вид по таблице ASCII:
41 4C. - Заявленные начальные байты не содержатся в полученных, следовательно, байты начали собираться не с того места, вследствие чего собираются со сдвигом по битам.
- В задании сказано, что набор байт повторяется, следовательно, сдвиг и сообщение постоянны. Значит, если последний байт сообщения захватывает начальные биты следующего, можно использовать эти биты как начало текущего сообщения, потому что они идентичны. Аналогичные рассуждения в случае, когда начальный байт сообщения захватывает конец предыдущего.
- Теперь можно найти исходный текст, для этого нужно сдвигать биты с конца в начало или наоборот, до тех пор пока биты, собранные в байты, не окажутся осмысленным текстом.
Пример программы-решения
Ниже представлено решение на языке Python.
#Преобразование в 2-ичное число с фиксированным размером
def bbin(a):
b = bin(a)[2:]
return (8 - len(b))*"0" + b
# Преобразование в строку бит
def convert(msg):
rez = ""
for i in msg:
rez += bbin(i)
return rez
# Сдвиг строки бит
def swap(msg, step):
return msg[step:] + msg[:step]
# Преобразование из строки бит в байты
def deconvert(msg):
rez = bytearray()
for i in range(0, len(msg), 8):
rez.append(int(msg[i:i+8], 2))
return rez
bytesStr = "29 89 0D 24 24 09 24 ED A4 0D 0C AE 4C A4 24 09 24 ED A4 0E EC 2D 2E 8D 2D CC E4 0C CD EE 44 0F 2D EE AE 44 0D AC AE 6E 6C 2C EC AE 68"
bytesArr = bytesStr.split(" ")
bytesInt = list(map(lambda a: int(a, 16), bytesArr)) # Преобразование 16-ричных чисел в int
bitsArr = convert(bytesInt)
for i in range(1, 8):
testArr = swap(bitsArr, i)
test = deconvert(testArr)
print(test)
bytearray(b'S\x12\x1aHH\x12I\xdbH\x1a\x19\\\x99HH\x12I\xdbH\x1d\xd8Z]\x1a[\x99\xc8\x19\x9b\xdc\x88\x1e[\xdd\\\x88\x1bY\\\xdc\xd8Y\xd9\\\xd0')
bytearray(b'\xa6$4\x90\x90$\x93\xb6\x9042\xb92\x90\x90$\x93\xb6\x90;\xb0\xb4\xba4\xb73\x9037\xb9\x10<\xb7\xba\xb9\x106\xb2\xb9\xb9\xb0\xb3\xb2\xb9\xa0')
bytearray(b"LHi! I\'m here! I\'m waiting for your messagesA")
bytearray(b'\x98\x90\xd2B@\x92N\xda@\xd0\xca\xe4\xcaB@\x92N\xda@\xee\xc2\xd2\xe8\xd2\xdc\xce@\xcc\xde\xe4@\xf2\xde\xea\xe4@\xda\xca\xe6\xe6\xc2\xce\xca\xe6\x82')
bytearray(b'1!\xa4\x84\x81$\x9d\xb4\x81\xa1\x95\xc9\x94\x84\x81$\x9d\xb4\x81\xdd\x85\xa5\xd1\xa5\xb9\x9c\x81\x99\xbd\xc8\x81\xe5\xbd\xd5\xc8\x81\xb5\x95\xcd\xcd\x85\x9d\x95\xcd\x05')
bytearray(b'bCI\t\x02I;i\x03C+\x93)\t\x02I;i\x03\xbb\x0bK\xa3Ks9\x033{\x91\x03\xcb{\xab\x91\x03k+\x9b\x9b\x0b;+\x9a\n')
bytearray(b'\xc4\x86\x92\x12\x04\x92v\xd2\x06\x86W&R\x12\x04\x92v\xd2 \x07v\x16\x97F\x96\xe6r\x06f\xf7"\x07\x96\xf7W"\x06\xd6W76\x16vW4\x14')
В выводе программы видим строчку с читаемым текстом, но она по-прежнему не начинается с AL, это связано с тем, что к имеющемуся сдвигу 3 добавили 5, в результате чего весь первый символ переместился в конец. Если использовать отрицательные сдвиги — сразу получится искомая строка.
Hi! I’m here! I’m waiting for your messages
Обработка цифровых сигналов требует некоторых нововведений. Чтобы получить информацию в байтах, необходимо демодулировать сигнал, нормализовать его, привести к битам и объединить биты в байты.
Обратите внимание на доступные блоки демодуляции, они могут упростить работу. Но в общем случае для цифровых сигналов потребуется блок квадратурной демодуляции, который принимает комплексный сигнал и выдает последовательность чисел, указывающих на уровень сигнала.

Примечание
Значение Gain можно установить в единицу, но в таком случае позже придется нормировать сигнал по амплитуде. Рекомендуем воспользоваться формулой по умолчанию и задать необходимые переменные.
Теперь, зная уровень, нужно найти и объединить символы. Символ может быть записан сразу несколькими семплами, поэтому зная количество таких сэмплов, приходящихся на один символ, можно усреднить их в «мягкий» символ. Мягким он называется, так как еще не является 0 или 1. Для этого понадобится блок Symbol Sync (рис. 3.36).

Наконец, привести «мягкий» символ к 0 или 1 поможет Binary Slicer. Однако в последовательности обычных битов трудно найти байт информации. В этом помогает пакетная структура сообщения. Если известно, что сообщение начинается и/или заканчивается некоторой последовательностью бит, то можно попытаться найти ее с помощью семейства блоков Correlate Access Code. Они обнаруживают заранее известные последовательности и вешают на них тэг (о начале, окончании или размере пакета), который можно отслеживать в других блоках. Примечательно, что они будут синхронизировать поток бит, поэтому, разместив позади такого блока другой блок под названием Repack Bits, можно получить правильные байты информации и не допустить ошибки Каса из прошлого задания. Рекомендуем подробно ознакомиться с работой с тегами и примерами на официальной вики по GNU Radio.
Уже давно знакомый Космокот Кас стал регулярно общаться с другом-радиолюбителем. Чем больше он проводил сеансов связи, тем меньше ему хотелось делать кучу дополнительных действий, чтобы получить сообщения. Как известно, коты — ленивые создания, поэтому он решил переписать программу для приема сообщений в GNU Radio.
Для того чтобы ее тестировать, он записал IQ-сигнал. Ему известно, что спутник использует модуляцию 2-FSK c девиацией 50 кГц, и скорость передачи — 100 бод/с. Радиолюбитель передает сообщения с небольшим интервалом между ними. После передачи сообщения до начала следующего сигнал со спутника отсутствует. Сообщения начинаются с символов AL и заканчиваются символами EL.
Помогите Касу составить граф для декодирования сообщений и расшифруйте сообщения на записи. Запишите в ответ переданный Касу код. IQ-сигнал записан с sample rate \(= 512000\) сэмпл/с.
IQ-файл: https://disk.yandex.ru/d/8EzKrhDTT27LNQ.
Для решения задачи можно воспользоваться справкой по основным блокам: https://disk.yandex.ru/i/DniDa-SiPmLDow.
Ссылка на картинку в большем размере: https://disk.360.yandex.ru/d/XKgrIOCaSIS9kw/ss_n11.png.
41428731.
Из всех этапов, сопровождающих обработку сигнала, еще ни разу не поднималась тема фильтрации. Прежде всего стоит отметить, что существует несколько видов фильтров:
- фильтр нижних частот — пропускает сигналы ниже указанной частоты и не пропускает сигналы выше указанной частоты (т. н. частоты среза);
- фильтр верхних частот — пропускает сигналы выше частоты среза и не пропускает сигналы ниже частоты среза;
- полосовые фильтры — пропускают заданную полосу частот;
- режекторные фильтры — не пропускают заданную полосу частот.
Как уже упоминалось, важной характеристикой фильтра является частота среза — та частота, до или после которой фильтр будет стремиться убрать амплитуду сигнала.
Однако на практике фильтр не обрезает сигнал сразу на частоте среза, а делает это постепенно. Поэтому, помимо частоты среза, существует еще понятие переходной полосы — той части полосы частот, на протяжении которой фильтр гасит амплитуду сигнала до минимума.
Важно помнить, что фильтрация в цифровой обработке сигналов сводится к свертке (циклическому перемножению) некоторой ограниченной во временной области части сигнала на особую функцию — огибающую. Люди придумали различные такие функции и по их характерной форме называют окнами. В задачах ЦОС достаточно давно придуманы окна различной формы, которые при наложении на сигнал во временной области позволяют улучшить его спектральные характеристики.
Большое количество всевозможных окон обусловлено, в первую очередь, одной из главных особенностей любого оконного наложения, которая отражает взаимосвязь уровня боковых лепестков и ширины центрального лепестка — чем сильнее подавление боковых лепестков, тем шире главный лепесток, и наоборот.
Боковые лепестки — неприятная особенность оконного преобразования Фурье, которая приводит к растеканию полезного сигнала на спектре, но об этом в другой раз. Лепестки хорошо видно на иллюстрации выше с примерами различных окон.
Фильтры в GNU Radio представлены большим множеством блоков, позволяющих быстро и просто настроить фильтрацию. Некоторые из них отличаются высокой точностью, как Decimating FIR Filter, другие — высокой производительностью, как FFT Filter, остальные проще в настройке. Первые два упомянутых требуют Taps — строку, которая описывает параметры фильтра. Ее можно составить самостоятельно, пользуясь документацией, либо воспользоваться любым блоком фильтра, который оканчивается на taps. Такие блоки представляют собой конструктор такой строки.
Космокот Кас продолжает участвовать в сеансах связи с радиолюбителем, но на этот раз спутник пролетал в совсем неудачное время. Кас в этот момент находился в центре города и не имел с собой хорошей антенны, да и радиошума было значительно больше. Тем не менее он решил попробовать принять сигнал. Он уже начал принимать сигнал, как вдруг кто-то еще начал вещать на частоте спутника. Будем надеяться, что кто-то не специально мешает спутнику. Ну, а теперь нужно помочь Касу получить сообщения. Хорошо, что у Каса появилась привычка параллельно с декодированием включать и запись IQ-сигнала.
Так же как и в прошлом задании — спутник использует модуляцию 2-FSK c девиацией 50 КГц и скорость передачи — 100 бод/с. Радиолюбитель передает сообщения с небольшим интервалом между ними. После передачи сообщения до начала следующего сигнал со спутника отсутствует. Сообщения начинаются с символов AL и заканчиваются символами EL.
Sample rate в записи IQ-сигнала \(=512000\) сэмплов/с.
IQ-сигнал: https://disk.yandex.ru/d/zF5c9U2GxM6jTQ.
Для решения задачи можно воспользоваться справкой по основным блокам: https://disk.yandex.ru/i/DniDa-SiPmLDow.
Kas, privet! Ya nauchilsya stroit’ fil’try v GNU Radio! Hochu podelit’sya s toboj, vyhodi na svyaz’! Do vstrechi v efire! Konets svyazi.
Альтернативные варианты ответа на случай невозможности текстового ввода:
- Kas, privet! U menya pochemu-to ne poluchaetsa naladit’ svyaz. U vas cho-to sluchilos’? Mozhet, u vas svet propal, ili chto-to proiskhodit v efire? Priyom!
- Kas, privet! U menya pochemu-to ne poluchaetsa naladit’ svyaz. Neuzheli u menya slomalos’ oborudovanie? Otprav’, pozhalujsta, otvet, esli slyshish’ menya. Do svyazi!
- Na svyaz’, Kas! U menya pochemu-to ne poluchaetsa naladit’ svyaz. Kazhetsya, budto by u vas v gorode glushat, ili ya oshibayus’? Zhdu tebya v efire, konets svyazi.
- Na svyaz’, Kas! Ty poluchil moyo proshloe soobshchenie? Nikak ne mogu svyazat’sya ni s kem iz vashego goroda. U vas chto-to sluchilos’? Korporaty nynche pytayutsya vstavit’ reklamu povsyudu. Nadeyus’, ona tebe ne meshaet? Do svyazi!
- Privet, Kas! U menya pochemu-to ne poluchaetsa naladit’ svyaz. Ty ne znaesh’, vsyo li v poryadke? Vam nuzhna kakaya-nibud’ pomoshch’? Do svyazi v sleduyushchem efire.
- Na svyaz’, Kas! U menya pochemu-to ne poluchaetsa naladit’ svyaz.Kosmicheskoe izluchenie seychas ochen’ silnoe, mozhet v etom delo?Yasnogo tebe neba!
- Kas, privet! U menya pochemu-to ne poluchaetsa naladit’ svyaz. Davai vospolzuemsya drugim kanalov svyazi? Mozhet laser?Zhdu ot tebya otveta! Konets
- Kas, privet! Davno ti ne vihodil na svyaz. Mne est’ chto tebe rasskazat’, eto ideya dlya zadachi na olimpiadu!Zhdu tebya v efire!Priyom!
- Kas, privet! U menya pochemu-to ne poluchayetsa svyazatsa ni s kem iz
vashego gorodaU vas cho-to sluchilos’?Tu nichego strannogo v efire ne zamechal, naprimer, v predidushie nashi seansu?Ladno, konets svyazi
Даже идеально спроектированный космический аппарат может провалить миссию, если его орбита будет плохо подобрана под его целевую задачу. Поэтому проектирование космической миссии не обходится без определения возможных орбит для выведения спутника. Ниже предлагается познакомиться с тем, как положение орбит задается в пространстве, какие орбиты лучше подходят для определенных миссий. Не обойдется и без практической части: в ней будет рассмотрена работа в ПО баллистического моделирования GMAT (General Mission Analysis Tool), а также для тренировки будет предложено решить несколько задач в симуляторе «Орбита.Челлендж». Полученные навыки пригодятся как на втором этапе, так и на самом заключительном этапе.
Космические искусственные спутники Земли находят очень широкое применение. Причем, многие из этих задач можно технически решать и без применения космических аппаратов: например, для фотосъемки привлекать авиацию, для радиосвязи — наземные ретрансляторы. Именно космические аппараты выгодно использовать для подобных целей, благодаря особенностям их движения. Способность длительное время двигаться на нужном расстоянии от Земли с нужной скоростью почти без затрат топлива — именно та причина, по которой космические аппараты «отвоевали» многие области применения у наземных средств и авиации.

Что же позволяет космическому аппарату длительное время двигаться вокруг Земли вопреки ее притяжению? Мысленно проведем эксперимент: поднимем спутник на высоту его орбиты (скажем, 600 км над Землей) и отпустим. Спутник упадет на Землю, двигаясь по прямой линии. Если спутнику, перед тем как сбросить, придать некоторую начальную скорость по касательной к земному шару, он упадет уже по криволинейной траектории. Если скорость увеличивать, точка падения будет удаляться все дальше и дальше, пока кривая не замкнется в круг.
Скорость, при которой это происходит, называется круговой \(V_\text{кр}(r)\). Она зависит от массы планеты, вокруг которой запускается спутник, и от высоты круговой орбиты. Круговая скорость, рассчитанная для точки на поверхности планеты (нулевая высота), называется первой космической \(V_\text{к1}\). К примеру, первая космическая скорость для Земли равна 7910 м/с, а круговая скорость для орбиты Марса высотой, скажем, 1000 км равна 3546 м/с.
Иными словами, тело, вращающееся по орбите, «падает» так же, как и все остальные тела, но благодаря касательной скорости и кривизне земной поверхности это «падение» никогда не прекращается.
Как известно из школьного курса физики, тело совершает круговое движение под действием центростремительного ускорения. Оно направлено в сторону центра вращения. Для раскрученного тела, привязанного нитью к некоторой точке, это ускорение создается силой натяжения нити.
В случае кругового движения спутника, естественно, никаких материальных нитей не существует. Центростремительное ускорение создается силой гравитации небесного тела.
Гравитация — явление, при котором любые два тела, обладающие массой, притягиваются друг к другу с равной для каждого тела силой, пропорциональной произведению их масс и обратно пропорциональной квадрату ускорения. \[F(r) = G \frac{Mm}{r^2},\] где \(M\), кг — масса первого объекта (Земли или другого небесного тела),
\(m\), кг — масса второго тела (спутника),
\(r\), м — расстояние от центра масс Земли до объекта,
\(G = 6{,}67408 \cdot 10^{-11},\) Н\(\cdot {\text{м}^2}/{\text{кг}^2}\) — коэффициент, называемый гравитационной постоянной Ньютона.
Напрашивается вывод о том, что орбита должна иметь форму окружности. Однако это не совсем так. Немецкий ученый Иоганн Кеплер установил законы движения небесных тел, которые справедливы и для искусственных космических аппаратов: траектория движения объектов в гравитационном поле небесных тел имеет форму эллипса.
Эллипс — замкнутая кривая на плоскости, которая характеризуется большой и малой полуосями. Помимо этого, эллипс имеет две особые точки, называемыми фокусами: \(F_1\) и \(F_2\). Если в точках эллипса закрепить концы нити, то при ее натяжении карандашом можно будет нарисовать правильный формы эллипс.
Именно это свойство определяет эллипс как фигуру: сумма расстояний от любой точки на эллипсе до его фокусов постоянна и равна большой оси эллипса.
Другим важным параметром эллипса является эксцентриситет – числовая характеристика конического сечения, показывающая степень его отклонения от окружности. Вычисляется эксцентриситет по следующей формуле: \[e = \sqrt{1-\frac{b^2}{a^2}},\] где \(a\) и \(b\) — большая и малая полуоси эллипса.
Эксцентриситет определяет вытянутость эллипса: чем больше его значение, тем более вытянутым будет сам эллипс.
При эксцентриситете, равном нулю, эллипс превращается в окружность, при эксцентриситете, равном единице, — в параболу, при эксцентриситете, большем, чем единица, — в гиперболу.
Космический аппарат вращается по круговой орбите вокруг неизвестной планеты, названной Планета ОБУ, на высоте 400 км от ее поверхности. С помощью научного оборудования на борту удалось определить, что радиус планеты составляет 14500 км. Помогите космокоту Касу рассчитать массу планеты ОБУ, если известно, что аппарат делает полный виток вокруг планеты за 4 ч.
Для начала рассчитаем круговую скорость аппарата, для этого посчитаем длину окружности, по которой он вращается по формуле \(2\pi(r+h)\), где \(r\) — радиус планеты, \(h\) — высота полета спутника над поверхность планеты, и поделим эту величину на время обращения вокруг планеты, получается 6501,35146 м/с.
Далее воспользуемся формулой для первой космической скорости при движении по окружности с постоянной скоростью, где \(V_1 = 6501{,}35146\) м/с — первая космическая скорость для данной планеты на заданной высоте, \(G = 6{,}67\cdot 10^{-11}~ \text{м}^3\cdot \text{кг}^{-1}\cdot \text{с}^{-2}\) — гравитационная постоянная, \(R_0 = 14500\) км, \(h = 400\) км — высота спутника над поверхностью планеты, \(M\) — масса планеты (искомое). Выражаем \(M\), считаем, получаем ответ.
\(9{,}44208\cdot 10^{24}\) кг.
Космический аппарат, находящийся над планетой ОБУ, которая, напомним, имеет радиус 14500 км, совершил маневр перехода с круговой на эллиптическую орбиту, однако двигатель выдал не тот импульс, на который рассчитывала команда на Земле, и теперь параметры орбиты неизвестны.
Помогите Касу узнать большую полуось и эксцентриситет орбиты, если известно, что аппарат в перигее проходит на высоте 500 км над поверхностью планеты, а в апогее — на высоте 20500 км над поверхностью планеты.
Большая полуось орбиты (\(a\)) есть сумма высоты перигея, радиуса орбиты и расстояния из центра эллипса до одного из его фокусов. Последнее рассчитывается по формуле \(e\cdot a\). Высота апогея — это два фокусных расстояния в сумме с радиусом планеты и высотой перигея. Но так как эта высота над поверхностью планеты, то радиус планеты надо вычесть. Тогда можно составить систему:
\[\left\{ \begin{aligned} e\cdot a + 14500 + 500 &= a,\\ 2e\cdot a + 500 &= 20500. \end{aligned} \right.\]
Решив эту систему, получаем, что \(a = 20500, e = 0{,}4\).
20500 км; 0,4.
Как известно, орбита аппарата имеет форму эллипса. Однако важна не только форма орбиты, но и ее расположение в пространстве, и чтобы описать положение орбиты в пространстве, нужно воспользоваться определенными параметрами.
Одним из способов задания положения орбиты в пространстве являются кеплеровы элементы. Некоторые из них уже упоминались как характеристики формы эллипса: эксцентриситет и большая полуось. Однако, помимо этих двух элементов, используются еще четыре. Ознакомиться с ними можно по видео: https://youtu.be/cAnaiBx-kss.
Космокот Кас вместе с учеными планирует запуск спутника и рассчитывает Кеплеровы элементы орбиты для будущего спутника. Помогите Касу рассчитать наклонение орбиты, если известно, что наклонение для орбиты надо выбрать таким образом, чтобы оно было минимальным и позволяло космическому аппарату пройти ровно над станцией, расположенной в городе Новосибирске \((55{,}0415, 82{,}9346)\). Радиус Земли примите 6371 км.
Наклонение округлить до сотых долей.
Для того чтобы спутник мог пройти ровно над городом, наклонение орбиты должно быть не меньше широты, на которой расположен город. Так как по условию требуется взять минимальное значение, то для ответа стоит выбрать саму широту города Новосибирска.
55,04.
По сухой теории не всегда можно в достаточной степени понять, что такое элементы орбиты, и на что каждый из них будет влиять. Поэтому чтобы лучше изучить данную тему, предлагаем поработать в программном обеспечении General Mission Analysis Tool (GMAT). Это ПО предназначено как раз для построения орбит и моделирования космических миссий.
Скачать данное ПО можно по ссылке: https://sourceforge.net/projects/gmat/.
Для ряда задач используются достаточно определенные орбиты. В следующем видео можно ознакомиться c работой в ПО GMAT, а также с некоторыми типовыми орбитами. Рекомендуем построить каждую орбиту в ПО GMAT, чтобы лучше понять их специфику.
1 марта 2025 года в 00:00 по UTC на орбиту Земли выводится спутник. Элементы его орбиты:
- большая полуось: 8000 км;
- эксцентриситет: 0;
- наклонение: 45°;
- долгота восходящего узла: 0°;
- аргумент перицентра: 0°;
- истинная аномалия на момент начала моделирования: 0°.
Космокот Кас находится в ЦУП, расположенном в следующем месте:
- широта: 42,8816;
- долгота: 47,6392;
- высота над уровнем моря: \(-16\) м.
Помогите Касу узнать, во сколько начнется первый сеанс связи со спутником 3 марта, и сколько в сумме будет держаться связь со спутником за этот день, если антенный комплекс ЦУП способен стабильно принимать сигнал только тогда, когда спутник находится на высоте, равной или превышающей \(60°\) над горизонтом.
Рекомендуется выполнять задание с помощью ПО GMAT.
В качестве ответа приведите количество секунд, прошедшее от начала суток 3 марта до начала первого сеанса связи (округлите до целого числа) и продолжительность сеансов связи за сутки с 00:00 UTC 3 марта по 00:00 UTC 4 марта в секундах (округлите до десятых долей)..
Задаем все известные данные по орбите и наземной станции в GMAT, создаем контакт локатор, запускаем скрипт и смотрим в output’е первый сеанс 3 марта, а также по выводу считаем общее количество секунд всех контактов 3 марта.


Начало первого сеанса: 48788 с, продолжительность: 757,2 с.
Спутник может быть размещен на произвольной орбите 20 марта 2025 года в 00:00 по UTC. Задайте параметры орбиты через Кеплеровы элементы так, чтобы 21 и 22 марта в 09:00 по UTC каждого дня аппарат прошел над Находкой.
Координатами Находки считать GPS — координаты: 41,8138 по широте, 132,873 по долготе.
Начальные данные:
- радиус Земли, м: 6371008,8;
- гравитационный параметр, \(\mu=G\cdot M\), м\(^3\)/с\(^2\): \(3{,}986004418 \cdot 10^{14}\);
- средняя скорость вращения Земли, об/сут: 1,00273781191135448;
- начальный угол вращения Земли: 108,9837°.
Правила начисления баллов:
- аппарат в любой из дней проходит с отклонением до 100 км от цели и до 60 мин от нужного времени — 0,5 балла;
- аппарат в любой из дней проходит с отклонением до 100 км от цели и до 15 мин от нужного времени — 1 балл;
- аппарат в любой из дней проходит с отклонением до 50 км от цели и до 60 мин от нужного времени — 0,5 балла;
- аппарат в любой из дней проходит с отклонением до 50 км от цели и до 15 мин от нужного времени — 1 балл.
Решение (задание в симуляторе «Орбита») по образу и подобию https://drive.google.com/file/d/1bRrARogVYMs1xu0mcfQoid6SaviyJKDK/view.
Космокот Кас решил запустить на орбиту спутник для съемки поверхности Земли. Оптика на спутнике позволяет проводить съемку, если апоцентр не превышает 750 км, а перицентр находится не ниже, чем 350 км. Для эффективного использования ресурса спутника Кас хочет подобрать его орбиту таким образом, чтобы он находился на солнце максимальное возможное время. Однако, из-за долгого нахождения спутника на солнце, аппаратура рискует перегреться, поэтому аппарату необходимо хотя бы 15 мин за виток вокруг Земли находиться в тени.
Помогите Касу подобрать элементы орбиты, отвечающие приведенным требованиям. В качестве ответа задайте параметры орбиты через кеплеровы элементы.
Время начала моделирования: 1 марта 2025 года 00:00 по UTC. Длительность моделирования: 48 ч.
Начальные данные:
- радиус Земли, м: 6371008,8;
- гравитационный параметр, \(\mu=G\cdot M\), м\(^3\)/с\(^2\): \(3{,}986004418 \cdot 10^{14}\);
Правила начисления баллов:
- если время нахождения в тени за виток составляет менее 15 мин (900 с), ставится 0 баллов;
- иначе балл рассчитывается по формуле: \(8\cdot 2^{-1/500 \cdot (time - 15 \cdot 60)}\), где \(time\) — время нахождения спутника на текущем витке в тени.
Для удобства работы с орбитой выберем полярную круговую орбиту, наклонение 90, эксцентриситет. Так как орбита круговая, можно задать аргумент перицентра, также равный нулю, чтобы перицентр располагался на экваторе. Аномалия также неважна в этой задаче, возьмем ее 0.
Высоту орбиты можно принять любой, удовлетворяющей условиям задачи, но стоит взять выше среднего значения, для удобства дальнейшего расчета большая полуось 7000 км.
Так как время симуляции невелико, главным параметром, определяющим положение спутника относительно света и тени от Земли, будет долгота восходящего узла. Воспользовавшись инструментами GMAT, а конкретнее Eclipse locator, можно отслеживать время, в течение которого спутник находится в тени за 1 виток.
Так как это единственный оставшийся параметр системы, используя данные Eclipse locator, можно за несколько итераций подобрать его значение таким образом, чтобы минимальное время в тени было чуть больше либо равным 900 с (15 мин из условия задачи) для того, чтобы набрать максимальный балл за задачу. Достигается это условие при значении ДВУ \(= 280{,}75\).




































































































