Шина I2C в Mikrokopter
Различные аспекты использования шины I²C в полётных контроллерах Mikrokopter для параллельного подключения всех регуляторов моторов.
Содержание |
Рекомендации по обеспечению безошибочной работы шины 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 метра, что само по себе уже МНОГО для этой шины. Таким образом, вынос регуляторов на балки под пропеллеры становится проблематичным. Источник
- В MK-Tools есть окно, где показываются ошибки по каждому контроллеру, благодаря чему можно вычислить проблемное место.
Гальваническая развязка [править]
Самая большая проблема - это не длина (ёмкость), а разность питания между участниками шины - т.е. участники шины питаются от разных источников питания (стабилизаторов), что на корню решается гальванической развязкой.
Применение ADUM1250ARZ (PDF) по идее должно решить все известные проблемы с ошибками шины I2C. [2] [3]
Кроме того, неисправность одного контроллера мотора не позволит подвесить всю шину, остальные контроллеры смогут работать как будто ничего не случилось.
По AD-ному appnote, да и по стантарту I2C на выходе каждого ADuM нужно поставить подтяжки по питанию (pull-up резисторы на SDA/SCL, в плате МК2.0 стоят 1.0к, в плате МК2.1 - 3.6к), еще в appnote указан фильтрующий кондер на VCC/GND входа и выхода 0.01uF-0.1uF.