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

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


sun_subsys

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

sun_subsys [2018/03/23 00:46]
eliseev
sun_subsys [2020/03/25 16:28]
Строка 1: Строка 1:
-**Солнечный датчик ** \\  
-Виртуальное [[power_subsys|потребление]] - 45мА 
  
-{{ сд_4.png?​direct&​200|}} 
- 
-Солнечные датчики на спутниках выполняют роль датчиков ориентации,​ определяя пространственное положение спутника относительно Солнца. Очень часто они используются для грубой ориентации панелей солнечных батарей спутника на Солнце. Следует заметить,​ что полностью определить ориентацию спутника только по показаниям солнечных датчиков невозможно - всегда останется неопределенность с углом поворота аппарата вокруг направления "​спутник-Солнце"​. 
- 
-Для получения сырых данных измерений можно воспользоваться функцией (на языке С): \\  
- 
-<code c> 
-int sunsensor_request_raw(uint16_t num, uint16_t *pRAW_data1,​ uint16_t *pRAW_data2);​ 
-</​code>​ 
- 
-Датчик возвращает показания с двух сенсоров осматривающих левую и правую полусферы соответственно. При засветке одного из сенсоров по уровню освещенности можно оценить угол наведения на Солнце. При засветке двух датчиков более правильным подходом будет использование отношения уровней освещенности на обоих сенсорах. ​ 
- 
-Вычисление конкретных зависимостей угла от уровней освещенности называется калибровкой датчика под различные условия. Тем не менее даже без калибровки датчики подобной конструкции могут быть использованы для наведения на солнце путем анализа взаимной освещенности правой и левой полусфер датчика. 
- 
-<note tip> 
-Следует обратить внимание,​ что точность установки самих сенсоров внутри корпусов солнечных датчиков не идеальна - так оно и бывает в реальной жизни, делая каждый датчик по-своему уникальным. Это связано с неточностью изготовления корпусов относительно требуемых размеров,​ погрешностями установки плат электроники внутри корпусов,​ неидеальностью самих сенсоров (все они немного отличаются друг от друга).\\ ​ 
-\\  
-Большинство подобных погрешностей остается неизменными в течение срока эксплуатации,​ хотя бывают и погрешности,​ сильно зависящие от внешних факторов (например,​ температуры). В нашем случае полагаем,​ что погрешности измерений каждого из датчиков неизменны во времени,​ несильно зависят от температуры,​ и это дает возможность выполнить их однократную калибровку перед началом использования. 
-</​note>​ 
- 
-**Пример кода проверки солнечных датчиков на языке С** 
- 
-<code c> 
-  #include "​libschsat.h"​ 
-  ​ 
-  /* 
-  ** Lab 4: get a raw data from a sun sensor 
-  */ 
-  void control(void) 
-  { 
-  int i; 
-  const int num = 1; /* sun sensor #1 */ 
-    printf("​Enable sensor #​%d\n",​ num); 
-  sun_sensor_turn_on(num);​ 
-    printf("​Get RAW data from sun sensor #​%d\n",​ num); 
-  for (i = 0; i < 10; i++) { 
-  uint16_t value1; 
-  uint16_t value2; 
-  if (LSS_OK == sun_sensor_request_raw(num,​ &​value1,​ &​value2)) { 
-  printf("​%d:​ raw=%d ; %d\n", i, value1, value2); 
-  } else { 
-  puts("​Fail!"​);​ 
-  } 
-  Sleep(1); 
-  } 
-  printf("​Disable sensor #​%d\n",​ num); 
-  sun_sensor_turn_off(num);​ 
-  } 
-</​code>​ 
- 
- 
-**Пример кода проверки солнечного датчика №1 на языке Python** 
- 
-<code python> 
-  # Get raw data from sun sensor №1 
-  def control(): # Основная функция программы,​ в которой нужно вызывать остальные функции 
-   sun_result = [0,0,0] # Инициализируем sun_result 
-   num = 1 
-   print "​Enable sun sensor №", num 
-   sun_sensor_turn_on(num) 
-   sleep(1) 
-   print "Get RAW data from sun sensor"  ​ 
-   for i in range(10): 
-   sun_result = sun_sensor_request_raw(num) 
-   if not sun_result[0]:​ # если датчик вернул сообщение об ошибке,​ 
-   print "​state:",​ sun_result[0],​ "raw =", sun_result[1],​ sun_result[2] 
-   elif sun_result[0] == 1: 
-   print "Fail because of access error, check the connection" ​ 
-   elif sun_result[0] == 2: 
-   print "Fail because of interface error, check your code" 
-   sleep(1) 
-  
-   print "​Disable sun sensor №", num 
-   sun_sensor_turn_off(num) 
-</​code>​ 
- 
- 
-**Пример кода проверки четырех солнечных датчиков на языке Python** 
- 
-<code python> 
-def control(): # Основная функция программы,​ в которой нужно вызывать остальные функции 
- sun_result = [0,0,0] # Инициализируем sun_result 
- sun_sensor_num = 0 # Инициализируем переменную для номера солнечного датчика 
-  
- #Цикл для включения,​ опроса и выключения четырех солнечных датчиков по очереди:​ 
-  
- for sun_sensor_num in range (1,5): 
-  
- print "​Enable sun sensor №", sun_sensor_num 
- sun_sensor_turn_on(sun_sensor_num) # Включаем солнечный датчик 
- sun_sensor_num +=1 
- sleep(1) # Ждем включения 1 секунду  
-  
-  
- for i in range(10): #​Считываем показания 10 раз 
-  
- for sun_sensor_num in range (1,5):  
- print "Get RAW data from sun sensor №", sun_sensor_num ​ 
- sun_result = sun_sensor_request_raw(sun_sensor_num) ​ 
- if not sun_result[0]:​ # если датчик не вернул сообщение об ошибке,​ 
- print "​state:",​ sun_result[0],​ "raw =", sun_result[1],​ sun_result[2] 
- elif sun_result[0] == 1: # если датчик вернул сообщение об ошибке 1 
- print "Fail because of access error, check the connection" ​ 
- elif sun_result[0] == 2: # если датчик вернул сообщение об ошибке 2 
- print "Fail because of interface error, check your code" 
- sleep(1) ​ # Показания считываются раз в секунду 
- sun_sensor_num +=1 
- i += 1 
-  
- for sun_sensor_num in range (1,5):  
- print "​Disable sun sensor №", sun_sensor_num 
- sun_sensor_turn_off(sun_sensor_num) ​ # Выключаем солнечный датчик 
- sun_sensor_num +=1 
-</​code>​  
- 
-Описание [[old_sun_subsys|__старой__]] версии датчика. 
sun_subsys.txt · Последние изменения: 2020/03/25 16:28 (внешнее изменение)

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