历史上的今天
返回首页

历史上的今天

今天是:2025年06月29日(星期日)

2018年06月29日 | Stm32产生两路相位差为180度的pwm

2018-06-29 来源:eefocus

由于上次用高级定时器产生的两路互补带死区的pwm信号不能满足应用需求。如标题所示需要的是两路相位差为180度的pwm信号,占空比和频率都是相同的,只是相位不同。仔细重读高级定时器的数据手册,发现产生的两路互补信号达不到这个要求。然后必然要考虑用两个通道产生了(两路互补属于一个通道)。仔细搜罗最终确定了两种发案可以实现,这两种方式具有异曲同工之妙但也有各自的不同。相同之处在于同采用定时器计数的中央对齐模式,不同就在于输出选择的模式不同(对TIM_CCMRX寄存器中OCXM位进行配置)。 下面待我一一详解。生成的波形图如下:

Stm32产生两路相位差为180度的pwm

方案一:定时器计数采用中央对齐模式,两路输出配置为pwm的输出比较模式。
1)配置定时器的计数器为中间对齐计数,即先向上计数再向下计数。
2)在该定时器上选择2个通道,并分别配置为输出比较模式,要输出如上图波形须把两路输出极性设置为不同。

3)配置自动重装载寄存器TIMx_ARR为要求输出频率的一半。
4)假定CC1为第一个输出信号的通道,再假定第一个信号的正脉冲宽度对应为W1,则配置TIMx_CCR1为TIMx_ARR-W1/2。
5) 同4),假定CC2为第二个输出信号的通道,正脉冲宽度对应为W2,配置TIMx_CCR2为W2/2。

下面我要产生频率为50khz,占空比为20%的两路pwm信号。TIMx_ARR=72000/50/2=720;

TIMx_CCR1=720-720*0.2=576;TIMx_CCR2=720*0.2=144;

为什么这样算请看下图:

Stm32产生两路相位差为180度的pwm

①和②对应得值就是576. ③和④对应得值就是144。但是他们之间的距离是相等的,也就保证了两路pwm产生的占空比是一样的。

具体配置代码如下所示:

GPIO_InitTypeDef GPIO_InitStructure2;

 

  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

 

 TIM_OCInitTypeDef TIM_OCInitStructure;

 

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

 

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

   /********TIM3_CH1 引脚配置*********/

  GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_6;

 

  GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;

 GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;         //设置为复用浮空输出

 

 GPIO_Init(GPIOA,&GPIO_InitStructure2);

 

  /********TIM3_CH2 引脚配置*********/

GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_7;

 

 GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;

 

 GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;         //设置为复用浮空输出

 

GPIO_Init(GPIOA,&GPIO_InitStructure2);

 

 

  /************定时器基本配置***************/

 TIM_TimeBaseStructure.TIM_Period=720-1; // 自动重装载寄存器的值

 

 TIM_TimeBaseStructure.TIM_Prescaler=0; // 时钟预分频数

 

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 采样分频

 

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_CenterAligned3;//中央对齐计数

 

TIM_TimeBaseStructure.TIM_RepetitionCounter=0;//重复寄存器,用于自动更新pwm占空比

 

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  /**************pwm通道1输出配置*************/

 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;     //设置为pwm1输出模式

 

TIM_OCInitStructure.TIM_Pulse=200;                 //设置占空比时间

 

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;         //设置输出极性

 

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;    //使能该通道输出

//    //下面几个参数是高级定时器才会用到

//    TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_Low;    //设置互补端输出极性

//    TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//使能互补端输出

//    TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;    //死区后输出状态

//    TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Set;//死区后互补端输出状态

TIM_OC1Init(TIM3,&TIM_OCInitStructure);                     //按照指定参数初始化

    /**************pwm通道2输出配置*************/

 

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;     //设置为pwm1输出模式

 

TIM_OCInitStructure.TIM_Pulse=520;                 //设置占空比时间

 

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;         //设置输出极性

 

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;    //使能该通道输出

 

TIM_OC2Init(TIM3,&TIM_OCInitStructure);

 

 

 

 TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR1上的预装载寄存器

 

 TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器

 

 TIM_Cmd(TIM3,ENABLE);                             //打开TIM2

 

TIM_CtrlPWMOutputs(TIM3, ENABLE);                 //pwm输出使能,一定要记得打开


推荐阅读

史海拾趣

Cree(科瑞)公司的发展小趣事

如今的Cree已经成为宽带隙半导体的创新者,专注于碳化硅和氮化镓材料、功率和射频应用的设备以及特种照明级LED产品的研发和生产。其产品在运输、电源、逆变器和无线系统等领域有着广泛的应用。同时,Cree的LED产品也专门用于室内和室外照明、电子标牌和信号以及视频显示器等。作为市场上领先的照明革新者与半导体制造商,Cree通过显著提高固态照明、电力及通讯产品的能源效果来提升其价值,展现了其在电子行业中的卓越地位和创新实力。

FUJITSU(富士通)公司的发展小趣事

进入21世纪,Cree在功率器件领域取得了重大突破。2004年,Cree开始大范围采用氮化镓(GaN)材料,并成功将其应用于大功率RF器件产品设计。这些GaN射频器件主要服务于美国军工领域,如“萨德”导弹防御系统,其超宽的频率覆盖和大功率射频功率技术无人能及。这一技术的成功应用,不仅提升了Cree的技术实力,也为其打开了新的市场空间。

Anderson Power Products公司的发展小趣事

随着全球LED市场的日益成熟,竞争也日趋激烈。面对这一形势,Cree通过收购和出售的方式,逐渐调整了其在LED市场的主要业务。这一战略调整使得Cree能够专注于更高端、更具技术含量的LED产品研发和生产,从而保持了其在行业内的领先地位。

Able Systems公司的发展小趣事

Able Systems公司成立于1982年,初创时期面临着资金短缺、市场竞争激烈等诸多挑战。然而,公司凭借对微型打印机技术的深刻理解和独特见解,成功开发出了具有竞争力的产品。通过不懈的努力和持续的技术创新,Able Systems逐渐在市场中站稳了脚跟,并赢得了客户的信任。

Herley New York公司的发展小趣事

随着国内市场的逐渐饱和,Able Systems公司开始将目光投向国际市场。通过参加国际展览、建立海外销售渠道等方式,公司成功将产品推向了全球范围。同时,公司还积极与国际知名企业合作,共同开发新产品,进一步提升了公司在国际市场的竞争力。

Eurosil Electronics Ltd公司的发展小趣事

面对日益激烈的市场竞争,Eurosil始终保持对研发的投入和关注。公司不断引进新技术、新设备,加强研发团队的建设,推动产品升级和产业升级。通过持续的创新,Eurosil在电子行业中保持了领先地位,并为客户提供了更加先进、高效的产品解决方案。

问答坊 | AI 解惑

TFT真彩液晶屏资料

3.5\"夏普带触摸液晶屏320x240RGB 3.5\"LG带触摸液晶屏320x240RGB 3.5\"三星液晶屏320x240RGB5 3.5\"NEC液晶触摸屏320x240RGB [ 本帖最后由 jinpost 于 2008-5-4 19:14 编辑 ]…

查看全部问答>

开关电源设计流程

开关电源设计我不懂,在学习的过程中。 发这个附件,希望有兴趣的朋友一起研究研究。 是从别的地方下的。据说不错。分享下。…

查看全部问答>

单片机的应用与开发技巧论文

目前单片机渗透到我们生活的各个领域,本文介绍了单片机的应用并且根据自己的一些经验谈了单片机应用过程中应该掌握的几个技巧。         目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置, ...…

查看全部问答>

★★★想实现“技术+证书+高薪就业”吗??★★★

硬件工程师高级职业教育项目组(http://test.pche.com.cn/pche/seign/default.asp)直属于信息产业部电子教育考试培训中心,为了提高从业人员及学生朋友的硬件设计水平和职业技能,开发出了一系列硬件设计工程师培训课程: 1、PCB设计工程师初级班 ...…

查看全部问答>

开发wince用什么工具啊?

小弟我刚开始接触wince  请问要用什么工具开发比较好啊?  有的说用wince with platform bulid 5.0 有的说用vs2005  搞不清楚   如果有的话  大家传上来吧  谢谢啊   还 ...…

查看全部问答>

求助:如何实现简单的 读/写 操作 (附代码)

void doWrite(int n) {         char        *buf,*f;         ULONG        nWritten;         int          ...…

查看全部问答>

如何正确安装软件(2812用)?

我昨天才买的DEC2812,仿真器USB2.0(前几年买的),安装软件碰到麻烦,安装说明里说28XX用的一定要在WIN98下安装,但那是好几年前开发系统里附带的光碟,请问现在还是这样吗?我的板子上的正负15V电压,那个-15V电压的孔被焊上了,请问本来就是这 ...…

查看全部问答>

分享:雷达传感器使用说明文档

雷达传感器进入国内市场不久,最先能得到的信息就是在国外高端车上面运用,分享其中一款型号的使用说明。…

查看全部问答>

SI4432 完整版中文资料及设计参考资料(资料持续更新)

   为了大家设计方便,顾上传一些参考资料,设计中遇到问题欢迎大家一起交流,一起探讨,希望能帮到大家,废话不说,直接上资料!欢迎大家加入射频交流群:91378473 [ 本帖最后由 ywdjob 于 2011-10-4 02:35 编辑 ]…

查看全部问答>

谁有F2812带中断的汇编例程

谁有F2812带中断的汇编例程? 有的话发我邮箱:chen_li_gen@163.com QQ:13450323…

查看全部问答>