К1921ВК01Т (арм Cortex-M4F)
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
Какой драйвер имеется ввиду? Из проекта motorcontroldemo? Его накладные расходы напрямую зависят от размера словаря объектов. Для словаря порядка 10-20 элементов должно хватать прерывания и 10кГц. Какой у вас размер словаря? Замерьте время выполнения при помощи счетчика NT_TIMER, как сделано в этом проекте для замера времени выполнения прерываний, и попробуйте найти наиболее вычислительно-ёмкую часть. Также проверьте, включена ли оптимизация кода.
Re: К1921ВК01Т (арм Cortex-M4F)
Да, я использовал драйвер из проекта motorcontroldemo. Странно, у меня простые операции в виде сложения могут занимать от пары сотен, до тысяч по значению счётчика NT_TIMER. Сам таймер тоже показывает сильные, но не на столько сильные различия внутри входа и выхода в прерывания по таймеру, но иногда проскакивают отличия значения таймера как в период счётчика, так и в 10 раз меньшие. (в прошлый раз я ошибся, у меня в мэйне было сравнение которое переставало выполняться. Его убрал, в условии наличия второго прерывания, даже пустого, не позволяет возвращаться в бесконечный цикл.)
В целом у меня примитивное скалярное управление успевает обработаться, даже не смотря на то, что если оставить только модбас и пустой прерывание по шиму, то в бесконечный цикл, почему-то, он уже не возвращается.
В целом у меня примитивное скалярное управление успевает обработаться, даже не смотря на то, что если оставить только модбас и пустой прерывание по шиму, то в бесконечный цикл, почему-то, он уже не возвращается.
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
Разберитесь с прерываниями, замерьте время каждого, выведите на внешний осциллограф время входа и выхода из прерывания, проверьте приоритеты, включите оптимизацию, проверьте используется ли аппаратная плавающая точка. Запустите целиком проект motorcontroldemo, замерьте время расчета драйвера там, сравните с вашим ПО.
Re: К1921ВК01Т (арм Cortex-M4F)
Я понял в чём проблема, но не понимаю, почему так получается. У меня прерывание по ШИМу срабатывает на каждые ~100 значений счётчика TBCTR, хотя настроено прерывание на каждый период, который равен 20000.
Весь код инициализации ШИМ, от которого формируется событие для прерывания
Код: Выделить всё
//генерирование событий 358
NT_PWM0->ETSEL_bit.INTSEL = 0x1; // Прерывание при CTR = PRD
NT_PWM0->ETSEL_bit.INTEN = 1; // разрешение прерывания
NT_PWM0->ETPS_bit.INTPRD = 0x0; // Прерывание по каждому событию
// NT_PWM0->ETPS_bit.INTCNT = 0x1;
NT_PWM0->TBCTL_bit.FREE_SOFT = 0; //поведение счётчика в режиме отладки
- | Показать
- Disona
- Сообщения: 81
- Зарегистрирован: 06 дек 2016, 11:18
- Предприятие: НПФ Вектор
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
Скажите, пожалуйста, чему равно значение переменной period? Вернее даже, не чему равно (ну это тоже интересно), а как оно передаётся в функцию инициализации. Вы проверяли, что после прохождения инициализации период действительно равен 2000? Не может где-то в другом месте переиничиваться период?
Последний раз редактировалось Disona 22 окт 2018, 12:48, всего редактировалось 1 раз.
С уважением, Дмитрий Шпак
ООО "НПФ Вектор"
ООО "НПФ Вектор"
Re: К1921ВК01Т (арм Cortex-M4F)
period = 20 000, dead time = 200
- Disona
- Сообщения: 81
- Зарегистрирован: 06 дек 2016, 11:18
- Предприятие: НПФ Вектор
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
А это, а вы в прерывании, в самом конце, очищаете флажок прерывания? Если этого не сделать, то прерывание будет вечно висеть и обрабатываться. Речь идёт о флаге внутри EPwm модуля.
С уважением, Дмитрий Шпак
ООО "НПФ Вектор"
ООО "НПФ Вектор"
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
Код: Выделить всё
NT_PWM_0->ETCLR.bit.INT=1;
NT_PWM_0->INTCLR.bit.INT=1;
Re: К1921ВК01Т (арм Cortex-M4F)
Действительно, я очищал только один флаг, NT_PWM_0->ETCLR.bit.INT=1. Спасибо
Re: К1921ВК01Т (арм Cortex-M4F)
Добрый день!
Продолжаю осваивать 1921вк01т. И меня начинают терезать смутные сомнения... Как же этот 1921вк01т сильно похож на XMC4500 Infineon! Модуль CAN - практически один в один. Я просто копирую все настройки из своего проекта для XMC4500.
Это хорошо, но если бы у вас еще были AppNotes как у Infineon было бы просто замечательно!
Продолжаю осваивать 1921вк01т. И меня начинают терезать смутные сомнения... Как же этот 1921вк01т сильно похож на XMC4500 Infineon! Модуль CAN - практически один в один. Я просто копирую все настройки из своего проекта для XMC4500.
Это хорошо, но если бы у вас еще были AppNotes как у Infineon было бы просто замечательно!