Странное поведение PIC18F14K50 EUSART. работает только при подключении щупа логического анализатора

Я использую PIC18F14K50 и приемопередатчик шины RS485 ( ADM3485 ) для связи с сетью датчиков Modbus RTU. печатная плата разработана не мной (и у нее очень глупый / компактный дизайн, поэтому ее очень сложно отлаживать или исследовать), и это кажется проблематичным. кроме того, PIC18F14K50 не имеет возможности отладки самостоятельно.

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

Некоторые подсказки:

  • пакет UART, когда датчики подключены, правильный. все работает как положено.введите описание изображения здесь
  • оставление заземления логического анализатора или его отключение (после отсоединения щупов) ничего не изменит. поэтому я предполагаю, что сами датчики каким-то образом заставляют систему работать.
  • симуляции в программном обеспечении работают отлично.
  • остальные устройства в сети работают нормально и находят себя. они тоже из семейства PIC18.
  • длина скрученного провода менее 1 м (я работаю на своем стенде) и на обоих концах есть согласующие резисторы 120R и 150R. для линий RS485 имеются подтягивающие/подтягивающие резисторы номиналом 1 кОм.
  • микроконтроллеры на шине используют одну и ту же библиотеку программного обеспечения uart. однако единственное отличие DUT (проблемный PIC18F14K50, о котором я говорю) заключается в том, что вывод RX модуля EUSART мультиплексирован с АЦП. Раньше у меня были проблемы с аналоговыми выводами PIC18, когда они использовались в качестве входов.

Часть схемы, предоставленная дизайнером:

введите описание изображения здесь

Библиотека uart устанавливает IO следующим образом:

ANSELHbits.ANS11  = 0; //disable the analog input on RX
void uart_init(uint32_t sysCLK, uint32_t baudRate)
{
  uint16_t baudTemp = (sysCLK/(64*baudRate))-1;
  SPBRGH1_REG  = (uint8_t)(baudTemp>>8);
  SPBRG1_REG   = (uint8_t)(baudTemp);
  TXSTA1bits.SYNC    = 0;
  RX1_INPUT;

  DISABLE_ANSEL_RX1;

  TXSTA1bits.TXEN      = 1;
  RCSTA1bits.CREN      = 1;
  RCSTA1bits.SPEN      = 1;
}
Куда именно подключается логический анализатор, когда он работает? На стороне PIC приемопередатчика или на стороне RS485? Разве это не проблема, когда PIC использует 3,3 В, а трансивер использует 5 В?
Я не буду говорить, что это проблема , но очень подозрительным обстоятельством является то, что U2 представляет собой 3,3-вольтовую часть, работающую от 5-вольтовой шины. Он абсолютно не рассчитан на работу с напряжением 5 В, поэтому очень мало шансов, что у него будут входы, предназначенные для работы с устройством с питанием 3,3 В. Вероятно, он просто не работает без подключенного логического анализатора и едва цепляется за функциональность с ним. Если вы можете модифицировать плату, я предлагаю запитать U2 от 3,3 В и отчитаться о том, как все работает.
Почему вы используете свой ADM3485 от шины 5 В? Он рассчитан только на максимальную работу 3,6 В, и у вас даже есть шина 3,3 В, которую вы используете для PIC!
@brhans да, кажется, это проблема. несмотря на то, что в техническом описании упоминается абсолютный максимальный рейтинг 7v.
@TimWescott Могу ли я изменить его на версию 5 В, например, MAX485? MAX485V - это версия 5 В, а минимальное входное напряжение микросхемы HI составляет 2 В. поэтому он будет работать с уровнем 3,3 В PIC. но я не знаю, если RX (который составляет 5 В из-за питания MAX)
«Абсолютные максимальные значения» любого параметра в таблице данных любой микросхемы не являются рабочими характеристиками ! Прочтите абзац текста рядом с этими рейтингами, и вы обнаружите: «Это только рейтинг нагрузки; функциональная работа устройства в этих или любых других условиях, превышающих указанные в эксплуатационном разделе этой спецификации, не подразумевается». Эти рейтинги говорят вам, что IC, вероятно, не умрет и не выпустит всю свою магию, если она будет подвергаться воздействию таких условий, но не то, чтобы она действительно работала.
Похоже, что PIC не терпит напряжения выше VDD. Итак -- нет.

Ответы (1)

Похоже на проблему с синфазным напряжением, если только что-то не пошло не так с терминацией.
Заземлите подключенные узлы, затем попробуйте без 120R и 150R на расстоянии менее 1 м.