Ярлыки

_GetPixelIndex (1) _SetPixelIndex (1) 3-phase (1) 800x480 (1) АЦП (1) генератор (1) синхронный усилитель (2) структура (1) учебный курс (1) шаговый двигатель (1) ШИМ (2) accert (1) AD7608 (1) AD8429 (1) ADC (5) amplifer (1) arccos (1) arcsin (1) arctang (2) arctg (3) ARM (2) arm_sqrt_q15 (2) assembler (6) ASSERT (1) atan (2) bit (1) Bitband (1) boot (3) bootlloader (1) BUTTON (1) C (5) C# (1) CAN (2) CC2530 (5) CMSIS (4) command (1) Cordic (1) Core746I (1) CubeMX (4) DBGMCU (2) debug (2) debug.ini (1) delegate (1) Digital Potentiometers (1) DigitalPOT (1) Discovery (1) DMA (9) DMA2D (1) DSP (1) DSP library (1) DWT (1) EFM32 (5) EmWin (9) EXTI (1) FATFS (1) FMC (2) FreeRTOS (2) gl868-dual cmux (1) GPIO (4) GUI (2) GUIBuilder (1) GUIDRV_CompactColor_16 (1) HAL (3) HappyGecko (1) Hard Fault (2) heap (1) I2C (1) ID (1) ILI9320 (1) ILI9325 (1) Initialisation (1) InitLTDC (1) Instrumentithion (1) Interrupt (4) ITR (1) JTAG (1) Keil (5) LCDConf (2) lock-in (1) LTCD (1) LTDC (3) main (1) memory (1) MINI_STM32 Revision 01 (1) nBoot0 (1) NVIC (1) OnePulse (2) OSAL (4) pack (1) phase (1) printf (3) Pulse (1) PWM (12) RCC (2) RCR (1) Register (1) RESET (2) RS232 (3) RSS (1) RTC (3) RTOS-RTX (1) RTT (1) RTX-RTOS (1) SDCard (1) SDRAM (6) Segger (2) SPI (3) sqrt (3) SSD1298 (1) SSD1963 (1) Standart Peripherial Library (3) STANDBAY (1) startup (1) STemWin (8) stepper motor (1) STlink (2) STM32 (17) STM32429ZI (1) STM32Cube (1) STM32DBG.IN (1) STM32F (28) STM32F0 (4) STM32F1 (13) STM32F4 (10) STM32F4 Discovery (1) STM32F407ZG (1) STM32F429 (2) STM32F746 (1) STOP (1) string (1) struct (1) SWD (1) SWD JTAG (1) Synhronization (1) system_stm32f4xx.c (1) SystemInit (1) SysTick (1) task (4) telit (1) TIM (27) typedef (1) UART (1) USART (9) viewer (2) WM_PAINT (1) Z-stack (5) ZigBee (5)

понедельник, 15 декабря 2014 г.

Timer PWM mode

Принцип работы режима ШИМ в таймере следующий - состояние вывода переключается так же как и в режиме по сравнению, но переключение происходит и в начале счета. В итоге мы имеем импульс длину которого можно задать в регистре сравнения.

В таймерах stm32 есть два режима ШИМ:
При инкрементном режиме счетчика - высокий уровень пока счетчик меньше регистра сравнения/захвата, иначе низкий логический уровень. При декрементом режиме наоборот.
При инкрементном режиме - низкий логический уровень пока счетчик меньше регистра сравнения/захвата, иначе высокий логический уровень. При декрементом режиме также наоборот.

Такой подход имеет свои плюсы - можно получить сдвинутые по фазе сигналы, что позволяет упростить алгоритм программы.

Режим импульсной модуляции импульсов позволяет генерировать сигнал с частотой, определяемой значением регистра автоматической перезагрузки TIMx_ARR (в этот регистр заносится значение, до которого будет считать таймер) и скважностью определяемой значением TIMx_CCRx (CCR1-CCR4 – номер канала захвата/сравнения таймера, всего их может быть до 4)Режим ШИМ может быть выбран независимо для каждого канала (один ШИМ для одного OCх выхода). Задавая 110 (режим ШИМ 1), или111 (режим ШИМ 2) в битах OCxM в TIMx_CCMRx регистрах. Необходимо разрешить предварительную загрузку регистра TIMx_CCRx (задает длительность импульса) установкой бита OCxPE в регистре TIMx_CCMRx. И предварительную загрузку регистра TIMx_ARR (задает период сигнала) установкой бита ARPE в регистре TIMx_CR1. Можно задать полярность сигнала, для этого предусмотрен разряд CCxP регистра TIMx_CCER. И наконец подключение к выводу микроконтроллера канала формирования PWM разрешается установкой бита CCxE регистра TIMx_CCER.


Dead-time - это задержка фронтов сигналов на основном и комплементарном выводах канала таймера. Эта функция есть у некоторых таймеров (смотрите руководство), и нужна она бывает для исключения сквозных токов при управлении силовыми ключами [полу]мостовых схем. 





#include "stm32f10x.h"
int main()
{
  /*Инициализация GPIOA.
  Вывод PA1 настраивается для работы с выходом TIM2_CH2*/
  RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN); //Тактирование порта GPIOA и альтернативных функций
  GPIOA->CRL |= GPIO_CRL_MODE1;//Максимальная скорость порта = 50 MHz
  GPIOA->CRL &= ~GPIO_CRL_CNF1;//Очистка бит CNF[1:0] для PA1 (поскольку после сброса мк задан режим "Input Floating")
  GPIOA->CRL |= GPIO_CRL_CNF1_1; //PA1 - выход Push-Pull в режиме альтернативной функции

  /*Инициализация таймера TIM2
  Для формирования сигнала ШИМ используется канал 2 (TIM2_CH2)*/
  RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;//Тактирование таймера TIM2
  TIM2->CR1 |= TIM_CR1_ARPE;//Включен режим предварительной записи регистра автоперезагрузки
  TIM2->CCMR1 |= TIM_CCMR1_OC2PE;//Включен режим предварительной загрузки регистра сравнения
  TIM2->CCMR1 |= (TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1);//OC2M = 110 - PWM mode 1
  TIM2->ARR = 23999;//Период выходного сигнала T = 1mS
  TIM2->CCR2 = 19200;//Длительность импульса. В данном случае Duty cycle = 80%
  //TIM2->CCER |= TIM_CCER_CC2P;//Полярность выходного сигнала
  TIM2->CCER |= TIM_CCER_CC2E;//Выход канала захвата/сравнения включен
  TIM2->CR1 |= TIM_CR1_CEN;//Старт счета таймера

  while(1);
}
-----------------------------------------------------------------------------------------------------------------------


Комментариев нет:

Отправить комментарий