реклама на сайте
подробности

 
 
> PIC18F4431. Регулирование бесколлекторного эл. двигателя (BLDC), Motion Feedback, Input Capture, CAPxBUF
d_dr
сообщение Jul 5 2012, 18:44
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 2-07-12
Пользователь №: 72 599



Доброго всем времени суток!

Пытаюсь сделать регулирование частоты вращения бесколлекторного эл. двигателя (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-и бит автоматически!!?
Или я чего-то недопонял???

С уважением!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
volodya
сообщение Jul 6 2012, 08:20
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



TMR5H заполняется после чтения TMR5L на аппаратном уровне. В вашем случае возможно не корректное считывание значения TMR5 регистра. Вернее будет изменить порядок
Код
        movf    TMR5L, w
        movwf   Timer5_L
        movf    TMR5H, w
        movwf   Timer5_H


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
d_dr
сообщение Jul 6 2012, 09:38
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 2-07-12
Пользователь №: 72 599



Спасибо за ответ!

Конечно, сначала нижний, а потом верхий регистры...(хотя по-моему в микрочипе наблюдается некоторая путаница в зависимости от конкретных регистров...)...

НО! это все как раз и есть программное ("ручное") зачитывание значений таймера, я же хочу заставить работать надлежащим образом аппаратную запись этого значения в буфер "CAPхBUF" - то есть так, как обещает "datasheet" на 18F4431, (конкретно "Motion Feedback Module (MFM)" раздел "17.1.4 INPUT CAPTURE ON STATE CHANGE")! Т.е. при каждом изменении состояний входов "CAPх" значение таймера (оба байта) записываются в соотв. буфер CAPхBUF (high & low), таймер обнуляется и считает заново - и все это аппаратно!

Как уже сказано, исходный код с минимальными переделками (просто выбросил коммуникацию с внешним "терминалом") дает такой же результат: верхний байт "CAPхBUFH" все время равен нулю - хотя дальнейшая программа предусматривает мат. операции с 16-ю битами..??? - Что это? Разводка программиста исходника (врядли)??? Мое кардинальное недопонимание работы процессора? Или где-то чего-то недочитал в datasheet-е???
Может кто-то сталкивался уже?

Спасибо за внимание!

PS

Читал тут на форуме, что MPLAB может неправильно отображать состояния - проверка "в железе" показывает, что MPLAB работает штатно...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016