尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

PWM输出(stm32)-非互补

PWM输出(stm32)-非互补 文章目录PWM输出关键点代码如下:逻辑分析仪测试结果:PWM输出关键点定时器输出PWM其实很简单,主要关注下面几件事情1.PWM频率设置:这个通过设置定时器的ARR寄存器即可,外部通过TIM_Period 来配置. TimerClk/TIM_Period 即为PWM频率.2.PWM占空比设置:这个需要设置对应通道的CCR寄存器,定时器工作时,会比较CCR的值,当计数器工作在递增模式时,当计数器的值小于CCR中的值时,输出TIM_OCPolarity配置的极性,反之输出相反的极性.3.PWM极性PWM的极性通过TIM_OCPolarity配置, 一般默认都是高电平.一般我们说占空比为20%,就是意为一个周期内高电平持续时间占一个周期时间的20%.TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_Low;代码如下:uint16_tCCR1_Val333;uint16_tCCR2_Val249;uint16_tCCR3_Val166;ntpwmout_main(void){/* 一些GPIO配置,不展示代码了*/TIM_Config();/* ----------------------------------------------------------------------- TIM1 Channel1 占空比 (TIM1_CCR1/ TIM3_ARR)* 100 50% TIM1 Channel2 占空比 (TIM1_CCR2/ TIM3_ARR)* 100 37.5% TIM1 Channel3 占空比 (TIM1_CCR3/ TIM3_ARR)* 100 25% Note: 下面把定时器的时钟设置为21M, ----------------------------------------------------------------------- *//* TIM8 使用 APB2, 它的时钟是 2 * PCLK2 SystemCoreClock (168 MHz) */PrescalerValue(uint16_t)((SystemCoreClock)/21000000)-1;/* Time base configuration */TIM_TimeBaseStructure.TIM_Period665;//PWM频率为21000000/665 31.578KTIM_TimeBaseStructure.TIM_PrescalerPrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision0;TIM_TimeBaseStructure.TIM_CounterModeTIM_CounterMode_Up;//向上计数TIM_TimeBaseInit(TIM8,TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel1 */TIM_OCInitStructure.TIM_OCModeTIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputStateTIM_OutputState_Enable;TIM_OCInitStructure.TIM_PulseCCR1_Val;//占空比为333/66550.07%TIM_OCInitStructure.TIM_OCPolarityTIM_OCPolarity_High;//占空比对应的是高电平.TIM_OC1Init(TIM8,TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM8,TIM_OCPreload_Enable);/* PWM1 Mode configuration: Channel2 */TIM_OCInitStructure.TIM_OutputStateTIM_OutputState_Enable;TIM_OCInitStructure.TIM_PulseCCR2_Val;//占空比249/66537.44%TIM_OC2Init(TIM8,TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM8,TIM_OCPreload_Enable);/* PWM1 Mode configuration: Channel3 */TIM_OCInitStructure.TIM_OutputStateTIM_OutputState_Enable;TIM_OCInitStructure.TIM_PulseCCR3_Val;//占空比166/66524.96%TIM_OC3Init(TIM8,TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM8,TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM8,ENABLE);/* 下面这句代码很重要,没有的话,PWM没有输出的*/TIM_CtrlPWMOutputs(TIM8,ENABLE);/* TIM8 enable counter */TIM_Cmd(TIM8,ENABLE);}逻辑分析仪测试结果:各个通道的PWM频率都是相同的,计算公式为PWM频率为21000000/665 31.578K.但是逻辑分析仪测出来的为31.45K,稍微有点出入(先不计较了)通道1测试结果占空比为333/66550.07%, 符合预期通道2测试结果:占空比249/66537.44%通道3测试结果:占空比166/66524.96%其它测试特意将极性改为低电平,则占空比就变成了低电平占整个周期的比例.如下图通道3的高电平变的很长.TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_Low;
返回列表