CH32V003输出PWM波频率设定

要理解PWM输出频率的计算,首先需要知道定时器的基础配置,包括自动重装载寄存器 (ARR) 和预分频器 (PSC) 是如何影响定时器的时钟频率。

基本公式:

PWM频率的计算公式为:

fPWM=ftimer_clock/(ARR+1)×(PSC+1)

其中:

  • fPWM​ 是生成的PWM频率。
  • ftimer_clock​ 是定时器的输入时钟频率,就是MCU运行主频。
  • ARR 是自动重装载寄存器的值。
  • PSC 是预分频器的值。

假设你的定时器时钟频率为 48 MHz (典型的值,可能与你的具体设置有关,需参考时钟树),你使用的初始化参数 TIM1_PWMOut_Init(100, 48000-1, 50) 设置了:

  • ARR = 100(即 TIM_Period 为 100)
  • PSC = 48000 - 1(即 TIM_Prescaler 为 47999)

代入公式:

fPWM=48 MHz / (100+1)×48000≈9.98Hz

这就是你当前的10 Hz输出频率。

如果要输出10 kHz的PWM波:

你需要重新调整 ARRPSC 以获得更高的频率。假设我们仍使用48 MHz的定时器时钟,并目标频率为 10 kHz,即 fPWM=10,000 Hzf_{\text{PWM}} = 10,000 \, \text{Hz}fPWM​=10,000Hz。

使用公式,首先固定预分频器 PSCPSCPSC 为 0(意味着没有预分频),我们可以推导出适合的ARR:

ARR=(ftimer_clock / fPWM)−1=4799

还有如果需要切换PWM波输出引脚,只需要在GPIO初始化时用不同的初始化函数TIM_OC4Init。

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //指定TIM输出比较状态,即使能比较输出
    TIM_OCInitStructure.TIM_Pulse = ccp;  //指定要加载到捕获比较寄存器中的脉冲值。
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //指定输出极性
    TIM_OC4Init( TIM1, &TIM_OCInitStructure ); //根据TIM_OC4Init的选择,可以选择不同的引脚来输出pwm波。

    TIM_CtrlPWMOutputs(TIM1, ENABLE );  //启用定时器1PWM输出
    TIM_OC1PreloadConfig( TIM1, TIM_OCPreload_Disable ); //使能CCR1上的TIM1外设预加载寄存器
    TIM_ARRPreloadConfig( TIM1, ENABLE ); //使能ARR上TIM1外设预加载寄存器
    TIM_Cmd( TIM1, ENABLE ); //使能TIM1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值