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 і окрема бібліотека для використання в інших проектах. Автор оригіналу статті просить задавати питання на його сайті німецькою або англійською мовами.
Прикріплені файли:
- Demo_25_PWM_rus.rar (220 Кб)
- ub_stm32f4_pwm_v100_rus.rar (13 Кб)