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

【CuriosityNano测评报告】PIC18F16Q40之pwm

[复制链接]
1508|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天我们来配置一下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);   
示波器查看波形:

代码:

这样我的水泵就动起来了~

PIC18F16Q40_DEMO.X.rar

623.41 KB

使用特权

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

本版积分规则

111

主题

627

帖子

2

粉丝