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

Способ подключения разрабатываемого устройства к MatLab
http://md4u.ru/viewtopic.php?f=24&t=762
Страница 1 из 1

Автор:  Andy_F [ Ср: 27 сен 2006 21:02 ]
Заголовок сообщения:  Способ подключения разрабатываемого устройства к MatLab

На сегодняшний день пакет MatLab является одним из наиболее мощных пакетов, позволяющих промоделировать устройство на уровне функциональных блоков, увидеть реальные, а не "умозрительные" сигналы, отработать различные варианты обработки сигналов. Соответственно, встаёт задача подключения "живого" устройства к MatLab. Со стороны схемы задача решается очевидным способом - на контроллере делается маленькое устройство, измеряющее несколько сигналов при помощи АЦП, и передающее результаты измерений в компьютер через последовательный порт.

А вот со стороны компьютера существуют определённые трудности. Конечно, можно написать простую программу, например, на Delphi, которая будет принимать и сохранять данные, но хочется принимать и обрабатывать данные в реальном времени, т.е., видеть прямо на экране (в MatLab), что присходит.

Оказалось, что для MatLab существует независимая бесплатная разработка - RS232 Blockset , которая позволяет получить именно требуемый эффект. Взять можно здесь: http://digilander.libero.it/LeoDaga/Sim ... ockset.htm

На картинке: Работа с импульсным 3-х канальным устройством в MatLab. Отклик на медную монету.

Изображение

Автор:  sK0T [ Ср: 27 сен 2006 22:35 ]
Заголовок сообщения:  Re: Способ подключения разрабатываемого устройства к MatLab

Спасибо за полезную и интересную информацию! Пригодится.

Автор:  Andy_F [ Чт: 28 сен 2006 18:03 ]
Заголовок сообщения: 

А вот, например, применение цифровой фильтрации к реальному сигналу в среде MatLab. На графиках слева: вверху - сигнал на входе фильтра, внизу - сигнал на выходе фильтра.

Изображение

Автор:  brussl [ Чт: 04 сен 2008 11:02 ]
Заголовок сообщения: 

все хорошо но где схема железа. На линке только софт.

Автор:  Andy_F [ Чт: 04 сен 2008 11:14 ]
Заголовок сообщения: 

brussl писал(а):
все хорошо но где схема железа. На линке только софт.

Какого железа ? :shock:

Автор:  brussl [ Пт: 05 сен 2008 16:56 ]
Заголовок сообщения: 

Ети слова Ваши -> "Со стороны схемы задача решается очевидным способом - на контроллере делается маленькое устройство, измеряющее несколько сигналов при помощи АЦП, и передающее результаты измерений в компьютер через последовательный порт. "

Где найти схема такого контролера?

Автор:  brussl [ Пт: 05 сен 2008 17:05 ]
Заголовок сообщения: 

Или если Я понимал толко отчетов из АЦП следует передават через RS232?

Автор:  Andy_F [ Пт: 05 сен 2008 17:43 ]
Заголовок сообщения: 

Когда разрабатываем устройство, предусматриваем в нём выход с передачей данных. Сейчас практически все контроллеры имеют аппаратный UART. Для согласования уровней ставим MAX232 или транзистор. И всё - из устройства можно передавать интересующие данные через COM-порт. Программно там ничего хитрого нет, кто может написать программу для своего устройства, тот сможет и добавить в неё вывод через UART.

Кстати, RS232 Blockset с последними версиями Matlab не работает, последняя версия, в которой он нормально функционирует - Matlab 2006b.

Автор:  Сергей_П [ Пт: 05 сен 2008 21:01 ]
Заголовок сообщения: 

[quote="Andy_F"][/quote]
В М-лабе можно и звуковуху использовать для ввода аналоговых данных, правда, только в звуковом диапазоне... но что-либо прилично обработать в реальном времени - проблематично..

Автор:  Andy_F [ Пт: 05 сен 2008 21:33 ]
Заголовок сообщения: 

Сергей_П писал(а):
... но что-либо прилично обработать в реальном времени - проблематично..

Это точно. Тема вообще-то старая, в целом - ничего оригинального, сейчас я бы такое постить не стал.

Кстати, разумнее писать данные в текстовый файл (это можно делать довольно быстро), а потом "подпихнуть" файл MatLab'у, и спокойно в нём поработать...

Автор:  brussl [ Сб: 06 сен 2008 13:10 ]
Заголовок сообщения: 

Все понятна. Спасиба за ответ. Я буду сделат на PIC стадратной АЦП то RS232.

Автор:  Andy_F [ Сб: 06 сен 2008 13:54 ]
Заголовок сообщения: 

brussl писал(а):
Все понятна. Спасиба за ответ. Я буду сделат на PIC стадратной АЦП то RS232.

Да, там всё очевидно. Вот пример на ATmega8, измерения по 4-м каналам, для распознавания начала посылки используется флаг 0xFFFF :

Код:
#include <ioavr.h>
#include <ina90.h>
#include <stdio.h>
#include <stdbool.h>
#include <avr_macros.h>
#include "delay.h"
#include "main.h"

void init_devices(void)
{
  _CLI();                                         //disable all interrupts

  PORTB = 0x00;                                       
  DDRB  = 0x00; 

  PORTC = 0x00;                             
  DDRC  = 0x00;

  PORTD = 0x00;
  DDRD  = 0x00;

  // --- ADC init ---
  ADCSR = (1 << ADEN)|(1 << ADPS2)|(1 << ADPS1);  // АЦП включён, запуск одиночный, прерывание запрещено, частота 125 кГц
  ADMUX = (1 << REFS0);                           // Опора ADC - VCC, выравнивание вправо, канал - ADC0

  // --- USART init --- 
  UBRRH = 0;
  UBRRL = 5;                                      // Скорость порта - 115,2 k
  UCSRB = (1 << TXEN)/*|(1 << RXEN)*/;            // Вкючён только передатчик 
  UCSRC = (1 << URSEL)|(3 << UCSZ0);              // Формат кадра - 8 бит, стоповый бит - 1, чётность выключена.

  _SEI();                                         //re-enable interrupts
}


void main( void )
{unsigned int measure;
unsigned char b_temp;
  init_devices();
  for(;;)
  {
    USART_Transmit(0xFF);                       // Флаг сверхцикла
    USART_Transmit(0xFF);

    measure = ADC_measure(0);
    b_temp = (unsigned char)measure;
    USART_Transmit(b_temp);
    b_temp = *((unsigned char *)&measure + 1);  // Выделяем старший байт
    USART_Transmit(b_temp);

    measure = ADC_measure(1);
    b_temp = (unsigned char)measure;
    USART_Transmit(b_temp);
    b_temp = *((unsigned char *)&measure + 1);  // Выделяем старший байт
    USART_Transmit(b_temp);
   
    measure = ADC_measure(2);
    b_temp = (unsigned char)measure;
    USART_Transmit(b_temp);
    b_temp = *((unsigned char *)&measure + 1);  // Выделяем старший байт
    USART_Transmit(b_temp);
   
    measure = ADC_measure(3);
    b_temp = (unsigned char)measure;
    USART_Transmit(b_temp);
    b_temp = *((unsigned char *)&measure + 1);  // Выделяем старший байт
    USART_Transmit(b_temp);
  }
}

//****************************************************
//*          Передача байта через COM порт           *
//****************************************************
void USART_Transmit( unsigned char data )
{
  while (!( UCSRA & (1 << UDRE)));    // Wait for empty transmit buffer
  UDR = data;                           // Put data into buffer, sends the data
}

//****************************************************
//*        Измерение АЦП в заданном канале           *
//****************************************************
unsigned int ADC_measure(unsigned char ch)
{
  _CLI();
  ADMUX = (ADMUX & 0xF0) | ch;           // Устанавливаем канал
  delay_us(2);
  ADCSR |= (1 << ADSC);                  // Переход в режим измерения
  while(ADCSR & (1 << ADSC));            // Ожидание окончания измерения
  _SEI();
  return(ADC);
}



Автор:  shemmer [ Вт: 27 янв 2009 6:43 ]
Заголовок сообщения: 

Оказывается в mаtlаb 2007b если в свойствах модели в полях "кто разрабатывал", "кто последний изменял" указать онное на русском, то он не хочет сохранять модель...

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