PWM使用的DMA通道与串口接收的DMA通道撞车了,咋办?
demi 在 提交
demi 在 提交
一、配置定时器为PWM产生
二、配置时钟树
三、定时器配置
四、配置完生成程序后,主程序里还要进行启动PWM就可以了
MX_TIM3_Init(); HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);//启动。置1 CCER的输出使能位bit4 HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);//CCER的bit0
然后可以改变占空比了。
**特别注意:**占空比不能大于自动重载寄存器ARR的值,不然输出的都是高电平。这个问题整了一天。
五、程序分析
/* TIM3 init function */
static void MX_TIM3_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig; TIM_OC_InitTypeDef sConfigOC; //------------------实际是调用TIM_Base_SetConfig配置定时器,上一篇分析过-- htim3.Instance = TIM3; htim3.Init.Prescaler = 71; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 99; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } //---------------------这个是默认的,不管------------------------------- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } //----------------配置输出比较部分-- 上图5部分------------------------------- sConfigOC.OCMode = TIM_OCMODE_PWM1;//输出模式PWM1 sConfigOC.Pulse = 80;//占空比 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;//高电平极性 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } //---------------------------------------------------------------------------------- sConfigOC.Pulse = 50; if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } HAL_TIM_MspPostInit(&htim3);//初始化引脚IO }
初始化PWM通道HAL_TIM_PWM_ConfigChannel------>调用
case TIM_CHANNEL_1: { assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); /* Configure the Channel 1 in PWM mode */ TIM_OC1_SetConfig(htim->Instance, sConfig); /* Set the Preload enable bit for channel1 */ htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;//比较模式寄存器CCMR1的bit3位OC1PE置1,写入到CCR1的值在事件更新时,才会传到影子寄存器。清0则写入CCR1的值会马上起作用 /* Configure the Output Fast mode */ htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;//配置CCMR1的bit2位,输出比较快速使能 htim->Instance->CCMR1 |= sConfig->OCFastMode; } break; //-------------------------------------------------------------------------------- void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) { uint32_t tmpccmrx = 0U; uint32_t tmpccer = 0U; uint32_t tmpcr2 = 0U; /* Disable the Channel 1: Reset the CC1E Bit */ TIMx->CCER &= ~TIM_CCER_CC1E;//关通道 CCER bit0清0 /* 读出三个寄存器的值 */ tmpccer = TIMx->CCER; tmpcr2 = TIMx->CR2; tmpccmrx = TIMx->CCMR1; /* Reset the Output Compare Mode Bits */ tmpccmrx &= ~TIM_CCMR1_OC1M;//复位CCMR1的bit6:4 tmpccmrx &= ~TIM_CCMR1_CC1S;//复制CCMR1的bit1:0 /* Select the Output Compare Mode */ tmpccmrx |= OC_Config->OCMode;//配置OC1M为 110 PWM1模式 /* Reset the Output Polarity level */ tmpccer &= ~TIM_CCER_CC1P;//配置输出极性 CCER的 CC1P位 tmpccer |= OC_Config->OCPolarity; if(IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1))//如果是定时器1的123通道,还要设置互补输出 { assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); /* Reset the Output N Polarity level */ tmpccer &= ~TIM_CCER_CC1NP; /* Set the Output N Polarity */ tmpccer |= OC_Config->OCNPolarity; /* Reset the Output N State */ tmpccer &= ~TIM_CCER_CC1NE; } if(IS_TIM_BREAK_INSTANCE(TIMx))//如果是定时器1,还要设置CR2的bit8 bit9 死区控制 { /* Check parameters */ assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); /* Reset the Output Compare and Output Compare N IDLE State */ tmpcr2 &= ~TIM_CR2_OIS1; tmpcr2 &= ~TIM_CR2_OIS1N; /* Set the Output Idle state */ tmpcr2 |= OC_Config->OCIdleState; /* Set the Output N Idle state */ tmpcr2 |= OC_Config->OCNIdleState; } /* 把设置好的值写入这4个寄存器 */ TIMx->CR2 = tmpcr2; TIMx->CCMR1 = tmpccmrx; TIMx->CCR1 = OC_Config->Pulse;//占空比 TIMx->CCER = tmpccer; }
流程图如下:
需要改变占空比的,直接调用
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,dutycycle);
改变寄存器CCR1,改变的值是立即生效还是下一个周期生效取决于CCMR1的OC1PE位
while (1) { while(dutycycle<100) { dutycycle+=10; __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,dutycycle); HAL_Delay(1); } while(dutycycle) { dutycycle-=10; __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,dutycycle); HAL_Delay(1); } }
版权声明:本文为CSDN博主 - D.luffy 的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/liangbin414/article/details/88707340
1、概念
脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
2、应用实例
PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
图1显示了三种不同的PWM信号。图1a是一个占空比为10%的PWM输出,即在信号周期中,10%的时间通,其余90%的时间断。图1b和图1c显示的分别是占空比为50%和90%的PWM输出。这三种PWM输出编码的分别是强度为满度值的10%、50%和90%的三种不同模拟信号值。例如,假设供电电源为9V,占空比为10%,则对应的是一个幅度为0.9V的模拟信号。
图2是一个可以使用PWM进行驱动的简单电路。图中使用9V电池来给一个白炽灯泡供电。如果将连接电池和灯泡的开关闭合50ms,灯泡在这段时间中将得到9V供电。如果在下一个50ms中将开关断开,灯泡得到的供电将为0V。如果在1秒钟内将此过程重复10次,灯泡将会点亮并象连接到了一个4.5V电池(9V的50%)上一样。这种情况下,占空比为50%,调制频率为10Hz。
3、特点
PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换,让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。
对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。
总之,PWM既经济、节约空间、抗噪性能强,是一种值得广大工程师在许多设计应用中使用的有效技术。
版权声明:本文为CSDN博主「凡旭国」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_20265495/article/details/72416780
■ PWM 和PFM 是两大类DC-DC 转换器架构
■ 每种类型的性能特征是不一样的
■ 重负载和轻负载时的效率
■ 负载调节
■ 设计复杂性
■ EMI / 噪声考虑
做电源设计的应该都知道PWM 和PFM 这两个概念
开关电源的控制技术主要有三种:(1)脉冲宽度调制(PWM);(2)脉冲频率调制(PFM);(3)脉冲宽度频率调制(PWM-PFM).
PWM:(pulse width modulation)脉冲宽度调制
脉宽调制PWM是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
PFM:(Pulse frequency modulation) 脉冲频率调制
一种脉冲调制技术,调制信号的频率随输入信号幅值而变化,其占空比不变。由于调制信号通常为频率变化的方波信号,因此,PFM也叫做方波FM
PWM是频率的宽和窄的变化,PFM是频率的有和无的变化, PWM是利用波脉冲宽度控制输出,PFM是利用脉冲的有无控制输出.
其中PWM是目前应用在开关电源中最为广泛的一种控制方式,它的特点是噪音低、满负载时效率高且能工作在连续导电模式,现在市场上有多款性能好、价格低的PWM集成芯片;PFM具有静态功耗小的优点,但它没有限流的功能也不能工作于连续导电方式。
与PWM相比,PFM的输出电流小,但是因PFM控制的DC/DC变换器在达到设定电压以上时就会停止动作,所以消耗的电流就会变得很小。因此,消耗电流的减少可改进低负荷时的效率。PWM在低负荷时虽然效率较逊色,但是因其纹波电压小,且开关频率固定,所以噪声滤波器设计比较容易,消除噪声也较简单。
若需同时具备PFM与PWM的优点的话,可选择PWM/PFM切换控制式DC/DC变换器。此功能是在重负荷时由PWM控制,低负荷时自动切换到PFM控制,即在一款产品中同时具备PWM的优点与PFM的优点。在备有待机模式的系统中,采用PFM/PWM切换控制的产品能得到较高效率。
来源:玩转单片机
做电源设计的应该都知道PWM 和PFM 这两个概念。
开关电源的控制技术主要有三种:
(1)脉冲宽度调制(PWM);
(2)脉冲频率调制(PFM);
(3)脉冲宽度频率调制(PWM-PFM).
PWM:(pulse width modulation)脉冲宽度调制
脉宽调制PWM是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
PFM:(Pulse frequency modulation) 脉冲频率调制
一种脉冲调制技术,调制信号的频率随输入信号幅值而变化,其占空比不变。由于调制信号通常为频率变化的方波信号,因此,PFM也叫做方波FM
PWM是频率的宽和窄的变化,PFM是频率的有和无的变化, PWM是利用波脉冲宽度控制输出,PFM是利用脉冲的有无控制输出。
其中PWM是目前应用在开关电源中最为广泛的一种控制方式,它的特点是噪音低、满负载时效率高且能工作在连续导电模式,现在市场上有多款性能好、价格低的PWM集成芯片,如UCl842/2842/3842、TDAl6846、TL494、SGl525/2525/3525等;PFM具有静态功耗小的优点,但它没有限流的功能也不能工作于连续导电方式,具有PFM功能的集成芯片有MAX641、TL497等;PWM-PFM兼有PWM和PFM的优点。
DC/DC变换器是通过与内部频率同步开关进行升压或降压,通过变化开关次数进行控制,从而得到与设定电压相同的输出电压。PFM控制时,当输出电压达到在设定电压以上时即会停止开关,在下降到设定电压前,DC/DC变换器不会进行任何操作。但如果输出电压下降到设定电压以下,DC/DC变换器会再次开始开关,使输出电压达到设定电压。PWM控制也是与频率同步进行开关,但是它会在达到升压设定值时,尽量减少流入线圈的电流,调整升压使其与设定电压保持一致。
与PWM相比,PFM的输出电流小,但是因PFM控制的DC/DC变换器在达到设定电压以上时就会停止动作,所以消耗的电流就会变得很小。因此,消耗电流的减少可改进低负荷时的效率。PWM在低负荷时虽然效率较逊色,但是因其纹波电压小,且开关频率固定,所以噪声滤波器设计比较容易,消除噪声也较简单。
若需同时具备PFM与PWM的优点的话,可选择PWM/PFM切换控制式DC/DC变换器。此功能是在重负荷时由PWM控制,低负荷时自动切换到PFM控制,即在一款产品中同时具备PWM的优点与PFM的优点。在备有待机模式的系统中,采用PFM/PWM切换控制的产品能得到较高效率。
就DC-DC变换器而言目前业界PFM只有Single Phase,且以Ripple Mode的模式来实现,故需求输出端的Ripple较大。没有负向电感电流,故可提高轻载效率。由于是看输出Ripple,所以Transient很好,在做Dynamic的时候没有under-shoot。PWM有Single Phase &Multi-phase,多以Voltage Mode or Current Mode来实现,对输出Ripple没有要求,轻载时存在电感负向电流,故轻载效率较差,Compensation较Ripple相比较慢。将PWM于PFM结合使用,当侦测到电感负电流的时候,变出现Pulse Skipping,而不再受内部Clock控制。此时,controller will turnoff both h-mos & l-mos,Coss & L会出现阻尼振荡。
每位工程师接触的领域不一样,可能有的领域是用PFM比较多,有的是用PWM比较多,但从整个电源行业来说,相信目前还是PWM用的多.上世纪80年代至今,PWM开始了在电源变换领域的“王朝统治"地位,因为每种方式都有缺点和优点.关键还是看是否适合客户需要吧在论坛看到一位网友是这样写的,我觉得写的比较形象,他说如果把PFM与PWM的电源用车来比较的话,用PFM的=奔驰,用PWM的=大众。
PFM相比较PWM主要优点在于效率
1、对于外围电路一样的PFM和PWM而言,其峰值效率PFM与PWM相当,但在峰值效率以前,PFM的效率远远高于PWM的效率,这是PFM的主要优势。
2、PWM由于误差放大器的影响,回路增益及响应速度受到限制,PFM具有较快的响应速度
PFM相比较PWM主要缺点在于滤波困难
1、滤波困难(谐波频谱太宽)。
2、峰值效率以前,PFM的频率低于PWM的频率,会造成输出纹波比PWM偏大。
3、PFM控制相比PWM控制 IC 价格要贵。
PFM之所以应用没有PWM多最主要的一个原因就是另外一个原因就是PWM的巨大优点了:控制方法实现起来容易,PFM控制方法实现起来不太容易
来源:硬件十万个为什么
• PWM 和PFM 是两大类DC-DC 转换器架构
• 每种类型的性能特征是不一样的
• 重负载和轻负载时的效率
• 负载调节
• 设计复杂性
• EMI / 噪声考虑
做电源设计的应该都知道PWM 和PFM 这两个概念
开关电源的控制技术主要有三种:
(1)脉冲宽度调制(PWM);
(2)脉冲频率调制(PFM);
(3)脉冲宽度频率调制(PWM-PFM).
PWM:(pulse width modulation)脉冲宽度调制
脉宽调制PWM是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
PFM:(Pulse frequency modulation) 脉冲频率调制
一种脉冲调制技术,调制信号的频率随输入信号幅值而变化,其占空比不变。由于调制信号通常为频率变化的方波信号,因此,PFM也叫做方波FM
PWM是频率的宽和窄的变化,PFM是频率的有和无的变化,PWM是利用波脉冲宽度控制输出,PFM是利用脉冲的有无控制输出。
其中PWM是目前应用在开关电源中最为广泛的一种控制方式,它的特点是噪音低、满负载时效率高且能工作在连续导电模式,现在市场上有多款性能好、价格低的PWM集成芯片;PFM具有静态功耗小的优点,但它没有限流的功能也不能工作于连续导电方式。
与PWM相比,PFM的输出电流小,但是因PFM控制的DC/DC变换器在达到设定电压以上时就会停止动作,所以消耗的电流就会变得很小。因此,消耗电流的减少可改进低负荷时的效率。PWM在低负荷时虽然效率较逊色,但是因其纹波电压小,且开关频率固定,所以噪声滤波器设计比较容易,消除噪声也较简单。
若需同时具备PFM与PWM的优点的话,可选择PWM/PFM切换控制式DC/DC变换器。此功能是在重负荷时由PWM控制,低负荷时自动切换到PFM控制,即在一款产品中同时具备PWM的优点与PFM的优点。在备有待机模式的系统中,采用PFM/PWM切换控制的产品能得到较高效率。
转自:硬件十万个为什么
导读:在电动机FOC控制系统中,对电动机电流的采样是一个非常重要的环节,在低成本应用场合,为了降低成本,减小体积,根据母线电流和相电流关系而形成的单电阻电流采样及相电流重建方法具有很大的竞争优势。MagniV为单电阻设计提供了独特的硬件支持。
一、引言
电流采样对无感电机矢量控制是非常重要的,电流采样性能是其中一个关键的环节,往往直接影响到整个控制方案的性能好坏。
在实际使用中,三相电流采样常见类型有三电阻、双电阻以及单电阻采样技术。它们的实现方式不同,但共同的目标就是为得到真实的三相电流。本期小编主要介绍近期十分热门的单电阻电流重建技术以及MagniV系列芯片对于该技术特有的硬件支持。
二、单分流采样技术简介
相电流采样技术对于检测相电流以及通过其重构获取定子电流的全部三相信息是关键问题。当直流母线电压连接到电机时,如图1在八个电压矢量的其中六个中,流过分流电阻的相电流产生一个电压降,需要由AD转换器进行适当采样。
图2显示了矢量101期间的电流测量示例,其中可以采集iSB电流。考虑一个对称三相系统,可以在任何时候使用基尔霍夫电流定律(iSA+iSB+iSC=0),因此在一个PWM周期内至少需要两个电流才能使所有三相电流可用于矢量控制。由于电压矢量的调制,在单个PWM周期内可以使用两个不同的非零电压矢量组合感测两个电流。然后基于基尔霍夫电流定律计算第三个电流。
三、单分流采样技术缺陷
技术是一把双刃剑,在单电阻分流测量期间,为了允许测量电流,需要对正弦调制模式进行修改,这种模式修改可能会产生一些电流纹波,由于模式修改以及对修改后的校正,算法的实现难度增加并且会占用更多的CPU资源。
在电流测量期间只有当两个电压矢量有效并保持足够的时间以捕获电流时,才能使用单分流三相电流重构。
如图3所示,当两个PWM边缘彼此靠近时,直流链路上的相电流信号脉冲变得太短而无法被捕获或“消失”。这使得这部分三相电流信息不可见,并且感测电路最终可能干扰相电流反馈。如果所有三相都足够接近,则不能从直流母线电流传感器恢复相电流信息。
单分流采样有其明显的优势,也存在必然的缺陷,但MagniV系列的双切换PWM技术极大的增加了单分流采样方案优势。
四、双切换PWM技术
在不改变硬件的情况下,我们可以使用“移相PWM”的方式对三相电流进行重构,但其软件实现难度大,同时增加了芯片的资源的需求。
小编这里给伙伴们推荐另一种方式:MagniV系列芯片特有的“双切换PWM”技术。该技术是将重叠信号中的一个分成两部分,并在脉冲中间插入一个零脉冲,从而很好的解决了单分流采集技术的缺陷。
MagniV的“双切换PWM”技术除了将一个信号从另一个信号上移开之外,还能将其中一个重叠信号分成两个对称信号,这两个部分分开移动(图4左边的蓝色信号),因此信号的总长度是相同的。
但是,会有不同数量的开关操作。考虑到插入的死区时间不同,双开关阶段的输出电压较低。这种双重切换的另一个影响是不同的电压矢量被注入到电机中。这些干扰可能会导致通量的谐波失真和产生噪音。
为了降低双重切换过程中的噪声和损耗,所有的信号分成两部分,其中一个信号使另两信号以较长的时间间隔分开(图4右侧)。不必要的电压矢量(110)在包括零电压矢量的两个短时间段内切换,并且减少了双重切换的负面影响。
同时,由于双重切换的机制,我们在每个电流上可以有两个样本可用,附带的我们可以对样本取均值,一定程度上平滑采样数据。
五、总结
在一些低成本应用场合,为了降低成本,减小体积,根据母线电流和相电流关系而形成的单电阻电流采样及相电流重建方法具有很大的竞争优势。
单电阻电流重建的最重要原因之一就是降低成本,它将采样电路简化至一个分流电阻和一个差分放大器。该方案除了降低成本外,它检测全部三相时使用的电路相同,这对于全部测量,增益和偏移都是相同的,这将不再需要校准每相放大电路或者在软件中进行补偿。
MagniV系列芯片特有的“双切换PWM”技术。为单电阻FOC的实现提供了另一种崭新的思路,并通过硬件上的改变简化了单电阻FOC技术的设计。
转自:周立功单片机