打印
[牛人杂谈]

M051的PWM

[复制链接]
392|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
脉冲宽度调制 (PWM)
PWM (脉冲宽度调制) 信号在控制方案中应用非常广泛。可用于电机驱动、风扇控制、背光调节、LED光源调光或通过低通滤波器电路模拟一个简单的数模转换器的输出。
ML51包含三对(6个PWM通道)16位精度、可调周期和占空比的PWM输出,非常适合用于电机控制。
该模块架构适用于驱动单相或三相无刷直流电机(BLDC),或三相交流感应电机。每个通道PWM输出可配置为独立输出模式、互补模式或同步模式。当设定为互补模式时,通过插入可配置的死区时间,保护MOS管同时导通。PWM波形可配置边沿对齐或中心对齐来选择中断响应位置。


先看一段例子的配置
/* PWM period = 1/HIRC * 128 * 0x6FF =   9552 us
*  high Duty 10% = 955 us  */
    MFP_P05_PWM0_CH0;                                                  // multi function pin define P0.5 as PWM0 channel 0 output
    P05_PUSHPULL_MODE;
    MFP_P24_PWM0_CH1;                                                  // multi function pin define P2.4 as PWM0 channel 1 output
    P24_PUSHPULL_MODE;
    PWM0_ConfigOutputChannel(0,Complementary,EdgeAligned,0x6FF,10);    // setting PWM channel 0 as 10% duty high of 0x6FF PWM period = 0x00B3
  
那么说是互补,有采用的通道0,那么上面配置怎么一个通道0一个通道1呢?


使用特权

评论回复
沙发
wahahaheihei|  楼主 | 2019-12-29 21:46 | 只看该作者
这就要看手册介绍了。。。。。。。。
PWM 发生器
PWM发生器时钟由系统时钟或定时器1计数溢出产生,可通过PWM时钟预分频调整1/1~1/128除频。
PWM周期由16位周期寄存器{PWMnPH, PWMnPL}决定。所有PWM通道共享同一个16位周期计数器,周期是相同的。每个PWM通道都有独立占空比寄存器分别为{PWMnC0H, PWMnC0L}, {PWMnC1H,
PWMnC1L}, {PWMnC2H, PWMnC2L}, {PWMnC3H, PWMnC3L}, {PWMnC4H, PWMnC4L}, 和{PWMnC5H, PWMnC5L}。有6个占空比寄存器,6个通道都能产生独立占空比的PWM信号,PWM信号的周期和占空比可通过16位计数器跟周期和占空比寄存器比较产生。
为了更好适用于三相电机控制,通过设置GP (PWMnCON1.5)位来使用组模式, {PWMnC0H,PWMnC0L} 和 {PWMnC1H, PWMnC1L} 占空比寄存器决定PWM输出的占空比. 在三相电机控制应用中
,两组PWM输出通常有相同的占空比周期。当组模式使能, {PWMnC2H, PWMnC2L}, {PWMnC3H,PWMnC3L}, {PWMnC4H, PWMnC4L} 和 {PWMnC5H, PWMnC5L} 寄存器无效。这意味着{PWMnC2H,
PWMnC2L} 和 {PWMnC4H, PWMnC4L} 都与{PWMnC0H, PWMnC0L}相同,同样{PWMnC3H,PWMnC3L} 和 {PWMnC5H, PWMnC5L} 与{PWMnC1H, PWMnC1L}相同。注:使能PWM输出,芯片
不会自动配置管脚为“输出模式”,用户需要通过软件配置。
一看上面没有啊,那继续再看后面的

带死区插入的互补模式
当PWMMOD[1:0] = [0:1],互补模式使能。在该模式中PG0/2/4输出信号与独立模式下输出信号相同,但PG1/3/5 输出与PG0/2/4输出的信号互补。同时忽略PG1/3/5占空比寄存器{PWMnH, PWMnL}

(n:1/3/5)。该模式可使PG0/PG1形成一对互补的PWM输出。同样 PG2/PG3, PG4/PG5也一样。
有了,就是这些,原来如果设置为互补模式是还可以设置死区的,也就说,只有互补模式需要死区这个概念,另外配置时候,选定0,2,4,偶数通道的配置就行了。

使用特权

评论回复
板凳
wahahaheihei|  楼主 | 2019-12-29 21:46 | 只看该作者
/* PWM period = 1/HIRC * 128 * 0x6FF =   9552 us
*  high Duty 50% = 4776 us  */  
    MFP_P01_PWM0_CH4;                                                  // multi function pin define P0.1 as PWM0 channel 4
    P01_PUSHPULL_MODE;
    MFP_P20_PWM0_CH5;                                                  // multi function pin define P0.5 as PWM0 channel 0
    P20_PUSHPULL_MODE;
    PWM0_ConfigOutputChannel(4,Complementary,EdgeAligned,0x6FF,50);    // setting PWM channel 4 as 50% duty high of 0x6FF PWM period = 0x037F
   
    PWM0_DeadZoneEnable(PWM0_CH23,0x155);

使用特权

评论回复
地板
wahahaheihei|  楼主 | 2019-12-29 21:47 | 只看该作者
例如上面这个完整的配置,只需要选定对应的通道4和5的引脚,然后设置互补模式,设置通道4的就行了。5就自动互补了,还可以设置死区值。

使用特权

评论回复
5
wahahaheihei|  楼主 | 2019-12-29 22:11 | 只看该作者
在实际马达应用中,互补PWM输出经常需要插入“死区”,用来防止半桥在上下开关同时打开时损坏GPIBs之类的电源开关器件,尽管只是“us”级的时间。用来控制不能同时开关的电源开关器件。ML51
每组PWM共享一个9位死区时间向下计数器PWM0DTCNT,用于在同组中两个PWM信号之间产生关闭时间。在实现上,是在0要跳到1的信号之后加入一段延时等待PWM0DTCNT溢出,再跳转。下图展示了带死区插入的PG0/PG1组互补模式的时序图。组PG2/PG3 和 PG4/PG5有同样的死区时间电路。每组有各自的死区时间使能位(PWMnDTEN [3:0])。
注: PWM0DTCNT 和 PWMnDTEN寄存器都为TA写保护。死区时间控制只有在PWM配置为互补模式时才有效。


使用特权

评论回复
6
mintspring| | 2019-12-29 23:58 | 只看该作者
意思是插入了一些全是低电平的片段。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

217

主题

3063

帖子

12

粉丝