【Nucleo-F413ZH创想】 实验五 2路PWM输出实验
此次实验开始,简化MBED实例,不打印出来,直接分析应用。
先打开STM32 NUCLEO-144 F413 Board User manual.pdf,查看P35右上的管脚分布对应板子的右上印字可以的到,相对于Arduino输出的6个PWM口为:PA_6,PA_7,PD_5,PE_9,PE_11,PE_13,我们选择其中的两个即可选择PA_6,PA_7两个口。
打开PwmOut.h,上边对象定义为led,我们直接定义PWM0,PWM1
在定义对象类区域增加:
PwmOut pwm0(PA_6);
PwmOut pwm1(PA_7);
pwm0或pwm1为对象实例名称,用PA_6,PA_7两个GPIO口作为PWM输出,原因是我的板子这两个口挨在一起,连接双色LED查看方便。
再在变量定义区的浮点以后边增加以下几个变量:
,dut0,dut1,ddt0=0.005f,ddt1=0.01f
将这4个变量写到val1的后边,dut0,dut1表示PWM周期,ddt0,ddt1表示周期变化增量。因为pwm0和pwm1是对象,不能直接参与运算!
将下边的定义PWM周期的函数罗列在ioInit函数中:
pwm0.period(0.002f);//pwm0周期
pwm1.period(0.001f);//pwm1周期
这样在主函数的循环体内增加以下语句:
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,55);c2l(3,2,45);c2l(3,3,26);//PWM:
c2l(3,10,48);c2l(3,11,55);c2l(3,12,45);c2l(3,13,26);//PWM:
在dispMes中增加以下语句:
c2l(3,4,16+int(dut0*10)%10);c2l(3,5,16+int(dut0*100)%10);c2l(3,6,16+int(dut0*1000)%10);c2l(3,7,16+int(dut0*10000)%10);
c2l(3,14,16+int(dut1*10)%10);c2l(3,15,16+int(dut1*100)%10);c2l(3,16,16+int(dut1*1000)%10);c2l(3,17,16+int(dut1*10000)%10);
显示3位就够了。又隔了一行显示,肯定将来有用的。编译下载后结果见照片图51。其中的LED是双向红绿LED,因为两路PWM周期不一样,会形成红绿交渐亮暗的。双踪示波器看到的实际波形见图52。
|
|