03 Урок. Знакомство маховиком
Модуль УДМ (управляющий двигатель-маховик)
При движении по орбите Земли или других планет многим аппаратам требуется точная ориентация определенными гранями в нужном направлении - относительно Земли, Солнца, звезд или как-то иначе. Например, чтобы навестись камерой ДЗЗ на Землю или солнечными батареями на Солнце. На малых же аппаратах для обеспечения заданной ориентации космического аппарата в пространстве относительно центра масс чаще всего используются двигатели-маховики.
Двигатель-маховик - электромеханическое устройство, представляющий собой электромотор с насаженным на его ось вращения колесом. Двигатель вращается, то ускоряясь, то замедляясь, и по закону сохранения кинетического момента, вращается быстрее или медленнее сам космический аппарат. Так как в условиях космоса внешние силы отсутствуют и количество движения не может изменяться, вращение маховика по часовой стрелке приводит к вращению всего космического аппарата против часовой стрелки. Таким образом управляя двигателем и вращением двигателя-маховика мы можем управлять движением вокруг центра масс (по сути, вращением) всего аппарата.
В нашей модели свободное вращение конструктора Orbix, и, следовательно, маховика, возможно только вокруг одной оси - вертикальной. Поэтому на одноосный Orbix устанавливается только один маховик ориентации.
Для работы с двигателем маховика используются следующие функции (на языке C):
Задать скорость вращения маховика. В качестве аргументов функция принимает порядковый номер маховика и скорость в об/мин.
motor_set_speed ( uint16_t num, float RPM)Аргументы:
- [in] num - номер устройства согласно UniCAN, для маховика с адресом 0xA значение num=0, для 0xB num=1, для 0xC num=2;
- [in] RPM - угловая скорость вращения, об/мин.
Следующая функция позволяет запросить текущую скорость маховика:
motor_request_speed ( uint16_t num, float *pRPM)Значение записывается в переменную pRPM. Единицы измерения: об/мин.
Аргументы:
- [in] num - идентификатор устройства;
- [out] pRPM - угловая скорость вращения, об/мин.
Пример кода проверки двигателя-маховика на языке С:
#include <stdio.h>
#include <stdint.h>
#include "libschsat.h"
void control(void){
const int num = 0; /* motor number #0 */
float rpm = -2000; /* -2000 ... +2000 */
printf("Enable motor #%d\n", num);
printf("Manage speed motor #%d\n", num);
while (rpm <= 2000) {
printf("<<< Set speed to %f\n", rpm);
motor_set_speed(num, rpm);
Sleep(1);
rpm += 200;
}
printf("<<< Set speed to 0\n");
motor_set_speed(num, 0);
Sleep(1);
printf("Disable motor #%d\n", num);
}
Эта программа уже загружена в БВМ. Откройте WEB-интерфейс, найдите ее и запустите (рисунок 1):

Рисунок 1. Программа проверки двигателя-маховика на Web-интерфейсе
Запустите программу и протестируйте работу маховика. При запуске программы он разгонится до -2000 об./мин, затем раз в секунду будет уменьшать скорость вращения на 200 об./мин., пока не дойдет до ноля, а затем станет вращаться в противоположную сторону, увеличивая скорость вращения на 200 об./мин. раз в секунду.

Рисунок 2. Пример полученных данных
На случай необходимости экстренной остановки маховика полезно иметь следующую программу загруженную в Orbix:
#include <stdio.h>
#include <stdint.h>
void control(void){
motor_set_speed(0, 0);
}
Просмотр графика скорости вращения маховика
Запустите Houston App и подключитесь к нему по Wi-Fi как рассказано на этой странице.
В этом режиме на вкладке Wheel можно посмотреть график изменения скорости вращения маховика (рисунок 3):

Рисунок 3. График изменения скорости вращения маховика
Пользовательский API
Справочник по пользовательскому API со всеми функциями работы с Orbix находится на страницах: Пользовательский API на языке С++ и Пользовательский API на языке Python.