Данная библиотека была написана для работы с ШИМ микроконтроллера 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 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 Кб)
Комментарии (3) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
ub_lib косяк с синтаксисом, заменяешь папку из оригинального проекта - все идет