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

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

3天内不再提示

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

恒美股份 来源:华芯微特32位MCU 作者:华芯微特32位MCU 2021-08-09 17:53 次阅读

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

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

    关注

    68

    文章

    10449

    浏览量

    206579
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4901

    浏览量

    209957
  • ADC采样
    +关注

    关注

    0

    文章

    125

    浏览量

    12710

原文标题:SWM20x系列电机框架搭建:PWM(电机)篇

文章出处:【微信号:gh_737991c81b3d,微信公众号:恒美股份】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA开发过程中配置全局时钟需要注意哪些问题

    FPGA开发过程中配置全局时钟是一个至关重要的步骤,它直接影响到整个系统的时序和性能。以下是配置全局时钟时需要注意的一些关键问题: 时钟抖动和延迟 :全局时钟资源的设计目标是实现最
    发表于 04-28 09:43

    利用“通用定时器”捕获PWM信号过程中,中断服务函数是设置为如下的哪一模式呢?

    利用“通用定时器”捕获PWM信号过程中,我们的中断服务函数是设置为如下的哪一模式呢?模式1和模式2: 模式1: if ( TIM_Ge
    发表于 03-22 07:55

    运放的三种应用

    运放在电路主要存在三种应用,放大器,滤波器,振荡器。再这三种应用电路,运放的两大特点虚短虚断仍然成立吗? 阻尼振荡器
    发表于 01-26 16:18

    请问pwm配置输出PWM是采用GTM模块吗,一般配置的流程是什么?

    电机控制,请问pwm配置输出PWM是采用GTM模块吗,一般配置的流程是什么。 比如
    发表于 01-22 06:26

    MCU在运行过程中可以调整它的主频吗?

    希望MCU在运行过程中可以调整它的主频,比如说,30MHz/55MHz/140MHz,这几个频点之间切换。 但不希望重启或者复位mcu。 可以实现吗?
    发表于 01-16 07:39

    使用LTC3115-1的过程中,PWM/SYNC针总是燃烧,与系统地面连接,输出电压为零的原因?

    使用LTC3115-1过程中PWM/SYNC这个引脚老是烧掉,与地导通,同时输出电压为零。外围电路是根据datasheet上的电路进行设计的,请问是什么原因导致的呢?
    发表于 01-05 10:39

    ad6676配置过程中,vco校准可以过,电荷泵校准过不了,pll无法锁定怎么解决?

    项目中给ad6676一个100m时钟,通过内部vco使其时钟锁在3.2G,配置过程中通过读取0x2bc寄存器时发现,vco校准可以过,电荷泵校准过不了,pll无法锁定,寄存器
    发表于 12-07 07:45

    Linux启动过程中, 想将PC13 pin配置为输出/拉起,如何修改设备树?

    Linux 启动过程中, 我想将 PC13 pin 配置为输出/ 拉起 。 我该如何修改设备树 。
    发表于 11-13 06:21

    PWM信号输出的三种硬件驱动方式

    。当PWM信号被应用于这些设备中时,它可以改变电设备的工作效率、亮度、音量等参数。PWM信号的输出方式和驱动器的选用与具体设备的控制需求有关
    的头像 发表于 10-30 09:47 746次阅读

    STM32的DAC输出过程中怎么实现负电压信号输出?

    STM32的DAC输出过程中怎么实现负电压信号输出
    发表于 10-13 08:05

    串口通信的过程中波特率可以根据数据来调整吗?

    串口通信的过程中波特率可以根据数据来调整吗
    发表于 10-13 07:55

    SPI通信过程中片选信号可以一直设置为低电平吗 ?

    SPI通信过程中,片选信号可以一直设置为低电平吗
    发表于 10-12 07:54

    四轴飞行的控制过程中可以用什么算法来控制姿态?

    四轴飞行的控制过程中可以用什么算法来控制​姿态
    发表于 10-12 07:03

    SPI通信的过程中片选信号除了选中元件还有什么功能?

    SPI通信的过程中片选信号除了选中元件还有什么功能
    发表于 10-11 07:18

    pwm产生的三种方法

    技术被广泛应用于电力电子器件(如IGBT、MOS)的控制中,也可以用于调节LED照明、伺服电机等应用中。本文将详细介绍PWM产生的三种方法。 一、比较式PWM 比较式
    的头像 发表于 09-02 10:25 5903次阅读