硬汉嵌入式论坛

 找回密码
 立即注册
查看: 467|回复: 6
收起左侧

[STM32H7] STM32H7B0VBT6的PWM输出占空比存在误差

[复制链接]

29

主题

62

回帖

149

积分

初级会员

积分
149
发表于 2023-5-17 14:18:57 | 显示全部楼层 |阅读模式
本帖最后由 lophost 于 2023-5-17 14:57 编辑

外接25MHZ晶振

void SystemClock_Config(void)
{
        RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
        RCC_OscInitTypeDef RCC_OscInitStruct = {0};
        HAL_StatusTypeDef ret = HAL_OK;

        /* 锁住SCU(Supply configuration update) */
        MODIFY_REG(PWR->CR3, PWR_CR3_SCUEN, 0);

        /*
      1、芯片内部的LDO稳压器输出的电压范围,可选VOS1,VOS2和VOS3,不同范围对应不同的Flash读速度,
         详情看参考手册的Table 12的表格。
      2、这里选择使用VOS1,电压范围1.15V - 1.26V。
    */
        __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

        while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}

        /* 使能HSE,并选择HSE作为PLL时钟源 */
        RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
        RCC_OscInitStruct.HSEState = RCC_HSE_ON;
        RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
        RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
        RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
        RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
               
        RCC_OscInitStruct.PLL.PLLM = 5;
        RCC_OscInitStruct.PLL.PLLN = 112;
        RCC_OscInitStruct.PLL.PLLP = 2;
        RCC_OscInitStruct.PLL.PLLR = 2;
        RCC_OscInitStruct.PLL.PLLQ = 2;               
               
        RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
        RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;       
        ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);
        if(ret != HAL_OK)
        {
        Error_Handler(__FILE__, __LINE__);
        }

        /*
       选择PLL的输出作为系统时钟
       配置RCC_CLOCKTYPE_SYSCLK系统时钟
       配置RCC_CLOCKTYPE_HCLK 时钟,对应AHB1,AHB2,AHB3和AHB4总线
       配置RCC_CLOCKTYPE_PCLK1时钟,对应APB1总线
       配置RCC_CLOCKTYPE_PCLK2时钟,对应APB2总线
       配置RCC_CLOCKTYPE_D1PCLK1时钟,对应APB3总线
       配置RCC_CLOCKTYPE_D3PCLK1时钟,对应APB4总线     
    */
        RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \
                                                                 RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1);

        RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
        RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
        RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
        RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;  
        RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
        RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
        RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
       
        /* 此函数会更新SystemCoreClock,并重新配置HAL_InitTick */
        ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
        if(ret != HAL_OK)
        {
        Error_Handler(__FILE__, __LINE__);
        }
        __HAL_RCC_CSI_ENABLE() ;

        __HAL_RCC_SYSCFG_CLK_ENABLE() ;

        HAL_EnableCompensationCell();
}


//        /* 配置PC8为TIM8_CH3功能,输出占空比50%的方波 */
         bsp_SetTIMOutPWM(GPIOC, GPIO_PIN_8, TIM8,  3, 1000000, 5000);
发现频率1MHZ是对的,占空比只有47.5%,这是为何?




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2023-5-17 17:52:12 | 显示全部楼层
单步调试进入函数bsp_SetTIMOutPWM,手动计算下占空比看看对不。
回复

使用道具 举报

29

主题

62

回帖

149

积分

初级会员

积分
149
 楼主| 发表于 2023-5-18 09:30:05 | 显示全部楼层
eric2013 发表于 2023-5-17 17:52
单步调试进入函数bsp_SetTIMOutPWM,手动计算下占空比看看对不。

周期usPeriod=139
pulse=69

也是对的呀,占空比死活不对
回复

使用道具 举报

29

主题

62

回帖

149

积分

初级会员

积分
149
 楼主| 发表于 2023-5-18 09:31:56 | 显示全部楼层
eric2013 发表于 2023-5-17 17:52
单步调试进入函数bsp_SetTIMOutPWM,手动计算下占空比看看对不。

我试了下,如果频率设置100K或者10K,占空比就对了,这是什么原因造成的?
回复

使用道具 举报

8

主题

136

回帖

160

积分

初级会员

积分
160
发表于 2023-5-21 23:00:55 | 显示全部楼层
你是用什么测量占空比的,怀疑是测量方式有问题,当频率高了以后要考虑IO的上升沿和下降沿时间的问题
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
发表于 2023-5-23 10:33:41 来自手机 | 显示全部楼层
如果是用示波器测量,还得把示波器拉到合适的时基误差才会小些
回复

使用道具 举报

14

主题

62

回帖

104

积分

初级会员

积分
104
发表于 2023-5-23 11:29:26 | 显示全部楼层
带死区控制吗,开死区的话也会有影响
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 20:02 , Processed in 0.170135 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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