Доброго всем времени суток!
Пытаюсь сделать регулирование частоты вращения бесколлекторного эл. двигателя (BLDC) на "PIC18F4431". Двигатель имеет датчики положения (Холла) для коммутации. В принципе, все как описано в "AN899", тот же "source code" (с минимальными изменениями).
Текущая задача заключается в измерении времени таймером "Timer5" между событиями (изменениями состояний датчиков) в диапазоне до 16-и бит, для последующего вычисления частоты вращения с соответствующим 16-битным разрешением, используя аппаратные возможности uC - "Input Capture" (on state change) модуля "Motion Feedback".
Конкретно моя проблема состоит в том, что по приходу события, из таймера в буфер записывается только нижний байт - "CAPxBUFL", верхний же байт таймера ("Timer5_H") и буфера ("CAPxBUFH") остаются равны нулю. Т.е. при переполнении нижнего байта таймера НЕ происходит переноса в верхний байт. Таким образом значительно сокращается снизу диапазон измерения частоты вращения...
Желаемые 16 бит дает переодическое зачитывание значения верхнего байта таймера в "ручном режиме" по примеру:
Код
movf TMR5H, w
movwf Timer5_H
movf TMR5L, w
movwf Timer5_L
но необходимость вводить это зачитывание в процедуру обработки прерываний доставляет неудобства, как "эстетического" так и функционального характера. Да и разобраться охота - модуль "Motion Feedback" ведь для того и нужен, чтобы считать до 16-и бит автоматически!!?
Или я чего-то недопонял???
С уважением!