les02 [ОрбиКрафт 3D]

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


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

Назначение ОрбиКрафт 3D

Сборка ОрбиКрафт 3D

Интерфейсы конструктора ОрбиКрафт 3D

Работа с ОрбиКрафт 3D по УКВ

Работа с ОрбиКрафт 3D по Wi-Fi

Работа с ОрбиКрафт 3D через WEB-интерфейс

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

ОрбиКрафт 3D (трехосный) на стенде полунатурного моделирования

Среда разработки

РЭ Houston Control Center

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

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

les02

02 Урок. Знакомство с датчиками

Датчик угловой скорости и магнитометр установлены в модуле БВМ конструктора ОрбиКрафт 3D (рисунок 1):

Рисунок 1. Модуль БВМ с ДУС и магнитометром

Датчик угловой скорости

Назначение датчика угловой скорости

Датчик угловых скоростей предназначен для измерения угловой скорости вращающегося объекта. Измерять угловую скорость необходимо для того, чтобы можно было остановить вращение спутника – стабилизировать его. Также с помощью датчика угловой скорости можно заставить спутник вращаться с определенной скоростью.

Принцип работы датчика угловой скорости

Основным измерительным элементом датчика угловой скорости является специальный микроэлектромеханический (МЭМС) гироскоп. Это не обычный гироскоп, в котором с большой скоростью вращается диск, а миниатюрный вибрационный гироскоп. Внутри МЭМС гироскопа есть кольцо, которое, колеблется в одной плоскости (рисунок 2). Если такой гироскоп поставить на вращающуюся платформу, плоскость которой совпадает с плоскостью колебаний кольца, то на нее начнет действовать сила Кориолиса пропорциональная скорости вращения платформы. Сила Кориолиса измеряется с использованием пьезоэлементов, которые выдают напряжение, пропорциональное приложенной силе:

Рисунок 2. Конструкция ДУС

Определив силу Кориолиса и зная скорость колебания, можно вычислить угловую скорость и ее изменение (угловое ускорение).

Рисунок 3. Микросхема чувствительного элемента

Проверка работоспособности датчика угловой скорости

Подключите БВМ к СЭП. Откройте Notepad++ и напишите следующую программу.

Gyro_test_setoffset.c
#include <stdio.h>
#include <stdint.h>
#include "libschsat.h"
 
void control(void){ 
 
	float gyro_x = 0, gyro_y = 0, gyro_z = 0;
	uint16_t gyro_num = 0;
	gyro_set_offset(0, 0, 0, 0);
 
	for (int i = 0; i < 20; i++){
		mSleep(1000);
		gyro_request_raw(gyro_num, &gyro_x, &gyro_y, &gyro_z);
		printf("Gyro: %f %f %f\n", gyro_x, gyro_y, gyro_z);
	}
	puts("Sent");
}

Эта программа уже загружена в БВМ. Откройте WEB-интерфейс, найдите ее и откройте (рисунок 4):

Рисунок 4. Программа для ДУС в Web-интерфейсе

Программа в WEB-интерфейсе (рисунок 5):

Рисунок 5. Код программы в Web-интерфейсе

Запустите программу и протестируйте работу ДУС.

Анализ кода

Cоздаем переменные gyro_x, gyro_y, gyro_z для получения данных от датчика и переменную num, хранящую номер ДУС.

Функция mSleep(1000) приостанавливает выполнение программы на 1 секунду.

Затем в цикле for (int i = 0; i < 20; i++) мы 20 раз считываем и выводим значение ДУС.

Показания ДУС считываем с помощью функции gyro_request_raw(gyro_num, &gyro_x, &gyro_y, &gyro_z).

Смещение ноля

Часто датчик угловой скорости имеет смещение ноля, и в покое показывает ненулевые значения.

Для того, чтобы увеличить точность показаний датчика используется специальная функция для задания смещения ноля

gyro_set_offset (uint16_t num, float offset_X, float offset_Y, float offset_Z)

Давайте научимся ее использовать. Установите Орбикрафт неподвижно и запустите предыдущую программу теста ДУС.

В неподвижном состоянии показания датчика будут примерно одинаковыми (рисунок 6):

Рисунок 6. Показания датчика в неподвижном состоянии

Загрузите в EXCEL список из 20 результатов измерений и вычислите среднее арифметическое каждого их трех значений.

Например в моем случае получилось 4.65, -2.1, 1.1

Следовательно для получения точных значений с датчика угловой скорости в начале каждой программы, использующей показания ДУС, необходимо добавить следующую строку gyro_set_offset(0, 4.65, -2.1, 1.1);, где ноль - это номер датчика угловой скорости.

Для проверки работы функции задания смещения ноля запустите следующую программу.

Gyro_test.c
#include <stdio.h>
#include <stdint.h>
#include "libschsat.h"
 
void control(void){ 
 
	float gyro_x = 0, gyro_y = 0, gyro_z = 0;
	uint16_t gyro_num = 0;
	gyro_set_offset(0, 4.65, -2.1, 1.1); 
 
	for (int i = 0; i < 20; i++){
		mSleep(1000);
		gyro_request_raw(gyro_num, &gyro_x, &gyro_y, &gyro_z);
		printf("Gyro: %f %f %f\n", gyro_x, gyro_y, gyro_z);
	}
	puts("sent");
}

Теперь показания ДУС в покое почти не отличаются от ноля (рисунок 7):

Рисунок 7. Показания ДУС в покое

Просмотр графика значений ДУС

Запустите Houston App и подключитесь к нему по WiFi как рассказано на этой странице.

В этом режиме на вкладке AVS можно посмотреть график изменения значений, возвращаемых датчиком угловой скорости (рисунок 8):

Рисунок 8. График изменения значений ДУС

Магнитометр

Назначение магнитометра

Информацию об ориентации спутник получает по датчику угловой скорости и магнитометру. Информация об угле нужна для того, чтобы разворачивать спутник в необходимую сторону, а информация об угловой скорости необходима для того, чтобы стабилизировать спутник, то есть погасить угловое вращение. Управляющий момент создается с помощью двигателя маховика.

Принцип работы магнитометра

Работа магнитометра основана на применении магниторезистивного эффекта, когда электрическое сопротивление проводника изменяется в соответствии с направлением линий магнитного поля. В основе датчика лежит слой пермаллоя (специального сплава никеля с железом), который обладает сильным магниторезистивным эффектом. Электрическое сопротивление пермаллоя меняется обычно в пределе ±5 % в зависимости от силы и направления действующего магнитного поля (рисунок 9):

Рисунок 9. Конструкция магнитометра

Таким образом, измеряя силу тока, протекающего через слой пермаллоя при подаче постоянного напряжения +5В можно определить направление линий магнитного поля. Для того чтобы измерить направление магнитных линий по всем трем осям используют три маленьких датчика, ориентированных по осям X, Y и Z, установленные в одной микросхеме (рисунок 10):

Рисунок 10. Направление магнитных линий по трем осям

Проверка работоспособности магнитометра

Подключите БВМ к СЭП. Откройте Notepad++ и напишите следующую программу.

Mag_test.c
#include <stdio.h>
#include <stdint.h>
#include "libschsat.h"
 
void control(void){ 
 
float mag_x = 0, mag_y = 0, mag_z = 0;
uint16_t mag_num = 0;
 
for (int i = 0; i < 20; i++){
	mSleep(1000);
	magnetometer_request_raw(mag_num, &mag_x, &mag_y, &mag_z);
	printf("Mag: %f %f %f\t\n", mag_x, mag_y, mag_z);
}
puts("Sent");
}    

Эта программа уже загружена в БВМ. Откройте WEB-интерфейс, найдите ее и откройте (рисунок 11):

Рисунок 11. Поиск программы в Web-интерфейсе

Программа в WEB-интерфейсе (рисунок 12):

Рисунок 12. Программа в Web-интерфейсе

Запустите программу и протестируйте работу магнитометра.

Просмотр графика значений магнитометра

Запустите Houston App и подключитесь к нему по WiFi как рассказано на этой странице.

В этом режиме на вкладке Magnetometer можно посмотреть график изменения значений, возвращаемых магнитометром (рисунок 13):

Рисунок 13.График изменения значений магнитометра

Анализ кода

Cоздаем переменные mag_x, mag_y, mag_z для получения данных от датчика и переменную num, хранящую номер магнитометра.

Функция mSleep(1000) приостанавливает выполнение программы на 1 секунду.

Затем в цикле for (int i = 0; i < 20; i++) мы 20 раз считываем и выводим значение магнитометра.

Показания магнитометра считываем с помощью функции magnetometer_request_raw(mag_num, &mag_x, &mag_y, &mag_z).

Пользовательский API

Справочник по пользовательскому API со всеми функциями работы с ОрбиКрафт 3D находится на странице Пользовательский API

les02.txt · Последние изменения: 2022/04/20 14:59 — ekaterina.manucharova

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