0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的PWM实验

汽车电子技术 来源:玩转单片机 作者:Julian 2023-02-10 14:55 次阅读

1、为啥要学PWM

PWM 是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其控制简单、灵活和动态响应好等优点而成为电力电子技术最广泛应用的控制方式,其应用领域包括测量,通信,功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器,因此学习 PWM 具有十分重要的现实意义。

STM32F1 除了基本定时器 TIM6 和 TIM7,其他定时器都可以产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4 路的 PWM 输出。

2、通用定时器 PWM 输出配置

#include "stm32f10x.h"


void TIM3_CH1_PWM_Init(u16 per,u16 psc)
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  TIM_OCInitTypeDef TIM_OCInitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;

  /* 开启时钟 */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//复用功能重映射就需要开启 AFIO 时钟

  /*  配置GPIO的模式和IO口 */
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
  GPIO_Init(GPIOC,&GPIO_InitStructure);

  /*第一个参数是选择是部分重映射还是完全重映射,因为映射到灯接到的GPIO才能看到呼吸效果*/
  GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射

  TIM_TimeBaseInitStructure.TIM_Period=per;   //自动装载值
  TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数
  TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;  //时钟分频
  TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式
  TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);  

  TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//比较输出模式选择
  TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//输出极性
  TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
  TIM_OC1Init(TIM3,&TIM_OCInitStructure); //输出比较通道1初始化

  TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能TIMx在 CCR1 上的预装载寄存器
  TIM_ARRPreloadConfig(TIM3,ENABLE);//使能预装载寄存器

  TIM_Cmd(TIM3,ENABLE); //使能定时器

}


void delay_nms(u16 time)
{    
   u16 i=0;  
   while(time--)
   {
      i=12000;  //自己定义
      while(i--) ;    
   }
}


int main( void )
{
  u16 i=0;  
  u8 fx=0;


  TIM3_CH1_PWM_Init(500,72-1); //频率是2Kh

  while(1)
  {
    if(fx==0)
    {
      i++;
      if(i==300)
      {
        fx=1;
      }
    }
    else
    {
      i--;
      if(i==0)
      {
        fx=0;
      }
    }
    /*修改 TIMx_CCRx 的值控制占空比*/
    TIM_SetCompare1(TIM3,i);  //i值最大可以取499,因为ARR最大值是499.
    delay_nms(10);//延迟是为了人眼能看到呼吸效果
  }
}

3、测试验证,实测可以达到初步效果,实验完成,不同硬件环境需要自定义修改对应的代码,方可实现对应效果。

--END--

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4900

    浏览量

    209906
  • 微处理器
    +关注

    关注

    11

    文章

    2131

    浏览量

    81411
  • 脉冲宽度调制

    关注

    7

    文章

    74

    浏览量

    13571
收藏 人收藏

    评论

    相关推荐

    转:基础篇--STM32视频 13.STM32 PWM输出实验

    【众想】大黄蜂STM32视频教程 ----刘洋边讲边写基础篇-- 13.STM32 PWM输出实验http://www.stmcu.org/module/forum/thread-6
    发表于 07-14 16:56

    stm32输出pwm波的程序

    stm32输出pwm波的程序,目录一、PWM简介二、实验步骤1.示例2.keil仿真3.示波器显示三、其它实验目的:用
    发表于 08-09 09:02

    STM32_PWM实验

    STM32 PWM实验,很好的学习资料,快来下载啊
    发表于 02-16 15:46 55次下载

    ALIENTEK_MINISTM32_实验8_PWM输出实验

    ALIENTEK MINISTM32 实验8 PWM输出实验,很好的资料,快来学习吧
    发表于 02-18 14:57 15次下载

    pwm输出实验

    基于STM32pwm输出实验,用DS0灯的亮度观察pwm输出的大小
    发表于 09-09 16:58 37次下载

    PWM输出实验_标准例程

    stm32开发板,标准例程-寄存器版本,PWM输出实验
    发表于 11-18 15:42 9次下载

    实验9 PWM输出实验

    正点原子战舰最新的PWM实验
    发表于 01-22 13:13 7次下载

    基于STM32单片机进行PWM输出实验的详细资料说明

    本文档的主要内容详细介绍的是基于STM32单片机进行PWM输出实验的详细资料说明包括了:1.通用定时器PWM概述,2.常用寄存器和库函数配置,3.手把手写
    发表于 03-18 08:00 18次下载
    基于<b class='flag-5'>STM32</b>单片机进行<b class='flag-5'>PWM</b>输出<b class='flag-5'>实验</b>的详细资料说明

    使用STM32F103RB单片机实现PWM呼吸灯实验的资料免费下载

    本文档的主要内容详细介绍的是使用STM32F103RB单片机实现PWM呼吸灯实验的资料免费下载。
    发表于 04-07 08:00 7次下载
    使用<b class='flag-5'>STM32</b>F103RB单片机实现<b class='flag-5'>PWM</b>呼吸灯<b class='flag-5'>实验</b>的资料免费下载

    STM32F4 PWM-DAC实验例程

    STM32F4 PWM-DAC实验例程(电源技术是sci吗)-STM32F4 PWM-DAC实验
    发表于 09-16 10:14 43次下载
    <b class='flag-5'>STM32</b>F4 <b class='flag-5'>PWM</b>-DAC<b class='flag-5'>实验</b>例程

    STM32学习心得二十七:PWM DAC数模转换实验PWM知识复习

    记录一下,方便以后翻阅~主要内容:1) PWM原理复习;2) DAC PWM数模转换原理;3) 相关实验代码解读。实验功能:官方资料:《STM3
    发表于 11-30 12:21 11次下载
    <b class='flag-5'>STM32</b>学习心得二十七:<b class='flag-5'>PWM</b> DAC数模转换<b class='flag-5'>实验</b>及<b class='flag-5'>PWM</b>知识复习

    STM32PWM与示波器实验

    STM32PWM与示波器实验STM32输出PWM波形1、PWM(脉冲宽度调制)介绍2、STM32
    发表于 12-02 13:21 24次下载
    <b class='flag-5'>STM32PWM</b>与示波器<b class='flag-5'>实验</b>

    实验4——STM32PWM和DAC练习

    文章目录实验要求一、用STM32F103输出一路PWM波形(1)PWM简介(2)STM32F1 PWM
    发表于 12-09 16:21 12次下载
    <b class='flag-5'>实验</b>4——<b class='flag-5'>STM32</b>的<b class='flag-5'>PWM</b>和DAC练习

    STM32 使用PWM实现呼吸灯

    STM32 PWM实现呼吸灯使用STM32F103ZET6 定时器4 CH2通道产生PWM波,在GPIOD,GPIO_PIN13引脚LED1产生呼吸灯效果。
    发表于 12-24 19:41 55次下载
    <b class='flag-5'>STM32</b> 使用<b class='flag-5'>PWM</b>实现呼吸灯

    STM32通过PWM控制电机速度

    STM32智能小车的实验中会用到定时器PWM输出,来改变直流电机的转速。分享本文了解如何通过PWM实现对电机速度的控制。
    的头像 发表于 07-06 09:56 2173次阅读
    <b class='flag-5'>STM32</b>通过<b class='flag-5'>PWM</b>控制电机速度