Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: lpc4337 прерывания 1мкс
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sergey sva
Разбираюсь с исходниками, интервал прерываний задается в этой строчке.
Код
SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100);               /* Generate interrupt every 10 ms */

Как сделать 1мкс , может для этого другой таймер лучше использовать, или может что посоветуете?
ataradov
QUOTE (sergey sva @ Jan 3 2014, 15:08) *
Как сделать 1мкс , может для этого другой таймер лучше использовать, или может что посоветуете?
В теории нужно делить на 1000000 вместо 100. Рабочая частота, естественно нужна такая, чтобы проц не захлебнулся так часто прерываться.
nanorobot
Вроде так:


SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/1000);

Цитата(nanorobot @ Jan 4 2014, 10:39) *
Вроде так:


SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/1000);


прошу прощения - это для 1ms

Для 1 us, как правильноответили выше : SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/1000000);
mantech
Цитата(sergey sva @ Jan 4 2014, 02:08) *
Разбираюсь с исходниками, интервал прерываний задается в этой строчке.
Код
SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100);               /* Generate interrupt every 10 ms */

Как сделать 1мкс , может для этого другой таймер лучше использовать, или может что посоветуете?


Незнаю, для какой задачи, но так часто прерываться не гуд, может есть какой-либо другой способ, например, если что-то нужно считать и стробировать с такой частотой, может лучше таймер в режиме захвата?
mempfis_
Цитата(sergey sva @ Jan 4 2014, 01:08) *
Разбираюсь с исходниками, интервал прерываний задается в этой строчке.
Код
SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100);               /* Generate interrupt every 10 ms */

Как сделать 1мкс , может для этого другой таймер лучше использовать, или может что посоветуете?


Посоветую посмотреть в документацию. Я с этим процессором не работал, но если NXP ничего не поменяли в системе тактирования ядра и переферии, то частота переферии задаётся как частота ядра делённая на один из 4х фиксированых делителей (регистр PCLKSEL). Зная частоту переферии легко вручную посчитать то, что возвращает CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/100 для требуемого Вам периода генерации прерываний.
По опыту использования 5us прерываний на CORTEX-M3, заведённом на 100 MHz - нормально не работает. Слишком много пропусков. А Вы метите на 1uS...
jcxz
Цитата(mempfis_ @ Jan 4 2014, 14:40) *
По опыту использования 5us прерываний на CORTEX-M3, заведённом на 100 MHz - нормально не работает. Слишком много пропусков. А Вы метите на 1uS...

При частоте ядра ==100МГц прерывания с периодом 5мкс не должны составлять никакой проблемы. Ищите баги у себя. Например - проверьте приоритет ISR-ов,
длительности запретов прерываний в коде и т.п.
У меня работают таймерные прерывания 2МГц на M3 (LPC1758) при CLK ядра==100МГц. И не просто входит и выходит в ISR, но и выполняет свою задачу.
Конечно загрузка CPU более 90%. Но если нужно - это возможно. У меня такое прерывание от периферийного таймера, но от SysTick будет ещё проще, так как не надо в
каждом прерывании давать подтверждение таймеру.
Такие частоты прерываний очень полезны для отладки. Например я так ищу проблемы например с разрушением памяти: портится некая переменная - делаешь мониторинг её в
таком ISR (ISR написан на асм) и получаешь источник записи с точностью +/- несколько команд.
А уж на 400кГц вполне хватает для сохранения всего контекста CPU и ещё дампа стека глубиной 40 слов (32-битных).
sergey sva
Сейчас поэкспериментирую, процессор работает на частоте 204 , но пока еще не разобрался как настраиваются предделители.
sergey sva
Пока нормально работает, судя по аналоговому осциллографу. 5мкс одновременно работает uart tcpip easywebserver дрожания и подвисаний не видно посмотрим что дальше будет.
sergey sva
Немного поэкспериментировал, работает нормально доделал код генератора stepdir,код сложный много функций из библиотеки math и string, думал будут пропуски шагов но за это небольшое время не заметил.
Попробую прицепить к станку с рисовалкой и посмотрю повторяемость. Единственное придется наверно запускать два ядра, первое для браузера(webserver) сейчас получается так: пока интерполяция не закончиться вебсервер не может отдать страницу.
Круговая интерполяция может долго работать браузер будет выдавать 404 где таймоут задается ?
(имею ввиду сколько времени будет ждать браузер ответа от сервера где этот параметр задается.)
видео
sergey sva
Смотрю документацию и m0 и m4 тактируются 204 mhz, получается производительность как на 408мгц в чем подвох? ) Еще один вопрос какой стек tcp лучше использовать для m0 ? Хочу попробовать сделать на м0 стек а другом генератор импульсов. не знаю что из этого получиться.
mantech
Цитата(sergey sva @ Jan 16 2014, 22:57) *
Смотрю документацию и m0 и m4 тактируются 204 mhz, получается производительность как на 408мгц


Во классно, прямо чудо какое-то!!! Что-то тут не так biggrin.gif
evgen2
Цитата(sergey sva @ Jan 8 2014, 23:49) *
Немного поэкспериментировал, работает нормально доделал код генератора stepdir,код сложный много функций из библиотеки math и string, думал будут пропуски шагов но за это небольшое время не заметил.
Попробую прицепить к станку с рисовалкой и посмотрю повторяемость. Единственное придется наверно запускать два ядра, первое для браузера(webserver) сейчас получается так: пока интерполяция не закончиться вебсервер не может отдать страницу.
Круговая интерполяция может долго работать браузер будет выдавать 404 где таймоут задается ?
(имею ввиду сколько времени будет ждать браузер ответа от сервера где этот параметр задается.)
видео


простите, а можно поинтересоваться - что это за такой крутой станок, для которого нужно использвать прерывания 1 мкс, судя по всему для шагового двигателя?
sergey sva
Станок может быть любой. На этой плате генерируются импульсы направления и шага в зависимости от того куда нужно переместиться с какой скоростью и как линейно или дугой. Импульсы можно на сервопривода или на привода которые управляют шаговыми двигателями. Чем больше частота прерываний, тем больше импульсов можно получить. Особенно актуально для сервопривода.
Golikov A.
1 мкс - это нормально,
если с микрошагами по 256 на шаг, то даже не супер быстро.
в таких системах от 2 до 5 МГц частота шагов бывает, 500-200 нСек то есть.

только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов. Надо либо полностью ядро освобождать под это, или ДМА из фифо-буфера какого - то, но мы пошли путем ПЛИС со своим буфером, так надежнее...
KRS
А Вы кол-во тактов обработчика смотрели?
у ARM-v7M вход в прерывание 12 циклов, выход 10
при частоте 204 Mhz - остается 182 цикла, но надо и на другое оставить...


Цитата(Golikov A. @ Jan 20 2014, 10:06) *
только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов.

Можно избавится от "дрожания" посадив выход на "External Match Output", а в прерывании уже рассчитывать новое значение Match регистра...
у NXP удобно сделана работа через EMR регистр, там можно и напрямую ногой управлять и выставить какое действие будет по очередному событию.
sergey sva
Цитата(Golikov A. @ Jan 20 2014, 10:06) *
1 мкс - это нормально,
если с микрошагами по 256 на шаг, то даже не супер быстро.
в таких системах от 2 до 5 МГц частота шагов бывает, 500-200 нСек то есть.

только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов. Надо либо полностью ядро освобождать под это, или ДМА из фифо-буфера какого - то, но мы пошли путем ПЛИС со своим буфером, так надежнее...

В плис самое то получиться. Можно поинтересоваться в плис реализовали расчет траектории ускорение и генератор имульсов, или расчеты в процесоре а генератор импульсов в плис?
Golikov A.
Это комплексная система, там пипец сложные траектории, потому их вообще компьютер считает, бьет на участки аппроксимирует полиномами, и передает коэффициенты полинома в исполняемый модуль. Процессор в этом модуле обслуживает стэки (ethernet + USB от ручного управления), осуществляет контроль и настройки, а также напрямую передает полученные коэффициенты в ПЛИС. А в плис сделано ФИФО, и автомат расчета траектории по коэффициентам, и соответственно выдавливание всего этого хозяйства наружу в виде step/dir. Там же отработка аварийных остановок, торможение, и прочая лабуда с контролем расхождения пути.

то что вы делаете похоже на это
http://www.movetec.ru/eng/products-electri...ted-drivers-ims
http://motion.schneider-electric.com/index.html
серия с моушен контролем,
http://motion.schneider-electric.com/lmd/l...rol.php?nema=23
sergey sva
Понятно, по коэффициентам полинома рассчитываете скорость на каждую ось (количество шагов)?
Golikov A.
коэффициенты - по сути это и есть скорость, ускорение, ускорение2 (ускорение ускорения), и так далее по степеням. А автомат высчитывает делается ли шаг в заданный момент времени при заданных значениях параметров, а если делать, то в какую сторону.

Путь = v*t + a*t*t/2+ a2*t*t*t/6 .... каждый раз когда путь переваливает цело число шагов(микрошагов в нашем случае) генерится сигнал шага.
sergey sva
А если пропадет пакет,хотя наверно у вас контроль пропадания полиномов.
Тоже хочу сделать на плис, пока на демке с lpc4337 сделал для проверки работоспособности, на 5мкс работает нормально.
По ссылкам драйвер шагового, я немного другое хочу сделать плата получает XYZA + скорость + ускорение + как двигаться линейно или дугами + плоскость XY ZX ... и выдает шаги на драйвер шагового или серво привода.
Сейчас есть небольшая заминка с http смотрю вайршарком почем то у меня http не распознается может не так формирую.
evgen2
Цитата(Golikov A. @ Jan 20 2014, 10:06) *
1 мкс - это нормально,
если с микрошагами по 256 на шаг, то даже не супер быстро.
в таких системах от 2 до 5 МГц частота шагов бывает, 500-200 нСек то есть.

только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов. Надо либо полностью ядро освобождать под это, или ДМА из фифо-буфера какого - то, но мы пошли путем ПЛИС со своим буфером, так надежнее...


А, микрошаги... я про них несколько забыл. Это ж а) на самом деле не совсем шаги б) крутящий момент в микрошаговом режиме сильно плохеет.

Цитата(sergey sva @ Jan 20 2014, 08:33) *
Станок может быть любой. На этой плате генерируются импульсы направления и шага в зависимости от того куда нужно переместиться с какой скоростью и как линейно или дугой. Импульсы можно на сервопривода или на привода которые управляют шаговыми двигателями. Чем больше частота прерываний, тем больше импульсов можно получить. Особенно актуально для сервопривода.


для сервопровода это скорее не импульсы движения, а эээ... цифровая передача координаты. У сервопривода на входе стоит счетчик импульсов, который считает целевую координату, в которую привод едет со своими ускорениями-скоростями и прочими заморочками
sergey sva
Чем отличаются emac lpc1768 lpc4337 ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.