Данная библиотека была написана для работы с ШИМ микроконтроллера STM32.
STM32F4 имеет много (14) таймеров и почти все из них поддерживают функцию ШИМ. Для упрощения работы было выбрано 4 таймера общего назначения (TIM2 TIM3, TIM4 TIM5), выбраны они потому, что на канал приходится по 4 таймера.
Было написано 4 библиотеки для каждого таймера, содержание которых отличается лишь именами переменных и функций.
Таким образом использование 4-х библиотек по четыре канала дает шестнадцать выводов ШИМ.
Имена используемых ШИМ должны быть указанны в H-файле и им должен быть присвоен вывод порта в C-файле (в примере используется лишь два канала ШИМ).
В H-файле указывается скважность и частота ШИМ. Эти настройки будут работать для всех 4-х каналов таймера.
Пример использования:
Требования:
Подключаемые модули 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 der PWM-Library
// Hinweis : Diese zwei Files muessen auf 8MHz stehen
// «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 Кб)