Максимальное время регистрации прерывания и реакции на него
не в бровь, а в глаз...
Сразу и не ответишь.
Каждый из шести моторчиков управляется собственным покупным драйвером, для этого моторчика предназначенным,
поэтому о сквозных токах нам думать не надо.
На каждый из шести драйверов от разрабатываемого контроллера поступает только два управляющих сигнала :
1) ШИМ для управления скоростью (при скважности ШИМ меньше 4% мотор стоит),
2) бит для управления направлением - 0 - влево, 1 - вправо.
Частота у всех ШИМов должна быть одинакова, в районе 3...7 кГц.
Разрядность, не будем щёки надувать, 8 бит=1 байт
От механизма идут импульсы, пропорциональные реальной - фактической скорости вращения, максимум 12 тыщ штук за секунду (при максимальной скорости)
Кроме этого, от механизма приходит импульс, когда вал ротора выходного редуктора (100:1) проходит через нулевое положение - один за 12 тыщ импульсов первых.
Итого контроллеру, по два выходных и два входных сигнала от каждого из шести механизмов, всего 24.
Кроме того, в контроллер по RX приходят 40 раз в секунду руководящие указания, кому и как куда крутиться, а точнее, не это, а
куда ракете лететь,
а контроллер, исходя из своих текущих представлений о том, куда и как какой движок повёрнут в данный момент, и пришедших руководящих указаний должен уже вычислить, кому и как куда крутиться, и выдать Бит и ШИМ каждому драйверу.
Я так понимаю, что в идеале это нужно сделать не позже формирования следующего импульса ШИМ, т.е. не позже 1/7000 доли секунды, или 142 мкс.
или немножко раньше, чтобы было время на сования всяких регистров.
Но это в идеале.
Если это не будет получаться, частоту ШИМ можно опустить до 3 кГц, и получим 330 мкс.
На худой конец, можно и 660 мкс.
О прерываниях.
я пришёл к тому, что их хватит и 6-ти - имеющихся INT. Вторые шесть прерываний (которые парами к первым) в 12000 или в 4000 раз реже, поэтому мы их просто проверяем на входах ног внутри обработки соответствующего парного прерывания.
На 6 инт подаются импульсы скорости от 6-ти механизмов, которые приходят максимум 12 тыщ штук за секунду (от каждого из 6 моторчиков).
От каждого моторчика асинхронно относительно других.
(если совсем не будет получаться, можно снизить точность до 4 тыщ импульсов от каждого)
По прерыванию происходит следующее:
- плюс или минус соответствующему счётчику текущего положения вала моторчика (коих 6), в зависимости от текущего направления вращения (определяемого битом, стоящим на ноге проца)
- проверка, есть ли импульс от датчика нуля - если есть, счётчик обнуляется.
- проверка наличия флагов прерываний от других моторчиков, если есть - то обработка тех, кто есть, и выход.
Вне прерывания производятся основные вычисления - кому куда и как крутиться, исходя из.
Может, чего не учёл