Главная страница   Контактная информация   Новости науки и техники   Поиск на сайте   Форум

Магнитометр с магниторезистивным датчиком QMC5883 (HMC5883)
для мониторинга слабых постоянных полей и передачи данных по радиоканалу 2.4 ГГц

 

Назначение

Магнитометр предназначен для мониторинга магнитной обстановки посредством измерения величин трех компонент и расчета модуля магнитной индукции постоянного магнитного поля (сопоставимого с магнитным полем Земли) с помощью магниторезистивного датчика типа QMC5883 или его близкого аналога - HMC5883 [1] и передачи данных измерений по радиоканалу на удаленный до 100 м подключенный к компьютеру приемник [3]. В качестве рабочего выбран диапазон частот ISM (Industrial, Scientific, Medical) 2.4 ГГц (2400 ... 2483.5 МГц), где можно использовать нелицензируемые устройства с дальностью действия примерно до 100 метров (работающие внутри зданий и производственных территорий, а также с мощностью излучения передающих устройств до 100 мВт включительно). Прибор имеет автономное питание - аккумуляторную батарею, подзарядка которой может, в частности, осуществляться с помощью солнечной или ветроэлектростанции.

Технические данные:

Устройство магнитометра

Электронная принципиальная схема магнитометра с магниторезистивным датчиком QMC5883 приведена на рис. 1 и 2. Магнитометр собран из готовых модулей: микроконтроллер, датчик магнитной индукции, приемо-передатчик (трансивер), аккумуляторная батарея (может иметь встроенное устройство защиты). В качестве микроконтроллера используется  Arduino Pro mini (микроконтроллер на микросхеме ATmega328) [2] с предварительно загруженным отладчиком, позволяющим использовать программы, написанные на языке C в среде программирования Arduino. Приемо-передатчик диапазона 2.4 ГГц - узел на микросхеме NRF24L01 без усилителя (дальность действия примерно 10 м) или с усилителем (дальность действия до 100 м). Приемо-передатчик связан с микроконтроллером по интерфейсу SPI.

Рис. 1. Электрическая принципиальная схема магнитометра с радиоканалом 2.4 ГГц на дальность около 10 м.

Рис. 2. Электрическая принципиальная схема магнитометра с радиоканалом 2.4 ГГц на дальность до 100 м.

В качестве чувствительного элемента датчика прибора использована микросхема QMC5883 (датчик с анизотропным магниторезистивным эффектом, AMR-датчик). Ее неполный аналог - HMC5883 [1] (отсутствует температурная компенсация данных измерений, полная совместимость на аппаратном уровне, неполная совместимость на программном уровне). В состав микросхемы входят три магниторезистивных датчика, оси максимальной чувствительности которых взаимноортогональны. Связь датчика с микроконтроллером выполнена по интерфейсу I2C. Для увеличения точности при проведении измерений может применяться процедура их усреднения по некоторому заданному количеству отсчетов с датчика. Питание узлов прибора осуществляется от литий-ионной аккумуляторной батареи напряжением 3.7 В. При необходимости записи программы к микроконтроллеру подключается внешний модуль преобразователя интерфейса USB - UART [4]. В качестве приемника данных используется подключенный к компьютеру преобразователь интерфейса USB - COM-порт с радиоканалом 2.4 ГГц [3].

Все узлы магнитометра смонтированы на кросс-плате. Эскиз и внешний вид платы показаны на рис. 3, 5. Кросс-плата с модулями и аккумулятор смонтированы в немагнитном токонепроводящем корпусе со съемной крышкой (рис. 4, 6). Крышка сделана прозрачной для удобства ориентации прибора и отслеживания индикации.

Рис. 3. Плата магнитометра с радиоканалом 2.4 ГГц на дальность около 10 м (эскиз и внешний вид). Размер платы 75 х 45 мм2.

Рис. 4. Внешний вид магнитометра с радиоканалом 2.4 ГГц на дальность около 10 м. Габаритные размеры примерно 110 х 70 х 55 мм3.

 

Рис. 5. Плата магнитометра с радиоканалом 2.4 ГГц на дальность до 100 м (эскиз и внешний вид). Размер платы 75 х 45 мм2.

Рис. 6. Внешний вид магнитометра с радиоканалом 2.4 ГГц на дальность до 100 м. Габаритные размеры примерно 110 х 70 х 55 мм3 (без антенны).

Калибровка магнитометра осуществляется программным способом. Для калибровки можно использовать кольца Гельмгольца [6] с известным коэффициентом преобразования по току.

Программное обеспечение

Вариант программы для магнитометра с передатчиком на языке C в среде Arduino (передача данных непрерывная):

//Датчик QMC5883
#include <SPI.h>
#include <Wire.h> //
I2C Arduino Library
#include <nRF24L01.h>
#include <RF24.h>
#define addr 0x0D //
I2C Address for QMC5883L
#define reg_2G 0x0D // Загрузка режима работы и диапазона измерений 2 Гс в регистр 09H
#define Bxoff 1.5       // Сдвиг по x, мкТл
#define Byoff 1.0      // Сдвиг по y, мкТл
#define Bzoff 0.0       // Сдвиг по z, мкТл
#define Num_Of_Meas 250 // Число измерений для усреднения
int x, y, z ;                // triple axis data. Данные с регистров
long x1, y1, z1 ;       // Суммированные данные для усреднения
double Bx, By, Bz, B ;  // Значения магнитной индукции в мкТл
int i ;                 // Счетчик
double Kx190 = 120.0 ;  // калибровочный коэффициент по x
double Ky190 = 120.0 ; // калибровочный коэффициент по y
double Kz190 = 120.0 ;  // калибровочный коэффициент по z
int RDY ;               // готовность данных
const uint64_t pipe = 0xF0F1F2F3F4LL ; // идентификатор приемопередающего канала
RF24 radio(9, 10) ; // CE, CSN подключены к выходам D9 и D10 Pro mini

void setup(){
  Serial.begin(9600)
;
  pinMode(3, INPUT) ; // вход DRDY
  radio.begin() ; // начало работы с чипом nRF24L01
  delay(2) ;  // задержка на 2 мс 
  radio.setChannel(9) ; // канал (0 - 127)
  radio.setDataRate(RF24_1MBPS) ; // скорость передачи данных
  radio.setPALevel(RF24_PA_MAX) ;   // максимальная мощность передатчика 0 dBm
  radio.openWritingPipe(pipe) ; // открываем канал с идентификатором pipe = 0xF0F1F2F3F4LL
}

void loop()  
{
   measure_2G() ;
  Calc_B() ;
  float data[4] ; //
массив данных
  data[0] = Bx ;
  data[1] = By ;
  data[2] = Bz ;
  data[3] = B ;
  radio.write(&data, sizeof(data)) ; //
отправка данные с указанием размера
}

void measure_2G() { // Измерение
       Wire.begin()
;
       Wire.beginTransmission(addr)
;
       Wire.write(0x0B)
; // Установка QMC5883L
       Wire.write(0x01) ;  // Запись в регистр
       Wire.endTransmission()
;
       Wire.beginTransmission(addr)
;
       Wire.write(0x09)
;  // Установка QMC5883L
       Wire.write(reg_2G ) ; // Запись в регистр
       // Set the Register 0x09 to 0x0D - OSR_512_RNG_2G_ODR_200Hz_Mode_Continuous
       Wire.endTransmission()

 x1 = 0 ;
 y1 = 0 ;
 z1 = 0 ;
for(i = 1; i<=Num_Of_Meas; i++)
{
 lab1: // опрос по выводу DRDY
 
if (digitalRead(3) == LOW) {goto lab1 ;}
  Wire.beginTransmission(addr)
;
  Wire.write(0x00)
; //start with register 3
  Wire.endTransmission() ;
  // Read the data.. 2 bytes for each axis.. 6 total bytes
  Wire.requestFrom(addr, 6) ;
  if (6 <= Wire.available()) {
    x = Wire.read()
; // MSB  x
    x |= Wire.read() << 8
; // LSB  x
    y = Wire.read()
; // MSB  z
    y |= Wire.read() << 8
; // LSB z
    z = Wire.read()
; // MSB y
    z |= Wire.read() << 8
; // LSB y
  }
    x1 = x1 + x  ;
    y1 = y1 + y  ;
    z1 = z1 + z  ;
}

void Calc_B() { // Вычисление
    Bx = Bxoff + (double)(x1)/Kx190/(double)Num_Of_Meas ;
    By = Byoff + (double)(y1)/Ky190/(double)Num_Of_Meas ;
    Bz = Bzoff + (double)(z1)/Kz190/(double)Num_Of_Meas ;
    B = sqrt(Bx*Bx+By*By+Bz*Bz) ;
 }    

Вариант программы для приемника на языке C в среде Arduino:

#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
const uint64_t pipe = 0xF0F1F2F3F4LL ; //
идентификатор приемопередающего канала
RF24 radio(9, 10); // CE, CSN подключены к выходам D9 и D10 Pro mini
byte massiv[4] ;

void setup()  
{
  Serial.begin(9600) ; // скорость передачи данных 9600
  radio.begin() ;  // начало работы с чипом nRF24L01
  delay(2) ;       // задержка на 2 мс
  radio.setChannel(9) ; // выбор коммуникационного канала (0 - 127)
  radio.setDataRate(RF24_1MBPS) ;     // скорость передачи данных 
  radio.setPALevel(RF24_PA_MAX) ;  // максимальная мощность передатчика 0 dBm
  radio.openReadingPipe(1, pipe) ; // открываем один канал с идентификатором pipe = 0xF0F1F2F3F4LL
  radio.startListening() ; // включаем приемник, начинаем прослушивание
}

void loop() 
{
  if (radio.available()){ // проверяем буфер
    float data[4] ; // создаем массив из 4-х переменных
    radio.read(&data, sizeof(data)) ; // читаем данные, указываем сколько байт читать
    Serial.print("Bx: ") ; // выводим значение компоненты Bx магнитной индукции
    Serial.print(data[0]) ;
    Serial.println(" mkT")
;
    Serial.print("By: ") ;
// выводим значение компоненты By магнитной индукции
    Serial.print(data[1]) ;
    Serial.println(" mkT")
;
    Serial.print("Bz: ") ;
// выводим значение компоненты Bz магнитной индукции
    Serial.print(data[2]) ;
    Serial.println(" mkT")
;
    Serial.print("B: ");
// выводим значение модуля B магнитной индукции
    Serial.print(data[3]) ;
    Serial.println(" mkT")
;
    Serial.println()
;
} else {
  Serial.println("nodata") ;
 // сообщение об отсутствии данных
}
}

Для совместной работы магнитометра с компьютером используется преобразователь интерфейса USB - COM-порт с радиоканалом 2.4 ГГц [3]. Интерфейс одного из вариантов программы передачи данных прибора к компьютеру и вывода показаний на монитор показан на рис. 7. Файл программы: MT_30.rar (~177 Кб, архиватор WinRAR).

Рис. 7. Интерфейс программы для вывода данных измерений магнитометра на монитор компьютера.

Желающие приобрести или самостоятельно изготовить магнитометр с магниторезистивным датчиком QMC5883 (HMC5883) могут обратиться за дополнительной информацией к автору (см. раздел Контактная информация).

Соотношения между единицами измерения магнитной индукции (Тл - Тесла, Гс - Гаусс):

Ссылки:

  1. http://honeywell.ru (сайт фирмы Honeywell)
  2. Аппаратная платформа Ардуино | Arduino.ru. Электронный ресурс: http://arduino.ru . Доступен по состоянию на 16.12.2017.
  3. Преобразователь интерфейса USB - COM-порт - радиоканал (2.4 ГГц)
  4. Преобразователь интерфейса USB - RS-232 (COM-порт)
  5. Приборы для измерения магнитных полей
  6. Системы колец Гельмгольца (катушки Гельмгольца)

Словарь терминов:

06.01.2018


Альтернативные источники энергии
Компьютеры и Интернет
Магнитные поля
Механотронные системы
Перспективные разработки
Электроника и технология

Главная страница



 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hosted by uCoz