PWM模块在计数过程中可以根据哪三种配置trigger信号

描述

SWM201系列所有型号PWM操作均相同,不同型号PWM通道数可能不同。使用前需使能PWM模块时钟。PWM模块用于实现芯片输出特定的方波,控制外部元器件,如步进电机等。

计数器可以通过APB总线读写寄存器、和外部硬件同时控制,实现计数过程的控制。同时,CPU和外部硬件也可以共同实现对输出PWM信号的控制。

PWM模块提供了2组(PWM0、PMW1)、8路(PWM0A、PWM0B、PWM0AN、PWM0BN、PWM2A、PWM2B、PWM2AN、PWM2BN)独立通道,支持边沿模式、中心对称模式。

中心对称模式下,输出是互补输出。如PWM0A驱动PWM0A和PWM0AN两个输出信号,两个信号周期相等、电平值相反,且可设置死区。

程序中配置如下(SWM201内置PN预驱):

static void PWM_Init (void)

{

PWM_InitStructure PWM_initStruct;

PORT_Init(PORTA, PIN5, PORTA_PIN5_PWM1AN, 0);

PORT_Init(PORTA, PIN4, PORTA_PIN4_PWM1BN, 0);

PORT_Init(PORTA, PIN3, PORTA_PIN3_PWM0AN, 0);

PORT_Init(PORTA, PIN2, PORTA_PIN2_PWM1A, 0);

PORT_Init(PORTA, PIN1, PORTA_PIN1_PWM1B, 0);

PORT_Init(PORTA, PIN0, PORTA_PIN0_PWM0A, 0);

//PWM引脚初始化

PWM_initStruct.Mode = PWM_CENTER_ALIGNED;

//中心对齐模式

PWM_initStruct.Clkdiv = 1;

//分频F_PWM = 60M/1 = 60M

PWM_initStruct.Period =10000;

//周期:60M/6000 = 1KHz,中心对称模式下频率//降低到500Hz

PWM_initStruct.HdutyA = 2500; //占空比:2000/10000 = 25%

PWM_initStruct.DeadzoneA = 50; //死区时间:50/60M

PWM_initStruct.IdleLevelA = 0; //停止状态下PWMxA输出电平

PWM_initStruct.IdleLevelAN= 0; //停止状态下PWMxAN输出电平

PWM_initStruct.OutputInvA = 0; //PWMxA输出未取反

PWM_initStruct.OutputInvAN= 0; //PWMxAN输出未取反

PWM_initStruct.HdutyB = 1500;

PWM_initStruct.DeadzoneB = 50;

PWM_initStruct.IdleLevelB = 0;

PWM_initStruct.IdleLevelBN= 0;

PWM_initStruct.OutputInvB = 0;

PWM_initStruct.OutputInvBN= 0;

PWM_initStruct.UpOvfIE = 0;

PWM_initStruct.DownOvfIE = 0;

PWM_initStruct.UpCmpAIE = 1; //开启上升沿比较器PWM0A匹配中断使能

PWM_initStruct.DownCmpAIE = 0;

PWM_initStruct.UpCmpBIE = 0;

PWM_initStruct.DownCmpBIE = 0;

PWM_Init(PWM0, &PWM_initStruct);

PWM_initStruct.UpCmpAIE = 0; //屏蔽PWM1A中断

PWM_Init(PWM1, &PWM_initStruct);

PWM_Start(PWM0_MSK | PWM1_MSK);

//启动PWM,开始PWM输出

PWM_OutMask(PWM1, PWM_CH_B, PWM_EVT_1, 0, PWM_EVT_1, 1);

//挖坑功能设置:PWM1B和PWM1BN在event1为高时分别输出0和1

PWM_CmpTrigger(PWM0, 750, PWM_DIR_UP, 40, PWM_TRG_1, 1);

//设置ADC采样点(ADC采样设置请查看“SWM20x系列电机框架搭建:ADC篇”)

}

TRIGGER控制:

PWM模块在计数过程中,可以根据输出三种trigger信号:

01

PWM计数器比较匹配触发:PWM计数器在计数过程中,当计到TRIG_CNT中配置的参考值时,就会产生一个周期的trig信号。根据配置,可以将该trig信息映射到输出的trig[7:0]信号上,且输出宽度可以配置,以4个计数周期为单位进行设置,最小长度为0个(即不输出PWM_TRIG,只输出ADC_TRIG),最大长度为252个计数当重复计数功能有效时,trig信号会在最后一次重复计数时产生。

02

ADC触发:在PWM_TRIG输出宽度的正中间,会输出一个pclk的ADC_TRIG信号,用于触发ADC采样。

03

PWM计数器溢出触发:当计数器溢出TRIG使能,且计数器发生向上溢出或向下溢出时,会产生一个pclk周期的TRIG信号,与自定义TRIG一致,可以根据配置将该trig信息映射到输出的trig[7:0]信号上。TRIGGER控制波形如下图所示:

触发SARADC采样:

PWM在任意模式下可以触发ADC,每一路输出独立的ADC触发信号,且每个周期可以设置1个ADC触发点,每个PWM只输出一个触发信号,不区分A.B分别触发。将SARADC配置寄存器(CTRL)中TRIG方式设置为PWM触发。每路PWM对应1个ADTRG值,当PWM计数到指定值,可触发ADC进行采样。具体配置方式如下:

配置PWMx路触发ADC控制寄存器,设置触发点是否有效以及PWM触发ADC时间点。

配置ADC的触发方式为PWM触发

使能PWM模块EN位,当计数值到达MATCH设置值时,触发ADC配置寄存器(CTRL)中选中的通道(CHx)进行采样,采样完成后,将产生EOC标志位,并产生ADC中断。

编辑:jq

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分