Для чего нужен ОрбиКрафт
Подсистемы конструктора
Инструкции по работе с ОрбиКрафт
Уроки
Лабораторная оснастка
Знакомство с Arduino
Полезная нагрузка на базе Arduino
Обратная связь
Новости
Для чего нужен ОрбиКрафт
Подсистемы конструктора
Инструкции по работе с ОрбиКрафт
Уроки
Лабораторная оснастка
Знакомство с Arduino
Полезная нагрузка на базе Arduino
Обратная связь
Новости
Это старая версия документа!
Магнитометр
Виртуальное потребление - 40мА
Чаще всего при проектировании космических аппаратов, работающих на низких орбитах, в качестве одного из устройств определения ориентации (как правило, дополняющего солнечные датчики), используют магнитометр.
Магнитометр измеряет магнитное поле вокруг себя, выдавая три компоненты вектора индукции магнитного поля, в единицах, измеряемых в Тесла. В идеальных условиях магнитометр на борту спутника измеряет именно геомагнитное поле Земли - то самое, которое заставляет поворачивать стрелку компаса у наземного пользователя. Однако в реальной жизни конструкция любого спутника содержит в своем составе магнитные материалы (например, постоянные магниты электроприводов), поэтому магнитометр измеряет некое суммарное поле Земли и поле самого спутника - т.н. суперпозицию полей.
Сравнение показаний магнитометра с расчетными значениями модели геомагнитного поля позволяют оценить ориентацию (а в некоторых случаях и положение) космического аппарата в пространстве. При проведении экспериментов с конструктором ОрбиКрафт предполагается использование магнитометра в качестве прибора как для определения ориентации, так и для определения положения спутника на «орбите», т.е. для навигации. При этом «геомагнитное» поле, измеряемое магнитометром на борту, создается специальной лабораторной оснасткой Терра и управляется от компьютера по заранее заданному и известному закону управления.
Для получения текущих показаний магнитометра используется функция (на языке C):
int32_t magnetometer_request_raw(uint16_t num,int16_t *pRAW_dataX,int16_t *pRAW_dataY,int16_t *pRAW_dataZ);
Внутри констуктора ОрбиКрафт, как и на реальных аппаратах, показания магнитометра зависят не только от внешнего «геомагнитного» поля. Другие приборы (в основном двигатели маховика и система энергопитания) могут вносить помехи в измерения, поэтому не рекомендуется установка магнитометра в непосредственной близости от этих устройств.
Код проверки магнитометра на языке C
#include "libschsat.h" /* ** Lab 2: get a raw data from a magnetometer */ void control(void) { int i; const int num = 1; /* magnetometer #1 */ printf("Enable magnetometer #%d\n", num); magnetometer_turn_on(num); printf("Get RAW data from magnetometer #%d\n", num); for (i = 0; i < 10; i++) { int16_t x, y, z; if (LSS_OK == magnetometer_request_raw(num, &x, &y, &z)) { printf("%d: x=%d y=%d z=%d\n", i, x, y, z); } else { puts("Fail!"); } Sleep(1); } printf("Disable magnetometer #%d\n", num); magnetometer_turn_off(num); }
Код проверки магнитометра на языке Python
def control(): # Основная функция программы, в которой нужно вызывать остальные функции mgn_result = [0,0,0,0] # Инициализируем mgn_result num = 1 print "Enable magnetometer №", num magnetometer_turn_on(num) sleep(1) print "Get RAW data from magnetometer" for i in range(10): mgn_result = magnetometer_request_raw(num) if not mgn_result[0]: # если датчик вернул сообщение об ошибке, print "state:", mgn_result[0], "x_raw =", mgn_result[1], "y_raw =", mgn_result[2], "z_raw =", mgn_result[3] # Обратите внимание на символ переноса строки! elif mgn_result[0] == 1: print "Fail because of access error, check the connection" elif mgn_result[0] == 2: print "Fail because of interface error, check your code" sleep(1) print "Disable magnetometer №", num magnetometer_turn_off(num)