Схемы металлоискателей 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 писал(а): все хорошо но где схема железа. На линке только софт.
Какого железа ? |
Автор: | 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/ |