野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3838|回复: 0

骄阳开发板-直流无刷电机控制,定时器配置依据是什么

[复制链接]
发表于 2023-1-28 23:23:10 | 显示全部楼层 |阅读模式
  // 开启TIMx_CLK,x[1,8]
  MOTOR_TIM_CLK_ENABLE();
  /* 定义定时器的句柄即确定定时器寄存器的基地址*/
  htimx_bldcm.Instance = MOTOR_TIM(TIM8);
  /* 累计 TIM_Period个后产生一个更新或者中断*/               
  //当定时器从0计数到PWM_PERIOD_COUNT,即为5600次,为一个定时周期
  htimx_bldcm.Init.Period = PWM_PERIOD_COUNT - 1;
  // 高级控制定时器时钟源TIMxCLK = HCLK=168MHz
  // 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)/(TIM_Period)=15KHz
  htimx_bldcm.Init.Prescaler = PWM_PRESCALER_COUNT - 1;       
  // 采样时钟分频
  htimx_bldcm.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
  // 计数方式
  htimx_bldcm.Init.CounterMode=TIM_COUNTERMODE_UP;
  // 重复计数器
  htimx_bldcm.Init.RepetitionCounter=0;       
  // 初始化定时器TIMx, x[1,8]
  HAL_TIM_PWM_Init(&htimx_bldcm);

  /*PWM模式配置*/
  //配置为PWM模式1
  TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1;
  TIM_OCInitStructure.Pulse = 0;                         // 默认必须要初始为0
  TIM_OCInitStructure.OCPolarity = TIM_OCPOLARITY_HIGH;
  TIM_OCInitStructure.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  TIM_OCInitStructure.OCIdleState = TIM_OCIDLESTATE_SET;
  TIM_OCInitStructure.OCNIdleState = TIM_OCNIDLESTATE_RESET;

  HAL_TIM_PWM_ConfigChannel(&htimx_bldcm,&TIM_OCInitStructure,TIM_CHANNEL_1);    // 初始化通道 1 输出 PWM
  HAL_TIM_PWM_ConfigChannel(&htimx_bldcm,&TIM_OCInitStructure,TIM_CHANNEL_2);    // 初始化通道 2 输出 PWM
  HAL_TIM_PWM_ConfigChannel(&htimx_bldcm,&TIM_OCInitStructure,TIM_CHANNEL_3);    // 初始化通道 3 输出 PWM

  /* 配置触发源 */案例来自骄阳第十一章无刷直流电机
  HAL_TIMEx_ConfigCommutationEvent(&htimx_bldcm, TIM_TS_ITR3, TIM_COMMUTATION_SOFTWARE);
//请问TIM8为什么要配置触发源,TIM8的时钟来自系统时钟,为什么要联立TIM5-HALL的时钟,HALL的时钟案例采用10HZ,为什么不采用15hz,100hz或者其他频率;而且TIM5的周期和预分频系数是否可以分别为10000,840。TIM5与TIM8联立,TIM8为主还是TIM5为主,视频并未详细说明。对于这些问题,本学员未能理清详细的问题,还请野火老师予以解惑!十分感谢野火平台

  /* 开启定时器通道1输出PWM */
  HAL_TIM_PWM_Start(&htimx_bldcm,TIM_CHANNEL_1);

  /* 开启定时器通道2输出PWM */
  HAL_TIM_PWM_Start(&htimx_bldcm,TIM_CHANNEL_2);

  /* 开启定时器通道3输出PWM */
  HAL_TIM_PWM_Start(&htimx_bldcm,TIM_CHANNEL_3);

/************************************************************************
以下为HALL_TIM-TIM5的配置
  TIM_HallSensor_InitTypeDef  hall_sensor_cfg;  

  /* 基本定时器外设时钟使能 */
  HALL_TIM_CLK_ENABLE();

  /* 定时器基本功能配置 */
  htimx_hall.Instance = HALL_TIM;
  htimx_hall.Init.Prescaler = HALL_PRESCALER_COUNT - 1;       // 预分频
  htimx_hall.Init.CounterMode = TIM_COUNTERMODE_UP;           // 向上计数
  htimx_hall.Init.Period = HALL_PERIOD_COUNT - 1;             // 计数周期
  htimx_hall.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;     // 时钟分频

  hall_sensor_cfg.IC1Prescaler = TIM_ICPSC_DIV1;            // 输入捕获分频
  hall_sensor_cfg.IC1Polarity = TIM_ICPOLARITY_BOTHEDGE;    // 输入捕获极性
  hall_sensor_cfg.IC1Filter = 10;                           // 输入滤波
  hall_sensor_cfg.Commutation_Delay = 0U;                   // 不使用延迟触发
  HAL_TIMEx_HallSensor_Init(&htimx_hall, &hall_sensor_cfg);

  HAL_NVIC_SetPriority(HALL_TIM_IRQn, 0, 0);    // 设置中断优先级
  HAL_NVIC_EnableIRQ(HALL_TIM_IRQn);        


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-20 22:01 , Processed in 0.037009 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表