微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 之————03 PWM输出

之————03 PWM输出

时间:10-02 整理:3721RD 点击:

   测试PWM输出,主要用于控制发热器功率。由于互补输出问题搞了好久,一直输不出信号。   一、实验项目
        1.1 输出10HZ与100HZ的PWM信号。
        1.2 通过KEY改变PWM的占空比与变频。
  二、配置参数
        2.1 通过原理图LD1是PA5 \LD2是PB7 \LD3是PB14 ,  在对应的管脚上设置对应的输出。

         2.2 设置HCLK时钟为16M,这样APB1与APB2 时钟就设置成了16MHz


     2.3设置对应定时器123


          计算频率:要得到10HZ频率PWM信号,为方便按百分比输出(0-100),占空比设置成0-100.
                           设置时钟是16M=16000 000HZ频率比较高
                           Prescaler设置分频器为15999,
                           分频后的频率为=16000 000/(15999+1)=1000HZ.
                           counter period设置计数为99
                           1000HZ/(99+1)=10HZ(PWM频率)
                           pulse 设置占空比10(就是输出10%)                        


          2.4设置好后导出文件并在开。
   三、编程
        3.1 main.c函数中开启定时器(TIM1 TIM3 TIM4)
      /* USER CODE BEGIN 2 */
        HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2);      //启动TIM1互补通道(注意启动互补型输出区别)
        HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
        HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2);         //启动TIM4通道
      /* USER CODE END 2 */
              这样就LD1 LD2 LD3小灯都开始闪烁了。
       3.2 stm32f4xx_it.c中设置按键中断
/* USER CODE BEGIN 0 */
#include "tim.h"
int PWM_Per =10;
int HZ=1599;
/* USER CODE END 0 */

  /* USER CODE BEGIN EXTI15_10_IRQn 1 */
   if( HAL_GPIO_ReadPin(B1_GPIO_Port,B1_Pin)==GPIO_PIN_SET)
         {        
                __HAL_TIM_SetAutoreload(&htim3,HZ);                    //改变LD1频率由10Hz改成100Hz
                __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_3,PWM_Per*10); //频率改变为100,LD1占空比放大10倍。
                __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_2,PWM_Per);    //改变LD2占空比。        
          __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,PWM_Per);    //改变LD3占空比。                 
    if(PWM_Per>100)
      {
                           PWM_Per=10;
                                 HZ=15999;
                        }else
      {
                                PWM_Per=PWM_Per+10;
      }                        
         }         
  /* USER CODE END EXTI15_10_IRQn 1 */
         3.2 设置好后按一下LD2 LD3的占空比就变化了,每次都加10% 而LD1频率从10HZ变成100HZ
       四、问题
      不知道为什么,用仿真时在Keil的逻辑分析中一直输入不了对应的端口,看不到PWM波形。





顶一下,消灭0回复啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top