Плата для завода оказалась сложнее, чем думал. Она заменяет RoboClaw, понижайки, драйвер сервоприводов и кучу проводов: STM32, два драйвера моторов, Raspberry Pi прямо на плате, у каждой нагрузки свой электронный предохранитель с измерением тока, рука xArm, 6 ToF датчиков, 3 лидара.
Самое интересное началось на трассировке. Сначала взяли Freerouting: на этой плате он только раскладывал выводы под переходные отверстия 37 минут. Нашли fastroute, порт Freerouting на Rust: тот же этап за 25 секунд. Дальше гоняли эксперименты и смотрели, сколько связей остается неразведенными:
- 6 слоев, силовые заливки отданы трассировщику как препятствия: 350 неразведенных после 4 часов
- 8 слоев и заливки после трассировки: 91
- разделенный силовой слой, а цепи на 10-15 A только по внешней меди 2 oz: 76
- выкинули 92 детали из 763, обновили fastroute с 0.1.7 до 0.1.13: плато то же, но в 1.5-2 раза быстрее
- расширили плату до колес и удлинили хвост, +30% площади, подкрутили правила трассировщика: 56
- расстановку деталей с нуля сделал Fable: блок микроконтроллера ушел в хвост, вокруг мелких QFN кольцо 2 мм, между драйвером и разъемом мотора пустая полоса под медь: 27
Интересно, что новая расстановка дала больше, чем лишние слои и площадь вместе. И Fable отдельно поймал, что дорожка 1.2 мм на 10 A сгорит, хотя DRC ее спокойно пропускает. Последние 27 связей добиваем руками.
Делать будем на JLCPCB одним заказом, и руками там почти ничего: скрипт сам выгружает файлы для завода и сверяет каждую из 166 позиций со складом через их API, завод паяет все с обеих сторон. В ту же посылку едут 10 плат для датчиков, которые агент спроектировал за вечер (выяснилось, что VL53L8CX не живет от 3.3 V, нужен свой стабилизатор на 1.8 V и преобразователь уровней), и нейлоновые уголки, напечатанные там же. По прикидке ~$1.5-1.8k.