Сгоревший драйвер L6208 я заменил, выполнил отладку всяких глюков. Осталось совсем немного (что-то подглючивает счет шагов после того, как я добавил ускорение на старте шаговиков, да и после этого же перестал работать поворот турелей на заданную позицию).
Отладка
Итак, на сегодняшний день система умеет:
- Двигать моторы на заданное число шагов, останавливая подвижки при упоре в концевик и приостанавливая турели на фиксированных позициях для точного определения номера позиции (напряжение с обмоток движка снимается и подпружиненный упор доводит турельку до нужного положения). На старте двигатели раскручиваются с ускорением (первый шаг - за 10 тактов, второй - за 9 и т.д.), чтобы преодолеть усилие пружины, фиксирующей турель.
- Устанавливать турели в заданные (по номеру) позиции, выбирая наиболее оптимальное направление вращения.
- Измерять сопротивление платиновых TRD. Кстати, я был приятно удивлен, произведя вчера калибровку АЦП: вот эти 0.1% резисторы (брались не из-за класса точности, а т.к. у них наиболее низкие температурные отклонения из аналогичных (за вменяемую цену) позволили измерять сопротивление в рабочем диапазоне (даже шире: я проверял от 78 Ом до 1520 Ом) с точностью не хуже 0.2% (я такого от АЦП микроконтроллера не ожидал).
- Работать с TRD в тестовом режиме - через внешний АЦП.
- Управлять затвором (с диагностикой обрыва, КЗ и перегрева). Кстати, мост TLE5205, через который я разряжаю кондер 2200мкФ на обмотку затвора, при усердном щелкании затвором вообще не нагрелся. И не выдавал ошибок (я боялся, что будут проблемы из-за того, что в первые микросекунды через мост течет высокий ток), кроме обрыва (при отключении затвора) и КЗ (я проверял несколько раз - все в порядке).
- Измерять напряжения питания (+12В на шаговики, +36В на кондее затвора).
- Сохранять во флеше калибровочные коэффициенты (жаль, EEPROM нет на STM32F103).
Еще у меня сделаны зачатки, необходимые для работы с 1-wire (я сделал почти полностью аппаратно - на таймере с DMA), но не завершен код более высокого уровня. Планирую при помощи DS18S20 измерять температуру внутри корпуса контроллера + температуру корпуса криостата (по разности температур криостата и воздуха можно судить о том, насколько хорош вакуум внутри криостата; хоть вакуумметр тоже в системе будет, но лучше иметь свой независимый способ).
Общее количество строк (включая комментарии, отладку и мусор) в проекте уже превысило 5000. Вот такая вот система управления. Вроде бы, никакого функционала, а черт-те сколько уже накатал...