Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Извините пожалуйста, что долго не отвечал. Разбирался, что к чему.
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. Получается выход только один – учиться программировать сигнальный процессор и осуществлять обмен между ним и компьютером через порты.
Здравствуйте 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 и считал итерации цикла – ну Очень медлеено!!! Надо работать по прерыванию.
Страницы 1