历史上的今天
返回首页

历史上的今天

今天是:2025年06月17日(星期二)

正在发生

2020年06月17日 | STM32CubeMX系列教程4:PWM

2020-06-17 来源:eefocus

1.PWM简介

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调试。是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中。

例如上图中,图b)是微处理输出的数字信号,实际上他接到电机等功率设备上时,效果相当于图a)。这就是PWM调制。例如输出占空比为50%,频率为10Hz的脉冲,高电平为3.3V.则其输出的模拟效果相当于输出一个1.65V的高电平。脉冲调制有两个重要的参数,第一个就是输出频率,频率越高,则模拟的效果越好。第二个就是占空比。占空比就是改变输出模拟效果的电压大小。占空比越大则模拟出的电压越大。


2.stm32cube配置和说明

打开STM32CubeMX新建工程,选择STMF746IGT6芯片,选择外部高速晶振(HSE)。LED1管脚PB6配置为定时器4的通道1输出。同时TIM4的通道1配置为PWM。

脉冲宽度调制模式可以生成一个信号,该信号频率由自动重载寄存器(TIMx_ARR)寄存器值决定,其占空比则由捕获/比较寄存器(TIMx_CCRx) 寄存器值决定。

在 PWM 模式下,计数器寄存器(TIMx_CNT )总是与捕获/比较寄存器(TIMx_CCRx )进行比较,以确定是TIMx_CCRxTIMx_CNT 还是 TIMx_CNTTIMx_CCRx(取决于计数器计数方向)。


下图为PWM边沿对齐模式(递增计数配置)。图中CCRx为捕获/比较寄存器,OCxREF为输出比较信号,CCxIF为中断状态标识位。


当CCRX=4时,当捕获/比较寄存器(TIMx_CCRx)比计数器小时,输出高电平,反之则输出低电平。

下图为PWM中心对齐模式。

配置系统时钟为216MHz。由上一章可知,定时挂载到APB1,时钟频率为108MHz。此处设置为1080分频。经过分频后的时钟频率为100000Hz,若要设置PWM周期为20ms,则计数器的值为2000-1。其他参数为默认不用修改。其中Pulse的为设置脉宽,即为捕获/比较寄存器(TIMx_CCRx)。通过修改它的值可以修改占空比。

生成报告,以及生成代码,编译程序。


3.添加应用程序

在tim.c文件中我们找到刚才的定时器初始化函数。

01

/* TIM4 init function */

02

void MX_TIM4_Init(void)

03

{

04

  TIM_MasterConfigTypeDef sMasterConfig;

05

  TIM_OC_InitTypeDef sConfigOC;

06

  

07

  htim4.Instance = TIM4;

08

  htim4.Init.Prescaler = 1080-1;

09

  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;

10

  htim4.Init.Period = 2000-1;

11

  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

12

  HAL_TIM_PWM_Init(&htim4);

13

  

14

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

15

  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

16

  HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig);

17

  

18

  sConfigOC.OCMode = TIM_OCMODE_PWM1;

19

  sConfigOC.Pulse = 0;

20

  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

21

  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

22

  HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);

23

  

24

  HAL_TIM_MspPostInit(&htim4);

25

  

26

}


刚才说到的,设置Pulse的值可以修改脉宽。这里我们在main.c文件中添加一个用户PWM设置函数,函数的参数为修改的值。


01

/* USER CODE BEGIN 4 */

02

void user_pwm_setvalue(uint16_t value)

03

{

04

    TIM_OC_InitTypeDef sConfigOC;

05

  

06

    sConfigOC.OCMode = TIM_OCMODE_PWM1;

07

    sConfigOC.Pulse = value;

08

    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

09

    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

10

    HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);

11

    HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);  

12

}

13

/* USER CODE END 4 */



在把main()函数中添加HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1)开启定时器PWM输出。在while循环中不断修改脉宽,实现LED亮度渐变。Pulse的值最大为2000,从0开始,每100ms增加100,当增加到2000时,又逐渐递减到0。


01

/* USER CODE BEGIN 2 */

02

  HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);

03

/* USER CODE END 2 */

04

 

05

/* Infinite loop */

06

/* USER CODE BEGIN WHILE */

07

while (1)

08

{

09

/* USER CODE END WHILE */

10

 

11

/* USER CODE BEGIN 3 */

12

  HAL_Delay(100); 

13

  if(pwm_value == 0) step = 100;

14

  if(pwm_value == 2000) step = -100;

15

  pwm_value += step;

16

  user_pwm_setvalue(pwm_value);

17

}

18

/* USER CODE END 3 */


在main.c函数前面声明pwm_value,step变量,user_pwm_setvalue()函数.编译程序下载。按复位后可以看到LED1亮度渐变闪烁。

推荐阅读

史海拾趣

爱浦电子(AIPULNION)公司的发展小趣事

在产品质量得到保障的同时,爱浦电子也积极开展市场拓展和品牌建设工作。公司积极参加国内外电子展会和技术交流活动,与众多行业伙伴建立了紧密的合作关系。此外,爱浦电子还注重品牌形象的塑造,通过统一的对外标识和全新的VI企业形象,提升了公司整体形象。这些努力使得爱浦电子在市场上逐渐树立起了良好的口碑和品牌形象。

Helium_Systems__Inc.公司的发展小趣事

随着市场竞争的加剧,海曼电子意识到仅凭自身力量难以快速实现跨越式发展。因此,公司开始积极寻求与行业内外的合作伙伴建立战略合作关系。通过技术共享、市场互补等方式,海曼电子不仅提升了自身的竞争力,还成功进入了多个新的市场领域。此外,公司还通过并购具有核心技术和市场资源的中小企业,进一步巩固了其在电子行业的地位。

ECM [ECM Electronics Limited.]公司的发展小趣事

在竞争激烈的电子行业中,品质是企业生存和发展的关键。ECM Electronics Limited.深知这一点,始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测、包装等各个环节都严格把关,确保每一件产品都符合高标准的质量要求。正是凭借过硬的产品品质,ECM赢得了客户的信赖和市场的认可。

Electro Technik Industries公司的发展小趣事

为了扩大市场份额,ETI开始积极寻求国际合作。公司先后与多家国际知名企业建立了战略合作关系,共同研发新产品、开拓市场。同时,ETI还积极参加国际电子展览会,展示公司的技术实力和产品优势,吸引了众多客户的关注。通过不断努力,ETI的产品逐渐打入国际市场,成为了一家具有全球影响力的电子企业。

E. Dold & Söhne KG公司的发展小趣事

E. Dold & Söhne KG公司始建于20世纪初,当时只是一间小型的电子手工作坊。创始人埃德蒙德·多尔德(Edmund Dold)凭借对电子技术的热爱和精湛的手艺,开始生产简单的电子元件。随着时间的推移,公司逐渐扩大规模,引进了先进的生产设备和制造工艺,逐步转型为现代化的电子元件制造商。在这个过程中,多尔德家族始终秉持着精益求精、追求卓越的精神,为公司的持续发展奠定了坚实的基础。

Good Will Instrument Co., Ltd.公司的发展小趣事

在电子行业快速发展的背景下,E. Dold & Söhne KG公司始终紧跟科技潮流,致力于技术创新。公司投入大量资源研发新型电子元件和系统,以满足市场对于高性能、高可靠性产品的需求。通过不断的技术创新,E. Dold & Söhne KG公司在行业内树立了良好的口碑,成为众多知名企业的合作伙伴。

问答坊 | AI 解惑

功放

本帖最后由 paulhyde 于 2014-9-15 09:39 编辑 d类功放  …

查看全部问答>

16*16的点阵图

大家好,我现在想做16*16的点阵,我是把4片8*8拼成的。现在我想用一片74hc154,两片74hc595做驱动,但是现在不只到595怎么接在一起,谁有电路图发我吗?谢谢。邮箱 lijianhuijgsdx@163.com。…

查看全部问答>

LPC11XX的新成员

今天看到LPC11XX系列CORTEX-M0核ARM又有了新成员,分别为LPC11C12和LPC11C14,新成员主要是增加了CAN驱动器。,原理框图如下: …

查看全部问答>

Sinusoidal Control of PMSM Motors with dsPIC30F DSC

Sinusoidal Control of PMSM Motors with dsPIC30F DSC…

查看全部问答>

驻波保护电路

大多数固态放大器中的晶体管在失配状态会工作失效,且耗散比较大,更有甚者在失配严重时,管子会被烧毁。虽然已有多种驻波保护方法,但反射法还是最常用的。基于此方法,介绍两种保护电路,它们都是利用耦合器把入射波与反射波分离出来,再通过检波、放大 ...…

查看全部问答>

上分Linux arm9 资料

简单点 废话少说 有的是售后资料 对非客户不提供下载的,以后有好的 继续从公司搞来。不过安全级别高的我也不敢,学习资料没问题哈…

查看全部问答>

CE5.0支持那些视频格式?

ce5.0+2440的板子,播放avi格式的视频好象播放不了,不知道是定制系统时少了哪些组件,还是ce本身只支持部分avi文件啊?…

查看全部问答>

51系列单片机T1作波特率发生器时的初值设置问题

读公司的一段代码时发现有下面一段      SCON   = 0xd0;    PCON |= 0xC0;    TMOD &= 0x0F;    TMOD |= 0x20;    TH1 = 256 - ((FREQ_OSC * 2L * 125L)/ (48L * 9600 ...…

查看全部问答>

TI LM3S811中文资料

拿到板子,开始学习咯,但是由于本人英语水品有限,故特地去掏了些中文资料来,现将其分享出来,供要的人使用... 我们一起学LM3S811吧....…

查看全部问答>

MSP430G2553植入UCOS2操作系统

MSP430G2553能直接植入该操作系统吗,是不是要扩展内存空间,哪位大侠有经验的讲一下植入430的注意点或者给个好点自学资料!突然想学下这个东西,好像对任务管理很有帮助…

查看全部问答>