952|3

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【L99H92直流电机驱动评估板】STM32G474 PWM生成 [复制链接]

  L99H92直流电机驱动评估板配套的驱动板为:NUCLEO-G474RE,主控为STM32G474是一款高性能、低功耗的32位微控制器,集成了浮点运算单元(FPU)、数字信号处理(DSP)指令和内存保护单元(MPU)。STM32G474微控制器凭借其强大的性能、丰富的功能和灵活的配置选项,在电机控制、电源管理、工业传感器和消费类电子产品等领域有着广泛的应用前景。

一、核心性能

  • CPU架构:基于Arm Cortex-M4 32位RISC内核,集成了浮点运算单元(FPU)、数字信号处理(DSP)指令和内存保护单元(MPU),提供强大的数据处理能力。
  • 工作频率:最高可达170MHz,执行性能优异,DMIPS(Dhrystone MIPS)为213。

二、存储器配置

  • Flash存储器:提供多种容量的Flash存储器选项,如512KB或1MB,支持ECC(错误检测和纠正),具有读保护、写保护、安全存储区域和专有代码禁止读取保护(PCROP)等特性。
  • SRAM:内置128KB SRAM,部分型号可能提供不同容量的SRAM,如256KB。此外,还有指令和数据总线上的高速SRAM(CCM SRAM)用于执行加速。

三、外设和接口

  • 高精度定时器:集成高分辨率和复杂波形生成器(HRTIM),具有184ps的分辨率,适用于精确的时间控制和波形生成。
  • 模拟外设:多达5个12位ADC(模数转换器),转换速率可达4MSPS,支持硬件过采样和高达16位的分辨率。同时,还有7个12位DAC(数模转换器)通道,提供灵活的模拟信号输出。
  • 通信接口:包括多个USART/UART、I2C、SPI等通信接口,支持灵活的数据速率和多种通信协议。此外,还集成有 FDCAN 控制器、SAI(串行音频接口)、USB 2.0 全速接口等高级通信接口。

四、节能和电源管理

  • 低功耗模式:支持睡眠、停止、待机和关闭等多种低功耗模式,有助于延长设备的电池寿命。
  • 电源管理:提供上电/下电复位(POR/PDR/BOR)、可编程电压检测器(PVD)等电源管理功能,确保设备的稳定运行。

五、安全特性

  • 硬件加密:集成真随机数生成器(RNG)和CRC计算单元,提供硬件级别的加密和校验功能。
  • 存储保护:通过内存保护单元(MPU)和专有代码禁止读取保护(PCROP)等特性,保护代码和数据的安全。

六、开发和调试支持

  • 开发环境:支持STM32CubeMX工具进行图形化配置和代码生成,简化开发过程。
  • 调试接口:提供串行线调试(SWD)和JTAG调试接口,方便进行代码调试和性能分析。

  STM32CubeMX 配置 TIM1产生1Khz,占空比为50%的方波,输出引脚PC0

 

 

 

 

核心代码:

TIM_HandleTypeDef htim1;

/* TIM1 init function */
void MX_TIM1_Init(void)
{

  /* USER CODE BEGIN TIM1_Init 0 */

  /* USER CODE END TIM1_Init 0 */

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_OC_InitTypeDef sConfigOC = {0};
  TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};

  /* USER CODE BEGIN TIM1_Init 1 */

  /* USER CODE END TIM1_Init 1 */
  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 169;
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim1.Init.Period = 999;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 499;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  sBreakDeadTimeConfig.DeadTime = 0;
  sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  sBreakDeadTimeConfig.BreakFilter = 0;
  sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
  sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
  sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
  sBreakDeadTimeConfig.Break2Filter = 0;
  sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
  sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM1_Init 2 */

  /* USER CODE END TIM1_Init 2 */
  HAL_TIM_MspPostInit(&htim1);

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM1)
  {
  /* USER CODE BEGIN TIM1_MspInit 0 */

  /* USER CODE END TIM1_MspInit 0 */
    /* TIM1 clock enable */
    __HAL_RCC_TIM1_CLK_ENABLE();
  /* USER CODE BEGIN TIM1_MspInit 1 */

  /* USER CODE END TIM1_MspInit 1 */
  }
}
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(timHandle->Instance==TIM1)
  {
  /* USER CODE BEGIN TIM1_MspPostInit 0 */

  /* USER CODE END TIM1_MspPostInit 0 */

    __HAL_RCC_GPIOC_CLK_ENABLE();
    /**TIM1 GPIO Configuration
    PC0     ------> TIM1_CH1
    */
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /* USER CODE BEGIN TIM1_MspPostInit 1 */

  /* USER CODE END TIM1_MspPostInit 1 */
  }

}

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM1)
  {
  /* USER CODE BEGIN TIM1_MspDeInit 0 */

  /* USER CODE END TIM1_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_TIM1_CLK_DISABLE();
  /* USER CODE BEGIN TIM1_MspDeInit 1 */

  /* USER CODE END TIM1_MspDeInit 1 */
  }
}

 

 

 

现象

此帖出自电机控制论坛

最新回复

G4 是不是主要为电机驱动而生啊   详情 回复 发表于 2024-12-5 12:59
点赞 关注
个人签名

天行健,君子以自强不息;

 
 

回复
举报

6807

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

STM32G474 生成 PWM波应该是很轻松容易的,关键是想控制什么

此帖出自电机控制论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
收集的资料很全面,值得学习学习,收藏了,谢谢提供资料
此帖出自电机控制论坛
 
 
 

回复

665

帖子

0

TA的资源

纯净的硅(高级)

4
 

G4 是不是主要为电机驱动而生啊

此帖出自电机控制论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表