PIC32MX单片机系列之PWM

PIC32MX单片机系列之PWM,第1张

PWM编程
  • 简介
    • 初始化
    • PWM频率设置
    • PWM占空比设置
    • 输出效果

简介

PIC32MX系列单片机内部集成有输出比较模块,主要用于响应设定时基事件时产生单脉冲信号或者一连串脉冲信号。我的理解是通过定时器设定一个触发条件,输出比较模块匹配后从输出口产生一个电平信号。再通过对相应寄存器的配置,自由设定PWM输出频率及占空比。

初始化

选定OC2引脚作为PWM的信号输出端。

void PWM_Init()
{
    OC2RS = 0;
    OC2R  = 0;
    //OC2CON = 0x8006;
    OC2CONbits.ON = 1; // enable compare module
    OC2CONbits.SIDL = 0; //continue operation when cpu is in IDLE mode
    OC2CONbits.OC32 = 0; // compare module compared with 16 bit timer source
    OC2CONbits.OCFLT = 0; // disabled pwm fault condition
    OC2CONbits.OCTSEL = 0; // choose timer2 for timer source 
    OC2CONbits.OCM = 0x6; // oc1 pin mode is PWM,and PWM fault mode disabled
}

代码主要内容是讲OC2模块设定为PWM模式,选定Timer2作为时钟源,就是简介中时基事件的发生源。

PWM频率设置

频率的设置基于公式,Tpwm = (PR + 1) * Tpb * T(Timer2预分频)
Tpb表示单片机的外设时钟周期。
如 Tpb = 40Mhz , Ttimer2 = 16 , Tpwm = 3Khz
则PR = 832。

void Timer2_Init()
{
	T2CONbits.SIDL = 0;
    T2CONbits.TGATE = 0;
    T2CONbits.TCKPS = 4; // Timer2预分配为1:16
    T2CONbits.T32 = 0;
    T2CONbits.TCS = 0;
    T2CONbits.ON = 1;
	TMR2 = 0x0000;
	PR2 = 832;
	T2CONbits.TON = 1;
}
PWM占空比设置

调节占空比就是设定OC2RS数值与周期数的比列,如下图所示。

void Pwm_Out(uint32_t pwm_duty)
{
	uint16_t dc;
	
	if(pwm_duty>PWM_DUTY_MAX)
		pwm_duty = PWM_DUTY_MAX;
	
	dc = PWM_DUTY_MAX - pwm_duty;
	
	OC2RS = dc;
}

注:PWM_DUTY_MAX即周期数(PR+1).

输出效果

将OC2引脚接入蜂鸣器,效果如下:

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1324265.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存