Инструменты пользователя

Перевод этой страницы:

Инструменты сайта


Боковая панель

Для чего нужен ОрбиКрафт

Подсистемы конструктора

Инструкции по работе с ОрбиКрафт

Уроки

Лабораторная оснастка

Знакомство с Arduino

Полезная нагрузка на базе Arduino

Обратная связь

Новости

mag_subsys

Магнитометр
Виртуальное потребление - 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)
mag_subsys.txt · Последние изменения: 2020/03/25 16:28 (внешнее изменение)

Инструменты страницы