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

PIC16F17146PWM呼吸灯

[复制链接]
1138|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lulugl|  楼主 | 2023-7-27 10:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

​ 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
PIC16F17146板载了两路16bit的PWM。
下面我就如何创建PWM呼吸灯的工程创建与代码的实现介绍如下:
先建一个空白的项目:





到此空白工程创建成功
启动MCC图形化配置工具:



打开MCC后,我们第一步先配置系统的时钟,我们选择系统内部高速时钟—HFINTOSC,选择4M_Hz,4分频,这样我们得到1MHz的系统时钟。
打开PWM外设,点周Drivers-PWM,在PWM1_16BIT前面的+号点击添加。


启用delay延时函数:

6、PWM,我们选择FOSC时钟源,100分频,选择Requested为0.05,生成50Hz的PWM输出,50%的点空比即20ms产生一个pwm波形。

生成代码:

编译下载到开发板,用示波器查看。可以看到生成了50Hz,点空比为50%的PWM波形:

PWM可以修改占空比来控制LED亮与灭的时间,实现呼吸灯的效果,我们需要用到两个函数:PWM1_16BIT_SetSlice1Output1DutyCycleRegister,其功能是修改占空比的函数,输入参数为0-199;修改完占空比后,我们还需要调用: PWM1_16BIT_LoadBufferRegisters来使其生效。我们生成如下代码,来实现呼吸灯的效果:
int main(void)
{
    uint16_t duty=0;
    uint8_t F=0;
    SYSTEM_Initialize();
    // If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
    // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global and Peripheral Interrupts
    // Use the following macros to:
    // Enable the Global Interrupts
    //INTERRUPT_GlobalInterruptEnable();
    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();
    // Enable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptEnable();
    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();
    while(1)
    {
        PWM1_16BIT_SetSlice1Output1DutyCycleRegister(199-duty);
        PWM1_16BIT_LoadBufferRegisters();
        if(duty>=200)
        {
            F= 1;
        }
        if(duty == 0)
        {
            F = 0;
        }
        if(F == 0) {
        duty++;
        }else {
            duty--;
        }
        DELAY_microseconds(500);
    }   
}
【总结】
MPLAB 代码配置器(MPLAB Code Configurator,MCC)通过图形用户界面(Graphical User Interface,GUI)生成驱动程序代码。生成的驱动程序可用于控制 PIC单片机上的外设。 GUI 为设置外设配置提供了一种便捷的方法。 MCC 是 MPLAB X IDE 的一个插件。 另外,MCC用于配置和生成库,这允许用户对软件库和片外外设进行配置并生成代码。 生成的驱动程序或库可用于任何 Microchip PIC 器件应用程序。在启动 MCC 插件前, MCC 需要创建 MPLAB X IDE 项目或打开现有项目。必须进行上述操作,因为 MCC 需 要了解项目中使用的器件,进而访问器件特定的信息 (如寄存器、位和配置)并设置 MCC GUI。 MCC会根据在GUI中做出的选择生成源文件和头文件,并将生成的文件添加到MPLAB X IDE 的活动项目中。
在体验MCC配置PWM中,感觉这个工程使用简单,效率高等很多优点。值得注意的一点是,刚刚安装好MCC时需要一些耐心等待插件等下载完成,要不会感觉有死机的感觉。

使用特权

评论回复
沙发
tpgf| | 2024-2-4 14:54 | 只看该作者
其实说白了就是通过调整占空比来调整亮度是吗

使用特权

评论回复
板凳
heimaojingzhang| | 2024-2-4 15:20 | 只看该作者
怎么样才能把呼吸灯调节的非常的柔和呢

使用特权

评论回复
地板
renzheshengui| | 2024-2-4 15:54 | 只看该作者
有没有软件可以通过硬件来模拟出来实现效果呢

使用特权

评论回复
5
keaibukelian| | 2024-2-4 20:19 | 只看该作者
这种小的控制产品 应该是用比较不那么高级的芯片就可以搞定

使用特权

评论回复
6
paotangsan| | 2024-2-4 20:53 | 只看该作者
在一路上可以同时挂两个呼吸灯吗

使用特权

评论回复
7
wakayi| | 2024-2-4 21:29 | 只看该作者
为什么波形上会有毛刺呢  实际上这样的控制会不会闪烁呢

使用特权

评论回复
8
lulugl|  楼主 | 2024-2-4 21:44 | 只看该作者
wakayi 发表于 2024-2-4 21:29
为什么波形上会有毛刺呢  实际上这样的控制会不会闪烁呢

有时会,实际中会有电容来消除毛刺。

使用特权

评论回复
9
caigang13| | 2024-2-5 08:46 | 只看该作者
从点灯到呼吸灯的蜕变,哈哈。

使用特权

评论回复
10
pzsh| | 2024-2-6 11:50 | 只看该作者
开发过程使用图形化界面配置,省心不少

使用特权

评论回复
11
GlenX| | 2024-2-11 11:36 | 只看该作者
877能用这样的界面和函数吗???

使用特权

评论回复
评论
lulugl 2024-2-12 10:10 回复TA
是一样的吧。自己试试 
12
SophiaOP| | 2024-2-21 15:29 | 只看该作者
PWM可以控制电流吗?

使用特权

评论回复
评论
lulugl 2024-2-21 18:01 回复TA
PWM是控制开关的关断时间与频率,结合外部电路可以做到控制电流吧。 
13
AloneKaven| | 2024-2-22 18:59 | 只看该作者
mcc图形化配置确实是方便啊

使用特权

评论回复
14
OliviaSH| | 2024-2-25 21:12 | 只看该作者
不用单片机可以实现呼吸灯吗

使用特权

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

本版积分规则

156

主题

748

帖子

10

粉丝