STM32的PWM精讲

合集下载

STM32 TIM的PMW模式

STM32 TIM的PMW模式

STM32 TIM的PMW模式STM32开发板学习日记-[5]TIM的PMW模式脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。

在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)或’111’(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。

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

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

OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP 位设置,它可以设置为高电平有效活或低电平有效。

TIMx_CCER寄存器中的CCxE位控制OCx输出使能。

在PWM模式(模式1或模式2)下,TIMx_CNT和TIM1_CCRx 始终在进行比较,(依据计数器的计数方向)以确定是否符合TIM1_CCRx≤TIM1_CNT或者TIM1_CNT≤TIM1_CCRx。

然而为了与OCREF_CLR的功能(在下一个PWM周期之前,ETR信号上的一个外部事件能够清除OCxREF)一致,OCxREF信号只能在下述条件下产生:●当比较的结果改变●当输出比较模式(TIMx_CCMRx寄存器中的OCxM位)从“冻结”(无比较,OCxM=’000’)切换到某个PWM模式(OCxM=’110’或’111’)。

stm32 pwm调节转速原理

stm32 pwm调节转速原理

STM32的PWM调节转速原理主要基于PWM(Pulse Width Modulation)脉冲宽度调制。

通过编程控制输出方波的频率和占空比(高低电平的比例),可以实现对电机转速的控制。

在直流电机驱动中,PWM调速的基本原理是通过控制电机通电的电压来实现转速的调节。

当提高电压时,反电势升高,进而转速升高。

因此,通过控制PWM信号的占空比,可以实现对电机通电电压的调节,从而控制电机的转速。

在STM32中,可以通过定时器产生PWM信号,并通过调节占空比来控制电机的转速。

具体实现方式如下:
1.设置定时器工作模式为PWM模式,并配置相应的PWM通道和占空比。

2.根据需要调节占空比的值,以控制电机通电的电压。

3.将PWM信号输出到电机驱动器,从而实现对电机转速的控制。

需要注意的是,具体的PWM调速实现方式可能会因电机的类型、驱动器的型号等因素而有所不同。

因此,在实际应用中,需要根据具体情况进行相应的调整和配置。

stm32输出pwm占空比代码

stm32输出pwm占空比代码

stm32输出pwm占空比代码在STM32单片机中,输出PWM(脉冲宽度调制)信号是非常普遍的操作,这种信号通常用于控制电机、LED灯等电子设备的亮度或运动状态。

本文将详细介绍STM32单片机如何输出PWM占空比代码。

一、配置TIM定时器要输出PWM信号,首先需要进行TIM定时器的配置。

在KEIL C 编译器中,可以通过CubeMX插件进行配置。

在此之前需要先引入库文件“stm32fxx_hal_tim.h”。

在CubeMX中选择对应的TIM,进入“Mode”选项卡,将TIM定时器配置为PWM输出模式。

在“Configuration”选项卡中,配置TIM的时钟源和预分频系数等信息。

此外还需要配置PWM的周期和占空比,具体可以通过下面的步骤实现。

二、设置PWM周期在代码中设置PWM周期,可以使用HAL库中的“__HAL_TIM_SET_AUTORELOAD”函数。

该函数的第一个参数为TIM定时器的句柄,第二个参数为PWM的周期,单位为计数器的值。

可以根据需要调整该值来改变PWM的输出频率。

例如,将PWM周期设置为1000,代码如下:__HAL_TIM_SET_AUTORELOAD(&htim1, 1000);三、设置PWM占空比在代码中设置PWM占空比,需要使用HAL库中的“__HAL_TIM_SET_COMPARE”函数。

该函数的第一个参数是TIM定时器的句柄,第二个参数是设置输出PWM的通道,第三个参数是占空比。

占空比的取值范围为0到PWM周期。

例如,将PWM占空比设置为500,代码如下:__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 500);四、使用PWM输出信号最后,在代码中使用PWM输出信号,可以使用HAL库中的“HAL_TIM_PWM_Start”函数。

该函数的参数为TIM的句柄和输出PWM 的通道。

例如,在TIM1通道1上启动PWM输出,代码如下:HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);以上就是STM32单片机输出PWM占空比代码的详细步骤。

STM32使用HAL库输出连续可调的PWM信号

STM32使用HAL库输出连续可调的PWM信号

STM32使用HAL库输出连续可调的PWM信号1.配置GPIO引脚作为PWM输出。

选择一个合适的GPIO引脚,并将其配置为复用模式,用于PWM输出。

例如,若使用TIM1作为PWM输出定时器,则可以选择GPIO引脚PA8,其复用功能为TIM1_CH12.配置定时器。

使用HAL库初始化和配置所选定的定时器(例如TIM1)作为PWM输出的时基。

设置定时器的时钟源、预分频因子和计数周期。

可以通过修改这些参数来调整PWM信号的频率。

3.配置PWM输出通道。

使用HAL库初始化和配置所选定的PWM输出通道(例如TIM1_CH1)。

设置通道的输出模式和占空比。

可以通过修改占空比来调整PWM信号的高电平时间,从而改变输出电压。

4.启动定时器。

通过调用HAL库中的相关函数,启动所选定的定时器开始计数。

定时器计数到达设定的计数周期后,将会产生一个PWM信号。

5.调整PWM信号的占空比。

通过修改PWM输出通道的占空比,可以改变PWM信号的高电平时间。

通过调整占空比的大小,可以控制PWM信号的输出电压。

6.实时调整PWM信号的频率和占空比。

通过修改定时器的预分频因子和计数周期,可以调整PWM信号的频率。

通过修改PWM输出通道的占空比,可以调整PWM信号的占空比。

可以根据特定的应用需求,实时调整这些参数,来实现连续可调的PWM信号输出。

下面是一个示例代码,演示如何利用HAL库配置和控制STM32的PWM输出:```c#include "stm32f4xx_hal.h"TIM_HandleTypeDef htim1;void SystemClock_Config(void);static void MX_GPIO_Init(void);static void MX_TIM1_Init(void);int main(void)HAL_Init(;SystemClock_Config(;MX_GPIO_Init(;MX_TIM1_Init(;HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);while (1)uint16_t dutyCycle = 500; // 设置占空比为50%__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, dutyCycle); HAL_Delay(1000); // 延时1sdutyCycle = 1000; // 设置占空比为100%__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, dutyCycle); HAL_Delay(1000); // 延时1s}void SystemClock_Config(void)RCC_OscInitTypeDef RCC_OscInitStruct;RCC_ClkInitTypeDef RCC_ClkInitStruct;__HAL_RCC_PWR_CLK_ENABLE(;__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1 );RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 25;RCC_OscInitStruct.PLL.PLLN = 336;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = 7;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)Error_Handler(;}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK ,RCC_CLOCKTYPE_PCLK1RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_5) != HAL_OK)Error_Handler(;}void MX_GPIO_Init(void)GPIO_InitTypeDef GPIO_InitStruct;__HAL_RCC_GPIOA_CLK_ENABLE(;GPIO_InitStruct.Pin = GPIO_PIN_8;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);void MX_TIM1_Init(void)TIM_MasterConfigTypeDef sMasterConfig;TIM_OC_InitTypeDef sConfigOC;htim1.Instance = TIM1;htim1.Init.Prescaler = 0;htim1.Init.CounterMode = TIM_COUNTERMODE_UP;htim1.Init.Period = 1000; // 设置计数周期为1000htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)Error_Handler(;}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim1,&sMasterConfig) != HAL_OK)Error_Handler(;}sConfigOC.OCMode = TIM_OCMODE_PWM1;sConfigOC.Pulse = 0; // 初始化占空比为0sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC,TIM_CHANNEL_1) != HAL_OK)Error_Handler(;}```这是一个基本的示例,演示了如何使用HAL库配置和控制STM32的PWM输出。

stm32pwm输出三角波原理

stm32pwm输出三角波原理

stm32pwm输出三角波原理
在STM32微控制器中,PWM 输出可以实现多种波形,包括方波、正弦波、三角波等。

其中,三角波是一种非常常见的波形,在很多应用场景中都有广泛的应用。

三角波是一种连续的、平滑的波形,其特点是从低电平逐渐升高到高电平,然后再逐渐降低到低电平,如同一个长长的三角形。

在STM32 中,输出三角波需要使用 PWM 模块和定时器,并对定时器的计数器进行配置。

具体来说,输出三角波的原理如下:
1. 配置定时器为向上计数模式,并设置一个合适的计数频率,例如 10 kHz。

2. 配置 PWM 输出通道为定时器输出比较功能,并选择合适的输出极性和时钟分频系数。

3. 在每次定时器计数器达到设定值时,PWM 输出通道会自动翻转输出电平,这将导致三角波的上升和下降。

4. 在每次计数器溢出时,需要重新设置计数器的初始值,以保证连续输出三角波。

5. 如果需要改变三角波的频率或幅值,可以通过改变定时器的计数频率或 PWM 输出通道的占空比来实现。

通过上述方法,可以在 STM32 微控制器中实现三角波的输出。

这种波形非常适合一些需要连续、平滑的变化的应用场景,例如音频信号发生器、电机驱动等。

stm32 中pwm频率计算公式

stm32 中pwm频率计算公式

一、概述在嵌入式系统开发中,PWM(脉冲宽度调制)是一种重要的控制技术,常用于电机驱动、灯光控制、无线通讯和其他类似应用领域。

对于STM32系列的微控制器来说,如何准确地计算PWM的频率是一个关键问题。

本文将介绍STM32中PWM频率的计算公式,希望对开发者们有所帮助。

二、PWM频率计算公式在STM32系列微控制器中,PWM的频率计算可以使用以下公式:\[PWM频率 = \frac{定时器时钟频率}{预分频系数 * 定时器自动重载值}\]其中,各参数的含义如下:1. 定时器时钟频率:定时器的时钟频率取决于系统时钟的频率以及定时器的分频系数。

一般情况下,定时器的时钟频率可以表示为:\[定时器时钟频率 = 系统时钟频率 / 分频系数\]如果系统时钟频率为72MHz,定时器的分频系数为72,那么定时器时钟频率为1MHz。

2. 预分频系数:预分频系数决定了定时器时钟频率的除数。

通过修改预分频系数,可以改变PWM信号的频率。

在STM32系列微控制器中,通常有多个预分频系数可以选择,开发者可以根据具体应用需求进行选择。

3. 定时器自动重载值:定时器的自动重载值决定了PWM周期的长度。

一般情况下,定时器的计数范围为0到定时器自动重载值,当定时器计数达到自动重载值时,定时器会自动清零并产生中断。

通过以上公式,开发者可以根据具体的系统时钟频率、预分频系数和定时器自动重载值来计算出所需的PWM频率。

三、实例分析为了更直观地理解PWM频率的计算方法,接下来将通过一个实例来演示具体的计算过程。

假设我们需要设计一个PWM信号,其频率为1kHz,系统的时钟频率为72MHz。

我们可以根据需要的PWM频率来确定定时器的自动重载值。

由于所需的PWM频率为1kHz,因此PWM周期为1ms。

根据PWM的工作原理,我们知道PWM信号的周期T与频率f的关系为:\[T = \frac{1}{f}\]PWM周期T为1ms。

我们需要根据系统时钟频率来确定定时器的分频系数。

STM32TIM的PMW模式

STM32TIM的PMW模式

STM32TIM的PMW模式STM32 TIM的PMW模式STM32开发板学习⽇记-[5]TIM的PMW模式脉冲宽度调制模式可以产⽣⼀个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空⽐的信号。

在TIMx_CCMRx寄存器中的OCxM位写⼊’110’(PWM模式1)或’111’(PWM模式2),能够独⽴地设置每个OCx输出通道产⽣⼀路PWM。

必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位使能⾃动重装载的预装载寄存器(在向上计数或中⼼对称模式中)。

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

OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP 位设置,它可以设置为⾼电平有效活或低电平有效。

TIMx_CCER寄存器中的CCxE位控制OCx输出使能。

在PWM模式(模式1或模式2)下,TIMx_CNT和TIM1_CCRx始终在进⾏⽐较,(依据计数器的计数⽅向)以确定是否符合TIM1_CCRx≤TIM1_CNT或者TIM1_CNT≤TIM1_CCRx。

然⽽为了与OCREF_CLR 的功能(在下⼀个PWM周期之前,ETR信号上的⼀个外部事件能够清除OCxREF)⼀致,OCxREF信号只能在下述条件下产⽣:●当⽐较的结果改变●当输出⽐较模式(TIMx_CCMRx寄存器中的OCxM位)从“冻结”(⽆⽐较,OCxM=’000’)切换到某个PWM模式(OCxM=’110’或’111’)。

这样在运⾏中可以通过软件强置PWM输出。

根据TIMx_CR1寄存器中CMS位的状态,定时器能够产⽣边沿对齐的PWM信号或中央对齐的PWM信号。

110:PWM模式1-在向上计数时,⼀旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为⽆效电平;在向下计数时,⼀旦TIMx_CNT>TIMx_CCR1时通道1为⽆效电平(OC1REF=0),否则为有效电平(OC1REF=1)。

STM32之PWM波形输出配置总结

STM32之PWM波形输出配置总结

STM32之PWM波形输出配置总结1.TIMER分类STM32中一共有11个定时器,其中TIM6、TIM7是基本定时器;TIM2、TIM3、TIM4、TIM5是通用定时器;TIM1和TIM8是高级定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。

其中系统嘀嗒定时器是前文中所描述的SysTick。

其中TIM1和TIM8是能够产生3对PWM互补输出,常用于三相电机的驱动,时钟由APB2的输出产生。

TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。

2.PWM波形产生的原理通用定时器可以利用GPIO引脚进行脉冲输出,在配置为比较输出、PWM输出功能时,捕获/比较寄存器TIMx_CCR被用作比较功能,下面把它简称为比较寄存器。

举例说明定时器的PWM输出工作过程:若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR被配置为N,即TIMx_CNT的当前计数值数值X 在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。

而在TIMxCNT计数的同时,TIMxCNT的计数值X会与比较寄存器TIMx_CCR 预先存储了的数值A进行比较,当脉冲计数器TIMx_CNT的数值X小于比较寄存器TIMx_CCR的值A时,输出高电平(或低电平),相反地,当脉冲计数器的数值X大于或等于比较寄存器的值A时,输出低电平(或高电平)。

如此循环,得到的输出脉冲周期就为重载寄存器TIMx_ARR存储的数值(N+1)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器TIMx_CCR的值A 乘以触发脉冲的时钟周期,即输出PWM的占空比为 A/(N+1) 。

3.STM32产生PWM的配置方法1)配置GPIO口不是每一个IO引脚都可以直接使用于PWM输出,下面是定时器的引脚重映像,其实就是引脚的复用功能选择:表3-1 定时器1的引脚复用功能映像表3-2 定时器2的引脚复用功能映像表3-3 定时器3的引脚复用功能映像表3-4 定时器4的引脚复用功能映像根据以上重映像表,我们使用定时器3的通道2作为PWM的输出引脚,所以需要对PB5引脚进行配置,对IO口操作代码:2)初始化定时器3)设置TIM3_CH2的PWM模式、使能TIM3的CH2输出4)使能定时器3经过以上的操作,定时器3的第二通道已经可以正常工作并输出PWM波了,只是其占空比和频率都是固定的,我们可以通过改变TIM3_CCR2,则可以控制它的占空比。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 高级控制定时器[22]高级控制定时器(TM1)由一个16位的自动装载计数器组成,它由一个可编程预分频器驱动。

它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较,PWM,嵌入死区时间的互补PWM等)。

使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒至几个毫秒的调节。

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

四个独立的通道可以用于:•输入捕获;•输出比较;•产生PWM(边缘或中心对齐模式);•单脉冲输出;•反相PWM输出,具有程序可控的死区插入功能;配置为16位标准定时器时,它与TIMx定时器具有相同的功能。

配置为16 位PWM 发生器时,它具有全调制能力(0~100%)。

在调试模式下,计数器可以被冻结。

很多功能都与标准的TIM定时器相同,内部结构也相同,因此高级控制定时器可以通过定时器链接功能与TIM定时器协同操作,提供同步或事件链接功能。

TM1定时器的功能包括:•16位上,下,上/下自动装载计数器;•16位可编程预分频器,计数器时钟频率的分频系数为1〜65535之间的任意数值;•4个独立通道:-输入捕获;-输出比较;-PWM生成(边缘或中间对齐模式)-单脉冲模式输出;-死区时间可编程的互补输出。

•使用外部信号控制定时器和定时器互连的同步电路;•在指定数目的计数器周期之后更新定时器寄存器;•刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态; •如下事件发生时产生中断/DMA:-更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发);-触发事件(计数器启动,停止,初始化或者由内部/外部触发计数);-输入捕获;-输出比较;-刹车信号输入。

时基单元可编程高级控制定时器的主要部分是一个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之间的任意值分频。

它是基于一个(在TM1_PSC寄存器中的)16位寄存器控制的16位计数器。

因为这个控制寄存器带有缓冲器,它能够在工作时被改变。

新的预分频器的参数在下一次更新事件到来时被采用。

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

图2-5当预分频器的参数从1变到4时,计数器的时序图2.4.3 小结经过比较和针对设计需要,使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒至几个毫秒的调节。

高级控制(TIM1)和通用(TMx)定时器是完全独立的,不共享任何资源,可以同步操作。

高级控制定时器(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位使能相应的预装载寄存器,最后还要设置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波形实例。

图3-1边沿对齐的PWM波形(ARR=8) CCxIF 「•向下计数的配置当TM1_C R1寄存器的DIR位为高时执行向下计数。

在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]图3-2中央对齐的PWM波形(APR=8)3.1.2互补输出与死区插入高级控制定时器TM1能够输出两路互补信号并且能够管理输出的瞬时关断和接通。

相关文档
最新文档