10、PIC系列-输出比较-PWM脉宽调制模式

发布者:创意小巨人最新更新时间:2022-07-26 来源: csdn关键字:PIC系列  输出比较  PWM 手机看文章 扫描二维码
随时随地手机看文章

1、PIC32参考资源

PIC32系列参考手册 中文版  链接地址:PIC32系列参考手册 第16章 输出比较


2、脉宽调制模式介绍

当控制位 OCM<2:0> (OCxCON<2:0>)被设置为 110 或 111 时,选定的输出比较通道被配置为 PWM (脉宽调制)工作模式。有以下两种 PWM 模式可供使用:


• 不带故障保护输入的 PWM


• 带故障保护输入的 PWM


第二种 PWM 模式需使用 OCFA 或 OCFB 故障输入引脚。在该模式下,OCFx 引脚上的异步逻辑电平 0 会使选定的 PWM 通道关闭。


在 PWM 模式下, OCxR 寄存器是只读从占空比寄存器, OCxRS 是缓冲寄存器,由用户写入数据来更新 PWM 占空比。在每次发生定时器与周期寄存器的匹配事件时 (PWM 周期结束),占空比寄存器 OCxR 会装入 OCxRS 的内容。 TyIF 中断标志在每个 PWM 周期边界处置为有效。


3、输出比较模块配置为 PWM 操作步骤

1. 通过写选定的定时器周期寄存器 (PRy),设置 PWM 周期。


2. 通过写 OCxRS 寄存器设置 PWM 占空比。


3. 向 OCxR 寄存器中写入初始占空比。


4. 如果需要,允许定时器和输出比较模块的中断。如果要使用 PWM 故障引脚,则必须设置输出比较中断。


5. 通过写输出比较模式位 OCM<2:0>(OCxCON<2:0>),将输出比较模块配置为两种 PWM工作模式中的一种。


6. 设置 TMRy 预分频值,并通过设置 TON (TxCON<15>) = 1 使能时基。


特别注意:在第一次使能输出比较模块之前,必须先初始化 OCxR 寄存器。当模块工作于 PWM模式时,OCxR 寄存器变为只读占空比寄存器。OCxR 中保存的值成为第一个 PWM周期的 PWM 占空比。占空比缓冲寄存器 OCxRS 的内容在发生时基周期匹配之后才会被传送到 OCxR。


4、PWM 输出波形

带故障保护输入引脚的 PWM


输出比较模式位 OCM<2:0>(OCxCON<2:0>)被设置为 111 。


故障保护通过 OCFA 和 OCFB 引脚提供。OCFA 引脚与输出比较通道 1 至 4 关联,而 OCFB 引脚与输出比较通道 5 关联。


如果在 OCFA/OCFB 引脚检测到逻辑 0,则选定的 PWM 输出引脚被置为高阻抗状态。PWM 输出立即关闭,不连接到器件时钟源。该状态将保持直到满足以下条件:


• 外部故障条件已经消除


• 通过写相应的模式位 OCM<2:0> (OCxCON<2:0>)重新使能 PWM 模式


PWM 周期 = [(PR + 1) • T PB • (TMR 预分频值 )]


PWM 周期一定不能超出所选定模式的周期寄存器宽度


PWM占空比


通过写入 OCxRS 寄存器来指定 PWM 占空比。可以在任何时候写 OCxRS 寄存器,但是在 PRy和 TMRy 发生匹配 (即周期结束)前占空比值不会被锁存到 OCxR 中。这可以为 PWM 占空比提供双重缓冲,对于 PWM 的无毛刺操作是极其重要的。在 PWM 模式下,OCxR 是只读寄存器。


PWM 占空比有一些重要的边界参数,包括:


• 如果占空比寄存器 OCxR 中装入 0x0000,则 OCx 引脚将保持低电平 (占空比为 0%)。


• 如果 OCxR 大于 PRy (定时器周期寄存器),则引脚将保持高电平 (占空比为 100%)。


• 如果 OCxR 等于 PRy,则 OCx 引脚在一个时基计数值内为低电平,而在所有其他计数值内均为高电平。


PWM输出时序图

I/O 引脚控制


当输出比较模块被使能时,I/O 引脚方向由比较模块控制。当比较模块被禁止时,它会将 I/O 引脚控制权归还给相应的引脚 LAT 和 TRIS 控制位。


当使能了具有故障保护输入模式的 PWM 时,必须通过将相应的 TRIS SFR 位置 1 以将 OCFx 故障引脚配置为输入。选择 PWM 故障模式时, OCFx 故障输入引脚不会自动配置为输入。

节能和调试模式下的操作


SLEEP (休眠)模式下


当器件进入 SLEEP(休眠)模式时,系统时钟被禁止。在 SLEEP(休眠)模式期间,输出比较模块会将引脚驱动为与在进入 SLEEP (休眠)模式之前相同的有效状态。然后模块将暂停在该状态。


例如,如果引脚原先为高电平,则在 CPU 进入 SLEEP(休眠)状态后,引脚将保持高电平。类似地,如果引脚原先为低电平,则在 CPU 进入 SLEEP(休眠)状态后,引脚将保持低电平。在这两种情况下,当器件唤醒时,输出比较模块将继续工作。


当模块在 PWM 故障模式下工作时,故障电路的异步部分将保持工作状态。如果检测到故障,比较输出使能信号会置为无效,OCFLT(OCxCON<4>)被置 1。如果允许了相应中断,还将产生中断,并且器件将从 SLEEP (休眠)模式唤醒。


IDLE (空闲)模式下


当器件进入 IDLE (空闲)模式时,系统时钟源保持工作,但 CPU 停止执行代码。 SIDL 位(OCxCON<13>)用于选择比较模块在器件进入 IDLE (空闲)模式时是停止工作还是在 IDLE


(空闲)模式下继续正常工作。


• 如果 SIDL = 1,则在 IDLE (空闲)模式下模块将停止工作。模块在 IDLE (空闲)模式下停止工作时将执行与在 SLEEP (休眠)模式下相同的程序。


• 如果 SIDL = 0,则只有选定时基设置为在 IDLE (空闲)模式下工作时,模块才能在 IDLE


(空闲)模式下继续工作。如果 SIDL 位为逻辑 0,则输出比较通道将在 CPU IDLE(空闲)模式期间工作。此外,还必须将相应的 SIDL 位设为逻辑 0 以使能时基。


• 当模块在PWM故障模式下工作时,故障电路的异步部分将保持工作状态。如果检测到故障,比较输出使能信号会置为无效,OCFLT(OCxCON<4>)被置 1。如果允许了相应中断,还将产生中断,并且器件将从 IDLE (空闲)模式唤醒。


DEBUG (调试)模式下


各种复位的影响


MCLR 复位


在发生 MCLR 事件之后,每个输出比较模块的 OCxCON、 OCxR 和 OCxRS 寄存器会复位为值0x00000000。


上电复位


在发生上电(Power-on,POR)事件之后,每个输出比较模块的 OCxCON、OCxR 和 OCxRS寄存器会复位为值 0x00000000。


看门狗定时器复位


在发生看门狗定时器 (Watchdog Timer, WDT)事件之后, OCMP 控制寄存器的状态取决于WDT 事件之前 CPU 的工作模式。


如果器件不处于 SLEEP (休眠)模式,则 WDT 事件会将 OCxCON、 OCxR 和 OCxRS 寄存器强制为复位值 0x00000000。


如果在发生 WDT 事件时器件处于 SLEEP (休眠)模式,则 OCxCON、 OCxR 和 OCxRS 寄存器值不受影响。


5、PWM脉宽调整模式Harmony配置

1、在Project Graph界面中添加定时器TMR2以及输出比较OCMP1,并配置定时器(可参考前面文章配置,不赘述);


2、配置输出比较参数,其中Select Output Compare Mode选择为PWM mode on OCx: Fault pin disabled 即简单脉宽调制模式,不带故障保护输入;并配置Compare value(OCxR)值,初始只读占空比寄存器;


3、组件配置完成后点击左侧的Generate Code按钮生成代码;


4、生成的代码与原始代码存在差异,需进行确认;


5、代码生成后需要的操作;


1、初始化完成后添加TMR2以及OCMP1的启动;


2、写修改占空比函数;


8、编译运行将代码烧录到开发板中;


6、具体代码分析

文件plib_ocmp1.c


void OCMP1_Initialize (void)

{

    /*Setup OC1CON */

    /*OCM = 6 */ // OCM<2:0> 为 110 简单脉宽调制模式,不带故障保护输入

    /*OCTSEL = 0 */ // 输出比较定时器选择位,0:TMR2,1:TMR3

    /*OC32 = 0 */ //32 位比较模式位

    /*SIDL = false */ //空闲模式停止位

    OC1CON = 0x6; //输出比较控制寄存器

 

    OC1R = 10; //初始只读占空比寄存器

    OC1RS = 10; //缓冲寄存器

 

    IEC0SET = _IEC0_OC1IE_MASK; //中断允许控制

}

 

//使能输出比较外设

void OCMP1_Enable (void)

{

    OC1CONSET = _OC1CON_ON_MASK; //输出比较外设使能位

}

 

//禁止输出比较外设

void OCMP1_Disable (void)

{

    OC1CONCLR = _OC1CON_ON_MASK; //输出比较外设使能位

}

 

//获取只读占空比寄存器值

uint16_t OCMP1_CompareValueGet (void)

{

    return (uint16_t)OC1R; //只读占空比寄存器值

}

 

//设置缓冲寄存器值(占空比)

void OCMP1_CompareSecondaryValueSet (uint16_t value)

{

    OC1RS = value; //缓冲寄存器值

}

 

//获取缓冲寄存器值(占空比)

uint16_t OCMP1_CompareSecondaryValueGet (void)

{

    return (uint16_t)OC1RS; //缓冲寄存器值

}

 

//

void OCMP1_CallbackRegister(OCMP_CALLBACK callback, uintptr_t context)

{

    ocmp1Obj.callback = callback;

 

    ocmp1Obj.context = context;

}

 

//中断服务函数

void OUTPUT_COMPARE_1_InterruptHandler (void)

{

    IFS0CLR = _IFS0_OC1IF_MASK;    //Clear IRQ flag

 

    if( (ocmp1Obj.callback != NULL))

    {

        ocmp1Obj.callback(ocmp1Obj.context);

    }

}


占空比调节函数


//占空比调节函数

int tempvalue=100;

int flag=1;

void PWM_Modify(void)

{

    if(flag==1)

    {

        if(tempvalue<15000)

        {

            tempvalue+=30;

        }

        else

        {

            flag=0;

        }

    }

        

    if(flag==0)

    {

        if(tempvalue>100)

        {

            tempvalue-=30;

        }

        else

        {

            flag=1;

        }

    }

        

    OCMP1_CompareSecondaryValueSet(tempvalue);

}


7、实验验证

点击编译按钮,编译提示BUILD SUCCESSFUL,点击烧录,提示Programming/Verify complete,开发板上的LED灯呈呼吸灯变化。

关键字:PIC系列  输出比较  PWM 引用地址:10、PIC系列-输出比较-PWM脉宽调制模式

上一篇:11、PIC系列-串口通讯模块
下一篇:9、PIC系列-输出比较-双比较模式

推荐阅读最新更新时间:2024-11-16 20:48

基于MOSFET控制的PWM型直流可调电源的研制
引 言 原文位置 功率场效应管MOSFET是一种单极型电压控制器件,它不但具有自关断能力,而且具有驱动功率小,关断速度快等优点,是目前开关 电源 中常用的开关器件。采用MOSFET 控制的 开关电源 具有体积小、重量轻、效率高、成本低的优势,因此,较适合作仪器电源。本文给出了一种由MOSFET 控制的大范围连续可调(0~45V) 的小功率稳压 电源 设计实例。 原文位置 总体结构与主电路 原文位置 图1 为该 电源 的总体结构框图。工作原理如下:   原文位置 原文位置   图1  原理方框图 原文位置 全桥整流电路将电网电压220V 整流成不可调的直流电压Ud = 1. 2U约等于198V。两个等值滤波电
[电源管理]
STM32 TIM1 F1 四通道完全重映射PWM 配置
void TIM1_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph
[单片机]
cc2530的PWM实现
CC2530 结合了领先的RF 收发器的优良性能,业界标准的增强型8051 CPU,系统内可编程闪存,8-KB RAM 和许多其它强大的功能。CC2530 有四种不同的闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB 的闪存。CC2530 具有不同的运行模式,使得它尤其适应超低功耗要求的系统。 运行模式之间的转换时间短进一步确保了低能源消耗。CC2530F256 结合了德州仪器的业界领先的黄金单元ZigBee 协议栈(Z-Stack™),提供了一个强大和完整的ZigBee 解决方案。CC2530F64 结合了德州仪器的黄金单元RemoTI,更好地提供了一个强大和完整的ZigBee RF
[单片机]
cc2530的<font color='red'>PWM</font>实现
新一代LED背光驱动器采用专利控制技术 消除PWM可听噪音
(图源:Allegro Microsystems官网) 据外媒报道,Allegro Microsystems推出A8060x系列LED背光驱动器,采用创新的PEB专利控制技术 (pre-emptive boost) ,成功消除LED驱动器中PWM调制电路产生的恼人噪音。Allegro是运动控制和节能系统的电源和传感解决方案的供应商。 A8060x系列采用PEB控制技术,大大减少输出电压纹波,消除PWM调光过程中陶瓷输出电容产生可听噪声的常见问题,同时整体需要输出的电容更少。系统使用200赫兹PWM调光,可实现15000:1的LED亮度对比度。若将PWM和模拟调光结合在一起,对比度更高,能达到150000:1 。
[汽车电子]
新一代LED背光驱动器采用专利控制技术 消除<font color='red'>PWM</font>可听噪音
STM32 控制舵机, 动态调整PWM
伺服电机拥有更大的扭矩,可以移动沉重的负荷。 深受玩具制造商的欢迎。很多玩具都有伺服电机和直流电机 交流伺服电机可以移动更沉重的负载,一般在工业应用。直流伺服电机最多用于搬动小物品。 span font-size:14px;font-variant-numeric:normal;font-variant-east-asian:normal;line-height:18px;white-space:normal;background-color:#ffffff; = style= overflow-wrap: break-word; color: rgb(46, 48, 51); font-family: 宋体, Arial; t
[单片机]
STM32 控制舵机, 动态调整<font color='red'>PWM</font>
ZVZCT——PWM工作状态的等效电路
图 八个不同工作状态的等效电路
[电源管理]
ZVZCT——<font color='red'>PWM</font>工作状态的等效电路
用SST单片机的PCA功能产生PWM脉冲
一、程序说明: SST单片机带有5路PCA模块,PCA功能比普通的单片机相比提供更强的计时性,同时更少CPU的干预,用它可以减少软件的开销和改进精度。利用PCA的脉冲宽度调制(PWM)模式可以产生一个8位PWM,它通过比PCA定时器的低位(CL)和比较寄存器的低位(CCAPnL)产生。当CL CCAPnL时输出为低;当CL =CCAPnL是输出为高。要进入这个模式,可以对CCAPMn的PWM和ECOM位置位。 在PWM 模式,输出的频率决定于PCA定时器的源。由于只有一对CH 和CL寄存器,所有模块共享PCA定时器和频率。输出的占空比由装在高位CCAPnH的值控制。由于写入CCAPnH寄存器不是同步的,写入高位的值不会马上装入
[单片机]
用SST单片机的PCA功能产生<font color='red'>PWM</font>脉冲
基于智能PWM控制的机车制动控制单元的设计
1 引 言 随着我国国民经济的蓬勃发展和人民生活水平的日益提高,铁路的客、货运量将越来越大,列车牵引重量与运行速度将不断提高。高速客运及重载货运列车的发展对列车制动系统提出了更高更新的要求。 国外发达国家都是采用微机应用先进控制理论实现对机车制动气缸的精确控制。而在我国机车上广泛使用的DK-l和JZ-7型制动机只能对机车实现一些简单的逻辑控制功能,不能实现对机车制动缸和均衡风缸的闭环控制,难以满足机车制动控制的需要。随着电子技术及微机控制技术应用的日渐成熟,有必要应用现代电子技术和先进的控制理论,利用微机的强大功能实现对机车的精确制动。 目前世界各国铁路绝大多数仍采用空气制动,要实现对气体压力的控制,特别是小流量压
[工业控制]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved