Программный/аппаратный сброс микроконтроллера иногда приводит к неправильному преобразованию 24-битного внешнего АЦП в серии Tiva C

У меня странная проблема, и я не мог найти решение в течение 1-2 месяцев.

В моей системе есть микроконтроллер Tiva TM4C123GH6PM и внешний 24-битный АЦП (MCP3919). Мой вывод PWM генерирует тактовую частоту 8 МГц для основных тактовых импульсов АЦП. Преобразование АЦП автоматически начинается с этих часов.

Моя проблема в том, что при программном/аппаратном сбросе MCU мои показания АЦП иногда выходят из строя. Это похоже на то, что «фиксированное значение мусора» поступает ко мне от внешнего АЦП с помощью связи SPI.

Только выключение/включение устройства решает проблему!!!

В результате возникает проблема с программным/аппаратным сбросом MCU во время выполнения, и проблема решается только выключением/включением питания устройства.

Я не знаю, это связано с проблемами с циклом питания. нравится это или нет.

Мне очень нужен ваш опыт в этом вопросе.

С уважением

Вы пытались контролировать шину SPI с помощью логического анализатора, чтобы увидеть, что происходит, когда вы получаете неверные значения?
Вы используете периферийное устройство PWM для генерации часов? Это твоя проблема. Область действия этого сигнала на перезагрузку.
Привет. Мое усиление равно 1. Я просто передискретизирую. Да, я проверил шину SPI и увидел, что шаблон исправлен. Как я уже сказал, сброс MCU создает эту проблему. Но странно, что проблема не возникает при выключении/включении устройства. То же самое и со сбросом MCU.
Я наблюдал часы ШИМ, но все выглядит так, как ожидалось.
Вы уверены? Во время сброса выход ШИМ кратковременно будет плавать, что, скорее всего, приведет к нарушению тактового входа АЦП и, возможно, даже вызовет защелку. Оцените тактовый сигнал на этапе сброса и опубликуйте изображение. Попробуйте это с буфером (желательно триггером smitt) между ШИМ и тактовым входом.
На что у вас настроен AMCLK?

Ответы (2)

Тот факт, что POR исправляет это, иногда указывает мне, что что-то неправильно инициализируется.

Я бы посоветовал управлять входом /RESET АЦП с помощью Tiva и дать ему достаточно времени, прежде чем выводить его из состояния сброса или сотни мс.

Привет. Я думаю, что я неправильно объяснил свою проблему. Проблема не возникает после сброса ADC. Проблема связана с после сброса MCU. Между сбросом АЦП и MCLK действительно большой промежуток времени.
Кстати, я управляю сбросом АЦП с помощью одного из контактов GPIO в MCU.
Я согласен со Спехро: в частности, возможно, что при сбросе MCU шла коммуникация и она завершилась некорректно, оставив в регистрах какие-то (неизвестные) значения. Единственный выход из этого — активировать контакт сброса АЦП в течение необходимого времени, предполагая, что вы не используете двухпроводной интерфейс, потому что аппаратный сброс может произойти только для внутреннего POR или внешнего аппаратного сброса (но этот контакт имеет только эту функциональность в режиме SPI).
Кроме того, вы должны держать АЦП в состоянии сброса до тех пор, пока тактовый сигнал не заработает.

Даташит на АЦП:

Все аналоговые смещения включаются во время сброса, так что часть полностью работоспособна сразу после переднего фронта RESET, если MCLK применяется, когда RESET имеет низкий логический уровень. Если MCLK не применяется, после аппаратного сброса есть время, когда преобразование может не точно соответствовать запуску входной структуры.

Возможно, вам поможет некоторая временная задержка между применением MCLK и RESET.

Привет. Существует огромная временная задержка между MCLK и сбросом. Я прочитал эту часть, но, как я уже сказал, проблема не возникает при выключении/включении устройства. Это происходит только тогда, когда я перезагружаю свой MCU во время выполнения.