Схемы металлоискателей MD4U
http://md4u.ru/

Магнитометр на микроконтроллере
http://md4u.ru/viewtopic.php?f=28&t=6040
Страница 1 из 25

Автор:  Ethno [ Вс: 11 мар 2012 16:59 ]
Заголовок сообщения:  Магнитометр на микроконтроллере

Покопавшись в инете и посмотрев цены на магнитометры решил сделать его своими руками. Начинается полевой сезон аппарат нужен для археологии..
Схема несложная. Из деталей контролер, две микросхемы памяти на 512, микросхема сом порта, (дополнительно драйвер USB порта) операционный усилитель дисплей, два самодельных датчика на HMC1021S Linear Sensor, + GPS модуль, как опция.. вот и все.
Программу для обработки данных переделал под себя брал с английского сайта. понимает текстовые и exel файлы.
Пришлось написать программку обмена данными компа с устройством., и прошивку к контроллеру..
Прототип сделал, работает ... Юстировку датчиков еще не делал.. Собираюсь собрать все на чистовую тогда буду заниматься настройкой. Выложу схему и фото прибора... видео о работе...

Автор:  Коляй [ Вс: 11 мар 2012 20:04 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Ништяк! А прошивку?

Автор:  Ethno [ Вс: 11 мар 2012 22:21 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Как только отлажу выложу и прошивку (демку для теста) и схему и плату....

Автор:  Bur [ Вс: 11 мар 2012 22:41 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Здравствуйте!
А Ваш магнитометр пустоты будет видеть? Конечно и не пустоты на большой глубине :D Очень хочется сделать такой прибор!
Успехов и удачи!

Автор:  Ethno [ Пн: 12 мар 2012 10:44 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Делал специально для этого, фундаменты, пустоты, могильники, нужен для археологии.. Испытания буду делать когда растает снег.. Так, на вскидку, чувствительность хорошая. Но нужны испытания на поле...

Автор:  Bur [ Пн: 12 мар 2012 12:02 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

А можно посмотреть на схему, пусть будет сырая! Очень любопытно! В особенности датчик, входа. Это лично для себя, без всякой критики (здесь любят собой кичиться...). Хочу сделать себе полный комплект приборов.
Эта тема для меня нова, хочу узначь что и как. Мой email есть в профиле.
Не пришлете, не обижусь. С уважением и успехов!

Автор:  Ethno [ Пн: 12 мар 2012 19:08 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Пока привожу все в порядок вот на обсуждение схема дата логера и исходник

Автор:  Bur [ Вт: 13 мар 2012 19:12 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Спасибо за схему! Сейчас читаю теорию.Непоследнюю роль в устройстве играют датчики. А какие у Вас они, как Вы их сделали.
С уважением и успехов!

Автор:  Ethno [ Вт: 13 мар 2012 19:39 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Сейчас экспериментирую с датчиками на основе магниторезисторов на основе KMZ чувствительность хорошая но нужно откалибровать в поле, так как в городе много металла. и электрических помех. Посоветовали еше датчики FGM-3, правда приедут в апреле..сегодня подключил модуль GPS EM-411 координаты пишет и запоминает, решил вместо ером, подключить флешку, правда лень переписывать прошивку.

Схемку прилагаю если кому интересно

Автор:  Ethno [ Вт: 13 мар 2012 20:59 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Вот еще решение

/*
------------------------------------------------------------------------------------
PIC16F877A + MMC voice recored (no file system)
------------------------------------------------------------------------------------
COMPILER: HI-TECH C , TARGET uC PIC16F877A
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
*/
#include<pic.h>
#define _XTAL_FREQ 20e6
__CONFIG(0x3F3A);
#define CS RC2
#define RS RB2
#define EN RB1
#define fst cmd(0x80)
#define snd cmd(0xc0)
unsigned char readdata, u;
unsigned int count;
unsigned long int arg = 0;
/*-----------------LCD BEGIN------------------------------*/
void LCD_STROBE(void)
{
EN = 1;
__delay_us(0.5);
EN = 0;
}

void data(unsigned char c)
{
RS = 1;
__delay_us(40);
PORTD = (c >> 4);
LCD_STROBE();
PORTD = (c);
LCD_STROBE();
}

void cmd(unsigned char c)
{
RS = 0;
__delay_us(40);
PORTD = (c >> 4);
LCD_STROBE();
PORTD = (c);
LCD_STROBE();
}

void clear(void)
{
cmd(0x01);
__delay_ms(2);
}

void lcd_init()
{
__delay_ms(20);
cmd(0x30);
__delay_ms(1);
cmd(0x30);
__delay_ms(1);
cmd(0x30);
cmd(0x28); // Function set (4-bit interface, 2 lines, 5*7Pixels)
cmd(0x28); // Function set (4-bit interface, 2 lines, 5*7Pixels)
cmd(0x28); // Function set (4-bit interface, 2 lines, 5*7Pixels)
cmd(0x0c); // Make cursorinvisible
clear();
clear(); // Clear screen
cmd(0x6); // Set entry Mode
}

void string(const char *q)
{
clear();
while (*q) {
data(*q++);
}
}

void istring(unsigned int q)
{
cmd(0x81);
data(48 + (q / 100));
q %= 100;
data(48 + (q / 10));
q %= 10;
data(48 + (q));
__delay_ms(500);
}

/*-----------------------LCD END------------------------*/
/*-----------------------USRT BEGIN--------------------*/
void usrt_init()
{
TRISC6 = 0;
TXSTA = 0b00100110;
RCSTA = 0b11010000;
SPBRG = 10;
}

void printf(const char *p)
{
while (*p) {
TXREG = *p;
while (TRMT == 0);
p++;
}
}

void txd(unsigned char vv)
{
TXREG = vv;
while (TRMT == 0);
}

/*-----------------------USRT END-----------------------*/
/*----------------------PWM BEGINS--------------------*/
void pwm_init()
{
TRISC1 = 0;
T2CKPS1 = 0;
T2CKPS0 = 0;
PR2 = 0x50;
CCPR2L = 0x17;
TMR2ON = 1;
CCP2CON = 0b00001100;
}

void pwm_disable()
{
CCP2CON = 0b00000000;
}

void pwm_enable()
{
CCP2CON = 0b00001100;
}

/*--------------------PWM END-------------------------*/
/*-------------------MMC BEGIN-----------------------*/
void spi_init()
{
TRISC4 = 1;
RC2 = 1;
RC3 = 0;
RC5 = 0;
TRISC2 = TRISC3 = TRISC5 = 0;
SSPCON = 0b00100010;
SSPEN = 1;
SMP = 1;
CKE = 1;
CKP = 0;
}

void spi_write(unsigned char kk)
{
SSPBUF = kk;
while (BF == 0);
}

void spi_read()
{
SSPBUF = 0xff;
while (BF == 0);
readdata = SSPBUF;
}

void command(char command, unsigned long int fourbyte_arg, char CRCbits)
{
spi_write(0xff);
spi_write(0b01000000 | command);
spi_write((unsigned char) (fourbyte_arg >> 24));
spi_write((unsigned char) (fourbyte_arg >> 16));
spi_write((unsigned char) (fourbyte_arg >> 8));
spi_write((unsigned char) fourbyte_arg);
spi_write(CRCbits);
spi_read();
}

void mmc_init()
{
CS = 1;
for (u = 0; u < 50; u++) {
spi_write(0xff);
}
CS = 0;
__delay_ms(1);
command(0, 0, 0x95);
count = 0;
while ((readdata != 1) && (count < 1000)) {
spi_read();
count++;
}
if (count >= 1000) {
string("CARD ERROR-CMD0 ");
while (1);
}
command(1, 0, 0xff);
count = 0;
while ((readdata != 0) && (count < 1000)) {
command(1, 0, 0xff);
spi_read();
count++;
}
if (count >= 1000) {
string("CARD ERROR-CMD1 ");
while (1);
}
command(16, 512, 0xff);
count = 0;
while ((readdata != 0) && (count < 1000)) {
spi_read();
count++;
}
if (count >= 1000) {
string("CARD ERROR-CMD16");
while (1);
}
string("MMC INITIALIZED!");
__delay_ms(1000);
SSPCON = SSPCON & 0b11111101;
}

void write()
{
pwm_disable();
command(25, arg, 0xff);
while (readdata != 0) {
spi_read();
string("WRITE ERROR");
}
string("WRITING MMC");
while (1) {
spi_write(0xff);
spi_write(0xff);
spi_write(0b11111100);
for (int g = 0; g < 512; g++) {
GO = 1;
while (GO);
spi_write(ADRESL);
PORTD = ~ADRESL;
}
spi_write(0xff);
spi_write(0xff);
spi_read();
while ((readdata & 0b00011111) != 0x05) {
spi_read();
}
while (readdata != 0xff) {
spi_read();
}
if (RE0 == 1) {
spi_write(0xff);
spi_write(0xff);
spi_write(0b11111101); //stop token
spi_read();
spi_read();
while (readdata != 0xff) {
spi_read();
}
break;
}
}
}

void read()
{
pwm_enable();
command(18, (arg), 0xff);
while (readdata != 0) {
spi_read();
string("READ ERROR");
}
string("READING MMC");
while (1) {
while (readdata != 0xfe) {
spi_read();
}
for (int g = 0; g < 512; g++) {
spi_read();
__delay_us(16.5);
CCPR2L = readdata;
PORTD = ~readdata;
}
spi_write(0xff);
spi_write(0xff);
if (RE0 == 1) {
command(12, arg, 0xff);
spi_read();
while (readdata != 0) {
spi_read();
}
while (readdata != 0xff) {
spi_read();
}
break;
}
}
}

/*--------------------mmc end----------------------*/
/*-----------------ADC functions-------------------*/
void adc_init()
{
TRISA0 = 1;
ADCON0 = 0b10000001;
ADCON1 = 0b10001110;
}

/*-------------------main function-------------------*/
main()
{
CS = 1;
PORTD = 0;
TRISC4 = 0;
TRISC5 = 0;
TRISD = 0;
TRISB2 = 0;
TRISB1 = 0;
TRISE0 = 1;
lcd_init();
adc_init();
usrt_init();
spi_init();
mmc_init();
pwm_init();
lcd_init();
count = 0;
CS = 0;
arg = 0;
while (1) {
arg = 0;
fst;
pwm_enable();
string("READ MODE");
__delay_ms(1000);
read();
arg = 0;
fst;
pwm_disable();
string("WRITE MODE");
__delay_ms(1000);
write();
}
}
}

Автор:  Bur [ Ср: 14 мар 2012 0:11 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Это у нас , 20 минут и в поле, или в дремучем лесу. А в Москве через 20 минут в …… электромагнитном поле :D . Честно, думал. будете делать с банками.. Раз микроконтроллер, то все должно быть на полупроводниках. Я в пиках не силен, мое ATmeg-и. Буду читать теорию, и ждать Вашего результата. Думаю, Вам удастся воплотить задуманное. Обратите внимание, у народа интереса к теме никакого! Думаю это менталитет. Обладающие глубинником, стоят выше чем обладающие только МД-монетником, а монетники стоят в свою очередь выше тех, кто просто роет металлолом.
Удачи и успехов!

Автор:  Eddy71 [ Ср: 14 мар 2012 0:49 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Интерес то к теме есть. Но пока нет конструкции обсуждать нечего. Кроме того, что решение с карточкой очень правильное - сейчас они доступны на огромные объемы. Вот только с файловой системой гемор еще тот..
Остается одно - пожелать удачи и ждать результатов исследования.

Автор:  Коляй [ Ср: 14 мар 2012 6:29 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Вы не забудьте про юстировку самих датчиков написать. Если будет конечно писательское настроение. А то скользкая тема.

Автор:  ARSENAL.UA [ Ср: 14 мар 2012 10:25 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Ну почему это интереса нет?И менталитет у нас нормальный.Я эксперементировал с датчиками KMZ.Чуйки у них хватает.Да и для коррекции у них внутри есть специальная катушка,в отличии от KMZ10 для коррекции которого необходимо дополнительная катушка.Внутри KMZ51 присутствует и катушка для снятия остаточной намагничености.Если честно,то завидую белой завистью,тем кто разбирается в контроллерах,процессорах и програмировании.Для меня это темный и дремучий лес.Так,что желаю искренно успеха в постройке прибора.С ув.

Автор:  Ethno [ Пн: 19 мар 2012 20:59 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Вот схема подключения датчиков на основе KMZ. проверена работает.

В данном МЭУ используется двухкоординатный ориентационный магнитный датчик, который содержит два моста типа KMZ10.
Мосты располагаются перпендикулярно друг другу и закрепляются внутри одной катушки смещения.
Катушка смещения содержит 100 витков медного провода диаметром 0,35 мм.
Сопротивление катушки постоянному току составляет 0,6 Ом, индуктивность - 87 мкГн, напряженность осевого магнитного поля - 8,3 (кА/м)/А.
Принципиальная электрическая схема устройства приведена на рис. 2.
Принцип действия магнитоэлектронного устройства достаточно прост.
Генератор прямоугольных импульсов выполнен на микросхемах DD4.1, DD4.2, DD3, DD4.3, DD4.4, DD4.5, DD4.6 и транзисторах VT1, VT2. Напряжение с выхода генератора через разделительный конденсатор С7 и резистор R15 подается на катушку смещения L1 (рис. 2).
Частота следования импульсов составляет -70 Гц.
Переменные напряжения Ux и Uy c магниторезисторных мостов R1 и R2 через дифференцирующиецепи C1, R3 и С2, R9 поступают на операционные усилители DA1.1 и DA1.2, а после усиления на два синхронных демодулятора DD1, DD2, которые генерируют выходные сигналы Uвых X и Uвых Y, пропорциональные компонентам X и Y магнитного поля.
Магнитоэлектронное устройство может быть использовано для построения электронного компаса.
Приведенная электронная схема не нуждается в специальной температурной коррекции, поскольку определение вектора направления поля связано с отношением двух сигналов, а не с их абсолютными величинами.

Автор:  Ethno [ Вт: 20 мар 2012 14:59 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Ну вот дело дошло до чистовой печатки, решил все же сделать одностороннюю плату (с двусторонней много возни) хотя в LEY она у меня есть. завтра протравлю выставлю уже с напаянными деталями. Правда этот вариант еще с EEROM, с флешкой будет следующий...

Автор:  gafner2289 [ Вт: 20 мар 2012 17:23 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

можете подсказать что это датчик холла или Магниторезистор

Автор:  ARSENAL.UA [ Вт: 20 мар 2012 17:53 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

gafner2289 писал(а):
можете подсказать что это датчик холла или Магниторезистор

Такие по виду не встречались.Попробуйте проверить приборами.Если меняется сопротивление- наверное резистор,если напряжение(ток)-датчик холла.

Автор:  gafner2289 [ Вт: 20 мар 2012 18:14 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

а насколько должно манятся сопротивление, у меня при поднесении магнита меняется на 3 ома

Автор:  ARSENAL.UA [ Вт: 20 мар 2012 20:30 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

gafner2289 писал(а):
а насколько должно манятся сопротивление, у меня при поднесении магнита меняется на 3 ома

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

Автор:  Ethno [ Вт: 20 мар 2012 21:21 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Откуда они были извлечены...? если автомобильные то это датчик Холла еще похожие применялись в магнитофонах катушечных.

Автор:  gafner2289 [ Вт: 20 мар 2012 22:01 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

стаяли в флопи дискаводах 5 дюймовых в движке

Автор:  pochemychka [ Ср: 21 мар 2012 8:39 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Немного о датчиках KMZ http://amel.ua/attachments/016_Magnitor ... tchiki.pdf

Автор:  IGI [ Ср: 21 мар 2012 9:03 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Цитата:
стаяли в флопи дискаводах 5 дюймовых в движке

В движках флопи , видеомагнитофонов и т.д. обычно стоят датчики холла количество зависит от к-ва фаз двигателя.

Автор:  Ethno [ Вт: 27 мар 2012 18:23 ]
Заголовок сообщения:  Re: Магнитометр на микроконтроллере

Ну вот не прошло и года.... пришлось поболеть....да еще в плате сделал пару ошибок. Придется лепить новую но эта тоже рабочая. Вот выставляю на обозрение, позже покажу прибор в корпусе и с датчиками...

Страница 1 из 25 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/