- •Курсовой проект
- •2007 Г Оглавление
- •Введение.
- •Техническое задание.
- •1. Разработка устройства
- •1.1 Обобщенная функциональная схема и принцип работы устройства
- •1.2 Функциональная схема и принцип работы блока “Анализатор прихода пакета по последовательному интерфейсу rs-232” (rs_232_Analyzer_Incoming, первый блок устройства).
- •1.3 Функциональная схема и принцип работы блока “Анализатор информации, принятой по последовательному интерфейсу rs-232” (Part3, второй блок устройства).
- •1.4 Функциональная схема и принцип работы блока “Формирователь сигналов” (Part4, третий блок устройства).
- •1.5 Дополнительные элементы устройства и характеристика устройства в целом.
- •2. Тестирование устройства
- •2.1 Тестирование блока rs_232_Analyzer_Incoming
- •2.2 Тестирование блока Part3
- •2.3 Тестирование блока Part4
- •2.4 Тестирование устройства в целом
- •Заключение
- •Список использованной литературы
- •Приложение 1
- •Приложение 2.
- •1. Текст автомата rs_232_Analyzer (rs_232_Analyzer_Incoming).
- •2.Текст подблока Decounter (Part3).
- •3.Текст подблока Sig_Counter (Part3).
- •Текст автомата requester (Part4).
- •Текст устройства spad (Part4).
- •Текст устройства Sig_Sender (Part4).
- •Приложение 3.
1.3 Функциональная схема и принцип работы блока “Анализатор информации, принятой по последовательному интерфейсу rs-232” (Part3, второй блок устройства).
Как уже было описано выше, второй блок нашего устройства – его основной вычислитель. В задачи этого блока входит обработка принятых первым блоком пакетов с RS-232 и на выходе его должны быть основные параметры, нужные для генерации импульса третьим блоком.
Итак, перечислим функции блока Part3:
1) Прием количества сигналов в последовательности. Количество сигналов – первый параметр последовательности, он передается в первом байте по RS-232. В блоке Part3 количество сигналов подается на подблок Decounter – “счетчик наоборот”, который сохраняет его. При последующем приеме байтов этот подблок по переполнению счетчика lpm_counter3 (каждые 6 сигналов о приходе пакета по RS-232) уменьшает количество сигналов на единицу и посылает полученное число в подблок Sig_Counter.
2) Прием и обработка параметров каждого сигнала. Как следует из технического задания, для каждого сигнала задается 4 параметра: начальная и конечная частоты, длительность и пауза после сигнала. В рамках данной реализации сигнал рассматривается как последовательность полупериодов. Линейное увеличение частоты – постепенное уменьшение периода, и наоборот. Основная задача блока Part3 состоит в том, чтобы сформировать по 4м входным параметрам 5 новых: периоды сигнала, начальный и конечный; разность между двумя соседними полупериодами сигнала (если начальный и конечный периоды не были равны); количество периодов в сигнале и “направление” (увеличение или уменьшение периода сигнала). Рассмотрим вычисление этих параметров подробнее.
Периоды вычисляются исходя из значений частот по формуле: T=1/f, где f – частота, а T – период.
Количество периодов в сигнале вычисляется по формуле арифметической прогрессии n=S/(a1/2-an/2), где n – количество импульсов, S – длительность последовательности (сумма всех ее членов), a1 и an – соответственно, начальный и конечный периоды (первый и последний члены последовательности).
Разность между двумя соседними полупериодами сигнала (в дальнейшем будем называть ее delta) вычисляется также по формуле арифметической прогрессии: d = (a1/2-an/2)/(n-1), где d – искомая delta, a1 и an – соответственно, начальный и конечный периоды (первый и последний члены последовательности), а n – количество импульсов в последовательности (сигнале).
“Направление” определяется следующим образом: начальный и конечный периоды сигнала сравниваются и, если начальный период больше конечного, delta прибавляется к следующему полупериоду, если же нет – delta вычитается из следующего полупериода.
Все изложенные выше операции выполняет подблок Sig_Counter. На его вход поступают сигналы о приходе пакета, которые являются его внутренней синхронизацией. Внешняя синхронизация этого блока – External_clk.
Sig_Counter начинает свою работу только в том случае, если байт с количеством импульсов принят, о чем свидетельствует сигнал равенства eq с компаратора lpm_compare0 а также количество импульсов (colimp), подаваемое с блока Decounter, которое должно быть больше 0 и меньше 17. В процессе работы вместе с сигналом прихода пакета Sig_Counter получает байты с RS-232 и обрабатывает их значения в соответствии с приведенными выше формулами.
Перечислим выходы подблока Sig_Counter.
Dir – направление, битовый сигнал;
Delta - разность между двумя соседними полупериодами сигнала, 11 разрядов;
K_vo – количество периодов в сигнале, 8 разрядов;
P – начальный период сигнала, 18 разрядов;
Pausa – пауза после сигнала, 7 разрядов.
Остальные выходы – kolimp (количество импульсов), eq(сигнал равенства eq с компаратора lpm_compare0) и q(выход счетчика байт, принятых с RS-232, lpm_counter2) – являются вспомогательными для блока Part4.
Длительность сигнала и второй период Sig_Counter не выдает, поскольку они не используются при генерации сигналов, а нужны также как вспомогательные параметры при расчетах, проводящихся внутри блока Part3.
Надо отметить, что исходя из требований к точности, начальная и конечная частоты принимаются в виде четырех байт (по два байта на значение частоты). Поэтому перед отправкой по каналу RS-232 они должны быть закодированы следующим образом: все число переводится в двоичную систему счисления, а затем делится на два байта, старший и младший. Эти байты по-отдельности переводятся обратно в десятичную систему и передаются по RS-232. На приемной стороне нужно произвести обратное преобразование, т. е. старший байт умножить на 256 и прибавить к нему младший. Например, число 5000 перед передачей должно быть преобразовано как 19 и 136; при обратном преобразовании получим: 19 * 256 + 136 = 5000.
Учитывая, что мы работаем с целыми числами (тип Integer), в формулы подблока Sig_Counter были введены некоторые коэффициенты. Далее, в блоке Part4 эти коэффициенты учтены при генерации сигналов с соответствующей частотой при соответствующей частоте clk. Также выбор коэффициентов ориентирован на заданную для нашей реализации точность.
Так, для значения периодов выбран коэффициент 1000000, для длительности – 100000, для “delta” – 5 а для паузы - 1.
Пример расчета параметров сигнала в блоке Part3.
Допустим, параметры нашего сигнала таковы: начальная частота – 5000 Гц, конечная – 50 Гц, длительность сигнала – 500мс, пауза после сигнала – 200мс.
В этом случае на вход блока Part3 должны поступить байты со следующими значениями: 0,50,19,136,50,20 Вычисленные периоды будут равны, соответственно, 200000 и 2000. Эти значения приведены в сотнях наносекунд. Количество импульсов в сигнале, вычисленное по приведенной выше формуле будет равно (100000*50/(200000/2+2000/2))=49, а delta - 5*(200000/2-2000/2)/(198-1)=10312 (в сотнях наносекунд). Пауза же будет равна 20 (в десятках микросекунд), а истинная ее величина будет получена в блоке Part4 за счет умножителя lpm_mult0 (п. 1.4). Полученные в блоке Part3 значения не являются окончательными. Впоследствии они корректируются блоком Part4. Эта особенность устройства связана с тем, что изначально была выбрана другая частота clk, а впоследствии оказалось, что на плате нет такого генератора clk. Иллюстрацию приведенного выше примера можно увидеть на временной диаграмме работы блока Part3 (см. приложение 3). Также это связано с исправлением замеченных в ходе разработки и тестирования устройства ошибок.
Функциональная схема блока приведена на рис. 1.5.
Рис. 1.5.
Схема блока part3 приведена в Приложении 1 на рисунке пр_1.3. Тексты подблоков Sig_Counter и Decounter приведены в приложении 2.