0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全网最通俗易懂SPWM入门教程

璟琰乀 来源:8号线攻城狮 作者:8号线攻城狮 2020-12-22 13:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

自然采样法

规则采样法

单极性

双极性

如何编写程序

总结

基本原理SPWM的全称是(Sinusoidal PWM),正弦脉冲宽度调制是一种非常成熟,使用非常广泛的技术;

之前在PWM的文章中介绍过,基本原理就是面积等效原理,即冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同 。

换句话说就是通过一系列形状不同的窄脉冲信号,相对应时间的积分相等(面积相等),其最终效果相同;

所以SPWM就是输入一段幅值相等的脉冲序列去等效正弦波,因此输出为高的脉冲时间宽度基本上呈正弦规律变化;

这里通常使用的采样方法是:自然采样法和规则采样法;

自然采样法自然采样法是用需要调制的正弦波与载波锯齿波的交点,

来确定最终PWM脉冲所需要输出的时间宽度,最终由此生成SPWM波;

具体如下图所示,这里会对局部①部分进行简单分析,下面进一步介绍;

SPWM波形

局部①的情况如下图所示;简单分析一下整个图形的情况;

锯齿波和调制正弦波的交点为 A和 B;

因此 A点所需时间为 T1, B点所需时间为 T2;

所以在该周期内,PWM所需要的脉冲时间宽度 Ton满足: 最终结论就是,只要求出 A点和 B点位置,就可以求出 ;

Z7fmAf.png

自然采样法

这里对于求解A,B位置的推导不做介绍,但是计算量比较大,因此在微处理器中进行运算会占用大量资源,下面再介绍另一种优化的采样方法:规则采样法。

规则采样法根据载波PWM的电压极性,一般可以分为单极性SPWM和双极性SPWM;下面进一步介绍;

单极性单极性SPWM在正弦波的正版周期,PWM只有一种极性,在正弦波的负半周期,PWM同样只有一种极性,但是与正半周期恰恰相反,具体如下图所示;

下面取正弦波的正半周期的情况进行分析;

YnInau.png

单极性SPWM

正弦波的正半周期整体如下所示;由图中我们可以知道以下几点;

载波PWM的周期为 T;

线段 BO为当前这个等腰三角形的垂线;

线段 BO与正弦曲线 相较于点 A;

所以在该周期内 ,PWM所需要的脉冲时间宽度 Ton满足:

rIZ7re.png

单极性正半周期

具体的推导过程如下:

第一步:由于O点的位置比较好确认,因此,线段 第二步:这里载波锯齿波的最大幅值为1,因此线段 第三步:根据初中学过的相似三角形定理,满足:

最终简化得到:

这里对载波的幅值做了归一化处理,如果锯齿波的最大值为 ,正弦波的幅值最大为 ,则;

双极性只要符合面积等效原理,PWM还可以是双极性的,具体如下图所示;这种调制方式叫双极性SPWM,在实际应用中更为广泛。

QjMjya.png

双极性SPWM如何编写程序上面讲到这里PWM的 时间满足:

其中 为正弦波幅值, 为载波锯齿波幅值;

那么下面以STM32为例,介绍以下如何进行程序编写;

首先得先STM32是如何产生PWM?

通过数据手册可以知道,STM32通过TIM输出PWM,这里有几个寄存器

计数寄存器: CNT

比较寄存器: CCR (决定了占空比,决定了脉冲宽度)

自动重装寄存器: AAR(决定了PWM的周期)

可能这么说,还是云里雾里的,先看下图;

my6fQr.png

STM32的PWM产生原理

STM32中PWM的模式有普通的PWM,和中央对齐的PWM,上图使用的就是中央对齐PWM;

产生PWM的过程可以分为以下几个过程;

第一步:配置好TIM, 通常时基和ARR都会配置好,这时候PWM的周期就已经被设定好了,另外时基决定了CNT计数寄存器增加一次技术所需的时间;

第二步:刚开始, CNT《CCR,并且 CNT开始增加,这时候PWM的输出都是低电平;当CNT》CCR之后,PWM输出为高电平;

第三步:当 CNT的值等于AAR之后, CNT开始减少,同理 CNT《CCR,PWM的输出低电平;当CNT》CCR,PWM输出为高电平;

第四步:循环上述三个步骤;

程序中如何实现?

从上述STM32产生PWM的过程中不难发现, 满足;

①上一节推导的公式如下:

②结合①式和②式,可以得到:

上面公式中用CCR表示CCR寄存器中的值,ARR表示ARR寄存器中的值;

最后需要做的三件事

计算出ARR,一般配置TIM定时器的时候能在数据手册找到公式;

调制比,也就是 的系数;

根据③式生成正弦表,然后查表(实时计算因为涉及到较多运算量,所以利用查表,空间换时间,提高效率), 利用PWM的事件去触发中断,更新下一次CCR的值;

正弦函数表:

const uint16_t indexWave[] = { 0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 89, 98, 107, 116, 125, 133, 142, 151, 159, 168, 176, 184, 193, 201, 209, 218, 226, 234, 242, 249, 257, 265, 273, 280, 288, 295, 302, 310, 317, 324, 331, 337, 344, 351, 357, 364, 370, 376, 382, 388, 394, 399, 405, 410, 416, 421, 426, 431, 436, 440, 445, 449, 454, 458, 462, 465, 469, 473, 476, 479, 482, 485, 488, 491, 493, 496, 498, 500, 502, 503, 505, 506, 508, 509, 510, 510, 511, 512, 512, 512, 512, 512, 512, 511, 510, 510, 509, 508, 506, 505, 503, 502, 500, 498, 496, 493, 491, 488, 485, 482, 479, 476, 473, 469, 465, 462, 458, 454, 449, 445, 440, 436, 431, 426, 421, 416, 410, 405, 399, 394, 388, 382, 376, 370, 364, 357, 351, 344, 337, 331, 324, 317, 310, 302, 295, 288, 280, 273, 265, 257, 249, 242, 234, 226, 218, 209, 201, 193, 184, 176, 168, 159, 151, 142, 133, 125, 116, 107, 98, 89, 81, 72, 63, 54, 45, 36, 27, 18, 9, 0};

中断服务函数:

extern uint16_t indexWave[];extern __IO uint32_t rgb_color;/* 呼吸灯中断服务函数 */void BRE_TIMx_IRQHandler(void){ static uint16_t pwm_index = 0; //用于PWM查表 static uint16_t period_cnt = 0; //用于计算周期数 static uint16_t amplitude_cnt = 0; //用于计算幅值等级 if (TIM_GetITStatus(BRE_TIMx, TIM_IT_Update) != RESET) //TIM_IT_Update { amplitude_cnt++; //每个PWM表中的每个元素有AMPLITUDE_CLASS个等级, //每增加一级多输出一次脉冲,即PWM表中的元素多使用一次 //使用256次,根据RGB颜色分量设置通道输出 if(amplitude_cnt 》 (AMPLITUDE_CLASS-1)){ period_cnt++; //每个PWM表中的每个元素使用period_class次 if(period_cnt 》 period_class){ //标志PWM表指向下一个元素 pwm_index++; //若PWM表已到达结尾,重新指向表头 if( pwm_index 》= POINT_NUM){ pwm_index=0; } //重置周期计数标志 period_cnt = 0; } //重置幅值计数标志 amplitude_cnt=0; }else{ //每个PWM表中的每个元素有AMPLITUDE_CLASS个等级, //每增加一级多输出一次脉冲,即PWM表中的元素多使用一次 //根据RGB颜色分量值,设置各个通道是否输出当前的PWM表元素表示的亮度 //红 if(((rgb_color&0xFF0000)》》16) 》= amplitude_cnt) { //根据PWM表修改定时器的比较寄存器值 BRE_TIMx-》BRE_RED_CCRx = indexWave[pwm_index]; }else{ //比较寄存器值为0,通道输出高电平,该通道LED灯灭 BRE_TIMx-》BRE_RED_CCRx = 0; } //绿 if(((rgb_color&0x00FF00)》》8) 》= amplitude_cnt){ //根据PWM表修改定时器的比较寄存器值 BRE_TIMx-》BRE_GREEN_CCRx = indexWave[pwm_index]; }else{ //比较寄存器值为0,通道输出高电平,该通道LED灯灭 BRE_TIMx-》BRE_GREEN_CCRx = 0; } //蓝 if((rgb_color&0x0000FF) 》= amplitude_cnt){ //根据PWM表修改定时器的比较寄存器值 BRE_TIMx-》BRE_BLUE_CCRx = indexWave[pwm_index]; }else{ //比较寄存器值为0,通道输出高电平,该通道LED灯灭 BRE_TIMx-》BRE_BLUE_CCRx = 0; } //必须要清除中断标志位 TIM_ClearITPendingBit (BRE_TIMx, TIM_IT_Update); } }}

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5622

    浏览量

    130589
  • SPWM
    +关注

    关注

    14

    文章

    362

    浏览量

    63846
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电阻电容电感基础原理|通俗易懂一文讲清

    我们日常接触的电路,看似抽象难懂 —— 电流看不见也摸不着,电阻、电容、电感的作用更是难以直观理解。但如果我们把电路类比成一套由水流驱动的“水路系统”,其实就非常好理解了
    的头像 发表于 05-19 16:55 453次阅读
    电阻电容电感基础原理|<b class='flag-5'>通俗易懂</b>一文讲清

    别再瞎选了!LoRa、Wi-Fi、蓝牙3种无线技术选型指南,看完再也不踩坑

    LoRa、Wi-Fi、蓝牙看起来都能无线传输,实际用起来天差地别,选错了轻则项目延期,重则直接推倒重来。今天就用最通俗易懂的方式讲清三者的核心差异,帮你一次性搞懂不同场景该怎么选。
    的头像 发表于 04-30 13:56 196次阅读

    使用诺顿定理的等效电路分析

    本文将从诺顿定理的基本原理、具体求解方法,到与其他分析方法的区别,进行通俗易懂的介绍。同时,也将对诺顿定理的使用要点进行整理归纳。
    的头像 发表于 12-10 13:59 5073次阅读
    使用诺顿定理的等效电路分析

    EG8010 SPWM芯片数据手册

    电子发烧友网站提供《EG8010 SPWM芯片数据手册.pdf》资料免费下载
    发表于 09-23 15:20 4次下载

    通俗易懂的晶振专业术语

    想要了解一个行业,就要对其产品的术语要有所了解,各行各业都要自己专业术语,石英晶振也不例外;了解晶振术语对晶振采购和选型有很大帮助;下面小扬给大家简单的解释晶振术语都代表什么意思:
    的头像 发表于 09-18 11:31 2184次阅读
    <b class='flag-5'>通俗易懂</b>的晶振专业术语

    普通扫码枪和手持扫码PDA的功能对比:哪个更适合你的行业?

    本文深入了解手持PDA与扫码枪的专业区别、核心功能、应用场景及选购要点。本文将通过通俗易懂的语言,助您清晰区分这两种数据采集设备,并为您的业务选择最合适的解决方案。
    的头像 发表于 09-02 14:37 1561次阅读
    普通扫码枪和手持扫码PDA的功能对比:哪个更适合你的行业?

    关于使用spwm控制电机的问题

    目前我自己写spwm控制,没有用foc,因为太复杂了, 然后现在遇到了一个问题 我的spwm的pwm频率是20K,正弦波的采样点是250个,利用pwm定时器做三角波,在pwm更新中断里刷新下一个
    发表于 08-27 08:43

    新手入门:使用CST电磁软件进行贴片天线设计的5个基本步骤

    新手入门教程:使用CST进行贴片天线设计的5个基本步骤。从创建模型到结果分析,详细指导您完成2.45GHz微带贴片天线的完整设计流程。
    的头像 发表于 07-28 16:17 1509次阅读
    新手<b class='flag-5'>入门</b>:使用CST电磁软件进行贴片天线设计的5个基本步骤

    【「DeepSeek 核心技术揭秘」阅读体验】--全书概览

    感谢平台提供的书籍,实物如下 这本书主讲从年前开始火热的DeepSeek 。书籍看起来轻薄,但言简意赅,通俗易懂,总览全局,比较精炼。 第一章 介绍DeepSeek的一系列技术突破与创新。 第二章
    发表于 07-21 00:04

    LED驱动电路设计

    兼顾了不同读者的需要,由浅入深,层次清晰,通俗易懂,实用性强,可作为电气工程类专业本科生及研究生的入门教材,也可供从事LED驱动电源设计的工程技术人员参考。获取完整文档资料可下载附件哦!!!! 如果内容有帮助可以关注、点赞、评论支持一下哦~
    发表于 07-18 15:26

    通俗易懂版)排针的作用和生产加工中对温度的要求

    总结: 排针注塑加工时温度过高,本质是过度加热带来的连锁反应: 1. 伤“密封”(塑料变形老化) -> 造成泄漏。 2. 卡“筋骨”(塑料/金属热胀冷缩不均) -> 针脚卡死,插拔困难或损坏。 3. 坏“材料”(塑料烧焦分解) -> 产生杂质堵塞、塑料性能劣化,产品内部隐患多。 4. 失“形态”(塑料过稀) -> 漏料产生毛刺、包裹不紧、磨
    的头像 发表于 06-27 17:34 2887次阅读
    (<b class='flag-5'>通俗易懂</b>版)排针的作用和生产加工中对温度的要求

    图解单片机功能与应用(完整版)

    过程通道图解、单片机显示电路图解、51单片机按键识别电路图解、51单片机常用算法图解、单片机常用电路图解、51单片机抗扰技术图解、51单片机典型应用案例图解。书中注重基础,强调应用,内容充实,通俗易懂,例举
    发表于 06-16 16:52

    单片机C语言入门指导(非常通俗易懂!)

    (一) 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只 听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的 微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、 实时控制、通信、家电等方面。不过这一切都没什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。 现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是 把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽 量少走些弯路而已!首先,你必须有学习单片机的热情, 不是说今天去图书馆看了一个下午关于单片机的书, 而明天玩上半天,后天就不知道那个本书在讲什 么东西了。 还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你 可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当 时我就想过,为了单片机值不值得我这样去付出,或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应 该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候, 显而易见的问题出来了: 我要选择那种语言为 单片机编写程序呢? 这个问题,困扰了我好久。具 体选择 C51 还是 A51 呢?汇编在我们大二之前并没有开过课, 虽然看着人家的讲解, 很容易 明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学 C51,毕竟 C51 和我们课上讲的 C 语言,有些类似, 编程的思想可以说是相通的。 而且 C51 还有更大的优点就是编写大程序时的优越性更不言而 喻,当然在那时,我并没有想的那么深远,C51 的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了 C51,那么请继续往下看, 如果你选择了 A51,那么你可以不要看了!因为下面讲 的全是 C 方面的,完全在浪费你的时间! 获取完整文档资料可下载附件哦!!!! 如果内容有帮助可以关注、点赞、评论支持一下哦~
    发表于 06-16 16:32

    C语言精彩编程百例-364页

    大量经验,从而可以熟练地进行C程序设计。 全文共分为四篇,全面、系统地讲述了C语言各个方面的知识点和程序设计的基本方法,以及编写程序过程中值得注意的地方,内容深入浅出,通俗易懂。对于C语言的初学者来说
    发表于 06-13 17:28

    边缘计算服务器全面解析:为什么5G、AI、工业智造都绕不开它?

    说起“边缘计算服务器”,很多人第一反应是:这是服务器的一种吧?是的,但它远不止“服务器的一种”这么简单。今天,小颉就从一个行业专业从业者的角度,用通俗易懂的语言,聊聊这个在5G、AI和工业现场大显身手的硬核选手——边缘计算服务器。
    的头像 发表于 06-03 16:34 1209次阅读
    边缘计算服务器全面解析:为什么5G、AI、工业智造都绕不开它?