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

PIC16F17146PWM呼吸灯

[复制链接]
536|15
手机看帖
扫描二维码
随时随地手机跟帖
lulugl|  楼主 | 2023-7-27 10:21 | 显示全部楼层 |阅读模式

​ 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
PIC16F17146板载了两路16bit的PWM。
下面我就如何创建PWM呼吸灯的工程创建与代码的实现介绍如下:
先建一个空白的项目:
f16e040ca21f01061894c391b414d83b
f93308f8fc010248389b2adde90c1339
c32fc6b7cbec962a85ca81dd78f4651d
7bc76b713a00fb961ee09859a5fba7f1
754ec8bd27ec4339a521c813c5bb8399
到此空白工程创建成功
启动MCC图形化配置工具:
d45a6b0f02283ab2c47bf6dd48627a76
13a8398c4da709da52d751be2668f70d
d02a1b08412412a4941956058f27708c
打开MCC后,我们第一步先配置系统的时钟,我们选择系统内部高速时钟—HFINTOSC,选择4M_Hz,4分频,这样我们得到1MHz的系统时钟。
打开PWM外设,点周Drivers-PWM,在PWM1_16BIT前面的+号点击添加。
222b3e3c58d91a12609b56635de25f20
db43e7bf13a0f582f2a9ca91e45f6799
启用delay延时函数:
d5d6add7396777191412b3262985ee41
6、PWM,我们选择FOSC时钟源,100分频,选择Requested为0.05,生成50Hz的PWM输出,50%的点空比即20ms产生一个pwm波形。
0790326a1c1df90c307e32db3b191e93
生成代码:
860ac5805bcec4cbc4215748069de8a2
编译下载到开发板,用示波器查看。可以看到生成了50Hz,点空比为50%的PWM波形:
bb4d433fad692d9d7905d98d9c510b61
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 | 显示全部楼层
有没有软件可以通过硬件来模拟出来实现效果呢

使用特权

评论回复
keaibukelian| | 2024-2-4 20:19 | 显示全部楼层
这种小的控制产品 应该是用比较不那么高级的芯片就可以搞定

使用特权

评论回复
paotangsan| | 2024-2-4 20:53 | 显示全部楼层
在一路上可以同时挂两个呼吸灯吗

使用特权

评论回复
wakayi| | 2024-2-4 21:29 | 显示全部楼层
为什么波形上会有毛刺呢  实际上这样的控制会不会闪烁呢

使用特权

评论回复
lulugl|  楼主 | 2024-2-4 21:44 | 显示全部楼层
wakayi 发表于 2024-2-4 21:29
为什么波形上会有毛刺呢  实际上这样的控制会不会闪烁呢

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

使用特权

评论回复
caigang13| | 2024-2-5 08:46 | 显示全部楼层
从点灯到呼吸灯的蜕变,哈哈。

使用特权

评论回复
pzsh| | 2024-2-6 11:50 | 显示全部楼层
开发过程使用图形化界面配置,省心不少

使用特权

评论回复
GlenX| | 2024-2-11 11:36 | 显示全部楼层
877能用这样的界面和函数吗???

使用特权

评论回复
评论
lulugl 2024-2-12 10:10 回复TA
是一样的吧。自己试试 
SophiaOP| | 2024-2-21 15:29 | 显示全部楼层
PWM可以控制电流吗?

使用特权

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

使用特权

评论回复
OliviaSH| | 2024-2-25 21:12 | 显示全部楼层
不用单片机可以实现呼吸灯吗

使用特权

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

本版积分规则

139

主题

680

帖子

6

粉丝