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

 
 
> PWM на LPC2294, не получается запустить в режиме PWM
andrvisht
сообщение Aug 11 2009, 16:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



нужно менять значение ШИМ на лету, задачка вроде стандартная, и для ней предлагается решение в виде PWM.
тестовый код для инициализации канала 2
Код
    PINSEL0 = 0x00008000; // PWM 2
    PWMMCR = 0x00000081; // MR2 - Reset, MR0 - interrupt
    PWMPCR = 0x00000404; // PWMSEL 2 = 1, PWMENA 2 = 1
    PWMMR1 = 0x80;
    PWMMR2 = 0x100;
    PWMMR0 = 0x50;
    PWMLER = 0x07;
    PWMTCR = 0x09; // PWM enable, Count start

работает только в симуляторе, в железе никак.
если поставить PWMTCR = 0x01; - все вертиться, но это уже не PWM ...
проверил даташит на предмет хитростей - ничего не нашел.

в книге Тревора Мартина обнаружил подобный пример, но там есть регистр PWMEMR а в LPC2294 его нет cranky.gif
причем значимость данного регистра как раз то чего не хватает.
вырезку из книги прикрепляю (стр. 100)

Если кто сталкивался, поделитесь опытом как бороться crying.gif
Прикрепленные файлы
Прикрепленный файл  p0100_sel.bmp ( 957.09 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Aug 11 2009, 18:59
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



PWMMR0 задаёт период таймера/ШИМа. Его значение обычно должно быть больше чем в остальных PWMMR. Но у Вас почему-то оно меньше чем в остальных каналах. Нулевой канал обычно один раз устанавливается и больше не меняется. Поэтому в последствии младший бит в PWMLER не нужно дёргать. Но если PWMMR0 не трогать, то это не принципиально.

Если с PWMTCR = 0x01 работает, а с PWMTCR = 0x09 не работает, то странно. Режимы отличаются только наличием теневых регистров и всё.

И вообще, для нормальной работы ШИМа обычно в PWMMCR записывается 0x03. Плюс, для любых каналов можно ещё прерывания разрешать. Но нет смысла ставить сброс TC или остановку TC на каналы, кроме 0.

Сообщение отредактировал GetSmart - Aug 11 2009, 19:01


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Aug 11 2009, 20:24
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(GetSmart @ Aug 11 2009, 21:59) *
PWMMR0 задаёт период таймера/ШИМа. Его значение обычно должно быть больше чем в остальных PWMMR. Но у Вас почему-то оно меньше чем в остальных каналах. Нулевой канал обычно один раз устанавливается и больше не меняется. Поэтому в последствии младший бит в PWMLER не нужно дёргать. Но если PWMMR0 не трогать, то это не принципиально.


это так, но вроде только для атмеловских SAM, а у LPC сброс может проводить любой из MR конфигурация чего задается
Код
PWMMCR = 0x00000081; // MR2 - Reset, MR0 - interrupt

прерывание по MR0 сдесь лишнее, забыл убрать эксперименты.
Цитата
Если с PWMTCR = 0x01 работает, а с PWMTCR = 0x09 не работает, то странно. Режимы отличаются только наличием теневых регистров и всё.

вот я тоже так думал .... а получается нет, запускаю в отладке с MT-LINK останавливаюсь, снимаю галочку на PWM Enable и все генерит, ставлю и все пропадает, чудеса.
Цитата
И вообще, для нормальной работы ШИМа обычно в PWMMCR записывается 0x03. Плюс, для любых каналов можно ещё прерывания разрешать. Но нет смысла ставить сброс TC или остановку TC на каналы, кроме 0.

вероятно Вы с чем то путаете, 03 - сброс таймера следующим тактовым импульсом, и пока оно не станет 01 счетчик шима будет стоять, и стоит, проверил.
смысл есть, формирование охранной паузы к примеру, да и канал мне не один нужен, это лишь тестовый пример, чтобы не отвлекать от сути проблемы.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 11 2009, 21:17
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(andrvisht @ Aug 12 2009, 02:24) *
вероятно Вы с чем то путаете, 03 - сброс таймера следующим тактовым импульсом, и пока оно не станет 01 счетчик шима будет стоять, и стоит, проверил.
смысл есть, формирование охранной паузы к примеру, да и канал мне не один нужен, это лишь тестовый пример, чтобы не отвлекать от сути проблемы.

Вроде я не путаю. Много раз делал PWM на LPC213x и LPC2294. Абсолютно одинаковые у них ШИМ. То, что канал 0 предназначен для задания периода - чёрным по белому написано в мануале. Для него даже выхода на пин нет. Для остальных 6-ти каналов есть пины. Кроме этого, для однофронтовых каналов (Single Edge PWM) установка выхода канала в "1" происходит именно при совпадении PWMTC с PWMMR0.

Цитата(andrvisht @ Aug 12 2009, 02:24) *
вероятно Вы с чем то путаете, 03 - сброс таймера следующим тактовым импульсом, и пока оно не станет 01 счетчик шима будет стоять

В LPC213x точно сброс таймера происходит при совпадении с MRx. Сам проверял. Если в MR0 записать 1024, то TC только на мгновение установится в 1024 и сразу же сбросится в 0. Таким образом 1024 в TC можно считать никогда не будет. В LPC2294 думаю сделано аналогично.

Цитата(andrvisht @ Aug 12 2009, 02:24) *
это так, но вроде только для атмеловских SAM, а у LPC сброс может проводить любой из MR конфигурация чего задается

Это можно делать, но уже для нестандартных ШИМов, что несоответствует:
Цитата(andrvisht)
нужно менять значение ШИМ на лету, задачка вроде стандартная, и для ней предлагается решение в виде PWM.


Цитата(andrvisht @ Aug 12 2009, 02:24) *
смысл есть, формирование охранной паузы к примеру, да и канал мне не один нужен, это лишь тестовый пример, чтобы не отвлекать от сути проблемы.

Я сначала не заметил, что режим ШИМа нестандартный. Выбран сброс TC по MR2 и одновременно сброс пина PWM2 в "0" по тому же событию. Если "в железе" наблюдается постоянное присутствие "1" на выходе PWM2 при PWMTCR = 0x09, то это есть недопустимый режим для PWM. Так как TC успевает сброситься от MR2, а пин PWM2 не успевает. Вероятно потому, что проходит через мультиплексор (на блок-схеме видно).


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 08:44
Рейтинг@Mail.ru


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