Часть3 (1028412), страница 18
Текст из файла (страница 18)
Связь между значениями этих битов и номером прерывания приведена в таблице 6.3.5.Таблица 6.3.5.I2I1I0Номер линии прерывания000IRQ2001010IRQ2011IRQ3100IRQ4101IRQ5110IRQ6111IRQ7Процедура Mode_SW(kanal,gain:integer), которая устанавливает программный режим запуска и программное обнаружение конца преобразования, номер контролируемогоканала и усиление по нему, приведена ниже. Здесь мы снова воспользуемся языком Pascal,более удобным для педагогических целей.
Пусть в программе заранее определена константа ВА – базовый адрес, соответствующая фактическому адресу, выставленному перемычками В0…В5 на плате. В переменной cannel задается номер контролируемого канала,в переменной gain – усиление по контролируемому каналу в соответствие с приведенной вкомментариях к программе таблицей.Procedure Mode_SW(cannel,gain:integer);Beginport[ВА+9]:=gain;port[ВА+10]:= cannel;port[ВА+11]:=0;{Режим программный}End;{канал-номер от 0 до 7}{gainУсиление}{ 01}{ 12}{ 24}{ 38}{ 416 }Для программного запуска преобразования достаточно записать любое число в байтовый регистр с адресом ВА+12. Если при этом, в битах S2…S0 регистра режимов АЦПбыло записано число 0, 1 или 3, начнется преобразование и вывод RDY (Ready – готов)будет сброшен и вновь установится в единицу, только когда преобразование будет окончено.
Результаты преобразования отображаются в шестнадцати разрядном регистре ВА+4,который доступен для чтения и побайтно, соответственно ВА+4 – младший байт, ВА+5 –старший байт. В четвертом бите старшего байта этого регистра отображается и значениесигнала RDY (готов).Рябов Владимир Тимофеевич. Кафедра «Электронные технологии в машиностроении»МГТУ им. Н. Э. Баумана, V_Ryabov@mail.ru53Ранее уже говорилось о том, что регистр ВА+4 различен для чтения и записи. Призаписи в него информация передается на цифро-аналоговое преобразование, читаем мы изнего результаты аналого-цифрового преобразования.
Содержимое регистра ВА+4 причтении приведено в таблице 6.3.6.Таблица 6.3.6.Адресb7b6b5b4b3b2b1b0ВА+4D7D6D5D4D3D2D1D0ВА+5RDYD11D10D9D8Биты D11…D0 содержат двоичный код, соответствующий напряжению в контролируемом канале, т.е. содержит число дискрет Ndscr, укладывающихся в контролируемоенапряжение. Для приближенного расчета величины контролируемого напряжения в вольтах, с учетом коэффициента усиления К по каналу, можно воспользоваться формулой:−5V+ Ndscr * dscr ) = Uok + Ndscr * dscr ;Ain = (K10V;dscr =K * 4096здесь: -5V – номинальная величина напряжения, соответствующая нулевому коду в битахD11…D0 по описанию платы, dscr – номинальная цена одной дискреты, Uok - напряжение, соответствующее нулевому коду при заданном коэффициенте усиления.Для измерений с максимальной точностью лучше предварительно экспериментально определить напряжение, соответствующее нулевому коду Uok и цены дискрет dscrпри каждом усилении, проводя параллельные измерения с помощью платы PCL-711 иточного аттестованного цифрового вольтметра.
При этом погрешности установки значения опорного напряжения и различных коэффициентов усиления будут учтены.Пример аналогового контроля с программным запуском и обнаружением концапреобразования приведен далее. Предварительно должна быть запущена процедураMode_SW, определяющая режим запуска, номер канала и усиление по нему. Целочисленная функция Cntrl будет содержать число дискрет, соответствующее напряжению в каналес установленным ранее номером и усилением.
Пересчет кода в вольты, если это потребуется, целесообразно делать отдельно вне этой функции.Function Cntrl: integer;Beginport[ВА+12]:=10;repeatuntil (port[ВА+5] and $10)=0;Cntrl:=portw[ВА+4] and $FFF;End;{Старт АЦП, запись в ВА+12 любого числа{Повторяем, пока бит 5 байтового регистра В+9{не установится в единицу,{Значение функции - из 12 бит слова ВА+4{ символ $ - признак шестнадцатеричной нотации}}}}}При запуске этой процедуры на РС с частотой 133МГц цикл ожидания конца преобразования выполнялся всего 11 раз, так что заметного выигрыша в процессорном времени при обнаружении конца преобразования с помощью прерывания не будет, так каквызов подпрограммы обработки и возврат из нее так же требуют времени.Для запуска от внешнего импульса с программным обнаружением конца в битыb2…b0 регистра ВА+11 необходимо записать 010, т.е.
попросту присвоить ему значение 2,так как прерывания при запуске от внешнего импульса не используются и переопределение битов b6…b4 этого регистра не имеет значения. Но лучше и здесь применить приеммаскирования. А дальше цикл ожидания, считывание и сохранение кода. Попробуйте самостоятельно написать программу сохранения результатов ста измерений в массиве из стацелых чисел.Очень полезна возможность платы производить оцифровку какого-либо сигналачерез одинаковые промежутки времени. Для этого на плате имеется трехканальный шестнадцати разрядный таймер Т/С (рис. 6. 41).
Он функционально схож со стандартным тайРябов Владимир Тимофеевич. Кафедра «Электронные технологии в машиностроении»МГТУ им. Н. Э. Баумана, V_Ryabov@mail.ru54мером компьютеров клона РС Intel 8253 и имеет интерфейс для программиста в виде четырех байтовых регистров с адресами ВА+0, ВА+1, ВА+2 и ВА+3.Через байты с адресами ВА+ 0, ВА+1 и ВА+2 доступны нулевой, первый и второйканалы таймера счетчика. Байт с адресом ВА+3 является регистром управления.
Мы изучали таймер-счетчик микроконтроллера семейства MCS-51. Помните, он был двухканальный шестнадцати разрядный и мог работать в четырех режимах: имитатор таймера MCS49, обычный шестнадцати разрядный счетчик с генерацией прерывания при переполнении, управляемый делитель частоты и т.п. Здесь различных режимов уже шесть. Нам интересен второй режим, управляемый делитель частоты. В этом режиме счетчик по тактирующим импульсам уменьшает содержимое своего счетного шестнадцати разрядного регистра и формирует фронт или спад на выходе при переходе через ноль. Число «С», с которого он начинает счет предварительно записывается в регистр таймера счетчика и каждый раз автоматически перегружается. Таким образом, входная Fin и выходная Fout частоты связаны соотношением: Fout = Fin .CНа плате таймер соединен в соответствии с функциональной схемой,представленной на рис. 6.
42. Этодвухкаскадный делитель частоты.OSCT/C1T/C2Онсчитает импульсы опорного ге2MHzBA+1BA+2нератора с частотой 2МГц и при переполнении инициирует аналогоРис.6. 42цифровое преобразование, если врегистре ВА+11 определен соответствующий режим: запуск от таймера - программныйконтроль конца (код 4), либо запуск от таймера – прерывание в конце (код 6, см. табл.6.3.3и табл. 6.3.4).Частота преобразования определяется по формуле:Fin2МгцFiout ==,C1 ⋅ C 2 С1 ⋅ С 2где С1 и С2 шестнадцатиразрядный числа, которые были предварительно введены впервый и второй счетчики.Вводятся шестнадцатиразрядные константы С в счетчик через байтовый регистр,поочередно, сначала младший байт, затем старший.Настройка таймера-счетчика на частоту в 5 КГц приведена в следующем примере:...port[ВА+3]:=$74;port[ВА+1]:= 40;port[ВА+1]:=0;port[ВА+3]:=$В4;port[ВА+2]:= 10;port[ВА+2]:=0;{Установить счетчик 1 в режим 2 и подготовить к записи С1}{Запись младшего байта С1, числа 4010}{Запись старшего байта С1, числа 0}{Установить счетчик 2 в режим 2 и подготовить к записи С2}{Запись младшего байта С2, числа 1010}{Запись старшего байта С2, числа 0}...Программно управляемое обнаружение конца преобразования по установке битаготовности RDY мы уже рассматривали.
Для аппаратного обнаружения конца преобразования по прерыванию нужно:1. Установить в байтовом регистре режимов АЦП (ВА+11) режим с прерыванием вконце преобразования (третий или шестой режим, см. табл. 6.3.3, 6.3.4).2. Установить в байтовом регистре режимов АЦП (ВА+11) номер используемогопрерывания IRQ2…IRQ7 (см. табл. 6.3.3, 6.3.5).3. Написать процедуру обработки прерывания, считывающую биты D11…D0, куданужно, например, в массив целых чисел.
Не забудьте снять запрос прерывания записьюлюбого числа в регистр ВА+8.Рябов Владимир Тимофеевич. Кафедра «Электронные технологии в машиностроении»МГТУ им. Н. Э. Баумана, V_Ryabov@mail.ru554. Написать процедуру инициализации прерывания, прикрепляющую процедуру егообработки к вектору прерывания, соответствующему заданной линии. Это делается подобно тому, как мы программировали аппаратно инициализируемый дискретный контроль платы DI32.В завершении рассмотрим функцию аналогового контроля с фильтрацией для защиты от помех. Запуск и обнаружение конца преобразования производятся программно.Функция проводит преобразование 10 раз, максимальное и минимальное значения отбрасывает, остальные восемь усредняет. Предварительно должна быть запущена процедураMode_SW, определяющая режим запуска, номер канала и усиление по нему, рассмотренная нами в этом разделе ранее.Function Control:integer;{Измеряет 10 раз, отбрасывает минимум и максимум }Var{остальное усредняет}max, min, summa, ain : word;i: byte;Beginsumma:=0;{сумма 10 напряжений}max:=0;{заранее меньшее из значений}min:=$FFFF;{заранее большее из значений}for i:=1 to 10 dobeginport[$22C]:=10;{старт АЦП}repeat{ожидаем, пока бит 5 байтового регистра В+9 }until port[$225] and $10=0;{не установится в единицу,}ain:= (portw[$224] and $FFF);if ain>max then max:= ain;{ищем максимум}if ain<min then min:= ain;{ищем минимум}summa:=summa+ ain;{ищем сумму}end;Control:=(summa-min-max) div 8; {присваиваем значение функции}End;Таким образом, плата PCL-711 предоставляет достаточно широкие возможностиобработки аналоговых и дискретных сигналов контроля и управления.В заключение, на рис.
6.43 приведена краткая информация по плате и ее программированию. Конечно, она не заменяет приведенного здесь описания, но является прекрасной шпаргалкой в практической работе при программировании платы.Вопросы к экзамену1. Платы УСО, классификация и обзор возможностей.2. Типовая плата дискретного контроля DI32-5: функции, устройство и работа.