I2C
Шина I²C предназначена для последовательной передачи управляющих сигналов. Для этого в ней используются две двунаправленные линии: D (Data, SDA) - для передачи управляющих данных, и C (Clock, SCL) - для синхронизации.
Особенностью применения шины I²C в полётных контроллерах мультикоптеров является параллельное подключение всех контроллеров моторов к шине.
Содержание |
Рекомендации по обеспечению безошибочной работы шины I2C
- Вывести напрямую из FC провода C-D и землю от процессора, эти 3 провода уходят в контроллеры.
- Провода в экране, экран соединён с общей землёй коптера, на стороне контроллеров висит в воздухе.
- Провода проходят внутри балки. Контроллеры размещены на балках максимально близко к куполу.
- Силовые провода толстые и короткие 3-4 см.
- Замена кондеров вместо 220uF на 2xCapxon 330uF LZ (Ultra Low Impedance)
- Добавил согласование и фильтр на шину, как в регулях 2.0 (два резистора по 27 Ом последовательно, и конденсатор 1uF на SDA)
- Поменял подтяжку шины к питанию +5В на 3.6к как в 2.1, вместо 1к (в 2.0)
- Шина i2c проложена в экранированом кабеле, со стороны регулей экран не замкнут, со стороны FlightCtrl экран подключен к минусу питания.
Помогло, но не сильно. Посчитал суммарную емкость шины, вышло около 800 pF. Это очень много. После чтения мануалов поменял pull up резисторы на главной плате на 750 ом, что в общем-то за пределами рекомендаций по i2c, и знаете, помогло - ошибки ушли, по крайней мере на 3S. На будущее сделал выводы: провода шины как можно короче, регули в центр, ну а с охлаждением как-то разберемся. Резисторы подтяжки начинать с 4.7к и уменьшать до пропадания ошибок, но ниже 750 ом опускаться уже стремно. Провод шины (если провод, а не печатный проводник) - как можно с меньшей емкостью. Источник
- Уменьшать сопротивление минусового провода питания регулятора (увеличивая сечение или укорачивая его)
- Ставить качественные конденсаторы большей емкости с низким ESR (эквивалентным последовательным сопротивлением, низкоимпедансные). Минимизируют просадки и скачки земли при импульсах.
- Разделение линий управления и питания (первая снаружи балки, вторая - внутри), сопровождение линий C, D линией земли (использую сервокабель), которая имеет припаянным только один конец - у процессора контроллера. [1]
На что обратить внимание
- Согласно официальной спецификации (PDF), ёмкость шины не может быть больше 400 nF, что эффективно лимитирует шину на длину около нескольких метров. теперь прикинем, что это октокоптер с пропеллерами 12" - в результате длина одного I2C провода может достигать 35см, помножить всё это на 8, получаем 280см - почти 3 метра, что само по себе уже МНОГО для этой шины. Таким образом, вынос регуляторов на балки под пропеллеры становится проблематичным. Источник
- Для нормальной функциональности I2C шина должна иметь общее питание!
- В MK-Tools есть окно, где показываются ошибки по каждому контроллеру, благодаря чему можно вычислить проблемное место.
- Проверять I²C на КЗ с помощью мультиметра не советую, там вольтаж подаётся, способный убить I²C. [2]
Гальваническая развязка
Самая большая проблема - это не длина (ёмкость), а разность питания между участниками шины - т.е. участники шины питаются от разных источников питания (стабилизаторов), что на корню решается гальванической развязкой.
Применение ADUM1250ARZ по идее должно решить все известные проблемы с ошибками шины I2C. [3] [4]
Кроме того, неисправность одного контроллера мотора не позволит подвесить всю шину, остальные контроллеры смогут работать как будто ничего не случилось.