0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32CubeMX输出可调频率与占空比的PWM

撞上电子 2023-05-11 10:00 次阅读

1,新建工程,我选的是STM32F103ZET6芯片,选择定时器的PWM功能。

bdeb2a98-ef9b-11ed-ba01-dac502259ad0.png

2、配置时钟,我这里配的是内部时钟,有需要的可以自己改。be058e4c-ef9b-11ed-ba01-dac502259ad0.png

3、配置定时器,默认就可以,因为代码里面需要对配置的初始化代码进行修改的,而修改后才可以实现该功能。be25d5ee-ef9b-11ed-ba01-dac502259ad0.png

4、生成代码后,修改代码,找到PWM初始化函数,修改为如下,注意要把初始化函数前面的 static 关键字也去掉,而且函数声明也要跟着修改。

void MX_TIM4_Init(uint16_t pre,uint16_t pul) //修改初始化函数,改变频率与PWM{ //占空比=Pulse/Period;频率:f=48M/pre/per
TIM_MasterConfigTypeDef sMasterConfig; TIM_OC_InitTypeDef sConfigOC;
htim4.Instance = TIM4; htim4.Init.Prescaler =pre; //分频(关键) htim4.Init.Period = 100-1;//计数周期 (关键,若100的计数周期对于一些频率跟占空比误差大的话,可以自己计算更改调试计数周期大小) htim4.Init.CounterMode = TIM_COUNTERMODE_UP; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }
sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = pul;//脉冲计数(关键) sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }
HAL_TIM_MspPostInit(&htim4);
}

5、接着在自己需要的代码里插入,PWM开始停止函数就可以啦。

HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); //PWM开启函数MX_TIM4_Init(uint16_t pre,uint16_t pul);//改变参数就可实现改变占空比跟频率的目的了HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);//停止PWM

这里我说一下核心部分: 占空比=(Pulse/Period)*100%; 频率:f = CLK/Prescaler/Period; 影响PWM占空比跟频率的参数这主要是Pulse,Prescaler,Period;频率跟占空比都与Period(计数周期)有关,只要我们把计数周期定下来,修改Prescaler、跟Pulse这两个值,就可以直接修改PWM的频率跟占空比了。具体要多少的占空比跟频率,就自己计算一下就可以了。 举个例子说明一下:这里Period设为100,如果我要设定一个频率为1500Hz、占空比5%的PWM波,只需要传入参数Pulse=5(占空比=Pulse/Period*100%=(5/100)*100%=5%),Prescaler=320(f=系统频率/分频/计数周期=48M/320/100=1500Hz),逻辑分析仪采集结果如下图:

be43cb3a-ef9b-11ed-ba01-dac502259ad0.png

补充一点:如果频率要求快,而且精度要求高的,就选用晶振大的 STM32 系列,晶振大误差就小,这里如果定好占空比的话,只调频率可以调到很准确,或者定好频率调占空比也是一样,如果要同时改变频率跟占空比,频率高了就会有误差了,所以选用大晶振可以减小点误差。

附一个根据我这里的晶振大小算出来的频率占空比表(已全部用示波器调试验证):

be5c1f32-ef9b-11ed-ba01-dac502259ad0.png

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

    关注

    114

    文章

    5181

    浏览量

    213796
  • STM32
    +关注

    关注

    2270

    文章

    10895

    浏览量

    355729
收藏 人收藏

    评论

    相关推荐

    PWM调频的区别 基于PWM的电源管理方案

    的基本原理是通过调节脉冲信号的占空比(即高电平时间占总时间的比例)来控制输出电压或电流的大小。它利用一系列宽度不同的脉冲信号来模拟所需的电压或电流波形。 调频则是通过改变信号的频率来控
    的头像 发表于 11-28 16:42 335次阅读

    使用STM32CubeMX输出PWM,并制作呼吸灯效果

    概述 本篇文章主要介绍如何使用STM32CubeMX输出PWM,并制作呼吸灯效果。 硬件准备 首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板: 选择芯片型号 配置时钟源
    发表于 09-04 10:38

    PLC输出pwm信号怎么看频率

    一、PWM信号的基本概念 脉冲宽度调制(PWM) :PWM是一种对模拟信号进行数字控制的方法。它通过改变脉冲的宽度来控制信号的占空比,从而实现对输出
    的头像 发表于 08-08 15:32 964次阅读

    STM32CUBEMX界面重影严重的原因?怎么解决?

    STM32CUBEMX 界面重影严重,有相同问题的吗
    发表于 06-03 07:46

    STM32cubemx的库和KEIL的库有什么不同?

    STM32cubemx软件有对应各个系列芯片的库. 使用cubemx,生成代码框架,比如生成MDK的代码框架。但MDK也有自己的PACK。那么MDK的PACK和CUBEMX的库有什么区别,两者时什么关系呢?
    发表于 04-11 06:02

    STM32CubeMX生成代码软件卡死的原因?怎么解决?

    STM32CubeMX 生成代码 软件卡死!在生成代吗时,一直卡死在如图所示的状态,进度条一直就不走了。试过多次,一直如此。请问如何解决该问题,原因可能是什么?STM32CubeMX版本5.1.0
    发表于 04-10 06:03

    STM32CubeMX STM32WL不能配置LoRaWAN的原因?

    STM32CubeMX 中使用STM32WL配置LoRaWAN时不能配置,请问为什么?
    发表于 04-02 07:47

    一文带你了解PWM原理、频率占空比

    时间,假设周期T为 1s 那么频率就是 1Hz 那么高电平时间0.5s ,低电平时间0.5s 总的占空比就是 0.5 /1 =50%。PWM原理以单片机为例,我们知道,单片机的IO口输出
    发表于 03-27 14:12

    STM32CubeMX安装最新版本V6.9,Motor Control Workbench生成项目工程总是显示STM32CubeMX not found的原因?

    STM32CubeMX安装最新版本V6.9,但Motor Control Workbench生成项目工程,总是显示STM32CubeMX not found?
    发表于 03-14 07:28

    STM32CUBEMX界面重影严重怎么解决?

    STM32CUBEMX 界面重影严重,有相同问题的吗
    发表于 03-14 07:13

    如何使用STM32CubeMx配置STM32MP135的LTDC外设?

    请问一下,如何使用STM32CubeMx配置STM32MP135的LTDC外设,打开后LTDC配置项是空的
    发表于 03-11 07:37

    STM32H750如何使用DMA改变PWM占空比

    我想在PWM上溢和下溢时,从数组里读出数据更新PWM占空比STM32CubeMX配置没有找到DMA的触发源,及源地址的设定
    发表于 03-06 07:36

    pwm占空比和电压的关系 pid输出pwm占空比怎么联系

    PWM(脉宽调制)指的是通过改变周期内的高电平时长来调整信号的占空比占空比是指高电平时长与周期时长的比值,常用百分比来表示。PWM的主要应用是在调速控制、电源控制以及通信传输等领域。
    的头像 发表于 02-02 17:17 6656次阅读

    pwm频率占空比的计算公式

    PWM(脉宽调制)是一种常用的控制技术,在电子系统中广泛应用。PWM频率占空比是其重要参数之一,对于设计和优化PWM控制系统非常重要。本
    的头像 发表于 12-28 11:40 2w次阅读

    怎么实现dsp芯片输出占空比固定的pwm波形

    实现DSP芯片输出占空比固定的PWM波形需要以下步骤:定义占空比、设置计时器、计算周期和持续时间、更新占空比
    的头像 发表于 12-26 17:28 2684次阅读