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

 
 
> 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

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


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

 


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


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