Синхронизация запуска ШИМ в проекте управления мотором

Встраиваемые микроконтроллеры для систем управления приводом и автоматизации
Ответить
Аватара пользователя
Eugene!
Сообщения: 25
Зарегистрирован: 18 июл 2022, 12:42
Откуда: Питер

Синхронизация запуска ШИМ в проекте управления мотором

Сообщение Eugene! » 13 сен 2022, 11:26

Здравствуйте!

Простите, что так много вопросов, просто по импортным контроллерам все ответы можно найти на форумах, всё уже разобрано сто раз до меня и примеров кучи а по отечественным от НИИЭТ кроме вас никого нет и искать негде. Так что немного ещё вас помучаю, постараюсь не сильно.

Вопрос по проекту MotorControlDemo по инициализации ШИМ.

В функции:

void PWM_Module_Init(TPWM_Module *p)
{
...
NT_COMMON_REG->PWM_CTRL = 0x8;
...
NT_PWM0->TBPHS_bit.TBPHS = 0x0000; // Phase is 0
...
NT_PWM1->TBPHS_bit.TBPHS = 0x0001; // Фаза равна 1 из-за задержки в один такт на синхронизацию
...
NT_PWM2->TBPHS_bit.TBPHS = 0x0001; // Фаза равна 1 из-за задержки в один такт на синхронизацию
...
NT_PWM3->TBPHS_bit.TBPHS = 0x0001; // Фаза равна 1 из-за задержки в один такт на синхронизацию
...
}

PWM_CTRL описан в "МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т Руководство пользователя от 10.09.2019" (1.5.1.0_К1921ВК01Т_Кортекс-2015_v4.pdf) на стр 99-100 и 244.
У вас получается что биты SYNCSELECT равны нулю и все блоки ШИМ запускаются последовательно.

Не должно ли тогда быть так:
__________________________
NT_COMMON_REG->PWM_CTRL = 0x8;
...
NT_PWM0->TBPHS_bit.TBPHS = 0x0000; // Phase is 0
...
NT_PWM1->TBPHS_bit.TBPHS = 0x0001; // Фаза равна 1 из-за задержки
...
NT_PWM2->TBPHS_bit.TBPHS = 0x0002; // Фаза равна 2 из-за задержки
...
NT_PWM3->TBPHS_bit.TBPHS = 0x0003; // Фаза равна 3 из-за задержки
_________________________
Или почему у 1, 2 и 3 -- задержка одинакова и равна 1?

Если бы SYNCSELECT был равен 0b01, то можно было бы так:
NT_COMMON_REG->PWM_CTRL = 0x9;
...
NT_PWM0->TBPHS_bit.TBPHS = 0x0000; // Phase is 0
...
NT_PWM1->TBPHS_bit.TBPHS = 0x0001; // Фаза равна 1 из-за задержки
...
NT_PWM2->TBPHS_bit.TBPHS = 0x0002; // Фаза равна 2 из-за задержки
...
NT_PWM3->TBPHS_bit.TBPHS = 0x0001; // Фаза равна 1 из-за задержки
__________________________

Или я в принципе неправильно понял причины этой задержки?
Даже самую простую задачу можно сделать невыполнимой, если провести достаточное количество совещаний.

Аватара пользователя
Eugene!
Сообщения: 25
Зарегистрирован: 18 июл 2022, 12:42
Откуда: Питер

Re: Синхронизация запуска ШИМ в проекте управления мотором

Сообщение Eugene! » 13 сен 2022, 17:51

И ещё -- зачем третий канал, что мешает запускать АЦП по одному из трёх задействованных каналов (0 или 1 или 2)?
Даже самую простую задачу можно сделать невыполнимой, если провести достаточное количество совещаний.

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: Синхронизация запуска ШИМ в проекте управления мотором

Сообщение Лашкевич Максим » 16 сен 2022, 17:42

По поводу задержки - надо опытным путём смотреть на осциллографе, как получается. Не могу сказать, где там именно задержка, на какую операцию - на отправку синхроимпульса, на загрузку счётчика или что. Попробуйте все свои варианты, а осциллограф будет арбитром.
И ещё -- зачем третий канал, что мешает запускать АЦП по одному из трёх задействованных каналов (0 или 1 или 2)?
Чтобы можно было подстроить момент запуска АЦП относительно несущего сигнала ШИМ.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Аватара пользователя
Eugene!
Сообщения: 25
Зарегистрирован: 18 июл 2022, 12:42
Откуда: Питер

Re: Синхронизация запуска ШИМ в проекте управления мотором

Сообщение Eugene! » 19 сен 2022, 10:44

В документации на стр 205написано:
"Секвенсор может одновременно запустить измерения на всех 24 каналах блока АЦП".
Отсюда вопрос -- если можно с помощью одного секвенсора запустить и измерить все необходимые каналы одновременно -- то зачем использовать несколько секвенсоров?

И зачем надо разрешать компараторы? Разве нельзя просто мерить нужные каналы АЦП, не включая компараторы?

И где в проекте прерывание от АЦП?
Даже самую простую задачу можно сделать невыполнимой, если провести достаточное количество совещаний.

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: Синхронизация запуска ШИМ в проекте управления мотором

Сообщение Лашкевич Максим » 19 сен 2022, 11:05

1. Можно использовать один секвенсор, в некоторых конфигурациях мы так делали. Несколько секвенсоров позволяют измерять разные данные с разной частотой (если хочется).
2. Компараторы надо разрешать из-за нюансов архитектуры АЦП - разработчики не сделали явных регисторов ADCRESULT, чтобы вычитывать оттуда результаты преобразований. Поэтому такими регистрами служат регистры компараторов.
3. В проекте motorcontroldemo нету прерывания АЦП (но когда-то вроде бы было).
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Аватара пользователя
Eugene!
Сообщения: 25
Зарегистрирован: 18 июл 2022, 12:42
Откуда: Питер

Re: Синхронизация запуска ШИМ в проекте управления мотором

Сообщение Eugene! » 19 сен 2022, 11:57

1. Но оба (а если шунты во всех трёх фазах, то и все три) тока надо мерить одновременно, в один и тот же момент, синхронно с шимом.
Так почему же для измерения токов на разных фазах использованы разные секвенсоры?

2. Это я заметил, разработчики предлагают читать результаты из FIFO, но при работе с одним, например, секвенсором, можно ли быть уверенным, в каком порядке там в этом фифо окажутся одновременно запущенные каналы?

Но у вас секвенсоры ведь разные для каждого канала, так что не должно быть проблем читать из FIFO?

Вы же читаете из DCCTLn, как я понял? Это он аналог RESULT?
Но где?

В функциях AdcDrv_fast_calc происходит чтение именно FIFO:
_____________________________________________________
while (NT_ADC->SEQ[n].FSTAT_bit.FLOAD > 0) //пока фифо не опустеет
{
//несколько точек из фифо измерений одного и того же
p->UdcBuf[p->UdcPointer] = NT_ADC->SEQ[n].FIFO_bit.DATA;
p->UdcPointer = (++p->UdcPointer) & 3;
}
_____________________________________________________


Бонусный вопрос:
а избегание нулевого и первого секвенсора чем-то обусловлено?
у вас используются со 2 по 6, в этом есть тайный смысл?


Просто если вы в процессе разработки проекта наткнулись на какие-то баги, то хотелось бы знать, чтобы в свою очередь не натыкаться на них же.
Спасибо.
Даже самую простую задачу можно сделать невыполнимой, если провести достаточное количество совещаний.

Аватара пользователя
Eugene!
Сообщения: 25
Зарегистрирован: 18 июл 2022, 12:42
Откуда: Питер

Re: Синхронизация запуска ШИМ в проекте управления мотором

Сообщение Eugene! » 19 сен 2022, 12:57

Хотя нет, результат там не сохраняется, это я прочитал на стр. 210 в документации:
"Результат измерения, полученный компаратором, передается в схему сравнения и
одновременно с этим сохраняется в регистре DCCTLn."

А на самом деле в каком регистре он сохраняется?
Даже самую простую задачу можно сделать невыполнимой, если провести достаточное количество совещаний.

Аватара пользователя
Eugene!
Сообщения: 25
Зарегистрирован: 18 июл 2022, 12:42
Откуда: Питер

Re: Синхронизация запуска ШИМ в проекте управления мотором

Сообщение Eugene! » 19 сен 2022, 14:00

В общем у меня на вашей плате запустились все 5 каналов по синхроиспульсу от ШИМ, от одного (нулевого) секвенсора, без компараторов, с чтением в прерывании секвенсора из FIFO.
В фифо всё лежит в том же порядке, как нумерация каналов.

Но остаётся вопрос -- а точно ли при данном способе запуск измерения всех каналов происходит одновременно?

Пока не представляю -- как это проверить.
Даже самую простую задачу можно сделать невыполнимой, если провести достаточное количество совещаний.

Аватара пользователя
Лашкевич Максим
Сообщения: 342
Зарегистрирован: 30 дек 2015, 10:38

Re: Синхронизация запуска ШИМ в проекте управления мотором

Сообщение Лашкевич Максим » 19 сен 2022, 16:10

Можете измерять, например, сигнал от ШИМ и двигать фазу точки измерения относительно момента измерения АЦП. Если на всех каналах измеряется "1", а потом при сдвиге фазы на немного на всех "0", то, значит, одновременно.
С уважением,
Лашкевич Максим.
skype: maxlashk
Инженер-программист ООО "НПФ Вектор", Москва.

Ответить