Robomaster-stm32-PWM学习笔记(stm32控制pwm输出)

电子说

1.2w人已加入

描述

学习笔记:

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

PWM波

PWM波

PWM波

  1. 将通用定时器分为四个部分:
    1-选择时钟 2-时基电路 3-输入捕获 4-输出比较

PWM波

PWM波

PWM波

PWM波

PWM波

PWM波

PWM波

PWM波

PWM波

PWM波

PWM波

PWM波

实践1-pwm-led闪烁

要求产生周期为200ms,占空比为50%的PWM信号来控制led灯。

1.cubemax配置

PWM波

PWM波

PWM波

由原理图可知,led引脚复用为tim5

PWM波

PWM波

PWM波

周期为200ms,占空比为50%,Tim5挂在APB1总线上,CLK = 84MHZ;假设PSC =8399,根据公式ARR = 1999,CRR = 1000.

PWM波

PWM波

生成代码

main.c 添加

/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim5,TIM_CHANNEL_1); //启动定时器5通道1输出周期为200ms,占空比50%得PWM信号。
  /* USER CODE END 2 */

将代码下载到开发板中,实验结果led每隔100ms闪烁。

实践2-PWM-呼吸灯

周期改为20ms,因为大于50hz使人眼不会察觉出闪烁现象。

占空比从0%-100%反复,从而实现呼吸灯。

根据公式可得,PSC=8399,ARR=199。

占空比从0%开始,所以CRR 的初值为 0,根据公式计算CCR = 200时,占空比为100%。

PWM波

PWM波

生成代码

mian.c 修改

/* USER CODE BEGIN 2 */

  uint16_t i =0; //CCR
  uint16_t step = 10; //步进值,使呼吸效果明显
  HAL_TIM_PWM_Start(&htim5,TIM_CHANNEL_1);//启动定时器5的通道1产生PWM


  /* USER CODE END 2 */


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    //知识点:在for/while等循环内部定义的变量属于局部变量,当for循环结束以后,局部变量就会被销毁
    for(i=0;i<=200;i = i+step)
    {
      __HAL_TIM_SET_COMPARE(&htim5,TIM_CHANNEL_1,i);
      HAL_Delay(200);
    }



    /* USER CODE BEGIN 3 */
  }

实验现象,出现呼吸灯效果并反复。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分