STM32的PWM精讲

更新时间:2023-11-04 00:35:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

STM32的PWM精讲

通过对TM1定时器进行控制,使之各通道输出插入死区的互补PWM输出, 各通道输出频率均为17.57KHz。其中,通道1输出的占空比为50%,通道2输出 的占空比为25%,通道3输出的占空比为12.5%。各通道互补输出为反相输出。

TM1定时器的通道1到4的输出分别对应PA.08、PA.09、PA.10和PA.11 引脚,而通道1到3的互补输出分别对应PB.13、PB.14和PB.15引脚,中止输 入引脚为PB.12。将这些引脚分别接入示波器,在示波器上观查相应通道占空比 的方波

[12]

配置好各通道后,编译运行工程;点击MDK的Debug菜单,点击Start/Stop Debug Session;通过示波器察看 PA.08、PA.09、PA.10、PB.13、PB.14、PB.15 的输出波形,其中PA.08和PB.13为第一通道和互补通道,PB.09和PB.14为第 二通道和其互补通道,PB.10和PB.15为第三通道和其互补通道;第一通道显示 占空比为50%,第二通道占空比为25%,第三通道占空比为12.5%。

第2章 STM32处理器概述

STM32F103xx增强型系列产品中内置了多达3个同步的标准定时器。每个定 时器都有一个16位的自动加载递加/递减计数器、一个16位的预分频器和4个 独立的通道,每个通道都可用于输入捕获、输出比较、PWM和单脉冲模式输出, 在最大的封装配置中可提供最多12个输入捕获、输出比较或PWM通道。它们还 能通过定时器链接功能与高级控制定时器共同工作,提供同步或事件链接功能。

在调试模式下,计数器可以被冻结。任一个标准定时器都能用于产生PWM 输出。每个定时器都有独立的DMA请求机制。

2.4.2 高级控制定时器

高级控制定时器(TM1)由一个16位的自动装载计数器组成,它由一个可 编程预分频器驱动。它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获), 或者产生输出波形(输出比较,PWM,嵌入死区时间的互补PWM等)。

使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形 周期从几个微秒至几个毫秒的调节。高级控制(TIM1)和通用(TMx)定时器是完全

[22]

1

独立的,它们不共享任何资源,它们可以同步操作。

高级控制定时器(TM1)可以被看成是一个分配到6个通道的三相PWM发生 器,它还可以被当成一个完整的通用定时器。四个独立的通道可以用于:

?输入捕获; ?输出比较;

?产生PWM(边缘或中心对齐模式); ?单脉冲输出;

?反相PWM输出,具有程序可控的死区插入功能;

配置为16位标准定时器时,它与TIMx定时器具有相同的功能。配置为16 位PWM发生器时,它具有全调制能力(0~100%)。

在调试模式下,计数器可以被冻结。很多功能都与标准的TIM定时器相同, 内部结构也相同,因此高级控制定时器可以通过定时器链接功能与TIM定时器协 同操作,提供同步或事件链接功能。 TM1定时器的功能包括:

?16位上,下,上/下自动装载计数器;

?16位可编程预分频器,计数器时钟频率的分频系数为1?65535之间的 任意

数值;

?4个独立通道:

-输入捕获; -输出比较;

-PWM生成(边缘或中间对齐模式) -单脉冲模式输出;

-死区时间可编程的互补输出。

?使用外部信号控制定时器和定时器互连的同步电路; ?在指定数目的计数器周期之后更新定时器寄存器;

?刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态; ?如下事件发生时产生中断/DMA:

-更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部

2

/外部触发);

-触发事件(计数器启动,停止,初始化或者由内部/外部触发计数); -输入捕获; -输出比较; -刹车信号输入。

时基单元

可编程高级控制定时器的主要部分是一个16位计数器和与其相关的自动 装载寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。此计 数器时钟由预分频器分频得到。

计数器、自动装载寄存器和预分频器寄存器可以由软件读写,即使计数器还 在运行读写仍然有效。 时基单元包含:

?计数器寄存器(TM1_CNT); ?预分频器寄存器(TM1_PSC); ?自动装载寄存器(TM1_ARR); ?周期计数寄存器(TM1_RCR);

自动装载寄存器是预先装载的。写或读自动重装载寄存器将访问预装载寄存 器。根据在TM1_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载 寄存器的内容被永久地或在每次的更新事件UEV时传送到影子寄存器。当计数 器达到溢出条件(向下计数时的下溢条件)并当TM1_CR1寄存器中的UDIS位等

于0时,产生更新事件。更新事件也可以由软件产生。随后会详细描述每一种

配置下更新事件的产生。

计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TM1_CR1 寄存器中的计数器使能位(CEN)时,CK_CNT才有效。(有关更多的计数器使能的

细节,请参见控制器的从模式描述)。

注:真正的计数器使能信号CNT_EN是在CEN后的一个时钟周期后被设置。 预分频器描述 。

预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。它是

3

基于一个(在TM1_PSC寄存器中的)16位寄存器控制的16位计数器。因为这个 控制寄存器带有缓冲器,它能够在工作时被改变。新的预分频器的参数在下一次 更新事件到来时被采用。

图2-4和图2-5给出了一些在预分频器工作时,更改其参数的情况下计数器

操作的例子。

图2-5当预分频器的参数从1变到4时,计数器的时序图

2.4.3 小结

经过比较和针对设计需要,使用定时器预分频器和RCC时钟控制预分频器, 可以实现脉冲宽度和波形周期从几个微秒至几个毫秒的调节。高级控制(TIM1) 和通用(TMx)定时器是完全独立的,不共享任何资源,可以同步操作。高级控

4

制定时器(TM1)还可以被看成是一个分配到6个通道的三相PWM发生器,它还可 以被当成一个完整的通用定时器。因此该设计选择高级控制定时器(TIM1)。

PWM概述

PWM是Pulse Width Modulation的缩写,中文意思就是脉冲宽度调制,简 称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有 效的技术,其控制简单、灵活和动态响应好等优点而成为电力电子技术最广泛应 用的控制方式,其应用领域包括测量,通信,功率控制与变换,电动机控制、 伺服控制、调光、开关电源,甚至某些音频放大器,因此研究基于PWM技 术的正负脉宽数控调制信号发生器具有十分重要的现实意义。

PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使 用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍 然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(0N),要么 完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模 拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电 被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

多数负载(无论是电感性负载还是电容性负载)需要的调制频率高10Hz,通 常调制频率为1kHz到200kHz之间。占空比是接通时间与周期之比;调制频率为 周期的倒数。

目前,运动控制系统或电动机控制系统中实现PWM的方法主要有传统的数字 电路方式、专用的PWM集成电路、单片机实现方式和可编程逻辑器件实现方式。 用传统的数字电路实现PWM,电路设计较复杂,体积大,抗干扰能力差,系统的 控制周期较长。专用的PWM集成电路或带有PWM的单片机价格较高。对于单片机中 无PWM输出功能的情况,实现PWM将消耗大量的时间,大大降低了CPU的效率,而 且得到的PWM信号精度不太高

[15]

PWM模式

脉冲宽度调制模式可以产生一个由TM1_ARR寄存器确定频率、由 TM1_CCRx寄存器确定占空比的信号。在TM1_CCMRx寄存器中的OCxM位写入 “110”(PWM模式1)或“111”(PWM模式2),能够独立地设置每个通道工作在PWM

模式,每个OCx输出一路PWM。必须通过设置TM1_CCMRx寄存器OCxPE位使能 相应的预

5

装载寄存器,最后还要设置TM1_CR1寄存器的ARPE位使能自动重装 载的预装载寄存器(在向上计数或中心对称模式中)。

因为仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存 器,因此在计数器开始计数之前,必须通过设置TM1_EGR寄存器中的UG位来 初始化所有的寄存器。

OCx的极性可以通过软件在TM1_CCER寄存器中的CCxP位设置,它可以设 置为高电平有效活和低电平有效。〇Cx输出通过CCxE、CCxNE、MOE、0SSI和OSSR 位(在TM1_CCER和TM1_BDTR寄存器中)的组合控制。

在PWM模式(模式1或模式2)下,TIM1_CNT和TM1_CCRx始终在进行比较, (依据计数器的计数方向)以确定是否符合TM1_CCRx彡TM1_CNT或者TM1_CNT 彡TM1_CCRx。根据TM1_CR1寄存器中CMS位的状态,定时器能够产生边沿对 齐的或中央对齐的PWM信号。

PWM边沿对齐模式 ?

向上计数配置

当TM1_CR1寄存器中的DIR位为低的时候执行向上计数。

当TM1_CNT〈TM1_CCRx时PWM参考信号,OCxREF为高,否则为低。如果TM1_CCRx 中的比较值大于自动重装载值(TM1_ARR),则OCxREF保持为“1\。如果比较值 为0,贝丨j OCxREF保持为“0\。图3-1为TM1_ARR=8时边沿对齐的PWM波形实 例。

6

CCxIF

?向下计数的配置 当TM1_CR1寄存器

的DIR

图3-1边沿对齐的PWM波形(ARR=8)

位为高时执行向下计数。

在PWM模式1,当TM1_CNT>TM1_CCRx时参考信号OCxREF为低,否则为 高。如果TM1_CCRx

中的比较值大于TM1_ARR中的自动重装载值,则OCxREF

保持为“1\。该模式下不能产生0%的PWM波形。 PWM中央对齐模式

当TM1_CR1寄存器中的CMS位不为00时为中央对齐模式(所有其他的配置

对OCxREF/OCx信号都有相同的作用)。根据不同的CMS位的设置,比较标志可能 在计数器向上计数时被置1、在计数器向下计数时被置1、或在计数器向上和向 下计数时被置1〇TM1_CR1寄存器中的计数方向位(DIR)由硬件更新,不要用软 件修改它。

图3-2给出了一些中央对齐的PWM波形的例子

? TIM1_ARR=8 ; ? PWM模式1;

? TM1_CR1寄存器中的CMS=01,在中央对齐模式1时,当计数器向下计数 时标志被设置。[21]

7

图3-2中央对齐的PWM波形(APR=8)

3.1.2互补输出与死区插入

高级控制定时器TM1能够输出两路互补信号并且能够管理输出的瞬时关

断和接通。这段时间通常被称为死区,应该根据连接到输出的器件和它们的特性 (电平转换的延时、电源开关的延时等)来调整死区时间。

配置TM1_CCER寄存器中的CCxP和CCxNP位,可以为每一个输出独立地 选择极性(主输

出OCx或互补输出OCxN)。互补信号OCx和OCxN通过下列控制

位的组合进行控制:TM1_CCER寄存器的CCxE和CCxNE位,TM1_BDTR和TM1_CR2 寄存器中的MOE、OISx、OISxN、OSSI和OSSR位,带刹车功能的互补输出通道 OCx和OCxN的控制位。特别的是,在转换到IDLE状态时(MOS下降到0)死区被

8

激活。

同时设置CCxE和CCxNE位将插入死区,如果存在刹车电路,则还要设置 MOE位。每一个通道都有一个10位的死区发生器。参考信号OCxREF可以产生2 路输出OCx和OCxN。如果OCx和OCxN为高有效:

?

〇Cx输出信号与参考信号相同,只是它的上升沿相对于参考信号的上 升

沿有一个延迟。

?

OCxN输出信号与参考信号相反,只是它的上升沿相对于参考信号的下 降

沿有一个延迟。

如果延迟大于当前有效的输出宽度(OCx或OCxN),则不会产生相应的脉冲。 图3-3,3-4显示了死区发生器的输出信号和当前参考信号OCxREF之间的关系 (假设 CCxP=0、CCxNP=0、

MOE=1、CCxE=1 并且 CCxNE=1)。

图3-3带死区插入的互补输出 delay H delay OCxREF OCx OCxM

i 1 ^——? delay 图3-4死区波形延迟大于负脉冲 OOREF OCX OCxN

9

3.2 PWM输出的实现

STM32的高级定时器时钟TM1CLK为固定72MHz, TM1预分频为0x0 (系统 高速时钟不分频),所以TIM1计数器时钟频率为72MHz〇I/0 口时钟为固定值 50MHz,PA8、PA9、PA10、PA11 设为推拉模式。 TM1在下面定义的频率下工作:

TM1 频率=Tm1CLKATM1_Period + 1) = 17.57 KHz。

TM1 CC1寄存器的值为0x7FFF,所以TM1_CH1 和TM1_CH1N产生一个频 率为17.57KHz的信号,这个信号的占空比为:

TM1_CH1 占空比=TM1_CCR1 ATM1_Period + 1) = 50%。

TM1 CC2寄存器的值为0x3FFF, 所以TM1_CH2 和TM1_CH2N 产生一个 17.57KHz的信号,它的占空比为:

TM1_CH2 占空比=TM1_CCR2 / (TM1_Period + 1)= 25%。

TM1 CC3寄存器的值为0x1FFF, 所以TM1_CH3 和TM1_CH3N产生一个 17.57KHz的信号,它的占空比为:

TM1_CH3 占空比=TM1_CCR3 / (TM1_Period + 1) = 12.5%。 TM1波形可以在示波器上显示出来。 输出信号观察

下列引脚分别依次接到示波器上(两个一组),示波器接线正接触线下列引 脚,负接触线接地(GND)。

? TIM1_CH1 pin (PA8); ? TIM1_CH1N pin (PB13); ? TIM1_CH2 pin (PA9); ? TIM1_CH2N pin (PB14); ? TIM1_CH3 pin (PA10); ? TIM1_CH3N pin (PB15); ? TIM1_CH4 pin (PA11)。

[12]

10

第4章软件设计

4.1开发环境

4.1.1 STM32的开发软件

STM32自问世至今,采用过如下软件,皆有利弊。 ?IAR

IAR是STM32开发使用最多的软件平台。IAR官方提供IAR for ARM两种类 型的版本供免费评估:32K学习版,只能支持编译32K目标代码,等效无时间 限制;30天评估版,无编译代码限制。 ?MDK

自从keil被ARM收购以后,在keil中集成了 ARM自己的编译器,改名MDK。 ?RIDE 该软件支持GCC编译器开发STM32产品。该套开发板使用keilmdk370开发 软件,该软件使用简单,keil是众多单片机应用开发的优秀软件之一,它集编 辑编译仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面清晰,易学 易懂。 这里选用的是keilmdk370,4.1.2节着重介绍。

4.1.2 MDK370

[11]

Real View MDK(Miertocontroller Development Kit)是 ARM 公司最先推 出的基于ARM微控制器的专业嵌入式开发工具。它采用了 ARM的最新技术编工具 RVCT,集成了享誉全球的y Vision IDE,因此特别易于使用,同时具备非常高 的性能。它适合不同层次的开发者使用,包括专业的应用程序开发工程师和嵌入 式软件开发的入门者。MDK包括符合工业标准的Real View编译工具、测试器以 及实时内核等组件,支持所有基于ARM的设备,能帮助工程师按照计划完成项目。 ?MDK提供启动代码生成向导——提高开发效率;

?MDK提供强大的设备模拟器一一缩短开发周期:

目标设备的所有组件都可仿真,代码可在整个设备上运行。完全的目标硬件 仿真,完整的目标,高效指令集仿真,中断仿真,片内外围设备有ADC, DAC, EBI, Timers,UART,CAN,I2C,包含外部信号和I/O。充足的仿真信息,包含在设备 数据库里。

11

?MDK提供高效的性能开发工具; ?MDK支持最新的Cortex-M3处理器:

Cortex-M3处理器是ARM公司推出的最新的针对微控制应用的内核, 提供业界领先的高性能和低成本解决方案,将成为MCU应用的热点和主流。 但是目前能支持Cortex-M3构架的开发工具很少,包括SDTADS1.2等多 数开发工具都不支持。MDK是目前性价比最高的支持Cortex-M3处理器的 开发工具。 ?MDK集成了 Flash编程模块;

?MDK提供业界最好的y Vision IDE—易学易懂。

4.2软件实现 4.2.1设计标准

该设计对TM1定时器进行控制,使之各通道输出插入死区的互补PWM输出, 各通道输出频率均为17.57KHz。I/O 口时钟为固定值50MHz,PA8、PA9、PA10、 PA11设为推拉模式。

其中,通道1输出的占空比为50%,通道2输出的占空比为25%,通道3输 出的占空比为12.5%。各通道互补输出为反相输出。TM1定时器的通道1到4 的输出分别对应PA.08、PA.09、PA.10引脚,而通道1到3的互补输出分别对应 PB.13、PB.14和PB.15引脚,这些处理器引脚在开发板上已经以插针形式引出。

由于TM1计数器的时钟频率为72MHz,各通道输出频率fTM1为17.57KHz, 根据:fnM1=TIM1CLKATM1_Period + 1),可得到 TM1 预分频器的 TM1_Period 为OxFFFF。根据通道输出占空比TM1_CCRxATM1_Period + 1),可以得到各 通道比较/捕获寄存器的计数值。其中:TM1_CCR1寄存器的值0x7FFF、TM1_CCR2 寄存器的值为0x3FFF、TM1_CCR3寄存器的值为0x1FFF。

12

程序部分原代码:

/* Channel 1, 2, 3 and 4 Configuration in PWM mode */

TIM1 OCInitStructure. TIM1_OCMode = TIM1_OCMode_PWM2; TIM1_OutputState = TIM1 OCInitStructure. TIM1_OutputState_Enable; TIM1_OutputNState = TIM1 OCInitStructure. TIM1_OutputNState_Enable; TIM1_Pulse = CCR1_Val; TIM1 OCInitStructure. TIM1_OCPolarity = TIM1_OCPolarity_Low; TIM1 OCInitStructure. TIM1_OCNPolarity = TIM1_OCNPolarity_Low; TIM1 OCInitStructure. TIM1_OCIdleState = TIM1_OCIdleState_Set; TIM1 OCInitStructure. TIM1_OCNIdleState = TIM1_OCIdleState_Reset; TIM1 OCInitStructure.

TIM1 OC1Init (&TIM1_OCInitStructure);

TIM1 OCInitStructure.TIM1_Pulse = CCR2_Val; TIM1 OC2Init (&TIM1_OCInitStructure);

TIM1 OCInitStructure.TIM1_Pulse = CCR3_Val; TIM1 OC3Init (&TIM1_OCInitStructure); 运行过程:

(1) 使用Keil uVision3编译链接工程;

(2) 点击 MDK 的 Debug 菜单,点击 Start/Stop Debug Session;

(3) 通过示波器察看PA.08、PA.09、PA.10、PB.13、PB.14、PB.15的输出波形,中PA.08和PB.13为一组,PB.09和PB.14为一组,PB.10和PB.15为一组。

13

4.2.2程序流程图

整个设计程序流程如图4-1所示:

14

第5章测试及结果

5.1 JTAG仿真器介绍

J-Link是支持仿真ARM内核芯片的JTAG仿真器。配合IAR EWARM,ADS,KEIL, WINARM,RealView等集成开发环境支持所有ARM7/ARM9内核芯片的仿真,通过 RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习 开发ARM最好最实用的开发工具。

DQ电子推出的J-LinkV7仿真器采用原版固件,参照原版原理图,经过DQ 团队的长时间精工制作,板型合理,元件布局美观大方,走线严谨精致,并且每 一个产品都经过功能和老化测试,功能完全与原版一致,支持在线升级。

J-Link ARM主要特点:

?IAR EWARM集成开发环境无缝连接的JTAG仿真器。

?支持所有ARM7/ARM9内核的芯片,以及cortexM3,包括Thumb模式。 ?支持ADS,IAR,KEIL,WINARM,REALVIEW等几乎所有的开发环境。

?下载速度高达ARM7:600kB/s,ARM9:550kB/s,通过DCC最高可达800 kB/s*

最高 JTAG 速度 12MHz。

?目标板电压范围1.2V—3.3V。 ?自动速度识别功能。

?监测所有JTAG信号和目标板电压。 ?完全即插即用。

?使用USB电源(可接通J12跳线给目标板供电,出厂时未接通)。 ?带USB连接线和20芯JTAG连接排线。 ?支持多JTAG器件串行连接。 ?标准20芯JTAG仿真插头。

?带 J-Link TCP/IP server,允许通过 TCP/IP 网络使用 J-Link 支持的内核: ?ARM7TDMI(Rev 1);

[11]

15

本文来源:https://www.bwwdw.com/article/p0w2.html

Top