Добрый день всем! Прошу помочь с реализацией решения. Ситуация следующая: требуется отправлять в CAN около 8 сообщений (для примера показал только 4) с различной периодичностью: 10, 50, 100, 1000 ms. Скорость 500k. Диаграмму я сделал, и сообщения отправляются в CAN с периодичностью, близкой к указанной. НО! С увеличением загрузки шины внешним трафиком начинают серьезно скакать тайминги сообщений, передаваемых CANNY (вплоть до увеличения периода в 5 раз). Как видно из схемы, условием старта генератора ШИМ и, как следствие, инициирования передачи, является условие отсутствие в шине внешнего трафика. Это в принципе не правильно, потому что каждый раз, когда в can появляется трафик, генератор останавливается, а когда шина освобождается, запускается снова. Отсюда и закономерность: чем выше загрузка шины, тем больше разброс интервалов передачи. Логично было бы, чтобы генератор работал непрерывно, а для установки логической «1» в «регистр старт передачи CAN0» было условие отсутствие данных в CAN. Но в таком случае, как показал эксперимент, в шине возникает куча сообщений с ошибками передачи.
Отсюда собственно, и вопрос: как корректно реализовать передачу сообщений с CANNY, чтобы не возникло конфликтов и соблюдались тайминги при любой загрузке шины.
И второе: каков такт работы регистра «Рег. есть данные CAN0»: 1ms, как и у всей диаграммы, или меньше (т.е. с какой частотой он проверяет шину на наличие данных)?
Для справки: CAN J1939, генерим сообщения в CAN и смотрим трафик с помощью Vector CANalyzer.
Вложений в сообщении Отпр.png 475.47 кб, скачивался 137 раз, последний раз 2020-09-30