首页->【玩CortexM0】

13 0

实验七 2路PWM输出实验

此次实验开始,简化MBED实例,不打印出来,直接分析应用。

打开PwmOut.h,上边对象定义为led,我们直接定义PWM0,PWM1

在定义对象类区域增加:

PwmOut pwm0(P0_0);

PwmOut pwm1(P0_1);

pwm0或pwm1为对象实例名称,用P0_0,P0_1两个GPIO口作为PWM输出,原因是我的板子这两个口在电源一边,连接LED查看方便。

再在变量定义区的浮点点以后边增加以下几个变量:

,dut0,dut1,ddt0=0.005f,ddt1=0.01f

将这4个变量写到val1的后边,dut0,dut1表示PWM周期,ddt0,ddt1表示周期变化增量。因为pwm0和pwm1是对象,不能直接参与运算!

下边编写一个函数,设置GPIO的函数,以后凡是与GPIO设置有关语句的都放在这里:

void ioInit(void){

 pwm0.period(0.002f);//pwm0周期

 pwm1.period(0.001f);//pwm1周期

}

在main主函数中前边加如:

ioInit();

这样在主函数的循环体内增加以下语句:

if(dut0>0.810f){dut0=0.150f;}

dut0 +=ddt0;pwm0=dut0;

if(dut1>0.950f){dut1=0.050f;}

dut1 +=ddt1;pwm1=dut1;

再在dispBase中增加以下语句:

c2l(3,0,48);c2l(3,1,45);c2l(3,2,16);//PM0

c2l(3,8,48);c2l(3,9,45);c2l(3,10,17);//PM1

在dispMes中增加以下语句:

c2l(3,4,int(dut0*10)%10+16);c2l(3,5,int(dut0*100)%10+16);c2l(3,6,int(dut0*1000)%10+16);

c2l(3,12,int(dut1*10)%10+16);c2l(3,13,int(dut1*100)%10+16);c2l(3,14,int(dut1*1000)%10+16);

显示3位就够了。又隔了一行显示,肯定将来有用的。编译下载后结果见照片71。71-双色LED交替暗亮.JPG

其中的大个LED是双向红绿LED,因为两路PWM周期不一样,会形成红绿交渐亮暗的。双踪示波器看到的实际波形见照片72,73。

楼主可见