基于STM32单片机的SPWM波的实现
SPWM原理以及具体实现方法
SPWMSPWM(Sinusoidal PWM)法是一种比较成熟的,目前使用较广泛的PWM法.前面提到的采样控制理论中的一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.SPWM法就是以该结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM波形即SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值.定义我们先说说什么叫PWMPWM的全称是Pulse Width Modulation(脉冲宽度调制),它是通过改变输出方波的占空比来改变等效的输出电压。
广泛地用于电动机调速和阀门控制,比如我们现在的电动车电机调速就是使用这种方式。
所谓SPWM,就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规率排列,这样输出波形经过适当的滤波可以做到正弦波输出。
它广泛地用于直流交流逆变器等,比如高级一些的UPS就是一个例子。
三相SPWM是使用SPWM模拟市电的三相输出,在变频器领域被广泛的采用。
该方法的实现有以下几种方案。
1.3.1等面积法该方案实际上就是SPWM法原理的直接阐释,用同样数量的等幅而不等宽的矩形脉冲序列代替正弦波,然后计算各脉冲的宽度和间隔,并把这些数据存于微机中,通过查表的方式生成PWM信号控制开关器件的通断,以达到预期的目的.由于此方法是以SPWM控制的基本原理为出发点,可以准确地计算出各开关器件的通断时刻,其所得的的波形很接近正弦波,但其存在计算繁琐,数据占用内存大,不能实时控制的缺点.1.3.2硬件调制法硬件调制法是为解决等面积法计算繁琐的缺点而提出的,其原理就是把所希望的波形作为调制信号,把接受调制的信号作为载波,通过对载波的调制得到所期望的PWM波形。
通常采用等腰三角波作为载波,当调制信号波为正弦波时,所得到的就是SPWM波形。
简述stm32f407单片机产生pwm波的原理。
STM32F407单片机产生PWM波的原理是通过利用定时器实现的。
具体来说,PWM(Pulse Width Modulation)脉冲宽度调制是一种利用微处理器的数字输出来对模拟电路进行控制的技术。
在STM32F407单片机中,PWM是通过编程控制输出方波的频率和占空比(高低电平的比例)来实现的。
其中,定时器用于控制PWM的周期,而比较寄存器则用于控制PWM的高低电平比例。
首先,设置定时器的计数周期和预分频器,以确定PWM的周期。
然后,设置比较寄存器的值,以确定PWM的高低电平比例。
当定时器的计数值达到比较寄存器的值时,输出电平会翻转,从而产生PWM波形。
此外,STM32F407单片机还支持多路PWM输出,可以通过配置不同的定时器和比较寄存器来实现。
同时,PWM的输出还可以通过GPIO口输出,以实现与其他电路的交互和通信。
需要注意的是,在使用STM32F407单片机产生PWM波时,需要了解其硬件结构和软件编程方法,以确保正确配置和使用PWM功能。
基于TMS320F2812的SPWM波的实现研究
作者简介 : 张月芹( 9 3 18一)女 , , 助教 。
3 0
常州 工学 院学报
20 0 9正
波求交 点 。三 条正 弦波相 位差 10 , : 2 。即
l C B / “ / \
A |\ \ ’ r
V \ \ \ . \ |
o P M v s a d de i n e h r r s By d bu g n e s fwa e, e p pe e c e ore tc n l — fS W wa e , n sg s t a d wie . e g i g t o t r t a r r a h s c r c o c u h h h so a d p o e h e sb lt e ag i n, n r v st e f a i ii oft lons y h m.
基 于 T 30 2 1 MS 2 F 82的 S WM 波 的实 现研 究 P
张 月芹
( 南京航空航天大学金城学 院, 江苏 南京 2 15 ) 1 16
摘 要 : 文详 细分析 了不 对 称规 则 采 样 法产 生 S WM 波 的算 法 , T 30 2 1 控 制 器 , 论 P 以 MS 2F 82为
可分 为硬 件法 和软 件 法 , 者 采 用 专 用 P 前 WM 芯 片 , 者是通 过 实时 计算 来来 生 成 S WM 波 。本 后 P
文采 用美 国 T 公 司最 新 推 出 的 3 I 2位 定 点 DS P
收 稿 日期 :o91 —9 2o —00
由于 A、 关 于 C点 不 对 称 , S WM 的脉 B 故 P 冲宽度 要 分 成 两 部 分 t, 和 分 别 计 算 。对 于三相 S WM 波 , 用三条 正 弦波 和 同一条三 角 P 要
一文解析stm32产生spwm原理及程序
一文解析stm32产生spwm原理及程序
SPWM(Sinusoidal PWM)法是一种比较成熟的,目前使用较广泛的PWM法。
SPWM法就是以该结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM波形即SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值。
本文主要详解stm32产生spwm原理及程序,首先来了解一下生成SPWM波的基理是什幺,具体得跟随小编一起来了解一下。
生成SPWM波的基理
由于正弦交流量是典型的模拟量,传统发电机难以完成高频交流电流输出,而功率半导体器件于模拟状态工作时产生的动态损耗剧增,于是,用开关量取代模拟量成为必由之路,并归结为脉冲电路的运行过程,从而构成了运动控制系统中的功率变换器或电源引擎。
典型的H桥逆变电路很容易理解(图1a)。
STM32生成SPWM
/* Includes ------------------------------------------------------------------*/#include "stm32f10x.h"//#include "math.h"#define TIM1_CCR1_Address ((uint32_t)0x40012C34)//#define GPIOB_ODR_Address ((uint32_t)0x40010c0c)/** @addtogroup STM32F10x_StdPeriph_Examples* @{*//** @addtogroup TIM_7PWM_Output* @{*//* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*///ADC_InitTypeDef ADC_InitStructure;DMA_InitTypeDef DMA_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;float data[253]={0.012516,0.02503,0.03754,0.050044,0.062541,0.075027,0.087502,0.099963,0.11241,0.12484,0.13724,0.14963,0.16199,0.17433,0.18664,0.19893,0.21118,0.22339,0.23557,0.24772,0.259 83,0.27189,0.28392,0.29589,0.30783,0.31971,0.33154,0.34333,0.35505,0.36673,0.37834,0.389 9,0.40139,0.41283,0.42419,0.43549,0.44673,0.45789,0.46898,0.48,0.49094,0.50181,0.51259,0.5233,0.53392,0.54446,0.55492,0.56529,0.57557,0.58576,0.59586,0.60586,0.61577,0.6255 8,0.6353,0.64492,0.65443,0.66384,0.67315,0.68235,0.69145,0.70044,0.70932,0.71808,0.72674,0.735 28,0.7437,0.75201,0.7602,0.76827,0.77623,0.78406,0.79176,0.79935,0.8068,0.81414,0.82134,0.82841, 0.83536,0.84218,0.84886,0.85541,0.86182,0.8681,0.87425,0.88026,0.88613,0.89186,0.89745,0.9029, 0.90821,0.91338,0.9184,0.92328,0.92802,0.93261,0.93705,0.94135,0.9455,0.9495,0.95335,0.95705,0 .96061,0.96401,0.96726,0.97036,0.97331,0.97611,0.97875,0.98124,0.98358,0.98576,0.98779,0.989 66,0.9913,0.99294,0.99435,0.9956,0.99669,0.99763,0.99841,0.99904,0.99951,0.99982,0.99998,0.9999 8,0.99982,0.99951,0.99904,0.99841,0.99763,0.99669,0.9956,0.99435,0.99294,0.99138,0.98966,0.9877 9,0.98576,0.98358,0.98124,0.97875,0.97611,0.97331,0.97036,0.96726,0.96401,0.96061,0.95705,0.953 35,0.9495,0.9455,0.94135,0.93705,0.93261,0.92802,0.92328,0.9184,0.91338,0.90821,0.9029,0.89745,0 .89186,0.88613,0.88026,0.87425,0.8681,0.86182,0.85541,0.84886,0.84218,0.83536,0.82841,0.8213 4,0.81414,0.8068,0.79935,0.79176,0.78406,0.77623,0.76827,0.7602,0.75201,0.7437,0.73528,0.72674,0 .71808,0.70932,0.70044,0.69145,0.68235,0.67315,0.66384,0.65443,0.64492,0.6353,0.62558,0.6157 7,0.60586,0.59586,0.58576,0.57557,0.56529,0.55492,0.54446,0.53392,0.5233,0.51259,0.50181,0.4909 4,0.48,0.46898,0.45789,0.44673,0.43549,0.42419,0.41283,0.40139,0.3899,0.37834,0.36673,0.3550 5,0.34333,0.33154,0.31971,0.30783,0.29589,0.28392,0.27189,0.25983,0.24772,0.23557,0.22339,0.211 18,0.19893,0.18664,0.17433,0.16199,0.14963,0.13724,0.12484,0.11241,0.099963,0.087502,0.075027,0. 062541,0.050044,0.03754,0.02503,0.012516,};uint16_t data1[253];//uint16_t iodata[2]={0x0001,0x0000};//TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//TIM_OCInitTypeDef TIM_OCInitStructure;uint16_t TimerPeriod = 0;uint16_t Channel1Pulse = 0, Channel2Pulse = 0, Channel3Pulse = 0, Channel4Pulse = 0;/* Private function prototypes -----------------------------------------------*/void RCC_Configuration(void);void GPIO_Configuration(void);void DMA_Configuration(void);void TIM_Configuration(void);//void ADC1_Configuration(void);/* Private functions ---------------------------------------------------------*//*** @brief Main program* @param None* @retval None*/int main(void){int i;/*!< At this stage the microcontroller clock setting is already configured,this is done through SystemInit() function which is called from startupfile (startup_stm32f10x_xx.s) before to branch to application main.To reconfigure the default setting of SystemInit() function, refer tosystem_stm32f10x.c file*//* System Clocks Configuration */RCC_Configuration();/* GPIO Configuration */GPIO_Configuration();DMA_Configuration();TIM_Configuration();for(i=0;i<253;i++){data1[i]= (uint16_t)(data[i]*(TimerPeriod - 1));/*i++;data1[i]= (uint16_t)((1.0-data[i])*(TimerPeriod - 1));*/}while (1){//TIM2->ARR=TIM4->ARR;}}/*** @brief Configures the different system clocks.* @param None* @retval None*/void RCC_Configuration(void){/* TIM1, GPIOA, GPIOB, GPIOE and AFIO clocks enable */SystemInit();//RCC_ADCCLKConfig(RCC_PCLK2_Div2);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1|RCC_APB2Periph_GPIOA|RCC_APB2 Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE);//RCC_APB1PeriphClockCmd( , ENABLE);}/*** @brief Configure the TIM 1 Pins.* @param None* @retval None*/void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;/* GPIOA Configuration: Channel 1, 2 and 3 as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOC, &GPIO_InitStructure);}void DMA_Configuration(void){/* DMA1 channel1 configuration ----------------------------------------------*/DMA_DeInit(DMA1_Channel5);//DMA_DeInit(DMA1_Channel2);DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)TIM1_CCR1_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&data1;DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;DMA_InitStructure.DMA_BufferSize = 253;DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;DMA_InitStructure.DMA_Priority = DMA_Priority_High;DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel5, &DMA_InitStructure);/* Enable DMA1 channel1 */DMA_Cmd(DMA1_Channel5, ENABLE);}void TIM_Configuration(void){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;TIM_BDTRInitTypeDef TIM1_BDTRInitStructure;/*TIM1CLK = SystemCoreClock, Prescaler = 0, TIM1 counter clock = SystemCoreClock SystemCoreClock is set to 72 MHz for Low-density, Medium-density, High-density and Connectivity line devices and to 24 MHz for Low-Density V alue line andMedium-Density V alue line devicesThe Timer pulse is calculated as follows:- ChannelxPulse = DutyCycle * (TIM1_Period - 1) / 100----------------------------------------------------------------------- */TimerPeriod = (SystemCoreClock / 1200 ) - 1;/* Compute CCR1 value to generate a duty cycle at 50% for channel 1 and 1N */ Channel1Pulse = (uint16_t) (((uint32_t) 5 * (TimerPeriod - 1)) / 10);/* Compute CCR2 value to generate a duty cycle at 37.5% for channel 2 and 2N */ Channel2Pulse = (uint16_t) (((uint32_t) 375 * (TimerPeriod - 1)) / 1000);TIM_TimeBaseStructure.TIM_Prescaler = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseStructure.TIM_Period = TimerPeriod;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);/*TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_DMACmd(TIM2, TIM_DMA_Update, ENABLE);*/TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OutputNState =TIM_OutputNState_Enable;TIM_OCInitStructure.TIM_Pulse = Channel1Pulse;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;TIM_OC1Init(TIM1, &TIM_OCInitStructure);TIM1_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;TIM1_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;TIM1_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;TIM1_BDTRInitStructure.TIM_DeadTime = 0x1f;TIM1_BDTRInitStructure.TIM_Break = TIM_Break_Disable;TIM1_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;TIM1_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; TIM_BDTRConfig(TIM1,&TIM1_BDTRInitStructure);TIM_Cmd(TIM1, ENABLE);TIM_CtrlPWMOutputs(TIM1, ENABLE);}。
SPWM原理以及具体实现方法
SPWM原理以及具体实现方法SPWM(Sinusoidal Pulse Width Modulation)是一种通过改变脉冲宽度来实现正弦波形输出的调制技术。
它是一种广泛应用于交流调速、无线电通信、音频音频处理等领域的调制技术。
本文将详细介绍SPWM的原理和具体实现方法。
一、原理SPWM的基本原理是将一个固定频率的三角波和一个可变频率的正弦波进行比较,通过改变正弦波的频率和三角波的升降沿来控制输出脉冲的宽度,从而实现输出波形的调制。
具体实现方式如下:1.生成三角波:首先需要生成一个固定频率的三角波,可以使用计数器、比较器和数字-模拟转换器等元件实现。
计数器用于产生固定频率的方波信号,比较器用于将方波信号转换为三角波信号,数字-模拟转换器用于将三角波信号转换为模拟电压信号。
2.生成正弦波:使用正弦函数生成一个可变频率的正弦波,频率根据应用需求决定。
一般使用时钟、计数器和查表法实现,通过改变时钟的计数值和查表法来调整正弦波的频率。
3.比较器:将三角波和正弦波进行比较,比较的方法可以使用电压比较器或者运算放大器进行。
根据比较结果,可以确定脉冲的宽度。
4.输出脉冲:通过改变脉冲的宽度来控制输出波形的幅值大小。
当三角波的斜率大于正弦波时,输出脉冲宽度增大;当三角波的斜率小于正弦波时,输出脉冲宽度减小。
5.滤波器:通过滤波器对输出脉冲进行处理,去除高频成分,得到带有基波的正弦波。
SPWM的具体实现方法依赖于所使用的平台和应用需求。
下面以数字信号处理平台为例,介绍SPWM的具体实现方法。
1.生成三角波:使用计数器和比较器,生成一个固定频率的三角波信号。
计数器的计数范围决定了三角波的周期,比较器将计数器的输出进行比较并产生三角波信号。
2.生成正弦波:可以通过使用FPGA或DSP等处理器实现正弦波的生成。
根据所需频率和精度,使用查表法或数学函数生成正弦波信号。
3.比较器:将三角波和正弦波进行比较,可以使用比较器模块实现比较操作。
基于STM32的SPWM源代码
基于STM32的SPWM源代码1、TIMER输出PWM基本概念脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
简单一点,就是对脉冲宽度的控制。
一般用来控制步进电机的速度等等。
STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM 输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。
1.1 PWM输出模式STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。
模式1和模式2的区别如下:110:PWM模式1-在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
111:PWM模式2-在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
由此看来,模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。
而从计数模式上来看,PWM也和TIMx在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式,关于3种模式的具体资料,可以查看《STM32参考手册》的“14.3.9 PWM模式”一节,在此就不详细赘述了。
1.2 PWM输出管脚PWM的输出管脚是确定好的,具体的引脚功能可以查看《STM32参考手册》的“8.3.7 定时器复用功能重映射”一节。
在此需要强调的是,不同的TIMx有分配不同的引脚,但是考虑到管脚复用功能,STM32提出了一个重映像的概念,就是说通过设置某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出PWM。
基于单片机的逆变电源设计
基于单片机的逆变电源设计摘要:为了适应当今新能源发展速度,逆变电源技术也在不断更新换代。
本文介绍了一款基于STM32芯片的SPWM逆变电源系统。
采用BOOST升压技术和SPWM逆变技术,将180V的直流电转换成220V的工频优质正弦交流电。
直流电经过升压斩波电路进入控制电路,在经过LC低通滤波器,滤除高次谐波,得到频率可调的正弦波交流输出。
本系统由升压模块,逆变模块,控制模块,反馈模块,保护模块构成具有良好的性能并实现了数字智能化为家用电器提供了一种可靠、优质的交流电源。
关键词:STM32逆变电源SPWM升压斩波电路1.课题研究背景和意义在日新月异的今天,新能源的应用范围越来广阔,而对于如何将其所转化的电输入到电网或者设备所需要的稳压恒频、体积小、重量轻、噪音低、效率高的交流电成为了成为逆变电源研制领域所要解决的问题。
逆变电源是一种采用电力电子技术进行电能变换的装置,它的作用是将输入的高低不同压,大小不同频的电转化为电网、设备、用户所需频率的交流电输出。
目前逆变电源所跨领域之大,所涉范围之广逆变电源的改进不仅能在新能源中有着不可缺少的作用,还在车载电器、野外作业、应急抢险和移动办公中有着重要的地位;而各行各业要求着逆变电源朝着更高的效率,更低的成本和更高的可靠性,还必须环保无污染,但是传统的逆变电源难以实现以上要求。
因而研究数字化、模块化的绿色逆变电源技术对当今提出的节能,高效,绿色,环保工业口号实现具有重要意义。
1.课题研究内容本论文基于当前新能源发展活跃的背景下市场对逆变电源特定负载性能和外特性功能要求下,设计了一种还具备安全可靠、高效、高功率因素、低噪音、绿色无污染的基于STM32单片机芯片的逆变电源。
1.系统总体设计1.系统设计指标采用STM32单片机作为控制主控芯片来设计一款能产生可靠、优质的交流正弦逆变电源。
开关频率:21.5KHz输入电压:直流电48V输出电压:交流电220V/50Hz输出功率:5kw逆变效率:90%1.1.总体设计方案本文采用TL494芯片与 STM32芯片来分别控制前一部分直流升压电路和后一部分的逆变电路。
基于STM32的单相逆变器系统的设计和实现
基于 STM32的单相逆变器系统的设计和实现辽宁工业大学电子与信息工程学院 110000摘要:本设计以STM32单片机为主控芯片,采用SPWM双极调制方式,以单相全桥逆变电路为主电路,实现双逆变器并网供电。
提出了一种新的主从控制方法,通过控制主从机SPWM调节的不同速度来实现外电路对内电路电压的电流控制。
提出控制系统软启动和过流后重启的思路,保证系统始终处于安全运行状态,并能快速反应。
两个单片机之间的通信是通过UART来完成的,实现从电路跟随主电路的输出相位,高精度采样系统的设计采用SPI通信方式实现。
关键词:单相逆变;并联均流;STM32;SPWM1引言能源是社会发展的原动力。
目前,传统化石燃料仍是现代社会使用的主要能源材料,但目前已探明的储量和消费水平无法估计长期稳定供应。
因此,化石燃料造成的能源危机和污染使可再生能源研究成为重中之重。
逆变器的工作过程是将光伏板产生的直流电流转换成稳定高效的交流电,可以直接提供给用户。
它由逆变器部分、控制部分和输出滤波部分组成。
这使得光伏逆变器的研究成为利用太阳能解决能源危机不可缺少的环节,其性能直接影响逆变器的效率和逆变器的能源质量。
微型光伏逆变器以其维护方便、安全性高等优点,被广泛应用于分布式单机光伏发电系统中。
此外,光伏转换器因其适应不同条件的能力、扩展方便和成本低而在市场上更具竞争力。
因此,要保证离网光伏发电系统高效稳定运行,开发一种可靠、高效、经济的微型光伏逆变器就显得尤为重要[1]。
2并网逆变器系统硬件设计2.1选择主控芯片本设计采用标准ARM结构、Cortex-M内核的STM32单片机作为主DSP,专为高性能、低成本、低功耗的嵌入式应用而设计,大大提高了信号处理效率。
STM32F103ZET6有60个中断源,可以匹配本系统中的各种外设和控制逻辑。
与其他单片机相比,具有功耗低、频率高、操作简单、调试方便、性能稳定性高等优点。
微控制器内置的UART和SPI通信模块可以满足系统中主从和交流通信的通信需求。
利用TMS320F2812芯片产生输出SPWM波形
1.主程序及中断服务程序流程图
主程序流程图如图1所示。
图1主程序流程图
中断服务程序流程图如图2所示。
图2中断服务程序流程图
由图2可知,当m=256时,中断子程序结束,返回主程序;m 256时,继续读取采样的m的值,直到m=256为止。
2.主程序
#include "DSP28_Device.h"
4.定时器的中断
寄存器EVAIFRA、EVAIFRB、EVBIFRB和EVBIFRB中共有16个关于GP定时器的中断标志。4个GP定时器的任何一个都可以产生以下4种中断:
(1)上溢:TxOFINT(x=1,2,3,4);
(2)下溢:TxUFINT(x=1,2,3,4);
(3)比较匹配:TxCINT(x=1,2,3,4);
(1)中断源。如果产生外围中断,寄存器EVxIFRA、EVxIFRB或EVxIFRC(x=A或B)中各自的标志位将会被置位。一旦置位,这些标志位将会保持直到软件清0。当标志位被软件清0后,随后的中断将不会被响应。
(2)使能中断事件管理器中断可以由中断屏蔽寄存器EVxIMRA、EVxIMRB和EVxIMRC(x=A或B)单独的使能或禁止。寄存器中的每个位置1使能中断,清0禁止中断。
题目:利用TMS320F2812芯片产生输出SPWM波形
要求:在片外区通过仿真器的运行得出正确结果,并用计算机打印程序,还要求用有详细的文档说明文件及相应的硬件原理图。格式可采用A4复印纸,试卷要求工整、内容一定要准确无误。
一.产生SPWM波形的理论基础
产生SPWM波形主要用到事件管理模块EVA或EVB。它包括通用目的定时器、全比较单元和EV中断。
基于单片机实现SPWM制作空调变频器
基于单片机实现SPWM制作空调变频器SPWM(Sinusoidal Pulse Width Modulation,正弦脉宽调制)是一种通过改变脉冲宽度来调制正弦波形的技术。
在空调变频器中,SPWM被用来控制空调压缩机的转速,从而实现空调运行的频率调节。
1.信号采集:空调变频器需要采集环境温度和设定温度信号。
可以通过温度传感器采集环境温度,并通过按钮或旋钮等输入设备采集设定温度信号。
2.控制算法:控制算法主要包括温度控制算法和SPWM生成算法。
温度控制算法根据环境温度和设定温度计算出控制信号。
SPWM生成算法根据控制信号生成相应的SPWM波形。
3.SPWM输出:根据SPWM生成算法生成的波形,控制输出信号,控制空调压缩机的转速。
通过改变脉冲的占空比,改变压缩机的电流和电压,从而控制压缩机的运行频率。
4.过温保护:在空调变频器中,还应该添加过温保护功能,以避免设备超过安全温度。
可以使用温度传感器检测设备温度,并在温度超过安全限制时触发过温保护措施,例如关闭空调压缩机。
在实际实现过程中,可以使用一块适配单片机的PWM模块来生成SPWM波形。
通过调整PWM的占空比和频率,可以改变SPWM的周期和幅值,从而实现空调压缩机的转速调节。
此外,为了保证空调变频器的稳定运行,还可以加入软起动、过压保护、电流保护等功能。
软起动可以避免空调压缩机在启动时产生过大的冲击电流;过压保护可以保证电压在合适范围内,避免对设备损坏;电流保护可以监测压缩机输出电流,避免过大的电流对设备造成损害。
总结起来,基于单片机实现SPWM的空调变频器需要进行信号采集、控制算法设计、SPWM输出和各种保护措施设计。
通过合理的控制算法和SPWM生成,可以实现空调压缩机的转速调节,从而实现空调的变频控制,提高能效和舒适度。
基于STM32的正弦波逆变器设计与研究
现代电子技术Modern Electronics TechniqueJun.2023Vol.46No.122023年6月15日第46卷第12期0引言逆变器是一种能把直流电源转变成定频定压或调频调压交流电源的转换器,广泛应用于家用电器设备、照明、电动工具等场所。
纯正弦波逆变器是通过控制半导体功率开关器件的导通和关断,将直流电能转化为交流电能。
如晶闸管(SCR )、可关断晶闸管(GTO )、大功率晶体管(GTR )、绝缘双极性晶体管(IGBT )和功率场效应管(MOSFET )等电力电子器件,较多用于此类电路。
纯正弦波逆变器的波形类似交流电源,以平滑的线上升和下降,虽然价格比普通的逆变器更昂贵,但它们在给精密电子设备仪器供电方面,可靠性和稳定性更好[1]。
改型波逆变器产生类似于上下楼梯的波形,以模仿纯交流电的波形,并且可以运行大多数家用小工具,但可能会遇到诸如“电子噪声”之类的问题,这些问题可能导致某些项目无法满负荷运行。
更重要的是,敏感的电子设备需要纯正弦波才能正常工作,如果尝试使用修改后的波来运行它们,可能会造成永久性损坏。
1设计与研究基础逆变技术的研究源于1931年。
第一台感应加热逆变器诞生于1948年,由美国西屋电气公司研制生产。
晶闸管(SCR )的发明为正弦波逆变器提供了更好的发展空间。
从20世纪70年代起,GTO 、BJT 、MOSFET 、DOI :10.16652/j.issn.1004⁃373x.2023.12.019引用格式:夏威,刘文胜.基于STM32的正弦波逆变器设计与研究[J].现代电子技术,2023,46(12):109⁃116.基于STM32的正弦波逆变器设计与研究夏威,刘文胜(惠州市技师学院电子工程系,广东惠州516003)摘要:逆变器是一种能把直流电源转变成定频定压或调频调压交流电源的转换器,广泛应用于家用电器设备、照明、电动工具等方面。
文中设计一种基于STM32的纯正弦波逆变器,并分析用于系统控制部分的正弦脉冲宽度调制(SPWM )技术。
干货超有料!spwm无敌stm32步进电机控制教程
干货超有料!spwm无敌stm32步进电机控制教程本教程介绍步进电机驱动和细分的工作原理,以及stm32103为主控芯片制作的一套自平衡的两轮车系统,附带原理图pcb图和源代码,有兴趣的同学一起来吧.本系统还有一些小问题,不当之处希望得到大家的指正.1混合式步进电机的结构和驱动原理电机原理这部分不想讲的太复杂了,拆开一台电机看看就明白了。
电机的转子是一个永磁体,它的上面有若干个磁极SN组成,这些磁极固定的摆放成一定角度。
电机的定子是几个串联的线圈构成的磁体。
出线一般是四条线标记为A+,A-,B+,B-。
A相与B相是不通的,用万用表很容易区分出来,至于各相的+-出线实际是不用考虑的,任意一相正负对调电机将反转。
另外一种出线是六条线的只是在A相和B相的中间点做两条引出线别的没什么差别,六出线的电机通过中间出线到A+或A-的电流来模拟正向或负向的电流,可以在没有负相电流控制的电路中实现电机驱动,从而简化驱动电路,但是这种做法任意时刻只有半相有电流,对电机的力矩是有损失的。
步进电机的转动也是电磁极与永磁极作用力的结果,只不过电磁极的极性是由驱动电路控制实现的。
我们做这样的一个实验就可以让步进电机转动起来。
1找一节电池正负随意接入到A相两端;然后断开;(记为A正向)2再将电池接入到B 相两端; 然后断开;(记为B正向)3电池正负对调再次接入A相; 然后断开;(记为A负向)4保持正负对调接入B相;然后断开;(记为B负向)…如此循环你会看到步进电机在缓慢转动。
注意电机的相电阻是很小的接通时近乎短路。
我们将相电流的方向记录下来应该为:A+B+A-B-A+…,如果我们更换接线顺序使得相电流顺序为A+B-A-B+A+…这时我们会看到电机向反方向运动。
这里每切换一次相电流电机都会转动一个很小的角度,这个角度就是电机的步距角。
步距角是步进电机的一个固有参数,一般两相电机步距角为1.8度即切换200次可以让电机转动一圈。
基于STM32的新型SPWM逆变电源
基于STM32的新型SPWM逆变电源张凯;王祥【摘要】This paper describes a design based on STM32 SPWM inverter. SPWM inverter through the boost links with the link has been set the frequency and voltage of the high-quality sinusoidal alternating current. Boost Boost topology based on the principle of using high-performance voltage-type PWM control chip TL494 drive the main circuit MOS tube. STM32 microcontroller as the core system control, with 12 -bit high precision D/A module precise control of output voltage. Over-current protection system can be smart with good load testing to control the system operation. Using digital technology based on single chip, making the power adjustment flexibility, reliable performance, low power, high efficiency, high performance requirements of equipment provides a high-quality AC power.%叙述了一种基于STM32系列设计的SPWM逆变电源.通过升压环节与SPWM逆变环节,得到了设定频率与电压的优质正弦交流电.基于Boost升压拓扑结构原理,采用高性能电压型脉宽调制控制芯片TL494驱动主回路MOS 管.STM32做为系统控制核心,配合12位高精度D/A模块精确控制输出电压.系统具有良好过流保护功能并可智能检测负载情况,以控制系统工作状态.采用嵌入式控制技术对此电源进行控制使整个系统结构简单,实现了系统的数字智能化.为性能要求高的仪器设备提供了一种高品质的交流电源.【期刊名称】《电气自动化》【年(卷),期】2012(034)003【总页数】4页(P52-54,81)【关键词】逆变电源;STM32;嵌入式;正弦脉宽调制;电压负反馈【作者】张凯;王祥【作者单位】武汉理工大学信息工程学院,湖北武汉430072;武汉理工大学信息工程学院,湖北武汉430072【正文语种】中文【中图分类】TM4230 引言近些年来,逆变电源[1,2]以其环保节能等优点,越来越广泛地应用于现代工业中。
基于单片机的SPWM波形产生器设计讲解
湖南工程学院课程设计课程名称单片机课程设计课题名称基于单片机的SPWM波形产生器设计专业电子科学与技术班级1002 班指导教师李延平2013 年 5 月13 日湖南工程学院课程设计任务书课程名称单片机课程设计课题基于单片机SPWM波形产生器专业班级电子科学技术学生姓名指导老师李延平审批任务书下达日期2013 年 5 月13 日任务完成日期2013 年5 月24 日目录一、绪论 (1)二、SPWM的基本原理 (2)1、常见SPWM信号产生方法 (2)2、正弦脉宽调制技术SPWM (2)2.1对称规则采样法 (3)2.2 不对称规则采样法 (4)2.3 等效面积法 (5)2.3 STC系列单片机生成SPWM波原理 (6)三、单片机AT89C52简介 (7)四、设计思路与总体框图 (8)五、系统设计分析 (9)六、程序调试与仿真 (10)七、实验结果分析与总结 (11)八、心得体会 (11)九、参考文献 (13)一、绪论电力电子技术和微机控制技术的发展使得正弦波脉宽调制技术(SPWM) 在电气传动、UPS 电源等领域得到广泛的应用。
随着集成电路技术的飞速发展,特别是单片机功能的日益强大和单片机技术的日益成熟,使得以前需要昂贵的专用SPWM芯片产生SPWM,现在用单片机产生SPWM已成为可能。
而当今单片机的应用已经从单纯依赖于51系列单片机向其它多种单片展,尤其以嵌入式PIC单片机的发展应用更为广泛。
正弦脉宽调制(SPWM)技术已在交流调速、直流输电、变频电源等领域得到广泛应用,为了提高整个系统的控制效果,高性能SPWM 脉冲形成技术一直是人们不断探索的课题。
采用模拟电路和数字电路等硬件电路来产生SPWM波形是一种切实可行的方法,但是这种实现方法控制电路复杂、抗干扰能力差、实时调节较困难。
近年来,人们提出了由单片机、DSP等微控制器来实现SPWM波形的数字控制方法,由于微控制器内部集成了很多控制电路,比如定时器、PWM 电路、可编程计数器阵列等,所以使得这种实现SPWM 的方法具有控制电路简单、运行速度快、控制精度高、抗干扰能力强等优点。
本科毕业设计---基于单片机的spwm控制系统设计
本科毕业设计题目:基于单片机的SPWM控制系统设计学院: 信息科学与工程学院专业:学号:学生姓名:指导教师:日期:摘要论文主要目的建立基于单片的SPWM调控系统,即用单片机产生SPWM波,其中,脉冲的宽度按正弦规律变化而和正弦波等效的PWM波形称为SPWM波。
本论文中主要是根据SPWM法的原理,即通过控制电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,并且在惯性环节上的效果基本相同,从而达到等效的效果。
根据这个原理,先利用MATLAB计算出基波与载波的交点,计算出交点之间的持续时间,根据持续时间的值在单片机程序中建立一个数组,数组中的元素就是赋予定时器的初值,当定时器溢出时,输出电平自动翻转,继而查表,赋予下一个电平的持续时间,这样一直反复下去,就可以得到一个SPWM波形。
最后在protues中仿真,在示波器中可以看到SPWM波的波形。
关键词:单片机;Matlab;查表;SPWM;仿真AbstractThe main purpose of the paper to establish a SPWM regulatory system based on single chip microcomputer , namely, Using a single chip microcomputer to generates SPWM wave,Among them, the pulse width changed by the law of sine is equal to the sine wave,this PWM wave calls SPWM wave.This paper is mainly based on the principle of SPWM law, namely, the switch-off device in the control circuit is on or off , So that the area of pulse voltage output and the area of the desired output sine wave in the corresponding sections are equal,And the effect on the inertia is substantially same, So as to achieve the equivalent effect, According to this principle, First using MATLAB to calculate the intersection of fundamental and carrier wave, Then calculating the duration between intersections, Based on the value of the duration ,Create an array in the microcontroller program, Elements in the array is initial value assigned to the timer, When the timer overflows, the output level will automatic reverse. Then look up table, Given the next duration of electrical level, Finally we simulate in protues ,then you can see the SPWM wave on the oscilloscope..Key words:Single chip microcomputer; MATLAB; Look-up table; SPWM; The simulation目录1 绪论 (1)1.1 研究的背景及意义 (1)1.2 研究目的及内容 (2)2 主电路工作原理 (4)2.1 PWM控制的基本原理 (4)2.2 SPWM法的基本原理 (5)2.3 PWM控制方法 (5)2.3.1 计算法 (5)2.3.2 调制法 (6)2.4 同步调制和异步调制 (6)2.4.1 异步调制 (6)2.4.2 同步调制 (6)2.5 规则采样法 (7)3 单极性和双极性PWM控制逆变电路分析 (9)3.1 单相桥式PWM逆变电路 (9)3.1.1 原理图 (9)3.1.2 单极性PWM控制方式 (9)3.2 双极性PWM控制方式 (10)4 基于MATLAB的分析以及交点计算 (12)4.1 MATLAB简介 (12)4.2 查表产生SPWM波理论分析 (12)4.3 Matlab计算程序及仿真图形结果 (13)5 单片机程序设计 (19)5.1 AT89C52介绍 (19)5.2 程序设计流程图 (22)5.3 C语言实现程序 (23)5.3.1 程序运行软件Keil uVision2简介 (23)5.3.2 主程序 (24)5.3.3 中断程序 (25)5.4 仿真工具protues介绍 (25)5.5 仿真电路图 (26)5.6 仿真显示 (26)6 结论 (28)参考文献 (29)致谢 (30)1 绪论1.1 研究的背景及意义随着科技的飞速发展,逆变器的使用越来越广泛,逆变器能够将直流电源转换为具有所需输出电压和频率的交流电源。
基于STM32的SPWM源代码
1、TIMER输出PWM基本概念脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
简单一点,就是对脉冲宽度的控制。
一般用来控制步进电机的速度等等。
STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM 输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。
1.1 PWM输出模式STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。
模式1和模式2的区别如下:110:PWM模式1-在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
111:PWM模式2-在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
由此看来,模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。
而从计数模式上来看,PWM也和TIMx在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式,关于3种模式的具体资料,可以查看《STM32参考手册》的“14.3.9 PWM模式”一节,在此就不详细赘述了。
1.2 PWM输出管脚PWM的输出管脚是确定好的,具体的引脚功能可以查看《STM32参考手册》的“8.3.7 定时器复用功能重映射”一节。
在此需要强调的是,不同的TIMx有分配不同的引脚,但是考虑到管脚复用功能,STM32提出了一个重映像的概念,就是说通过设置某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出PWM。
说明stm32产生pwm波的原理
说明stm32产生pwm波的原理下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!STM32产生PWM波的原理解析在嵌入式系统中,使用PWM(脉冲宽度调制)波形是一种常见的技术,尤其在控制电机、LED亮度调节和音频处理等领域。
基于STM32单片机的SPWM波的实现
很显然,由于 A 和 E 的位置要经过解复杂的方程才能获得,所以程序的运 算量非常大。
U m sin(w s t)
Uc
D
E
C
A B
A
Tc
t2 t2
B
E
t1
t2
t3
0
图(2) (2)规则采样法 由于自然采样法计算繁琐, 所消耗的资源较大,人们提出了一种更简便的方 法来替代自然采样法,即规则采样法。如图 3 所示,任取一段三角波与正弦波相
(1)正弦表的生成 本文的方法正是通过在每个计数周期赋给 TIMx_CCRx 按照正弦规律变化的 数值, 输出比较通道 OCx 就输出占空比与正弦值呈正比的 PWM 波,因此正弦表的 数据对 SPWM 波的生成至为重要。由于 16 位自动重装计数器是从 0 开始计数到 TIMx_ARR 再到 0,因此要对 y1 sin s t 曲线进行处理,得到 y2 1 sin s t ,如图 (5) ,然后进行幅值扩展得到 y4 0.5 ARR (1 sin s t ) ,系数 0.5 是为了避免采样 的正弦值超过自动重装载寄存器 ARR 的值,这是计数器寄存器的最大值。
表1
N samp / 2
SIN_VAL[i]
标号 数值 标号 数值 标号 数值 标号 数值 标号 数值 标号 数值 标号 数值 标号 数值 173~175 658 176~179 657 116~117 997 118~119 994 60 1949 62 1935 29 3891 30 3837 176~179 659 180~188 658 118~119 998 120~124 995 61 1951 63 1936 30 3900 31 3843 180~197 660 189 659 120~129 999 125 996 62~65 1952 64 1937 31~32 3905 32 3846 198~201 659 190~198 658 130~131 998 126~130 995 66 1951 65 1936 33 3900 33 3843 202~204 658 199~202 657 132~133 997 131~132 994 67 1949 66 1935 34 3891 34 3837
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TIMx _ ARR
val(i 2)
val(i1)
val(i)
自然采样法是用正弦波与三角载波的交点来确定脉冲宽度与间隙时间的,进 而生成 SPWM 波。如图 2,截取了任意一段正弦波与三角载波在一个周期内相交 的情况。 A 点是脉冲的发生时刻, E 点是脉冲的结束时刻, 在三角波的一个周期 Tc
t1 和 t3 是脉冲周期的间隙时间。 内, 显然 Tc = t1 t2 t3 。 t2 为 SPWM 波的高电平时间。
i
,中心点所对应的相位角为 i ,则根据面积相等的等效原则
i U s n i d 2 U m sin(s t) dt i 2 2 s n
进一步化简得
U U i d m cos(s t) 2 s
i i
2 s n
2 s n
2ARR _VAL
2
y2 1 sin s t
y3 ARR(1 sinst)
1
ARR _VAL
0
y1 sin s t
t
y4 0.5ARR(1 sinst)
0
(b) 图(5)
t
(a)
计数器的频率设为 f cnt ,目标正弦波的频率 f s ,计数器自动重装值 ARR,对 正弦曲线进行采样,采样份数为 N samp ,则每一份所占时间是 1 / ( N samp f s ) ,这个时 间也就是计数器的一个计数周期。对计数器来说,由于采用中央计数模式,所以 一个计数周期是计数器从零开始到向上溢出所经历时间的两倍, 即 2 ( ARR / f cnt ) 。 由 2 ( ARR / f cnt ) 1 / ( N samp f s ) ,得到 f s f cnt / (2 ARR N samp ) 。
由于 B 位置非常容易确定,而且两边对称,计算量大大减少,软件实现较 为简单,故实际中经常采用此法来产生 SPWM 波。
Uc
U m sin(w s t)
A B
E
A
Tc
t2 t2
B
E
t1
t2
t3
0
图(3) 基于 STM32 的 SPWM 波的实现 如图(4)所示,STM32 微控制器的定时器 TIMx 的部分方框图,包括计数比 较模块和输出控制模块。
ARR
ARR
0
0
2
(2)CCR 赋值时机
t 图(6)
3
t
选择更新 CCRx 的时机非常重要, 可以在两个重要时刻来执行更新 CCRx 的操 作:CNT_VAL 与 CCRx_VAL 第二次匹配时和计数器计数下溢时。在 CNT_VAL 和 CCRx_VAL 第二次匹配时,通过查询输出比较通道(OC1)的中断标记 CC1IF,若 CC1IF 被置 1,则将新的值赋给 CCR1,如下图(7)所示为 CCR1 值呈递增的情况, 在向下计数时发生第二次匹配, 将 CCR1 的值 val(i)替换为 val(i+1),计数器继 续运行,此时计数器寄存器的值小于比较寄存器的值,输出通道(OC1)为无效 电平,等到下一个计数周期,计数器寄存器的值与较寄存器的值匹配时,输出通 道电平发生翻转,并在计数器寄存器值大于比较寄存器的值状态下保持高电平, 直到发生第二匹配时再次翻转。
(1)正弦表的生成 本文的方法正是通过在每个计数周期赋给 TIMx_CCRx 按照正弦规律变化的 数值, 输出比较通道 OCx 就输出占空比与正弦值呈正比的 PWM 波,因此正弦表的 数据对 SPWM 波的生成至为重要。由于 16 位自动重装计数器是从 0 开始计数到 TIMx_ARR 再到 0,因此要对 y1 sin s t 曲线进行处理,得到 y2 1 sin s t ,如图 (5) ,然后进行幅值扩展得到 y4 0.5 ARR (1 sin s t ) ,系数 0.5 是为了避免采样 的正弦值超过自动重装载寄存器 ARR 的值,这是计数器寄存器的最大值。
自动重装载寄存器
PSC
计数器
输出
Sin_val
捕获比较寄存器 1 控制
CC2I
捕获比较寄存器 2
图(4) 选择定时器的 PWM 模式,输出比较通道 OCx 将产生由 TIMx_ARR 决定周期, TIMx_CCRx 决定占空比的 PWM 波;通过在每个计数周期赋给 TIMx_CCRx 按照正弦 规律变化的数值, 输出比较通道 OCx 将输出占空比与正弦值呈正比的 PWM 波,即 SPWM 波。 STM32 中的定时器计数模式有 3 种,这里选择中央计数模式,该计数模式是 计数器从 0 开始计数到自动加载的值(TIMx_ARR 寄存器)−1,产生一个计数器溢 出事件,然后向下计数到 1 并且产生一个计数器下溢事件,完成一个计数周期, 然 后 再 从 0 开 始 重 新 计 数 。 选 择 PWM 模 式 2 : 在 向 上 计 数 时 , 一 旦 TIMx_CNT<TIMx_CCR1 时通道 1 为无效电平(0) ,否则为有效电平(1) ;在向下 计数时,一旦 TIMx_CNT>TIMx_CCR1 时通道 1 为有效电平,否则为无效电平。定 时器不断计数的同时,将比较寄存器的值与计数器寄存器的值进行比较,当两者 发生匹配的时候,引脚电平就会发生翻转,由于定时器向上和向下计数的时候, 数值匹配会发生两次,这就意味一个周期内会发生两次翻转,产生对称的 PWM 信号。
交的情况, A 点是脉冲开始的时刻, E 点是脉冲结束的时刻, 在等腰三角形底部 B 时刻对正弦波采样,获得对应相位的正弦值,然后做时间轴的平行线,获得 A,B
t2 ,如图(3) 两点,由于两边对称,所以 AB BE , AB BE ,即 t2 :
由三角形相似得到 :
很显然,由于 A 和 E 的位置要经过解复杂的方程才能获得,所以程序的运 算量非常大。
U m sin(w s t)
Uc
D
E
C
A B
A
Tc
t2 t2
B
E
t1
t2
t3
0
图(2) (2)规则采样法 由于自然采样法计算繁琐, 所消耗的资源较大,人们提出了一种更简便的方 法来替代自然采样法,即规则采样法。如图 3 所示,任取一段三角波与正弦波相
Um ) (2sin(si ) sin(s s 2s n 2U m sin(si ) sin(s ) s 2s n 2U m
s
sin(si ) sin(
Ud ,得到 2
2n
)
两边同乘
1 ) 2 U m 2 n i = sin(si ) 1 nsU d 2n 1 sin( ) TU 2n sin( ) s m s i 1 nU d 2n sin(
ARR
661 659 1000 996 1953 1937 3906 3846
756 2 758 2 500 2 502 2 256 2 258 2 128 2 130 2
为了使一个周期的正弦曲线前后半个周期的采样点数相等, 采样点数 N samp 必 须是偶数。 表 1 是当 N samp 取某些值时的部分正弦值, 当数值下标 i 在 N samp 左右时,
4
数值达到最大, 且在半周期的采样点数取偶数或奇数时,最大采样数值出现不同 的情形: 当
N samp 2
为偶数时,即半周期等效脉冲数为偶数个,如上表取 378、250、128
N samp 2
时,正弦表的最大值都小于计数器的自动重装载值 ARR;而当
为奇数时, 半
周期等效脉冲数取奇数个,如上表中取 379、251、129 时,正弦表的最大值等于 计数器的自动重装载值 ARR。 出现这样的情况的原因如图(6)所示, 当半周期的脉 冲数是偶数, 采样点均匀地分在正弦曲线最高点的两边,避免了采样值取得正弦 曲线最高点的值。 当半周期的脉冲数是奇数, 下标是 N samp 的采样值正好在正弦曲
基于 STM32 的 SPWM 调制实现方法 SPWM 波的原理 SPWM 全称正弦脉冲宽度调制技术,是用一系列等幅不等宽的脉冲等效正弦 波。SPWM 技术是基于“面积相等,效用等效”原理,即形状不同的窄脉冲信号 对于时间的积分相等(面积相等),其效果相同。 将半周期的正弦波在时间轴上等分成若干份,这些部分的面积依次呈先增 大,再减小的趋势变化,面积两边对称;若每一部分用对应面积相等,等宽不等 幅的矩形脉冲代替,则这些脉冲的高度就会呈现依次先增高,再降低的的趋势, 脉冲高度两边对称;进一步说,如果被等分的正弦波与横轴围成的区域用对应面 积相等, 等幅不等宽的矩形脉冲代替,则这一系列脉冲的宽度就会依次呈现出先 变宽,后变窄,宽度两边对称的有规律的变化。 SPWM 波正是用一系列等幅不等宽的矩形脉冲来等效正弦波的。如图所示:
4
线最高点采样,取得最大值,与 ARR 相等,由于采样点很密集,采样值之间相 差不多, 且在正弦曲线顶点附近曲线变化非常平缓, 故在经过量化Байду номын сангаас整后 N samp 下
4
标附近的值都与计数器的自动重装载值 ARR 接近,这些值的出现会致使输出多 个前后相连的占空比接近百分之百的脉冲,前一个周期的输出电平刚刚翻转, 下 一个周期比较寄存器的值和计数器寄存器的值就发生匹配,输出电平再次翻转, 两次翻转时间间隔非常小,极有可能发生错误,所以这种情况是要极力避免的, 因此采样点数取 4 的整倍数。
当 n 的数值较大时, s i n ( 最终得 i =
1 1 ) 2n 2n
TsU m sin(si ) 。 nU d
显然矩形脉冲宽度 i 与其中心点 i 所对应的正弦值成正比,因此在这半个 周期里,脉冲宽度是中间宽,两边依次变窄窄,随正弦规律变化。 SPWM 波的实现方法 (1)自然采样法
Uc AA E E , Tc / 2 AB BE