Цифровой компаратор

32-разрядные микроконтроллеры разработки ОАО "НИИЭТ"

Модераторы: dav, bkolbov, pip, _sva_

Ответить
Сергей
Сообщения: 14
Зарегистрирован: 25 янв 2018, 15:10
Предприятие: АО "Корпорация "ВНИИЭМ"

Цифровой компаратор

Сообщение Сергей » 05 ноя 2019, 13:30

Проинициализировал пороговый выключатель таким вот образом
PWM0.HDSEL.all = DCMP0;
PWM1.HDSEL.all = DCMP0;
PWM2.HDSEL.all = DCMP0;

PWM0->HDCTL.bit.HDA = 2;
PWM0->HDCTL.bit.HDB = 2;

PWM1->HDCTL.bit.HDA = 2;
PWM1->HDCTL.bit.HDB = 2;

PWM2->HDCTL.bit.HDA = 2;
PWM2->HDCTL.bit.HDB = 2;

PWM0->HDSEL.bit.CBC = 1;
PWM1->HDSEL.bit.CBC = 1;
PWM2->HDSEL.bit.CBC = 1;

Далее проинициализировал цифровой компаратор таким вот образом
NT_ADC.EMUX.bit.EM2 = 0xF;
NT_ADC.SEQ[2].DCP.all = 1;
NT_ADC.DCCTL[0].bit.CHNL = 2;
NT_ADC.DCCTL[0].bit.CTC = 0;
NT_ADC.DCCTL[0].bit.CTM = 0;
NT_ADC.DCCMP[0].bit.COMP0 = 1024;
NT_ADC.DCCTL[0].bit.CTE = SET;

При этом при подачи на соответствующий канал АЦП сигнала уровня при котором должен выключаться ШИМ, ШИМ не выключается.
Если выбрать другой режим работы компаратора
NT_ADC.DCCTL[0].bit.CTC = 1;
NT_ADC.DCCMP[0].bit.COMP0 = 1024;
NT_ADC.DCCMP[0].bit.COMP1 = 4096 - 1024;
то компаратор срабатывает и ШИМ выключается, но когда измерения выходят за пределы срабатывания компаратора ШИМ не восстанавливается.

bkolbov
Сообщения: 212
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: Цифровой компаратор

Сообщение bkolbov » 05 ноя 2019, 14:50

Добрый день!

А сам триггер цифрового компаратора срабатывает (NT_ADC->DCRTC) когда нужно? Если ШИМ отбросить пока что.

Также обсуждение на подобную тему было в этой ветке форума.

Сергей
Сообщения: 14
Зарегистрирован: 25 янв 2018, 15:10
Предприятие: АО "Корпорация "ВНИИЭМ"

Re: Цифровой компаратор

Сообщение Сергей » 05 ноя 2019, 16:03

Нет. Триггер тоже не срабатывает, хотя я читаю значение из зеркального регистра NT_ADC.DCVAL[0].bit.VAL там значение меньше чем в пороговом NT_ADC.DCCMP[0].bit.COMP0.

bkolbov
Сообщения: 212
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: Цифровой компаратор

Сообщение bkolbov » 06 ноя 2019, 09:39

В таком случае, скиньте пожалуйста минимальный файл с исходным кодом, где проблема воспроизводится. ШИМ тут не особо важен сейчас, главное чтобы были видны все производимые манипуляции с АЦП - настройка тактирования, севенсоров, ацп и компараторов, а также запуск и обслуживание.

Сергей
Сообщения: 14
Зарегистрирован: 25 янв 2018, 15:10
Предприятие: АО "Корпорация "ВНИИЭМ"

Re: Цифровой компаратор

Сообщение Сергей » 06 ноя 2019, 14:54

Спасибо! Я разобрался почему не работало.
ШИМ не востанавливался, потому что не сбрасывал нужные флаги:
NT_ADC.DCRTC.all |= DCTRIG0_RES | DCTRIG1_RES | DCTRIG2_RES | DCTRIG3_RES | DCTRIG4_RES | DCTRIG5_RES;
NT_PWM0.HDCLR.all |= (SET << HDCLR_OST_Pos); //так как не зависимо от режима сбрасывать нужно только флагом OST
NT_PWM1.HDCLR.all |= (SET << HDCLR_OST_Pos); //так как не зависимо от режима сбрасывать нужно только флагом OST
NT_PWM2.HDCLR.all |= (SET << HDCLR_OST_Pos); //так как не зависимо от режима сбрасывать нужно только флагом OST
а в другом режиме «Измерение ≤ COMP0» (CTC = 00b) нужно инициализировать оба пороговых регистра COMP0 и COMP1:
NT_ADC.DCCMP[0].bit.COMP1 = NT_ADC.DCCMP[0].bit.COMP0 = 4096 - 1024;
это же надо делать и в режиме «COMP1 ≤ Измерение » (CTC = 11b), иначе не работает.

Сергей
Сообщения: 14
Зарегистрирован: 25 янв 2018, 15:10
Предприятие: АО "Корпорация "ВНИИЭМ"

Re: Цифровой компаратор

Сообщение Сергей » 15 ноя 2019, 11:41

Нашел еще один глюк. При срабатывании компаратора сигнал PWMB переключается в "1". В настройках модуля ШИМ в регистре HDCTL выставлено, что PWMA и PWMB должны переключаться в "0". PWMA переключается, а PWMB нет. Если настроить, что PWMA переключатся в "1", то тогда PWMB начинает переключаться в "0". Как настроить, чтобы оба сигнала переключались в "0".

bkolbov
Сообщения: 212
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: Цифровой компаратор

Сообщение bkolbov » 15 ноя 2019, 14:27

HDCTL.HDA и HDCTL.HDB должны быть равны 2, чтобы оба сигнала переключались в состояние нуля.

О таком глюке слышу в первый раз. Можете привести код, воспроизводящий его?

Сергей
Сообщения: 14
Зарегистрирован: 25 янв 2018, 15:10
Предприятие: АО "Корпорация "ВНИИЭМ"

Re: Цифровой компаратор

Сообщение Сергей » 15 ноя 2019, 15:09

Разобрался в чем дело. Управление выходами ШИМ блоком генерации мертвого времени находится после порогового ограничителя, а в нем для PWMB стояла инверсия относительно PWMA POLSEL = 2. Получается либо нормальная работа порогового ограничителя, либо мертвое время. При включенном пороговом ограничителе, максимум что можно выжать из генератора задержки ШИМ - это мертвое время между задним фронтом PWMA и передним фронтом PWMB, или передним фронтом PWMA и задним фронтом PWMB. Чтобы было мертвое время и там и там - невозможно!

Сергей
Сообщения: 14
Зарегистрирован: 25 янв 2018, 15:10
Предприятие: АО "Корпорация "ВНИИЭМ"

Re: Цифровой компаратор

Сообщение Сергей » 15 ноя 2019, 16:20

Извините, но я соврал, что невозможно включить мертвое время так как надо. Нормально работает в такой конфигурации:
Сначала инициализируем полярность работы сигналов PWMA и PWMB
PWMn->AQCTLA.bit.CAU = 1;
PWMn->AQCTLA.bit.CAD = 2;

PWMn->AQCTLB.bit.CAU = 1;
PWMn->AQCTLB.bit.CAD = 2;
Далее настраиваем в какое состояние переключает эти сигналы пороговый выключатель PWMA в "0", PWMB в "1" (инверсию сделаем потом)
PWMn.HDCTL.bit.HDA = 2;
PWMn.HDCTL.bit.HDB = 1;
Далее сигналы поступают на вход генератора "мертвого времени" ШИМ (рисунок 14.12 руководства пользователя)
Настраиваем IN_MODE на пропуск своего сигнала (S4 = 0, S5 = 1)
PWMn->DBCTL.bit.IN_MODE = 2;
Задаем полярность сигнала на выходе POLESEL - инверсия только на выходе PWMB (S2 = 0, S3 = 1)
PWMn->DBCTL.bit.POLSEL = 2;
Задаем поле выбора фронта OUT_MODE - передний фронт PWMA и задний фронт PWMB (S0 = 1, S1 = 1)
PWMn->DBCTL.bit.IN_MODE = 3;
В результате получаем нормальную работу порогового выключателя, где оба сигнала при срабатывании выключателя переключаются в "0" и нормальную работу ШИМ с наличием "мертвого времени".

Ответить

Вернуться в «32-разрядные микроконтроллеры на ядре ARM Cortex»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость