Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


L780 работа по прерыванию в Windows

Вы не вошли.

 Поиск | Регистрация | Вход 

14.07.2014 14:53:33
#1

Участник
Здесь с 14.07.2014
Сообщений: 2

L780 работа по прерыванию в Windows

Здравствуйте LCARD. Помогите пожалуйста. Плата L-780M. Мне в наследство досталась программа для этой карты, написанная под DOS – управление двигателем. Работаем только по прерыванию с частотой 400кГц.
Логика программы:
1.    void interrupt IRQ_Handler(PARM) // Обработчик прерываний L-780
2.    if (bi[Choice].IsInterruptInProgress) // Если прерывание
3.     // Чтение pегистpа статуса пpеpываний от платы L7xx
                unsigned int IntRegData=0xFF & READ_CONFIG_REG_PLX(&bi[Choice], 0x4C);
4.   
// Обработка прерываний от платы L7xx
     if (IntRegData & 0x04) // Если пpеpывание от АЦП
5.   
// Получение данных из буфера АЦП
     Sync=(GET_DM_WORD_PLX(&bi[Choice],0x2d50) >> 4)<<4;
     GET_DM_ARRAY_PLX(&bi[Choice],Sync,16,&Buf[0]);
6.    И далее работаем с данными

Т.е. буфер АЦП мы читаем и далее работаем с данными с частотой 400 кГц.
Возможно ли то же самое сделать под Windows. Если можно-поподробнее, пожалуйста. Пытаюсь написать программу в Labview.
Я пробовал написать программу, взяв за основу, Ваш пример. Оставил в цикле только функцию GetParameter и считал итерации цикла – ну Очень медлеено!!! Надо работать по прерыванию.

14.07.2014 23:06:52
#2

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: L780 работа по прерыванию в Windows

А в чём причина перехода под Windows? Это ж не система реального времени!

15.07.2014 11:38:08
#3

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780 работа по прерыванию в Windows

Какой прмер? В Windows вся работа с прерыванием скрыта в драйвере и пользователю доступен циклический буфер с данными и счетчик его заполнения...

16.07.2014 12:02:27
#4

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: L780 работа по прерыванию в Windows

Если остаться под Windows - это важно, тогда уровень реального времени Вашей задачи выносите в сигнальный процессор L-780M.  Если ресурсов ADSP в L-780M не хватает, примените L-502-P с интерфейсом PCI Express с процессором  Blackfin (533 МГц 32 МВ ОЗУ на борту).
http://www.lcard.ru/products/boards/l-502
Эти решения предполагают низкоуровневое программирование сигнального процессора.

24.07.2014 09:05:05
#5

Участник
Здесь с 14.07.2014
Сообщений: 2

Re: L780 работа по прерыванию в Windows

Извините пожалуйста, что долго не отвечал. Разбирался, что к чему.
1.    На Windows и Labview хочу перейти потому как мне представлялось – без особых заморочек можно интерфейс программы сделать красивым (графики, картинки и т.п.)
2.    Опишу поподробнее, что мы делаем под DOS и borland C. Программа для управления двигателем.
а) С частотой 400кГц получаем данные с датчика положения ротора двигателя (sin-cos вращающийся трансформатор)
б) Вычисляем текущее положение
в) Сравниваем его с положением, которое было в предыдущем прерывании
г) Вычисляем реальную скорость.
д) Далее PID регулятор, сравнивающий заданную скорость и реальную.
е) На ЦАП выводим сигнал, выданный алгоритмом PID регулятора
Вроде все просто!
3.    По поводу реального времени. Как оказалось это не такая уж и проблема. Можно применить функцию QueryPerformanceCounter – считывать тики таймера Windows.
Конечно разумнее всего выносить задачу в процессор платы, но пока я в этом не силен. Более всего мне просто и понятно Labview. И на данный момент даже не пробовал осуществить обмен между портами процессора и Labview. Может у Вас есть примерчик?
4.    Остается получить значение положения ротора – получить оцифрованные данные с вращающегося трансформатора. Я беру Ваш пример – ПО для разработчика, L-780M, LabVIEW 8.0. Открываем файл EXAMPLE. Меняем bios на 780. Добавляем индикатор – счетчик итераций циклов. Получаем 15 циклов в секунду. Даже если по sync counter я считаю саамы свежие данные, то обработать я их смогу всего 15 раз за секунду. Я пытался уменьшить буферы, вынести за цикл все, что только можно, но так и не добился требуемой скорости. До 400 кГц ну очень далеко.
5.    Получается выход только один – учиться программировать сигнальный процессор и осуществлять обмен между ним и компьютером через порты.

24.07.2014 09:38:50
#6

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,338

Re: L780 работа по прерыванию в Windows

Ну QueryPerformanceCounter с реальным временем никак не связаны... Вопрос в том, что в Windows (как и в другой ОС общего назначения) нет никакой гарантии на время задержки от момента преобразования устройством до получения этих данных Вашей программой (Ваш QueryPerformanceCounter можно привязать только к последнему, а не к первому), поэтому если у Вас есть требование, что с момента изменения сигнала на входе системы до момента изменения сигнала ЦАП должно пройти не больше такого-то времени, то в более менее серьезных проектах Вам стоит смотреть либо в сторону программирования сигнального процессора, либо в сторону ПК с ОСРВ (а про 400КГц - это что, у Вас на каждый отсчет что ли прерывание установлено?).

28.07.2014 11:17:59
#7

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: L780 работа по прерыванию в Windows

Для управления двигателем использовать компьютер с Windows в цепи обратной связи я бы не решился. (Кстати, двигатель постоянного тока?)

Например, можно было бы сделать регулятор на микроконтроллере (какой-нибудь Arduino), а красивый интерфейс на ПК мог бы наблюдать за установкой, контролировать скорость (через ту же L-780M) и, например, передавать команды от оператора: "полный вперед", "малый назад", "стоп машина" и т.д.

Хотя если требования по надежности (последствия неадекватного управления) и по времени реакции скромные (допустим, порядка десятков коррекций напряжения в секунду), то, может быть, можно сделать и на ПК: можно, например, измерять скорость по блоку из n отсчетов (некий скользящий фильтр), тогда прерывания с такими страшными частотами и не нужны.