Advertisement
Guest User

Untitled

a guest
Nov 13th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.44 KB | None | 0 0
  1. // Init PWM drive
  2. static void MotorControlPwmInit(void)
  3. {
  4.     GPIO_InitTypeDef   GPIO_InitStruct;
  5.     TIM_OC_InitTypeDef pwmAConfig;
  6.     TIM_OC_InitTypeDef pwmBConfig;
  7.     TIM_OC_InitTypeDef iMeasureConfig;
  8.  
  9.     // Enable clocks
  10.     __GPIOA_CLK_ENABLE();
  11.     __GPIOB_CLK_ENABLE();
  12.     __TIM1_CLK_ENABLE();
  13.    
  14.     // First, start by configuring the 4 GPIOs
  15.    
  16.     // Configure common GPIO settings
  17.     GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;
  18.     GPIO_InitStruct.Pull  = GPIO_PULLDOWN;
  19.     GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  20.    
  21.     // TIM1_CH1 GPIO Config
  22.     // PA8
  23.     GPIO_InitStruct.Alternate       = GPIO_AF2_TIM1;
  24.     GPIO_InitStruct.Pin                 = GPIO_PIN_8;
  25.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  26.  
  27.     // TIM1_CH1N GPIO Config
  28.     // PA7
  29.     GPIO_InitStruct.Alternate       = GPIO_AF2_TIM1;
  30.     GPIO_InitStruct.Pin                 = GPIO_PIN_7;
  31.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  32.    
  33.     // TIM1_CH2 GPIO Config
  34.     // PA9
  35.     GPIO_InitStruct.Alternate       = GPIO_AF2_TIM1;
  36.     GPIO_InitStruct.Pin                 = GPIO_PIN_9;
  37.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  38.  
  39.     // TIM1_CH2N GPIO Config
  40.     // PB0
  41.     GPIO_InitStruct.Alternate       = GPIO_AF2_TIM1;
  42.     GPIO_InitStruct.Pin                 = GPIO_PIN_0;
  43.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  44.    
  45.     // Configure the timer
  46.     pwmOutTimer.Instance                = TIM1;
  47.    
  48.     pwmOutTimer.Init.ClockDivision  = TIM_CLOCKDIVISION_DIV1;
  49.     pwmOutTimer.Init.CounterMode        = TIM_COUNTERMODE_UP;
  50.     pwmOutTimer.Init.Period                 = MOTOR_CONTROL_PWM_PERIOD;
  51.    
  52.     // Commit the timer
  53.     HAL_TIM_PWM_Init(&pwmOutTimer);
  54.    
  55.     // Now, start configuring the two PWM channels
  56.    
  57.     // PWM A
  58.     pwmAConfig.OCMode                   = TIM_OCMODE_PWM1;
  59.     pwmAConfig.OCFastMode           = TIM_OCFAST_DISABLE;
  60.     pwmAConfig.OCIdleState      = TIM_OCIDLESTATE_SET;
  61.     pwmAConfig.OCNIdleState     = TIM_OCNIDLESTATE_RESET;
  62.     pwmAConfig.OCPolarity           = TIM_OCPOLARITY_HIGH;
  63.     pwmAConfig.OCNPolarity      = TIM_OCNPOLARITY_HIGH;
  64.     pwmAConfig.Pulse                    = 0;
  65.    
  66.     // PWM B
  67.     pwmBConfig.OCMode                   = TIM_OCMODE_PWM1;
  68.     pwmBConfig.OCFastMode           = TIM_OCFAST_DISABLE;
  69.     pwmBConfig.OCIdleState      = TIM_OCIDLESTATE_SET;
  70.     pwmBConfig.OCNIdleState     = TIM_OCNIDLESTATE_RESET;
  71.     pwmBConfig.OCPolarity           = TIM_OCPOLARITY_HIGH;
  72.     pwmBConfig.OCNPolarity      = TIM_OCNPOLARITY_HIGH;
  73.     pwmBConfig.Pulse                    = 0;
  74.    
  75.     // i measure
  76.     iMeasureConfig.OCMode               = TIM_OCMODE_PWM1;
  77.     iMeasureConfig.OCFastMode       = TIM_OCFAST_DISABLE;
  78.     iMeasureConfig.OCIdleState  = TIM_OCIDLESTATE_SET;
  79.     iMeasureConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  80.     iMeasureConfig.OCPolarity       = TIM_OCPOLARITY_HIGH;
  81.     iMeasureConfig.OCNPolarity  = TIM_OCNPOLARITY_HIGH;
  82.     iMeasureConfig.Pulse                = 0;
  83.    
  84.     // Commit pwmA config
  85.     HAL_TIM_PWM_ConfigChannel(&pwmOutTimer, &pwmAConfig, TIM_CHANNEL_1);
  86.    
  87.     // Commit pwmB config
  88.     HAL_TIM_PWM_ConfigChannel(&pwmOutTimer, &pwmBConfig, TIM_CHANNEL_2);
  89.    
  90.     // Commit imeasure config
  91.     HAL_TIM_PWM_ConfigChannel(&pwmOutTimer, &iMeasureConfig, TIM_CHANNEL_4);
  92.    
  93.     // Configure for deadtime
  94.     TIM_BreakDeadTimeConfigTypeDef TIM_BreakDeadTimeConfig;
  95.    
  96.     TIM_BreakDeadTimeConfig.BreakState       = TIM_BREAK_DISABLE;
  97.     TIM_BreakDeadTimeConfig.DeadTime         = 50; // Rob recommends 50
  98.     TIM_BreakDeadTimeConfig.OffStateRunMode  = TIM_OSSR_ENABLE;
  99.     TIM_BreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE;
  100.     TIM_BreakDeadTimeConfig.LockLevel        = TIM_LOCKLEVEL_1;  
  101.     TIM_BreakDeadTimeConfig.BreakPolarity    = TIM_BREAKPOLARITY_HIGH;
  102.     TIM_BreakDeadTimeConfig.AutomaticOutput  = TIM_AUTOMATICOUTPUT_ENABLE;
  103.    
  104.     // Commit the break/deadtime config
  105.     HAL_TIMEx_ConfigBreakDeadTime(&pwmOutTimer, &TIM_BreakDeadTimeConfig);
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement