تولید پالس با واحد PWM

تولید پالس با واحد PWM



خلاصه

در این آموزش و در ادامه مبحث تایمر با واحد PWM از میکروکنترلر آشنا می شویم و موجی با فرکانس 10 کیلوهرتز و دوره وظیفه مشخص تولید می کنیم. با تغییر دوره وظیفه در گام های 10 درصدی میزان روشنایی LEDبرد آموزشی را کنترل می کنیم.



مشاهده ویدیو


ایجاد پروژه در نرم افزار کیوب






در نرم افزار Keil می توان از قسمت Application/User به برنامه اصلی دسترسی داشت



تشریح کد برنامه


هدرفایل های مورد نیاز پروژه


[pastacode lang=”c” manual=”%2F*%20Includes%20——————————————————————*%2F%0A%23include%20%22main.h%22%0A%23include%20%22stm32f1xx_hal.h%22″ message=”” highlight=”” provider=”manual”/]


پیش تعریف توابع ایجاد شده توسط نرم افزار کیوب


[pastacode lang=”c” manual=”%2F*%20Private%20function%20prototypes%20———————————————–*%2F%0Avoid%20SystemClock_Config(void)%3B%0Astatic%20void%20MX_GPIO_Init(void)%3B%0Astatic%20void%20MX_TIM4_Init(void)%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0Avoid%20HAL_TIM_MspPostInit(TIM_HandleTypeDef%20*htim)%3B” message=”” highlight=”” provider=”manual”/]


متغیرهای مورد استفاده در برنامه

[pastacode lang=”c” manual=”%2F*%20Private%20variables%20———————————————————*%2F%0ATIM_HandleTypeDef%20htim4%3B%0A%0A%2F*%20USER%20CODE%20BEGIN%20PV%20*%2F%0A%2F*%20Private%20variables%20———————————————————*%2F%0Achar%20duty%3D0%3B%0A%2F*%20USER%20CODE%20END%20PV%20*%2F” message=”” highlight=”” provider=”manual”/]


جزئیات تابع MX_GPIO_Init


[pastacode lang=”c” manual=”%0A%2F**%20Configure%20pins%20as%20%0A%20%20%20%20%20%20%20%20*%20Analog%20%0A%20%20%20%20%20%20%20%20*%20Input%20%0A%20%20%20%20%20%20%20%20*%20Output%0A%20%20%20%20%20%20%20%20*%20EVENT_OUT%0A%20%20%20%20%20%20%20%20*%20EXTI%0A*%2F%0Astatic%20void%20MX_GPIO_Init(void)%0A%7B%0A%0A%20%20%2F*%20GPIO%20Ports%20Clock%20Enable%20*%2F%0A%20%20__HAL_RCC_GPIOD_CLK_ENABLE()%3B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]


جزئیات تابع MX_TIM4_Init

[pastacode lang=”c” manual=”%2F*%20TIM4%20init%20function%20*%2F%0Astatic%20void%20MX_TIM4_Init(void)%0A%7B%0A%0A%20%20TIM_ClockConfigTypeDef%20sClockSourceConfig%3B%0A%20%20TIM_MasterConfigTypeDef%20sMasterConfig%3B%0A%20%20TIM_OC_InitTypeDef%20sConfigOC%3B%0A%0A%20%20htim4.Instance%20%3D%20TIM4%3B%0A%20%20htim4.Init.Prescaler%20%3D%2071%3B%0A%20%20htim4.Init.CounterMode%20%3D%20TIM_COUNTERMODE_UP%3B%0A%20%20htim4.Init.Period%20%3D%2099%3B%0A%20%20htim4.Init.ClockDivision%20%3D%20TIM_CLOCKDIVISION_DIV1%3B%0A%20%20htim4.Init.AutoReloadPreload%20%3D%20TIM_AUTORELOAD_PRELOAD_DISABLE%3B%0A%20%20if%20(HAL_TIM_Base_Init(%26htim4)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%20%20sClockSourceConfig.ClockSource%20%3D%20TIM_CLOCKSOURCE_INTERNAL%3B%0A%20%20if%20(HAL_TIM_ConfigClockSource(%26htim4%2C%20%26sClockSourceConfig)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%20%20if%20(HAL_TIM_PWM_Init(%26htim4)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%20%20sMasterConfig.MasterOutputTrigger%20%3D%20TIM_TRGO_RESET%3B%0A%20%20sMasterConfig.MasterSlaveMode%20%3D%20TIM_MASTERSLAVEMODE_DISABLE%3B%0A%20%20if%20(HAL_TIMEx_MasterConfigSynchronization(%26htim4%2C%20%26sMasterConfig)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%20%20sConfigOC.OCMode%20%3D%20TIM_OCMODE_PWM1%3B%0A%20%20sConfigOC.Pulse%20%3D%2049%3B%0A%20%20sConfigOC.OCPolarity%20%3D%20TIM_OCPOLARITY_HIGH%3B%0A%20%20sConfigOC.OCFastMode%20%3D%20TIM_OCFAST_DISABLE%3B%0A%20%20if%20(HAL_TIM_PWM_ConfigChannel(%26htim4%2C%20%26sConfigOC%2C%20TIM_CHANNEL_1)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%20%20HAL_TIM_MspPostInit(%26htim4)%3B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]

تابع main



[pastacode lang=”c” manual=”int%20main(void)%0A%7B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%201%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%201%20*%2F%0A%0A%20%20%2F*%20MCU%20Configuration———————————————————-*%2F%0A%0A%20%20%2F*%20Reset%20of%20all%20peripherals%2C%20Initializes%20the%20Flash%20interface%20and%20the%20Systick.%20*%2F%0A%20%20HAL_Init()%3B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%20Init%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%20Init%20*%2F%0A%0A%20%20%2F*%20Configure%20the%20system%20clock%20*%2F%0A%20%20SystemClock_Config()%3B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%20SysInit%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%20SysInit%20*%2F%0A%0A%20%20%2F*%20Initialize%20all%20configured%20peripherals%20*%2F%0A%20%20MX_GPIO_Init()%3B%0A%20%20MX_TIM4_Init()%3B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%202%20*%2F%0A%09HAL_TIM_PWM_Start(%26htim4%2CTIM_CHANNEL_1)%3B%0A%20%20%2F*%20USER%20CODE%20END%202%20*%2F%0A” message=”” highlight=”” provider=”manual”/]


روتین اجرای برنامه


[pastacode lang=”c” manual=”%20%20%2F*%20Infinite%20loop%20*%2F%0A%20%20%2F*%20USER%20CODE%20BEGIN%20WHILE%20*%2F%0A%20%20while%20(1)%0A%20%20%7B%0A%20%20%2F*%20USER%20CODE%20END%20WHILE%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%203%20*%2F%0A%09htim4.Instance-%3ECCR1%20%3D%20duty%20%3B%20%0A%09HAL_Delay(100)%3B%0A%09duty%2B%3D10%3B%0A%09if%20(duty%3E90)%20duty%3D0%3B%09%0A%20%20%7D%0A%20%20%2F*%20USER%20CODE%20END%203%20*%2F” message=”” highlight=”” provider=”manual”/]


پروژه PWM

کانال تلگرام نامینیک

گروه تلگرام نامینیک ARM STM32


Tags: , , , , , ,