打印
[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】+PIC16F15244 PWM呼吸灯

[复制链接]
1749|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天我们来试下PIC16F15244的PWM功能,我们把PWM输出引脚关联到板载的LED上,让它来控制LED灯光强弱的变化。
好了,我们新建工程,打开MCC,配置PWM,我们使用TIMER2的PWM3:
我们这里配置PWM的频率为1KHz,占空比开始为0,然后10%递加,到达100%后,再10%的递减,到达0后,在次循环。


点击生成代码,
代码上初始的测试时50%的占空比的,我们用示波器看下PA2即LED的输出引脚,看下波形输出:

波形完全正常。
我们需要做的就是main函数的while循环里,每隔一段时间改变一下PWM的占空比duty值:
void main(void)
{
    volatile uint16_t pwmduty=0;//占空比
    volatile uint8_t  pwmdir=0; //方向
    // initialize the device
    SYSTEM_Initialize();

    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();
   
   
    while (1)
    {
        // Add your application code
        //LED_Toggle();
        //printf("Hello world!\r\n");
        //delay_ms(500);
        
        //LED_Toggle();
        
        PWM3_LoadDutyValue(pwmduty);
        printf("now pwm duty is %d!\r\n",pwmduty);
       // __delay_ms(500);
        delay_ms(1000);
        
        if(pwmdir==0)
        {
            pwmduty=pwmduty+100;
            if(pwmduty>=1000)
            {
                pwmdir=1;//切换方向
                pwmduty=500;
            }
        }
        else
        {
            pwmduty=pwmduty-100;
            if(pwmduty<=10)
            {
                pwmdir=0;//切换方向
                pwmduty=0;
            }      
        }
        
    }
}
代码还是比较简单的,用MCC配置,真的省了不少事情啊~
看下LED的波形和亮度变化图片:


除此之外还开了TIMER0 500ms的中断,和TIMER2 300MS的中断,完全能够正常运行:

好了,PWM就到这~

使用特权

评论回复
沙发
永远不停| | 2021-3-3 10:40 | 只看该作者
请教个问题:按照你的配置方式,能正常产生PWM波形。
TIMER2的时钟选择是FOSC/4,而当将时钟修改为FOSC时,则无法输出波形了,这是怎么回事?

使用特权

评论回复
板凳
qjp1988113|  楼主 | 2021-3-3 11:12 | 只看该作者
永远不停 发表于 2021-3-3 10:40
请教个问题:按照你的配置方式,能正常产生PWM波形。
TIMER2的时钟选择是FOSC/4,而当将时钟修改为FOSC时, ...

不应该啊,我板子不在手头,等我有空看下~

使用特权

评论回复
地板
gygp| | 2021-3-4 13:54 | 只看该作者
  PWM的占空比越大,那么释放的能量越高  

使用特权

评论回复
5
chenci2013| | 2021-3-4 13:54 | 只看该作者
怎么控制PWM从而实现呼吸灯效果  

使用特权

评论回复
6
biechedan| | 2021-3-4 13:55 | 只看该作者
pic16f877与16f877A 有什么区别?

使用特权

评论回复
7
wangdezhi| | 2021-3-4 13:55 | 只看该作者
一般只关心频率和占空比的问题  

使用特权

评论回复
8
isseed| | 2021-3-4 13:55 | 只看该作者
         

使用特权

评论回复
9
xietingfeng| | 2021-3-4 13:56 | 只看该作者
使用PWM3来驱动一个电压来控制LED驱动芯片中的电流

使用特权

评论回复
10
suzhanhua| | 2021-3-4 13:56 | 只看该作者
有效果图吗   

使用特权

评论回复
11
mituzu| | 2021-3-4 13:57 | 只看该作者
用的是PIC16F1574

使用特权

评论回复
12
hellosdc| | 2021-3-4 14:02 | 只看该作者
16 位 PWM 可提供 4 个额外的 16 位定时器   

使用特权

评论回复
13
uiint| | 2021-3-4 14:04 | 只看该作者
如何用电容按键调节PWM做LED呼吸灯

使用特权

评论回复
14
wangdezhi| | 2021-3-4 14:04 | 只看该作者
PIC16系列的PWM模块要怎么设置才能输出10位的PWM?

使用特权

评论回复
15
isseed| | 2021-3-4 14:04 | 只看该作者
学习了。              

使用特权

评论回复
16
biechedan| | 2021-3-4 14:04 | 只看该作者
PIC16系列的bank去如何使用和调用

使用特权

评论回复
17
xietingfeng| | 2021-3-4 14:04 | 只看该作者
PIC16F877 产生PWM波形需确定两个基本参数:一个是周期(高电平和低电平持续时间之和),另一个是脉宽(高电平持续时间)

使用特权

评论回复
18
suzhanhua| | 2021-3-4 14:04 | 只看该作者
感谢楼主分享的资料。   

使用特权

评论回复
19
gygp| | 2021-3-4 14:05 | 只看该作者
谢谢楼主的资料了。  

使用特权

评论回复
20
mituzu| | 2021-3-4 14:05 | 只看该作者
PWM可达10位精度?   

使用特权

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

本版积分规则

111

主题

627

帖子

2

粉丝