您现在的位置是:首页 >技术交流 >搭建stm32电机控制代码框架(四)——单路PWM生成网站首页技术交流
搭建stm32电机控制代码框架(四)——单路PWM生成
简介搭建stm32电机控制代码框架(四)——单路PWM生成
STM32中单路PWM的生成一般是基于某一个通用定时器,本次小实验选取TIM2通用定时器,选择PA5作为PWM端口输出。配置步骤如下:
第一步:配置外部晶振与基本的时钟,如下图所示。
(1)选择外部晶振
(2)配置时钟树,如下图所示,TIM2的时钟总线挂在ABP1上,此时时钟源为72M
第二步:配置GPIO,配置GPIO_PA5为TIM2_CH1的输出端口。
第三步:配置TIM2时钟,其配置如下图所示,图中1-6分别为
- 选择时钟源为内部时钟;
- 选择通道1为PWM生成模式;
- TIM2内部分频系数为7200-1=7199,到达7200分频的效果;
- 设置累加计数的TPRD值为5000 - 1 = 4999 达到的是5000的效果;
- Pulse设置占空比,1000/5000 = 20% 此时占空比为20%。
- PWM比较值电平跳变的模式,模式1是到达比较值跳变为低,模式2是到达比较值跳变为高,一个先高后低,一个先低后高。
第四步:在代码内打开定时器TIM2的第一个通道,这步很关键,必须要用户自己打开,CUBEMX仅仅只是帮我们把底层配置好,这个开关还是靠我们自己定义,代码如下。
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); //主要是这句
第五步:进行实验,实验结果如下图所示,第一张是mode1,第二章是mode2,结果如设计所得。这里需要解释一下的是为什么周期是500ms,因为时钟是72M的,但是分频数是7200,所以此时TIM2的7200个时钟脉冲代表1s,而此时count period的值是5000,5000/10000*1s = 0.5s所以周期就是500ms。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。