roboforum.ru

Технический форум по робототехнике.

 

LPC21xx и ШИМ.Не изменяется значение PWMMR1

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение Planet001 » 13 май 2014, 18:16

Наконец-то нашел как сделать разрядность ШИМ больше,чем Atmega16 на частоте 25кГц.
Но в Bascom значение менялось на лету.
А тут - нет((.

После задержки в регистр пишется новое значение (в этот момент в порту 0.2 значение 1 для информативности в эмляторе,но Duty Cycle не возрастает:(
Что тут не хватает?




Код: Выделить всёРазвернуть
#include "lpc21xx.h"




int main(void)
{
    /*Assuming that PLL0 has been setup with CCLK = 60Mhz and PCLK also = 60Mhz.*/
    /*This is a per the Setup & Init Sequence given in the tutorial*/
   
int a;
   
   PINSEL0 = (1<<1); // Select PWM1 output for Pin0.0

   //T1EMR   = (1<<11);
   
   PWMPR   = 0; // 1 micro-second resolution
   
   PWMMR0  = 600; // freq (T-period 15 000 000\600)

   PWMMR1  = 50; // duty cycle

   PWMMCR  = (1<<1); // Reset PWMTC on PWMMR0 match

   PWMPCR  = (1<<9); // enable PWM output
   
   PWMLER  = (0<<1);  // update MR0 and MR1
   
   PWMTCR  = (1<<0)|(1<<3); //ENABLE COUNTER

 
   




for (a=1;a<100000;a++)
{}   
   

  //PINSEL2 = (0<<2)|(0<<3);

   IO0DIR  = (1<<2);
  IO0SET  = (1<<2);   // test port on     
   



}

Planet001
 
Сообщения: 10
Зарегистрирован: 13 май 2014, 18:01

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение avr123.nm.ru » 13 май 2014, 21:10

Посмотрите примеры компилятора или на keil.com и сравните. :D и возможно вот это

/*Assuming that PLL0 has been setup with CCLK = 60Mhz and PCLK also = 60Mhz.*/

должно быть кодом выражено или старт файлом.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение Planet001 » 13 май 2014, 21:14

Еще погуглил..
Вот так работает.
Но теперь другая проблема и ее я никак не могу понять.

После выполнения программы ШИМ не останавливается на последнем значении, а прыгает то 50,то 300.
Что не так?






Код: Выделить всёРазвернуть
#include "lpc21xx.h"


int main(void)
{
    /*Assuming that PLL0 has been setup with CCLK = 60Mhz and PCLK also = 60Mhz.*/
    /*This is a per the Setup & Init Sequence given in the tutorial*/
   
int a;
   
   PINSEL0 = (1<<1); // Select PWM1 output for Pin0.0
   
   PWMPR   = 0; // 1 micro-second resolution
   
   PWMMR0  = 600; // freq (T-period 15 000 000\600)

   PWMMR1  = 50; // duty cycle

   PWMMCR  = (1<<1); // Reset PWMTC on PWMMR0 match

   PWMPCR  = (1<<9); // enable PWM output
   
   PWMLER  = (0<<1);  // no update MR0 and MR1
   
   PWMTCR  = (1<<0)|(1<<3); //ENABLE COUNTER

 
   




for (a=1;a<100000;a++)
{}   

PWMMR1 = 300 ;
PWMLER = ( 1 << 1 ) ;
   
   
   
   
  //PINSEL2 = (0<<2)|(0<<3);

   IO0DIR  = (1<<2);
  IO0SET  = (1<<2);   // test port on     
   

for (a=1;a<100000;a++)
{}   
   
PWMMR1 = 50 ;
PWMLER = ( 1 << 1 ) ;   


}



Planet001
 
Сообщения: 10
Зарегистрирован: 13 май 2014, 18:01

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение avr123.nm.ru » 13 май 2014, 21:17

попробуйте перед последней скобкой поставить
while(1);
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение Planet001 » 13 май 2014, 22:54

avr123.nm.ru писал(а):Посмотрите примеры компилятора или на keil.com и сравните. :D и возможно вот это

/*Assuming that PLL0 has been setup with CCLK = 60Mhz and PCLK also = 60Mhz.*/

должно быть кодом выражено или старт файлом.


а может не будем?

Добавлено спустя 2 минуты 59 секунд:
avr123.nm.ru писал(а):попробуйте перед последней скобкой поставить
while(1);


Благодарю за конструктивную помощь.Спасибо.А то уж подумал что-то:)...

Добавлено спустя 1 час 32 минуты 48 секунд:
Возник еще вопросик.
Когда я выключаю выход ШИМ
PWMPCR = (0<<9); // disable PWM output
То ШИМ в последний момент выстреливает на 3.3 вольта.Это видно на присоединенном к ноге конденсаторе,который заряжается через резистор импульсами ШИМ.То есть Duty Cycle во время работы выставлен на 0,5 вольта на конденсаторе и при PWMPCR = (0<<9) вольтаж на конденсаторе сразу 3.3
Как сделать,чтобы шим выключался в ноль,а не в 1?
Planet001
 
Сообщения: 10
Зарегистрирован: 13 май 2014, 18:01

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение avr123.nm.ru » 13 май 2014, 23:06

наверно 0 вывести на ножку.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение Planet001 » 13 май 2014, 23:28

avr123.nm.ru писал(а):наверно 0 вывести на ножку.


да..еще раз спасибо.
Planet001
 
Сообщения: 10
Зарегистрирован: 13 май 2014, 18:01

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение Planet001 » 14 май 2014, 05:06

и еще вопрос...
Формула вычисления частоты ШИМ,которую я нашел в каком-то форуме такова:
60 мгц\4=15мгц, 15мгц\значение PWMMR0.
А есть ли методы, позволяющие делить 60 мгц, например на 2 или совсем не делить?
Как бы получить 10 бит на частоте ~30 кгц?
Planet001
 
Сообщения: 10
Зарегистрирован: 13 май 2014, 18:01

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение avr123.nm.ru » 15 май 2014, 00:22

делитель наверно в стартап файле настраивается.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение Planet001 » 15 май 2014, 14:40

Уже перед предыдущим постом пробовал менять разные значения.Потом в протеусе эмулировал.Частота ШИМ никак не меняется. Ни туда , ни сюда.

Вот эта секция.

Код: Выделить всёРазвернуть
; VPBDIV definitions
VPBDIV          EQU     0xE01FC100      ; VPBDIV Address

;// <e> VPBDIV Setup
;// <i> Peripheral Bus Clock Rate
;//   <o1.0..1>   VPBDIV: VPB Clock
;//               <0=> VPB Clock = CPU Clock / 4
;//               <1=> VPB Clock = CPU Clock
;//               <2=> VPB Clock = CPU Clock / 2
;//   <o1.4..5>   XCLKDIV: XCLK Pin
;//               <0=> XCLK Pin = CPU Clock / 4
;//               <1=> XCLK Pin = CPU Clock
;//               <2=> XCLK Pin = CPU Clock / 2
;// </e>
VPBDIV_SETUP    EQU     2
VPBDIV_Val      EQU     2


; Phase Locked Loop (PLL) definitions
PLL_BASE        EQU     0xE01FC080      ; PLL Base Address
PLLCON_OFS      EQU     0x00            ; PLL Control Offset
PLLCFG_OFS      EQU     0x04            ; PLL Configuration Offset
PLLSTAT_OFS     EQU     0x08            ; PLL Status Offset
PLLFEED_OFS     EQU     0x0C            ; PLL Feed Offset



PLLCON_PLLE     EQU     (1<<0)          ; PLL Enable
PLLCON_PLLC     EQU     (1<<1)          ; PLL Connect
PLLCFG_MSEL     EQU     (0x1F<<0)       ; PLL Multiplier
PLLCFG_PSEL     EQU     (0x03<<5)       ; PLL Divider


PLLSTAT_PLOCK   EQU     (1<<10)         ; PLL Lock Status

;// <e> PLL Setup
;//   <o1.0..4>   MSEL: PLL Multiplier Selection
;//               <1-32><#-1>
;//               <i> M Value
;//   <o1.5..6>   PSEL: PLL Divider Selection
;//               <0=> 1   <1=> 2   <2=> 4   <3=> 8
;//               <i> P Value
;// </e>
PLL_SETUP       EQU     0
PLLCFG_Val      EQU     0x00000024





Planet001
 
Сообщения: 10
Зарегистрирован: 13 май 2014, 18:01

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение avr123.nm.ru » 15 май 2014, 15:39

Пробуйте в симуляторе в KEIL
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: LPC21xx и ШИМ.Не изменяется значение PWMMR1

Сообщение Planet001 » 15 май 2014, 17:18

Да, симулятор помог.Я там посмотрел какой регистр управляет делением.Стояло,конечно же,1\4.
Потом в теле main просто жестко прописал:
VPBDIV = 0x01;
И пошло как нужно. 30 кгц 2000 позиций, вместо ~500-600
Спасибо.
Planet001
 
Сообщения: 10
Зарегистрирован: 13 май 2014, 18:01


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Mail.ru counter