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

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


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

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

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

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

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

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

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

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

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

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

РЭ Houston Control Center

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

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

Action disabled: source
les02

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

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

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

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

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

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

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

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

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

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

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

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

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

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-интерфейсе и пример полученных с помощью нее данных

Анализ кода

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)

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

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

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

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

#include <stdio.h>
#include <stdint.h>
#include "libschsat.h"
 
void control(void){

    float gyro_x = 0, gyro_y = 0, gyro_z = 0;
    uint16_t tmp=0;
    
    Sleep(1);    
    gyro_set_offset(tmp, gyro_x, gyro_y, gyro_z);
    Sleep(1);
    gyro_request_raw(tmp, &gyro_x, &gyro_y, &gyro_z);
    printf("Before fix:\n %f %f %f", gyro_x, gyro_y, gyro_z);
    Sleep(1);
    gyro_set_offset(tmp, gyro_x, gyro_y, gyro_z);
    Sleep(1);
    gyro_request_raw(tmp, &gyro_x, &gyro_y, &gyro_z);
    printf("\nAfter fix:\n %f %f %f \n", gyro_x, gyro_y, gyro_z);
    uint8_t data[0];
    send_unican_message(25, 2656, data, 0);
}
В этой программе мы первоначально обнуляем значения угловых скоростей, после чего перезаписываем в те же переменные полученные осредненные значения после первого вычисления и, основываясь на них, проводим вычисление еще раз.

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

Рисунок 6. Сравнения показаний ДУС

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

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

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

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

Магнитометр

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

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

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

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

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

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

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

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

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

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-интерфейсе (рисунок 10):

0

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

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

Рисунок 11. Пример полученных данных

Анализ кода

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).

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

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

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

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

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

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

les02.txt · Последние изменения: 2023/03/06 12:31 — maria.milkina

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