详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!

38 篇文章 1 订阅
23 篇文章 1 订阅

一、stm32的pwm输出引脚是使用的IO口的复用功能。

二、T2~T5这4个通用定时器均可输出4路PWM——CH1~CH4。

三、我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!)。

四、给出了PWM频率和占空比的计算公式。

步骤如下:

1、使能TIM3时钟

RCC->APB1ENR |= 1 << 1;

2、配置对应引脚(PA6)的复用输出功能

GPIOA->CRL &= 0XF0FFFFFF;//PA6清0
GPIOA->CRL |= 0X0B000000;//复用功能输出(推挽50MHz输出)
GPIOA->ODR |= 1 << 6;//PA6上拉

3、设定计数器自动重装值及是否分频

TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)
 TIM3->PSC = psc;//预分频器,0为不分频

4、设置PWM的模式(有1和2两种模式,区别在于输出电平极性相反),根据需求选一种即可

注:TIMX_CCMR1决定CH1~CH2路,TIMX_CCMR2决定CH3~CH4路。

//TIM3->CCMR1 |= 6 << 4;//CH1 PWM1模式 

TIM3->CCMR1 |= 7 << 4;//CH1 PWM2模式 
 TIM3->CCMR1 |= 1 << 3;//CH1预装载使能

5、输出使能设置

TIM3->CCER  |= 1 << 0;//输入/捕获1输出使能

6、自动重装载预装载允许位(ARPE) 及 定时器 使能

TIM3->CR1 = 0X0080;//ARPE使能(此句不配置也行)
TIM3->CR1 |= 0X01;//使能定时器3

 

下面给出TIM3_CH1及TIM3_CH2的PWM输出代码:

void PWM_Init_TIM3_CH1(u16 arr, u16 psc)
{

    //1、使能TIM3时钟   

    RCC->APB1ENR |= 1 << 1;//使能TIM3时钟

    //2、配置对应引脚(PA6)的复用输出功能

    GPIOA->CRL &= 0XF0FFFFFF;//PA6清0
    GPIOA->CRL |= 0X0B000000;//复用功能输出(推挽50MHz输出)
    GPIOA->ODR |= 1 << 6;//PA6上拉   

    //3、设定计数器自动重装值及是否分频

    TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)
    TIM3->PSC = psc;//预分频器 0为不分频
    //4、设置PWM的模式
    TIM3->CCMR1 |= 7 << 4;//CH1 PWM2模式 
    TIM3->CCMR1 |= 1 << 3;//CH1预装载使能    
    //5、输出使能设置

    TIM3->CCER  |= 1 << 0;//输入/捕获1输出使能

    //6、自动重装载预装载允许位(ARPE) 及 定时器 使能

    TIM3->CR1 = 0X0080;//ARPE使能
    TIM3->CR1 |= 0X01;//使能定时器3
}

void PWM_Init_TIM3_CH2(u16 arr, u16 psc)
{
    RCC->APB1ENR |= 1 << 1;//使能TIM3时钟
   
    GPIOA->CRL &= 0X0FFFFFFF;//PA7清0
    GPIOA->CRL |= 0XB0000000;//复用功能输出(推挽50MHz输出)
    GPIOA->ODR |= 1 << 7;//PA7上拉

    TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)
    TIM3->PSC = psc;//预分频器 不分频

    TIM3->CCMR1 |= 7 << 12;//CH2 PWM2模式
    TIM3->CCMR1 |= 1 << 11;//CH2预装载使能

    TIM3->CCER  |= 1 << 4;//输入/捕获2输出使能
    TIM3->CR1 = 0X0080;//ARPE使能
    TIM3->CR1 |= 0X01;//使能定时器3
}

 频率:

//Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)
占空比:

//duty circle = TIM3->CCR1 / arr(单位:%)

注:本文方法的一个定时器4个通道的pwm输出的频率是相同的,但占空比可以不同!

### 回答1: 要使用STM32F103控制电机转速,您可以使用STM32PWM模块。下面是一些基本步骤: 1. 设置GPIO引脚,将其设置为PWM模式。 2. 初始化TIM定时器,并设置PWM模式以及占空比。 3. 将电机连接到GPIO引脚。 4. 在代码中编写控制逻辑,例如使用按键或其他传感器来控制PWM占空比,从而控制电机转速。 需要注意的是,不同电机的工作电压和额定电流不同,因此需要根据具体情况选择合适的电机驱动模块和电源模块,以保证电机的正常工作。同时,还需要注意PWM频率占空比的设置,这些参数的不同也会影响电机的转速和运行效果。 ### 回答2: STM32F103系列是一款硬件配置强大、功能丰富的单片机,它具有多种接口和控制器,能够满足不同的应用场景需求。其中,PWM输出作为数字信号输出的一种方式,可以用来控制电机的转速。 首先,需要了解PWM的原理。PWM度调制的缩写,它是一种利用短冲信号来模拟出稳定电压或电流的技术。在电机控制中,PWM信号的占空比(高电平时间与一个周期时间的比值)可以控制电机转速的快慢。例如,占空比50%的PWM信号,则电机实际上只有50%的时间在工作,因此转速也只有50%。 为了实现STM32F103PWM控制,需要配置硬件定时器的相关参数。例如,设置定时器计数器的时钟频率、周期、PWM占空比等。这些参数配置需要参考具体的电机规格和要求,不同规格的电机所需的PWM信号也有所不同。 常见的电机控制方案包括两种:基于模拟信号控制的模拟电机控制和基于数字信号控制的数字电机控制。对于基于数字信号的电机控制,可以使用STM32F103的定时器和PWM功能来实现。在具体的实现中,可以使用STM32CubeMX来配置相关的定时器和PWM,然后再通过编写代码来实现电机的转速控制。 在控制电机转速时,还需要注意到电机的负载情况、功率需求、保护等方面,从而实现全面的电机控制。 总之,STM32F103PWM功能可以应用在电机控制、灯光控制等多种场景中,通过合理配置和编码,可以实现精确的控制和应用。 ### 回答3: STM32F103是一种基于ARM Cortex-M3内核的微处理器,可用于开发各种应用程序,包括电机控制PWM(Pulse Width Modulation)控制是一种常见的电机控制方法,它可以通过控制电压的频率占空比来调节电机的转速。 具体实现方法如下: 1. 确定电机的驱动方式:直流电机或交流电机。 2. 配置定时器和PWM通道:使用STM32的TIM定时器和PWM通道来控制电机转速。根据电机参数和要求设置定时器的时钟频率、分频系数和自动重装值等参数,然后在定时器的TIMx_CHy PWM输出比较匹配寄存器(CCR)中设置占空比,即可控制PWM波形的占空比。 3. 编写控制程序:通过编写控制程序来调节PWM占空比,从而控制电机转速。可以使用外部传感器或编码器来检测电机的状态和转速,并根据实时反馈信号来改变PWM占空比,从而实现电机转速的控制控制程序还可以加入保护措施,如过载保护、电机反转保护等,以确保电机的安全运行。 4. 调试与优化:在实际使用中,需要对控制程序进行调试与优化,以达到最佳的控制效果和电机运行效率。可以使用示波器和信号发生器等工具来进行调试,同时还可以通过软件和硬件优化来提高电机转速、减少功耗等。 总之,STM32F103可以通过PWM控制电机转速,其具体实现方法需要根据具体的电机参数和控制要求来确定,同时需要进行调试与优化,以达到最佳的控制效果和电机运行效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值