|
lpc4337 прерывания 1мкс |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 21)
|
Jan 4 2014, 04:57
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Вроде так: 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);
Сообщение отредактировал nanorobot - Jan 4 2014, 04:41
|
|
|
|
|
Jan 4 2014, 06:43
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

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

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(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...
|
|
|
|
|
Jan 4 2014, 09:30
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(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-битных).
|
|
|
|
|
Jan 20 2014, 00:30
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

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

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
А Вы кол-во тактов обработчика смотрели? у ARM-v7M вход в прерывание 12 циклов, выход 10 при частоте 204 Mhz - остается 182 цикла, но надо и на другое оставить... Цитата(Golikov A. @ Jan 20 2014, 10:06)  только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов. Можно избавится от "дрожания" посадив выход на "External Match Output", а в прерывании уже рассчитывать новое значение Match регистра... у NXP удобно сделана работа через EMR регистр, там можно и напрямую ногой управлять и выставить какое действие будет по очередному событию.
|
|
|
|
|
Jan 20 2014, 07:56
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Это комплексная система, там пипец сложные траектории, потому их вообще компьютер считает, бьет на участки аппроксимирует полиномами, и передает коэффициенты полинома в исполняемый модуль. Процессор в этом модуле обслуживает стэки (ethernet + USB от ручного управления), осуществляет контроль и настройки, а также напрямую передает полученные коэффициенты в ПЛИС. А в плис сделано ФИФО, и автомат расчета траектории по коэффициентам, и соответственно выдавливание всего этого хозяйства наружу в виде step/dir. Там же отработка аварийных остановок, торможение, и прочая лабуда с контролем расхождения пути. то что вы делаете похоже на это http://www.movetec.ru/eng/products-electri...ted-drivers-imshttp://motion.schneider-electric.com/index.htmlсерия с моушен контролем, http://motion.schneider-electric.com/lmd/l...rol.php?nema=23
|
|
|
|
|
Jan 20 2014, 10:10
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
Цитата(Golikov A. @ Jan 20 2014, 10:06)  1 мкс - это нормально, если с микрошагами по 256 на шаг, то даже не супер быстро. в таких системах от 2 до 5 МГц частота шагов бывает, 500-200 нСек то есть.
только доверять такое процу... плавать же будет из-за нечеткости прерывания и прочих процессов. Надо либо полностью ядро освобождать под это, или ДМА из фифо-буфера какого - то, но мы пошли путем ПЛИС со своим буфером, так надежнее... А, микрошаги... я про них несколько забыл. Это ж а) на самом деле не совсем шаги б) крутящий момент в микрошаговом режиме сильно плохеет. Цитата(sergey sva @ Jan 20 2014, 08:33)  Станок может быть любой. На этой плате генерируются импульсы направления и шага в зависимости от того куда нужно переместиться с какой скоростью и как линейно или дугой. Импульсы можно на сервопривода или на привода которые управляют шаговыми двигателями. Чем больше частота прерываний, тем больше импульсов можно получить. Особенно актуально для сервопривода. для сервопровода это скорее не импульсы движения, а эээ... цифровая передача координаты. У сервопривода на входе стоит счетчик импульсов, который считает целевую координату, в которую привод едет со своими ускорениями-скоростями и прочими заморочками
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|