Хочу использовать драйвера от CAN, но подавать на них сигналы от USART. Т.о. получится что-то типа RS485. Наверное даже будет работать сеть где часть драйверов от CAN, а часть от RS485.
:( Недостатки:
1. Драйвера CAN чуть дороже (10..20 рублей).
2. Max скорость чуть меньше (0 устанавливается активно как и у RS485, а 1 только за счёт резисторов).
Преимущества:
1. Не надо переключать приём-передачу т.к. передаются только 0, а при 1 на выходе USART в линию ничего не идет. Это ценное свойство для тех, кто управляет RS485 через COM порт компьютера т.к. не надо управлять направлением передачи (кто делал это под виндой знает об этой проблеме). Также в случае гальванической развязки нужно только 2 канала, а не 3 (это с лихвой компенсирует удорожание драйвера).
2. У CAN драйвера есть возможность завалить фронты (к специальной ноге подключается резистор на землю). Т.о. уменьшается генерация помех в эфир, и главное в саму шину ( за счет этого реальная скорость, в случае не слишком хорошей линии, будет даже больше чем с драйвером RS485).
3. Если один передатчик будет выдавать в линию 0, а другой 1 больших токов, в отличие от RS485, не потечёт (для CAN это нормальный режим).
4. Если при передаче в линию слушать, что там действительно происходит, и при расхождении прерывать передачу, то ускорится обработка ошибок в линии (в RS485 такой режим невозможен т.к. мы в любом случае услышим только себя. Даже если кто-то и выставит противоположный уровень, в линии потечет большой ток :smile3009: , на его конце будет его уровень, а на нашем наш). Например, если slave-устройство выдает в линию 256 байт по запросу, а нам нужно срочно выдать команду, можно остановить передачу послав в линию 0й байт или просто 0.
Я понимаю, что таким образом мы приближаемся к CAN интерфейсу, который имеет все эти полезные свойства и еще много других, и вообще по всем параметрам лучше RS485 (кроме цены). Но вот в цене-то и вся собака порылась. Микроконтроллера с CAN на борту дешевле $8 я не нашел, а микроконтроллер с UART, бывает и <$2. Кроме того решается проблемма соединения с компьютером. RS485 можно подключить через COM порт, а для CAN такой способ не проходит.