Разработка системы сбора и обработки данных

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Министерство образования и науки Российской Федерации

Новосибирский государственный технический университет

Кафедра КТРС

РАЗРАБОТКА СИСТЕМЫ СБОРА И ОБРАБОТКИ ДАННЫХ

Курсовая работа по дисциплине

«Основы микропроцессорной техники»

Новосибирск, 2012

Содержание

  • Введение
  • 1. Анализ исходных данных
  • 2. Разработка структурной схемы системы
  • 3. Выбор и обоснование не указанных в задании элементов
  • 4. Анализ временных параметров системы
  • 5. Разработка файла конфигурации для системы сбора-обработки данных на языке AHDL
  • 6. Моделирование цифровой части системы
  • Заключение
  • Список литературы
  • Приложение 1

Введение

В отличие от обычных цифровых микросхем, логика работы ПЛИС не определяется при изготовлении, а задаётся посредством программирования (проектирования). Для программирования используются программаторы и отладочные среды, позволяющие задать желаемую структуру цифрового устройства в виде принципиальной электрической схемы или программы на специальных языках описания аппаратуры: Verilog, VHDL, AHDL и др.

Программа Quartus II позволяет проектировать логику работы микросхем схемотехнически и на языках программирования AHDL, VHDL, Verilog и других. Среда программирования Altera Quartus II так же позволяет производить симуляцию проектов, программировать микросхемы и многое другое.

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

Электроника в современной жизни быстро развивается и усложняется, поэтому без ПЛИС никак не обойтись.

сбор обработка файл конфигурация

1. Анализ исходных данных

Исходные данные выбираем по заданию согласно своему варианту.

Таблица 1 — Исходные данные

ПЛИС

EP1K50 TQFP144

АЦП/MSPS/bit (канал)

AD6644AST-40/40/14

ОЗУ на 1 канал, ksample

16

Кол-во каналов

2

Делитель частоты общий

2,16,32

Синхронизация

Внут. +/Внеш +

Интерфейс; скорость; bit

RS485; 300kb/sec; 7

Систему сбора и обработки данных реализуем при помощи двух 14-разрядных одноканальных АЦП AD6644AST-40 с частотой преобразования 40МГц, ОЗУ с объёмом памяти не менее 16 ksample на 1 канал (так как согласно заданию канала два, то нам нужно ОЗУ с объёмом памяти не менее 32 ksample) не менее, чем на 14 бит, программируемой логической интегральной схемы EP1K50 TQFP144 и последовательного интерфейса RS 485.

2. Разработка структурной схемы системы

Рис. 1 — Структурная схема системы сбора и обработки данных

Аналоговые сигналы приходят на АЦП, которые преобразует их в 14-разрядную кодовую комбинацию. Кодовые комбинации с обоих АЦП передаются в ПЛИС. При внутренней+ синхронизации данные с АЦП постоянно сравниваются с порогом. Если сигнал превышает порог, при этом предыдущее значение меньше порога, то запускается запись данных в ОЗУ.

При внешней+ синхронизации в какой-то момент времени приходит внешний цифровой сигнал синхронизации, который можно считать идеальным. Если внешняя +, то с приходом фронта synchinput сигнал из АЦП записывается в запоминающее устройство. При переключении режима записи на чтение и переполнении счётчика адреса ОЗУ данные из ОЗУ поступают на интерфейс.

3. Выбор и обоснование не указанных в задании элементов

Выбор схемы интерфейса RS 485

Интерфейс RS-485 (EIA/TIA-485) — один из наиболее распространённых стандартов физического уровня связи. Физический уровень — это канал связи и способ передачи сигнала (1й уровень модели взаимосвязи открытых систем OSI).

Сеть, построенная на интерфейсе RS-485, представляет собой приёмопередатчики, соединённые при помощи витой пары. В основе интерфейса RS-485 лежит принцип дифференциальной (балансной) передачи данных. Суть его заключается в передаче одного сигнала по двум проводам. Причём по одному проводу (условно A) идет оригинальный сигнал, а по другому (условно B) — его инверсная копия. Другими словами, если на одном проводе «1», то на другом «0» и наоборот. Таким образом, между двумя проводами витой пары всегда есть разность потенциалов: при «1» она положительна, при «0» — отрицательна.

Рис. 2 — Принцип работы интерфейса RS 485

RS 485 - полудуплексный интерфейс. Приём и передача идут по одной паре проводов с разделением по времени.

Микросхема драйвера интерфейса RS485

Лидером в разработке и выпуске микросхем драйверов является фирма MAXIM.

Все микросхемы драйверов можно условно разделить на 4 группы:

микросхемы с питанием +5 В;

микросхемы с расширенным диапазоном питания от 3 до 5.5 В;

низковольтные микросхемы с питанием 3.3 В;

микросхемы со встроенной оптической изоляцией.

В курсовой работе будем выбирать микросхему с питанием 5 Вольт.

Определим критерии отбора микросхем для последующего рассмотрения. Мы ставим своей целью ознакомление с широко используемыми микросхемами интерфейса RS485, т. е. с микросхемами, работающими в полудуплексном режиме. У этих микросхем входы приёмника объединены с выходами передатчика и образуют две линии приёма/передачи, «A» и «B». Мы будем рассматривать только микросхемы, выпускаемые в корпусе с восемью выводами (кроме микросхем со встроенной оптической изоляцией и микросхем в корпусе 6/5/SO), как наиболее распространённые и используемые.

Выберем микросхему драйвера MAX3082E из семейства MAX3082/3085/3088, которая по выводам полностью совместима со стандартным семейством MAX481/483/485/487/1487. Основными отличиями этой группы являются:

повышенная нагрузочная способность выходов, что позволяет объединять в сеть до 256 станций;

наличие защиты от электростатики для микросхем с буквой «E»;

наличие режима экономии, в который микросхемы переходят при закрытии приёмника, т. е. при RE/=1;

повышенное быстродействие.

Таблица 2 — Микросхема драйверов интерфейса RS485 с питанием +5 В

ТИП

MAX3082E

Наличие TxD

1

Наличие RxD

1

Состояние RxD

Р

Быстродействие,

MBPS

0. 115

Количество станций

256

Защита ESD

±15kV

Питание

5 V

Ток потребления, mА

0. 375

В приведённой таблице приняты следующие обозначения:

В колонке «Состояние RxD»: P — обозначает, что управляющий вход приёмника переключает его либо в открытое состояние, либо переводит его в режим энергосбережения.

«Режим»: H — означает полудуплексный режим, т. е. интерфейс RS485.

Разработка формата протокола обмена

Обмен данными разрабатываемого устройства с внешним устройством осуществляется посредством последовательного порта RS 485 в асинхронном режиме. Количество бит равно 7 для одного канала. Скорость передачи согласно техническому заданию на курсовой проект равна 300 кбит/с.

В курсовой работе мы используем два 14-разрядных одноканальных АЦП.

Рис. 3 — Передача данных по каналам АЦП

В соответствии со стандартными протоколами передача данных через данный порт начинается со старт-бита (start bit) и заканчивается стоп-битом (stop bit). Стартовый бит всегда равен 0 (GND), стоповый — 1 (VCC). Послав один за другим стартовый бит, байт данных и стоповый бит, передатчик может повторять стоп-бит до тех пор, пока приемник не будет готов получить следующий байт. Тогда посылается стартовый бит, служащий сигналом начала новой порции данных.

Поэтому к 14-битной посылке добавятся ещё 2 стоповых и 2 стартовых бита.

Таким образом, нам необходимо передать посылку, состоящую из 36 бит, последовательно по 9 бит (7 информационных, 1 стоповый и 1 стартовый бит).

Так как элементарная посылка имеет длину 7 бит (без учёта старт-стоп бит), а передать нужно 28 информационных бит по 14 на каждый канал, то необходимо поделить эти 28 бит на 4 посылки по 7 бит.

Определим однозначно способ разделения посылки: пусть сначала будут передаваться 7 старших бит (MSB) 1 канала, за ними 7 младших бит (LSB) 1 канала, затем по 7 старших (MSB) и младших (LSB) бит второго канала. Это нам нужно для того, чтобы, принимая с АЦП данные, мы смогли «прочитать» информацию.

Рис. 4 — Формат протокола обмена данных

Выбор ОЗУ

Мы должны выбрать ОЗУ с объёмом не менее 16 ksample на 1 канал (так как согласно заданию канала два, то нам нужно ОЗУ с объёмом памяти не менее 32 ksample) не менее, чем на 14 бит.

Выбираем ОЗУ AS7C3513B с объёмом памяти 32KЧ16.

4. Анализ временных параметров системы

При программировании ПЛИС возможны появление критических временных соотношений, сбой и набеги сигналов. В тех случаях, когда это влияет на правильность работы системы, были использованы задержки нужной длительности. Также необходимо добиться, чтобы такие сигналы, как we, oe, имели длительность не меньшую, чем указано на временных диаграммах работы ОЗУ as7c34098.

Таблица 3 — Временные параметры для режима чтения

Временная диаграмма для режима чтения представлена ниже:

Рис. 5 — Временная диаграмма для режима чтения

Таблица 4 — временные параметры для режима записи

Временная диаграмма для режима записи представлена ниже:

Рис. 6 — Временная диаграмма для режима записи

Так как интерфейс работает намного медленнее, чем АЦП, то ориентироваться при выборе тактовой частоты генератора будем на последний.

В данном разделе курсовой работы приведём функциональную блок-схему и временную диаграмму для АЦП AD6644AST-40.

Рис. 7 — Функциональная блок-схема АЦП AD6644AST-40

Рис. 8 — Временная диаграмма для АЦП AD6644AST-40

Таблица 5

5. Разработка файла конфигурации для системы сбора-обработки данных на языке AHDL

Для моделирования системы в среде MAX+plusII необходимо разработать файл конфигурации на языке AHDL. В него войдут такие мега-функции, как:

lpm_counter — счетчик, необходимый для деления частоты, счета номеров адресов и для формирования сигнала переполнения адреса в памяти.

lpm_compare — для сравнения цифровых данных, поступающих от АЦП, с порогом.

lpm_bustri - для моделирования двунаправленной шины данных.

lpm_shiftreg - для преобразования параллельного кода в последовательный.

busmux - для реализации функции мультиплексора, для передачи данных на выход интерфейса.

lpm_counter — счетчик, необходимый для деления частоты, счета номеров адресов и для формирования сигнала переполнения адреса в памяти.

lpm_compare — для сравнения цифровых данных, поступающих от АЦП, с порогом.

lpm_ram_dq - для моделирования внутренней памяти ПЛИС.

lpm_shiftreg - для преобразования параллельного кода в последовательный.

busmux - для реализации функции мультиплексора, для передачи данных на выход интерфейса.

Также использованы примитивы триггеров, таких как DFF, TFF. Найдет свое применение неудаляемый буфер LCELL, для формирования нужных задержек, для синхронизации в появлении сигналов записи/чтения и сигнала на шине адреса. В секции Variable будут прописаны сигналы, которые используются только ПЛИС, в виде внутренних узлов (node). В секции Variable будут использованы узлы с тремя видами состояний (tri_state_node) для моделирования шины, по которой будут считываться данные из ОЗУ в ПЛИС.

Текст программы для ПЛИС содержится в приложении 1

Программа упакована после компиляции в микросхему семейства ACEX

EP1K50 TQFP144.

6. Моделирование цифровой части системы

Данная система в процессе своей работы попеременно выполняет циклы записи и чтения в память. Цикл записи начинается после прихода в ПЛИС от АЦП 28-разрядной кодовой комбинации (считаем, что в ПЛИС приходит объединённый сигнал с двух каналов).

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

Была реализована синхронизация для двух случаев: внешняя+ и внутренняя+, — как указано в задании, и при помощи логического «ИЛИ» выбран тот вариант, где синхронизация сработала быстрее. D-триггером зафиксирован выбранный вариант.

Заключение

В результате работы мы разработали систему сбора и обработки информации на языке AHDL. Разбили структурную схему на блоки и промоделировали.

Список литературы

1. Техническая документация Altera.

2. Техническая документация Analog Devices.

3. Техническая документация Texas Instruments.

4. Конспект лекций по курсу «Основы построения микропроцессорных систем».

5. Описание языка AHDL в электронном виде.

Приложение 1

Текст файла конфигурации

include «lpm_counter. inc»;

include «mux. inc»;

include «lpm_ram_dq. inc»;

include «lpm_mux. inc»;

include «lpm_shiftreg. inc»;

include «lpm_compare. inc»;

include «lpm_add_sub. inc»;

include «lpm_bustri»;

SUBDESIGN MODEL

(

clock: input; - -входная тактовая частота 16МГц

-делитель частоты

clkchoose [2. 0]: input;

clk2res, clk16res, clk32res, ADclockMUX [2. 0], ADclock: output;

-ОЗУ

clk_addr [1. 0], cout_addr, address_ram [4. 0], ram_full, clk_address, WR: output;

counterclearinp: output;

-синхронизация внутренняя

ram_in [27. 0], compare [27. 0]: input;

synh: output;

-Вход синхронизации внешняя

synchinput: input;

synchinput1,synch12, synchres: output;

-BUSTRI

ZZ [27. 0]: bidir;

-Управляющие сигналы ОЗУ

CE, OE, WE, WEres: output;

)

Variable

clk2,clk16,clk32,ADread: node; - -деление частоты на 2,16,32

BEGIN

Первый шаг — реализация делителя частоты. Коэффициенты деления

-определяем из условий задания. Входную частоту clock принимаем

-равной выходной частоте АЦП — 40 МГц

clk2=lpm_counter (. clock=clock) with (lpm_width=2, lpm_modulus=3)

returns (. cout);

clk2res=dff (clk2,! clock, vcc, vcc);

clk16=lpm_counter (. clock=clock) with (lpm_width=5, lpm_modulus=17)

returns (. cout);

clk16res=dff (clk16,! clock, vcc, vcc);

clk32=lpm_counter (. clock=clock) with (lpm_width=6, lpm_modulus=33)

returns (. cout);

clk32res=dff (clk32,! clock, vcc, vcc);

ADclockMUX [2. 0] = (clk32res, clk16res, clk2res);

ADclock = mux (. data [] =ADclockMUX [],. sel [] =clkchoose []) with (width=3, widths=3)

returns (. result);

-Второй шаг — реализация ОЗУ. На входе модуля ОЗУ присутсвуют 2 шины

шина адреса и шина данных. ША определяет режим работы модуля — запись или

чтение. По Ш Д поступают данные.

-ШИНА АДРЕСА

ADread = lpm_counter (. clock=clock) with (lpm_width=2, lpm_modulus=2)

returns (. cout);

clk_addr [1. 0] = (ADread, ADclock);

clk_address=mux (. data [] =clk_addr [],. sel=WR) with (width=2, widths=1)

returns (. result);

-sinh внутренняя

synh=lpm_compare (. dataa [] =ram_in [],. datab [] =compare [])

with (lpm_width=28) returns (. ageb);

-синхронизация внешняя + - -

synchinput1 = tff (vcc, synchinput, vcc, vcc);

synch12 = synh or synchinput1;

synchres = dff (synch12,synch12,vcc, vcc);

-------------------------------

counterclearinp = tff (vcc, WR, lcell (! (! (! counterclearinp))), vcc);

address_ram [] =lpm_counter (. clock=clk_address,. cnt_en = synchres,. aclr = counterclearinp)

with (lpm_width=5, lpm_modulus=17)

returns (. q []);

-Сигнал переполнения

cout_addr = lpm_counter (. clock=clk_address,. cnt_en = synchres) with (lpm_width=5, lpm_modulus=17)

returns (. cout);

ram_full=dff (cout_addr,! clk_address, vcc, vcc);

--------------------------

WR=tff (vcc,! ram_full, vcc, vcc);

ram_in — ОЗУ

Данные направляются из АЦП в ОЗУ, а с ОЗУ на интерфейс при переполнении ОЗУ. За это отвечает bustri

-Lmp_bustri ZZZZZ это значение которые считываются с ОЗУ, так как программно мы их не задаем,

-то в симуляторе не можем их видеть

ZZ [] =lpm_bustri (. data [] =ram_in [],. enabledt=! WR)

WITH (LPM_WIDTH=28) RETURNS (. tridata []);

-Управляющие сигналы ОЗУ

CE = b"0″;

OE =! tff (vcc, WR, vcc, vcc);

WE = dff (vcc,! clk_address, lcell (! (! (! (! (! WE and OE))))), vcc);

WEres =! WE;

END;

Рис. 1 — Выбор частоты и синхронизация

Рис. 2 — Счётчик адреса и управляющие сигналы ОЗУ

Рис. 3 — Общий вид

Текст файла - конфигурации, описывающий работу интерфейса RS485

include «lpm_shiftreg»;

include «lpm_mux»;

include «busmux»;

include «lpm_counter»;

include «mux. inc»;

subdesign RS485

(

ram_out [13. 0], clock, sel: input;

data1 [8. 0], data2 [8. 0], data [17. 0], clkRS485, clkread, clkRS485res, out, load1, out2, outrez, MUXout [1. 0]: output;

ram_out2 [13. 0]: input;

data12 [8. 0], data22 [8. 0], data2rez [17. 0]: output;

)

Variable

clkRS485,clkposled: node;

begin

clkRS485 = lpm_counter (. clock=clock) with (lpm_width=8, lpm_modulus=134)

returns (. cout);

clkRS485res = dff (clkRS485,clock, vcc, vcc);

clkread=lpm_counter (. clock=clkRS485res) with (lpm_width=5, lpm_modulus=19)

returns (. cout);

data1 = (gnd, ram_out [6. 0], vcc);

data2 = (gnd, ram_out [13. 7], vcc);

data [8. 0] = data1 [8. 0];

data [17. 9] = data2 [8. 0];

load1 = clkread;

data12 = (gnd, ram_out2 [6. 0], vcc);

data22 = (gnd, ram_out2 [13. 7], vcc);

data2rez [8. 0] = data12 [8. 0];

data2rez [17. 9] = data22 [8. 0];

out = lpm_shiftreg (. data [] =data [],. clock=clkRS485res,. load = load1)

with (lpm_width=18) returns (. shiftout);

out2 = lpm_shiftreg (. data [] =data2rez [],. clock=clkRS485res,. load = load1)

with (lpm_width=18) returns (. shiftout);

MUXout [1. 0] = (out, out2);

outrez = mux (. data [] =MUXout [],. sel [] =sel) with (width=2, widths=1)

returns (. result);

end;

Рис. 4 — Описание работы приемника интерфейса RS485

ПоказатьСвернуть
Заполнить форму текущей работой