Персональный компьютер в лабораторном практикуме по электродинамике




Скачать 80.69 Kb.
Дата 29.09.2016
Размер 80.69 Kb.
Персональный компьютер в лабораторном практикуме по электродинамике

Васильев А.А., ст. преподаватель каф. ФиМПФ КузГПА
Дан анализ некоторых направлений применения компьютеризированных устройств в учебном процессе по физике. Рассмотрен пример использования компьютерной техники при выполнении работы физического практикума по электродинамике. Приведен текст авторской программы.

В последнее время в связи с активным внедрением компьютерной техники в школьный физический эксперимент, а также с появлением недорогих нетбуков, становиться реально осуществлять многие эксперименты с помощью компьютера. Для этого помимо компьютера необходимо и специальное устройство, которое будет передавать компьютеру всю необходимую информацию об эксперименте. Цена на такие устройства соизмерима с ценой компьютера, а закрытое программное обеспечение не всегда является наглядным и удобным. Таким образом, выстраиваются задачи:



  • Создание устройства оцифровки. Основные требования к нему – простота реализации и минимальная себестоимость.

  • Создание открытого базового исходного кода, чтобы люди имеющие знания по программированию могли написать свою собственную программу в соответствии со своими требованиями.

  • Создание готовой программы для выполнения лабораторных работ.

  • Создание документации.

Устройство оцифровки.

Среди всех доступных вариантов была выбрана реализация на микроконтроллерах архитектуры AVR семейства Mega производства фирмы Atmel. Эти микроконтроллеры имеют сравнительно низкую цену и широкую доступность, а также высокую производительность: большинство операций выполняются за один такт. Здесь описано устройство, работающее на ATMega16, хотя можно использовать и другие микроконтроллеры с памятью больше 8КБ.

В качестве интерфейса обмена данными с ПК выбран USB (Universal Serial Bus), который можно встретить на любом современном компьютере и ноутбуке, в отличие от устаревших COM или LPT портов. Также устройство определяется как HID (Human Interface Device), для которого в системе Windows не нужна установка каких-либо дополнительных драйверов.


VD1, VD2

1N4148

VD3

Любой на 3В

С1

4.7мкФ х 5В

С2

100нФ

С3, С4

27пФ

R1

1.5К

R2, R3

65

R4

1М

R5

680

R6, R7

1К

DD1

ATMega16

QZ1

12МГц
рис. 1. Принципиальная электрическая схема
Прошивка (firmware)

Микроконтроллеры продаются без какой-либо программы, для того, чтобы они работали так как нам надо, необходимо написать для них программное обеспечение (firmware) и запрограммировать их во внутреннюю память микроконтроллера (для программирования используется программа AVReAL – http://ln.com.ua/~real/avreal/), для этого используется разъем ISP (способы подключения для программирования можно посмотреть в файле справки программы), после программирования на разъем ставиться перемычка между VCC и RESET. Для создания прошивки микроконтроллера использовался открытый программный код V-USB фирмы Objective Development Software GmbH (http://www.obdev.at/ products/vusb/).


Листинг main.c:

#include // Заголовочный файл для микроконтроллера

#include // для прерывания по таймеру

#include // для _delay_ms()

#include // требуется для usbdrv.h

#include "usbdrv.h" // загружает параметры и библиотеки v-usb
//описание пакета данных для обмена между устройством и компьютером.

PROGMEM char usbHidReportDescriptor[22] = {

0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop)

0x09, 0x01, // USAGE (Vendor Usage 1)

0xa1, 0x01, // COLLECTION (Application)

0x15, 0x00, // LOGICAL_MINIMUM (0)

0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)

0x75, 0x10, // REPORT_SIZE (16)

0x95, 0x01, // REPORT_COUNT (1)

0x09, 0x00, // USAGE (Undefined)

0xB2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)

0xc0 // END_COLLECTION

};
//Таймер включающий заново светодиод VD3

ISR(TIMER0_OVF_vect) {PORTC=0x01;}


//Функция вызываемая при запросе данных компьютером.

uchar usbFunctionRead(uchar *data, uchar len) {

while (ADCSRA==0xC3){}; // Ждем пока оцифровка завершиться

data[0] = ADCL; // копируем младший байт регистра оцифровки в пакет ответа

data[1] = ADCH; // копируем старший байт регистра оцифровки в пакет ответа

return len; // возвращаем длину пакета ответа

}
//функция вызываемая при получении устройством данных

uchar usbFunctionWrite(uchar *data, uchar len) {

ADMUX =data[0]; //устанавливаем канал для оцифровки

return 1; //сообщаем вызвавшей процедуре об успехе операции

}
uchar usbFunctionSetup(uchar data[8]) {

usbRequest_t *rq = (void *) data;

//определяем класс пришедшего запроса

if ((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS) {

if (rq->bRequest == USBRQ_HID_GET_REPORT) { //Если компьютер запросил данные

PORTC=0x00; // выключаем светодиод

ADCSRA=0xC3; // Запускаем оцифровку

return USB_NO_MSG; // вызываем usbFunctionRead()

} else if (rq->bRequest == USBRQ_HID_SET_REPORT) { //Если компьютер прислал данные

PORTC=0x00; // выключаем светодиод

return USB_NO_MSG; // вызываем usbFunctionWrite()

}

return 0;



} return 0;

}
int main(void) {

// Инициализируем таймер для мигания светодиодом

TCCR0=0x05; // делитель таймера – 1024, 12МГц/1024=11718,75... ~12КГц

TCNT0=0x00; // Начальное значение - 0

TIMSK=0x01; // Таймер срабатывает по достижению 256: 12КГц/256~46Гц

TIFR=0; // Сбрасываем все флаги прерываний

ADCSRA=0x83; // Инициализируем АЦП

DDRC=0xFF; // Порт С – на вывод

PORTC=0x01; // Включаем светодиод

usbInit(); // запускаем инициализацию usb

usbDeviceDisconnect() // отключаем устройство

delay_ms(250); // ждем 250мс

usbDeviceConnect(); // подключаем устройство

sei(); //Разрешаем прерывания

for(;;){usbPoll();} //бесконечный цикл с функцией проверки пришедших данных

return 0;

}



Принцип работы

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


Внешний вид

В данной конструкции использовался микроконтроллер ATMega16 в корпусе TQFP44, что позволило существенно снизить размеры устройства по сравнению с PDID корпусом. В итоге вся схема уместилась в коробочку 65х45х20.







Рис. 2. Готовое устройство без крышки

Рис. 3. Завершенный вид

Также фирма Atmel не гарантирует работу дифференциальных каналов при использовании микросхем в PDIP корпусе, поэтому, несмотря на сложность монтажа микроконтроллера в корпусе TQPF, рекомендуется использовать именно его.
Базовый исходный код

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

Процедура connect() – найти устройство и подключиться к нему.

Функция read(ch As Byte, n As Byte) As Integer – читает данные оцифровки с канала ch n-ное количество раз, усредняя значение.

Параметр State – состояние устройства оцифровки.
Программа для лабораторных работ

На основе базового исходного кода была разработана программа для выполнения лабораторных работ. Программа включает в себя систему работы с устройством оцифровки и систему просмотра графиков.

Также имеется возможность делать новые лабораторные работы, для чего потребуются лишь минимальные знания: такие как работа с операционной системой семейства Windows и навыки работы с HTML (либо навыки работы с редактором web-страниц). Для создания работы необходимо создать папку в директории /labs/ и добавить в нее следующие файлы:

Lab.ini – файл, в котором указываются имя лабораторной и система координат

Index.htm – в этом файле указывается описание лабораторной работы, порядок ее выполнения, теория и контрольные вопросы.

рис. 4. Приветствие

При запуске программы, появляется экран приветствия со списком лабораторных работ, который формируется чтением папки /labs/, а также содержит дополнительный пункт – «просмотр графиков». В левом нижнем углу имеется кнопка со знаком вопроса – она вызывает справку о работе с программой. После выбора лабораторной работы из списка и подтверждением выбора кнопкой «ОК» или двойным щелчком мыши программа загружает параметры лабораторной работы и показывает два окна:

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

Для удобства работы с графиком и большей наглядности и простоты понимания его можно масштабировать, выделять и удалять точки, менять цвета графиков, а также подписывать их.
В качестве примера приведена лабораторная работа «вычисление емкости конденсатора методом разрядки». Выполнение классического варианта исполнения этой работы занимает достаточно много времени. Это связано с необходимостью произведения множества измерений. Можно обойти ограничение, используя для обработки результатов компьютер. Так удалось сократить время выполнения одного цикла измерений до 10-20 секунд против 15-20 минут при выполнении работы вручную. Также достаточно большое количество времени занимал подсчет площади криволинейной трапеции, который в компьютерном варианте занимает всего одно нажатие.

рис. 5. График лабораторной работы «Вычисление емкости конденсатора методом разрядки» Литература:



  1. Axelson J. «USB complete» - Lakeview Research, 2001г.

  2. Агуров П.В. «Интерфейс USB. Практика использования и программирования» – БХВ-Петербург, 2004г.

  3. Хоровиц П., Хилл У. «Искусство схемотехники» том 1, 2 – М.: «Мир», 1986г.

  4. http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница