今天我们来配置一下PIC18F16Q40的pwm功能。不同与很多MCU把PWM集成在一个定时器上。
PIC18F16Q40有独立的PWM发生模块。这一点做得很专业。其中一个PWM模块又有2路输出,
而且还能支持波形的左、中、右3种的对齐选择模式。虽说直接通过软件对CNT的计时,也能
达到这个效果,但是硬件自带还是更爽一点。
MAPLABX配置工具MCC,确实很方便。我们之前的时钟什么的就不配置了,我们直接在之前的
串口实验室,再配置PWM输出。我们不开启任何中断,通过数值来调其占空比,来实现开关及
加速。此路PWM用在调节水泵上面的。
配置PWM模块:
设定RC1为PWM1CH1输出引脚:
我们看到配置了PWM的时钟为1.6M,配置了PWM周期为16K。
这样我们得知一个周期需要的CNT数是:1.6M/16K=1600000/16000=100.
怎么这么凑巧,正好100。其实这是故意为之。
那么这样占空比就好算了,1个基本单位就代表1%.
生成的代码风格也不错,我甚至不用看规格书,试几次就能知道函数怎么用了。
我们看PWM c里面生成的设置周期和占空比的函数:
这样就好弄了,我们目前周期不变,让占空比10%的增加,到100%重归于0,然后往复。
在while循环里面添加:
if(times%150==0)
{
//时钟为1600K PWM周期为16K 一个周期就是100cnt
duty=duty+10;
if(duty>100)duty=0;
PWM1_16BIT_SetSlice1Output1DutyCycleRegister(duty);//设定数值
PWM1_16BIT_LoadBufferRegisters(); //刷新寄存器
}
if(times%30==0)LED_Toggle();//LED闪烁,提示协调系统运行
__delay_ms(10);
示波器查看波形:
代码:
这样我的水泵就动起来了~
|