脉冲宽度调制(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时需要一些耐心等待插件等下载完成,要不会感觉有死机的感觉。
|