ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
10 июля
335834
sav_ua (18.06.2012 12:24, просмотров: 1752)
вопрос по CAN, даю запросы, получаю корректные ответы, но смущает количество ошибок в Error Counter регистрах приемника и передатчика С моей стороны контроллер Freescale MCF52259, подключаемое устройство весовой датчик eNod1-T http://www.scaime. …transmitter-board.html Программа в самом примитивном виде - даю запрос на получение массы и получаю ответ. И так по циклу с задержкой в 100мс между запросами. Включены прерывания по передатчику и приемнику для разных MB. Передача не повторится, если не взведется бит прерывания по завершению передачи предыдущей посылки. Битрейты обоих устройств на CAN шине по осциллографу совпадают. Как известно, каждый минимальный временной интервал CAN шины состоит из (SYNC_SEG + PROP_SEG + PHASE_SEG1 + PHASE_SEG2), при этом sample point находится на границе перехода PHASE_SEG1 и PHASE_SEG2. Предполагаю, что в настройках этих временных интервалах причина ошибок. Для датчика eNod1-T битрейт по умолчания 125кГц и sample point 14tq, мой контроллер для этой частоты получается настроить с sample point = 12tq. Для частоты 1МГц, sample point датчика = 6tq, в моем контроллере получается обеспечить эти же 6tq для 1МГц. Во время работы программы на осциллографе наблюдаю запросы/ответы, так вот, на 1МГц количество запросов/ответов значительно меньше, чем на 125кГц. Т.е. исходя из соображений, что длина одной CAN посылки примерно 100 тактов, для 1МГц я вижу общую посылку (запрос/ответ) длиной 300..500 тактов. Для 125кГц длина общей посылки может быть и 1000тактов, ощущение такое, что CAN контроллер пытается передать несколько раз или не подтверждает получение тоже несколько раз. В регистре контроллера, который запоминает разнообразные ошибки на CAN шине, в разное время взводятся практически все варианты битов. Работаю с платой-прототипом, разработанной не мной, общая длина линии сантиметров двадцать. На выходе контроллера стоит гальванически развязанный CAN преобразователь ADuM3053 с терминатором 120Ом, второй терминатор на датчике не стоит - линия очень короткая (пробовал ставить, только хуже). Прошу особо не пинать, это мой первый проект с CAN-ом. Что я не так делаю, не может ведь такая хвалёная по надежности шина быть настолько капризной. Подключал два eNod1-T на шину, все повторяется, ответы получаю, но ошибки есть, и не мало. Спасибо.