UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ - UTFPR DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA - DAELT CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA MESTRADO EM SISTEMAS DE ENERGIA - PPGSE Microprocessadores Tópicos Esp. em Eletrônica Industrial - amauriassef@utfpr.edu.br paginapessoal.utfpr.edu.br/amauriassef 1
Tiva C TM4C123GH6PM Módulo PWM (Pulse Width Modulation Modulação por Largura de Pulso) - pag. 1230 A modulação da largura do pulso (PWM) é uma técnica poderosa para a codificação digital dos níveis de sinal analógico Os contadores de alta resolução são usados para gerar uma onda quadrada, e o ciclo de funcionamento da onda quadrada é modulado para codificar um sinal analógico. As aplicações típicas incluem trocas de alimentação e controle do motor. 2
PWM digital Referencia Vo (desejada) Realimentação Vo (medida) Amplificador de erro + Amplificador - + Amplificador - Modulador Saída do controlador Forma de onda Triangular/Dente de serra 3
O TM4C123GH6PM contém 2 módulos PWM: Cada módulo com 4 blocos geradores PWM e um bloco de controle, para um total de 16 saídas PWM (3 blocos para um sistema trifásico) O bloco de controle determina a polaridade dos sinais PWM, e quais sinais são transmitidos para os pinos. Bloco 0 com geradores 0 a 3 Bloco 1 com geradores 0 a 3 Cada bloco gerador PWM produz dois sinais PWM que compartilham o mesmo temporizador e frequência e podem ser programados com ações independentes ou como um único par de sinais complementares com atrasos de tempo morto inseridos. Os sinais de saída, pwma e pwmb', dos blocos de geração PWM são gerenciados pelo bloco de controle de saída antes de serem passados para os pinos do dispositivo como MnPWM0 e MnPWM1 ou MnPWM2 e MnPWM3 e assim por diante. 4
Características Uma condição de falha (fault) de manuseio de entradas para fornecer rápido desligamento de baixa latência e evitar danos ao motor a ser controlado, para um total de duas entradas Um contador de 16 bits (máximo 65535) Funciona no modo decrescente ou crescente/decrescente Frequência de saída controlada por um valor de carga de 16 bits As atualizações do valor da carga podem ser sincronizadas Produz sinais de saída em zero e valor de carga O PWM tem duas opções de fonte de relógio: Clock do sistema Clock de sistema pré-dividido Dois comparadores PWM As atualizações do valor do comparador podem ser sincronizadas Produz sinais de saída na correspondência dos valores 5
Gerador de sinal PWM O sinal PWM de saída é construído com base em ações tomadas como resultado do contador e dos sinais de saída do comparador PWM Produz dois sinais PWM independentes Gerador de tempo morto Produz dois sinais PWM com atrasos programáveis de tempo morto adequados para controle de uma ponte-h Pode ser ignorado, deixando os sinais PWM de entrada não modificados Pode iniciar uma sequência de amostras do ADC Possui um bloco de controle que determina a polaridade dos sinais PWM e quais os sinais são passados para os pinos 6
O bloco de controle PWM possui as seguintes opções: Ativação de saída PWM de cada sinal PWM Inversão de saída opcional de cada sinal PWM (controle de polaridade) Manipulação de falhas (faults) opcional para cada sinal de PWM Sincronização de temporizadores nos blocos geradores PWM Sincronização de atualizações de temporizador / comparador em todos os blocos do gerador PWM Sincronização PWM estendida de atualizações de temporizador / comparador em todos os blocos do gerador PWM Sumário do estado de interrupção dos blocos do gerador PWM Gerenciamento de falhas PWM ampliado, com múltiplos sinais de falha, polaridades programáveis e filtragem Os geradores PWM podem ser operados independentemente ou sincronizados com outros geradores 7
Diagrama em blocos do módulo PWM Sinais complementares PWM 0 8
Diagrama em blocos do módulo gerador PWM 9
Pinos 10
Comparadores LOAD é o valor no registro PWMnLOAD COMPA é o valor no registro PWMnCMPA COMPB é o valor no registro PWMnCMPB load é o sinal interno que possui um pulso alto de largura de ciclo único do clock, quando o contador == ao valor da carga zero é o sinal interno que tem um pulso alto de largura do ciclo único do relógio quando o contador é zero cmpa é o sinal interno que possui um pulso alto de largura do ciclo único do clock, quando o contador é igual a COMPA cmpb é o sinal interno que possui um pulso alto de largura do ciclo único do clock, quando o contador é igual a COMPB dir é o sinal interno que indica a direção de contagem 11
Modo PWM decrescente Modo PWM crescente-descrescente 12
Gerador de tempo morto Os sinais pwma e pwmb produzidos por cada gerador PWM são passados para o gerador de tempo morto Se o gerador da banda morta estiver desativado, os sinais PWM simplesmente passam para os sinais pwma 'e pwmb' não modificados. Com o gerador habilitado, o sinal pwmb é perdido e dois sinais PWM são gerados com base no sinal pwma. O primeiro sinal PWM de saída, pwma, é o sinal pwma com borda de subida atrasada por um valor programável. O segundo sinal PWM de saída, pwmb ', é a inversão do sinal pwma com um atraso programável adicionado entre a borda de descida do sinal pwma e a margem ascendente do sinal pwmb '. 13
Condições de falha (fault) Uma condição de falha é aquela em que o controlador deve ser sinalizado para parar a função PWM normal e, em seguida, configure os sinais MnPWMn para um estado seguro. Duas situações básicas causam condições de falha: O microcontrolador está paralisado e não pode realizar a computação necessária no tempo necessário para o controle de movimento Um erro ou evento externo é detectado Cada gerador PWM pode usar as seguintes entradas para gerar uma condição de falha: Pino MnFAULTn Uma parada do controlador gerada pelo depurador O gatilho de um comparador digital ADC 14
Bloco de controle de saída O bloco de controle de saída cuida do condicionamento final dos sinais pwma 'e pwmb' antes de ir para os pinos como os sinais MnPWMn. Através de um único registro, o registro PWM Output Enable (PWNENABLE), o conjunto de sinais PWM efetivamente habilitados para os pinos podem ser modificados. Esta função pode ser usada, por exemplo, para executar a comutação de um motor CC sem escova com uma única gravação de registro (e sem modificar os geradores PWM individuais, que são modificados pelo loop de controle de feedback). Além disso, a atualização dos bits no registro PWMENABLE pode ser configurada para ser imediata ou localmente ou globalmente sincronizada para a próxima atualização síncrona usando o registro PWM Enable Update (PWMENUPD). 15
Métodos de sincronização Cada módulo PWM fornece quatro geradores PWM, cada um fornecendo duas saídas PWM que podem ser usadas em uma grande variedade de aplicações. De um modo geral, o PWM é usado em uma das duas categorias de operação: Não-sincronizado: O gerador PWM e seus dois sinais de saída são usados sozinhos, independentemente de outros geradores PWM Sincronizado: O gerador PWM e seus dois sinais de saídas são usados em conjunto com outros geradores PWM usando uma base de tempo comum e unificada. Se vários geradores PWM estiverem configurados com o mesmo valor de carga contador, a sincronização pode ser usada para garantir que eles também tenham o mesmo valor de contagem (os geradores PWM devem ser configurados antes de serem sincronizados). Com esta característica, mais de dois sinais MnPWMn podem ser produzidos com uma relação conhecida entre as bordas desses sinais porque os contadores sempre têm o mesmo valores. 16
Inicialização e configuração: O exemplo mostra como inicializar o PWM Generator 0 com uma frequência de 25 khz (clock do sistema de 20 MHz), duty cycle de 25% no pino MnPWM0 e duty cycle de 75% no pino MnPWM1. 1) Ative o relógio PWM escrevendo um valor de 0x0010.0000 para o registro RCGC0 no módulo de controle do sistema (p. 456). 2) Ative o relógio no módulo GPIO apropriado através do registro RCGC2 no módulo de Controle do Sistema (p. 464). 3) No módulo GPIO, habilite os pinos apropriados para sua função alternativa usando o registro GPIOAFSEL. Para determinar quais GPIOs devem ser configurados (p. 1344). 4) Configure os campos PMCn no registro GPIOPCTL para atribuir os sinais PWM aos pinos apropriados (consulte a p. 688). 5) Configure o registro de Configuração do Relógio de Modo de Corrida (RCC) no módulo de Controle do Sistema para usar a divisão PWM (USEPWMDIV) e o divisor (PWMDIV) para dividir por 2 (000). 17
6) Configure o gerador PWM para o modo de contagem regressiva com atualizações imediatas para os parâmetros. Escreva o registro PWM0CTL com um valor de 0x0000.0000. Escreva o registro PWM0GENA com um valor de 0x0000.008C. Escreva o registro PWM0GENB com um valor de 0x0000.080C. 7) Defina o período. Para uma frequência de 25 KHz, o período = 1 / 25,000 ou 40 µs. A fonte do relógio PWM é de 10 MHz; o relógio do sistema dividido por 2. Assim, existem 400 tiques do relógio por período Use este valor para configurar o registro PWM0LOAD. No modo contagem decrescente, defina o campo LOAD no registro PWM0LOAD no período solicitado menos um. Escreva o registro PWM0LOAD com um valor de 0x0000.018F = 399 18
8) Defina a largura de pulso do pino MnPWM0 para um ciclo de trabalho de 25% (na verdade 75% - cnt. decrescente). Escreva o registro PWM0CMPA com um valor de 0x0000.012B = 299 9) Defina a largura de pulso do pino MnPWM1 para um ciclo de trabalho de 75%. Escreva o registro PWM0CMPB com um valor de 0x0000.0063 = 99 10) Inicie os temporizadores no gerador PWM 0. Escreva o registro PWM0CTL com um valor de 0x0000.0001. 11) Ativar saídas PWM. Escreva o registro PWMENABLE com um valor de 0x0000.0003. 19
APIs do TivaWare Projeto Timer Incluir o arquivo pwm.h #include "driverlib/pwm.h" //************************************************************************* / / API Function prototypes //************************************************************************* extern void PWMGenConfigure(uint32_t ui32base, uint32_t ui32gen, uint32_t ui32config); extern void PWMGenPeriodSet(uint32_t ui32base, uint32_t ui32gen, uint32_t ui32period); extern uint32_t PWMGenPeriodGet(uint32_t ui32base, uint32_t ui32gen); extern void PWMGenEnable(uint32_t ui32base, uint32_t ui32gen); extern void PWMGenDisable(uint32_t ui32base, uint32_t ui32gen); extern void PWMPulseWidthSet(uint32_t ui32base, uint32_t ui32pwmout, uint32_t ui32width); extern uint32_t PWMPulseWidthGet(uint32_t ui32base, uint32_t ui32pwmout); extern void PWMDeadBandEnable(uint32_t ui32base, uint32_t ui32gen, uint16_t ui16rise, uint16_t ui16fall); 20
Exemplo: Frequencia de PWM de 250 Hz e duty de 0,01% (clock de 50MHz/4) void Init_PWM (void){ SysCtlPWMClockSet(SYSCTL_PWMDIV_4); //50/4 = 12,5MHz SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPinConfigure(GPIO_PF1_M1PWM5); GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_1); PWMGenConfigure(PWM1_BASE, PWM_GEN_2,PWM_GEN_MODE_DOWN PWM_GEN_MODE_NO_SYNC); PWMGenPeriodSet(PWM1_BASE, PWM_GEN_2, 50000); PWMPulseWidthSet(PWM1_BASE, PWM_OUT_5, 50); IntMasterEnable(); PWMIntEnable(PWM1_BASE, PWM_INT_GEN_2); PWMGenIntTrigEnable(PWM1_BASE, PWM_GEN_2, PWM_INT_CNT_LOAD); IntEnable(INT_PWM1_2); PWMOutputState(PWM1_BASE, PWM_OUT_5_BIT, true); PWMGenEnable(PWM1_BASE, PWM_GEN_2); } 21
Interrupção do PWM //***************************************************************************** // // The interrupt handler for the for PWM1 interrupts. // //***************************************************************************** void PWM1_GEN2_IntHandler(void) { // Clear the PWM0 LOAD interrupt flag. PWMGenIntClear(PWM1_BASE, PWM_GEN_2, PWM_INT_CNT_LOAD); // If the duty cycle is less or equal to 75% then add 0.1% to the duty // cycle. Else, reset the duty cycle to 0.1% cycles. Note that 50 is // 0.01% of the period (50000 cycles). } if((pwmpulsewidthget(pwm1_base, PWM_OUT_5) + 50) <= ((PWMGenPeriodGet(PWM1_BASE, PWM_GEN_2) * 3) / 4)) { PWMPulseWidthSet(PWM1_BASE, PWM_OUT_5, PWMPulseWidthGet(PWM1_BASE, PWM_OUT_5) + 50); } else { PWMPulseWidthSet(PWM1_BASE, PWM_OUT_5, 50); } 22
Referências Main page: www.ti.com/launchpad Tiva C Series TM4C123G LaunchPad: http://www.ti.com/tool/ek-tm4c123gxl TM4C123GH6PM folder: http://www.ti.com/product/tm4c123gh6pm LaunchPad Wiki: www.ti.com/launchpadwiki Valvano, Jonathan. Embedded Systems (Introduction to Arm\xae Cortex\u2122-M Microcontrollers) (p. 260). Jonathan Valvano. E Microcontroladores ARM7 (Philips - Família LPC213x) : O poder dos 32 Bits - teoria e prática / Daniel Rodrigues de Sousa Microcontroladores ARMTM CortexTM-M3 (família LPC175x/6x da NXP) : Programação em linguagem C / Alberto Noboru Miyadaira Introdução aos microcontroladores ARM Cortex-M4 Tiva C Series da Texas Instruments, Stéfano Andrade de Souza, Março de 2015 23