使用STM32G474芯片做Half模式的PWM输出

发布者:码农侠最新更新时间:2023-09-20 来源: elecfans关键字:PWM输出 手机看文章 扫描二维码
随时随地手机看文章

有人想使用STM32G474芯片做Half模式的PWM输出,发现有点问题,明明配置了定时器A的两路输出, 结果总是只有1路输出。这里简单演示下实现过程。【顺便提醒下,并非STM32G4全系列都内置高精度定时器】


所谓Half模式就是指硬件基于给定的计数周期值自动输出占空比为50%的方波,用户无须对比较寄存器的值再进行设置,这里硬件默认使用比较寄存器1【cmp1】,硬件自动将用户设置的PERIOD值的一半赋给CMP1寄存器。换言之,用户此时无法对CMP1寄存器进行赋值。


另外,对于输出配置必须使用CMP1比较事件和定时器的Period周期事件。

关于HALF模式的原理就介绍到这里,下面就使用STM32G474RE的Nucleo开发板演示下实现过程,主要是软件配置,硬件没啥要处理的,有块开发板就行。

先使用STM32CubeMx进行配置【其它RCC等的配置此处就不说了】。

下面截图橙色框中的配置是必须的,有关定时器的时间参数我随便配置的,毕竟这里只是演示一下功能。

这里的比较单元1必须使能,使能即可,无须参数配置。

c6a782f0-fe6e-11eb-9bcf-12bb97331649.png

下面关于TA1/TA2输出的配置,也是必须的关键配置。

c6d83a44-fe6e-11eb-9bcf-12bb97331649.png

至于定时器的其它配置,保持默认即可。配置完成后,生成初始化代码,然后加入合适的用户代码。

HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_A);

HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1);

HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA2);

因为我把TA1/TA2极性选择是相反的,所有此时输出的是两路互补波形,如果二者极性选择一致,输出的就是两路占空比为50%的相同波形。


关键字:PWM输出 引用地址:使用STM32G474芯片做Half模式的PWM输出

上一篇:单片机常用的STM32五个时钟源讲解
下一篇:结合STM32F4关于CAN基本的信息描述

推荐阅读最新更新时间:2024-11-17 05:13

PWM逻辑电路及输出电路设计
图1中,V8为振荡电路产生的振荡脉冲,其占空比为50%,由该脉冲决定开关器件的工作频率。V1为原边电流采样电阻上的压降,V2为输出电压的反馈值,V3是用于驱动开关管的信号。V2经过PI调节器进行误差放大后输入到比较器的反向端,与输入到比较器同向端的经过误差放大后的V1值进行比较,从而决定V3的脉宽大小。逻辑电路产生的信号经过输出级后用来驱动MOSFET的开通和关断,该信号(V3)的占空比与输出电压的反馈值V2成反比,实现电压反馈式的控制环,同时,该信号的占空比还与输入的直流电压值成反比,以实现电路的前馈控制。V3信号由经过放大后的原边电流的采样电阻上的电压值和经过PI调节器的输出电压的反馈值共同来控制。图2为各个反馈信号的误差放大
[电源管理]
<font color='red'>PWM</font>逻辑电路及<font color='red'>输出</font>电路设计
MSP430程序库<十一>定时器TA的PWM输出
定时器是单片机常用的其本设备,用来产生精确计时或是其他功能;msp430的定时器不仅可以完成精确定时,还能产生PWM波形输出,和捕获时刻值(上升沿或是下降沿到来的时候)。这里完成一个比较通用的PWM波形产生程序。 硬件介绍: MSP430系列单片机的TimerA结构复杂,功能强大,适合应用于工业控制,如数字化电机控制,电表和手持式仪表的理想配置。它给开发人员提供了较多灵活的选择余地。当PWM 不需要修改占空比和时间时,TimerA 能自动输出PWM,而不需利用中断维持PWM输出。 MSP430F16x和MSP430F14x单片机内部均含有两个定时器,TA和TB;TA有三个模块,CCR0-CCR2;TB含有CCR0-CCR6
[单片机]
MSP430程序库<十一>定时器TA的<font color='red'>PWM</font><font color='red'>输出</font>
51单片机(STC89C52)的多路PWM脉冲宽度调制输出
软件方式输出PWM PWM用于输出强度的控制, 例如灯的亮度, 轮子速度等, STC89/90系列没有硬件PWM, 需要使用代码模拟 使用纯循环的方式实现PWM 非中断的实现(SDCC环境编译) #include 8052.h #define Led10 P0_7 typedef unsigned int u16; int atime = 64; // 仅作为延时, pms取值区间为 0 - 64 void delay(u16 pms) { u16 x, y; for (x=pms; x 0; x--) { for (y=11; y 0; y--); } } // 这里控制占空比, i取值区间为
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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