STM32F4. Урок 25 - Робота з ШИМ

Ця бібліотека була написана для роботи з ШІМ мікроконтролера STM32.
STM32F4 має багато (14) таймерів і майже всі з них підтримують функцію ШІМ. Для спрощення роботи було вибрано 4 таймери загального призначення (TIM2 TIM3, TIM4 TIM5), вибрано їх тому, що на канал припадає по 4 таймера.

Було написано 4 бібліотеки для кожного таймера, зміст яких відрізняється тільки іменами змінних і функцій.
Таким чином використання чотирьох бібліотек по чотири канали дає шістнадцять виходів ШІМ.
Імена використовуваних ШІМ повинні бути вказані в H-файлі і їм повинен бути присвоєний вихід порту в C-файлі (в прикладі використовується тільки два канали ШІМ).
У H-файлі вказується скважність і частота ШІМ. Ці налаштування будуть працювати для всіх чотирьох каналів таймера.

Приклад використання:

Вимоги:

   Підключені модулі CooCox-IDE: GPIO, TIM.
   Підтримувані бібліотеки: відсутні.

Перелічення (для ШІМ на TIM2):

typedef enum {
  PWM_T2_PB11 = 0,  // ШІМ на TIM2 до PB11
  PWM_T2_PA2  = 1   // ШІМ на TIM2 до PA2
}PWM_TIM2_NAME_t;

Функції (для ШІМ на TIM2):

void UB_PWM_TIM2_Init(void);                                 // ініціалізація ШІМ на TIM2
void UB_PWM_TIM2_SetPWM(PWM_TIM2_NAME_t pwm, uint16_t wert); // встановити значення ШІМ

Приклад використання:

//--------------------------------------------------------------
// File     : main.c
// Datum    : 26.03.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo бібліотеки ШІМ
// Hinweis  : Ці два файли повинні стояти на 8MHz
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_pwm_tim4.h"
#include "stm32_ub_adc1_single.h"

int main(void)
{
  uint16_t ad_wert;

  SystemInit(); // Ініціалізація налаштувань кварца

  // ініціалізація АЦП
  UB_ADC1_SINGLE_Init();

  // ініціалізація  ШІМ на Timer4
  // налаштування в H-файлі:
  //   роздільна здатність = 8bit (0...255)
  //   частота = 1kHz
  //   канал 1 на PD12
  //   канал 2 на PD14
  UB_PWM_TIM4_Init();

  // на PD12 встановлена скважність 25%
  UB_PWM_TIM4_SetPWM(PWM_T4_PD12,64);

  // на PD14 встановлена скважність 50%
  UB_PWM_TIM4_SetPWM(PWM_T4_PD14,128);

  while(1)
  {
    // читати значення АЦП на PA3
	ad_wert=UB_ADC1_SINGLE_Read_MW(ADC_PA3);
	// конвертувати 12 біт в 8 біт
	ad_wert=(ad_wert>>4);
	// встановити значення ШІМ на PD12
	UB_PWM_TIM4_SetPWM(PWM_T4_PD12,ad_wert);
  }
}

В додатку проект CooCox і окрема бібліотека для використання в інших проектах. Автор оригіналу статті просить задавати питання на його сайті німецькою або англійською мовами.

Оригінал статті

Прикріплені файли:

Top