在线时间613 小时
UID252169
注册时间2010-12-5
NXP金币0
TA的每日心情 | 开心 2019-2-14 16:49 |
---|
签到天数: 296 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 4473
- 最后登录
- 2020-4-14
|
实验四 LPC824的2路PWM实验
此次实验开始,简化MBED实例,不打印出来,直接分析应用。所有程序是按照实验三的增加和改动为主,少有大的变动的。
打开PwmOut.h,上边实例定义led,我们直接定义PWM0,PWM1
在增加adc实例对象的下边增加:
PwmOut pwm0(P0_0);
PwmOut pwm1(P0_1);
用P0_0,P0_1GPIO口作为PWM输出,原因是我设计的板子这两个口在电源一边,连接LED简单。
下边编写一个函数,设置GPIO的函数,以后凡是与IO设置有关的都放在这里:
void ioInit(void){
pwm0.period(0.002f);//pwm0周期
pwm1.period(0.001f);//pwm1周期
}
实例看PWM数据也是浮点数0~1,我们设计2个变量:
dut0,dut1,ddt0=0.005f,ddt1=0.01f,将这4个变量写到val1的后边,dut0,dut1表示PWM周期,ddt0,ddt1表示周期变化增量。pwm0和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(0,3,25);c2l(1,3,32);c2l(2,3,1);//PW0
c2l(8,3,25);c2l(9,3,32);c2l(10,3,2);//PW1
在dispMes中增加:
c2l(4,3,int((dut0*10))%10);c2l(5,3,int((dut0*100))%10);c2l(6,3,int((dut0*1000))%10);
c2l(12,3,int((dut1*10))%10);c2l(13,3,int((dut1*100))%10);c2l(14,3,int((dut1*1000))%10);
显示3位就够了。又隔了一行显示,肯定将来有用的。编译下载后结果见照片图41。其中的大个LED是双向红绿LED,因为两路PWM周期不一样,会形成红绿交渐亮暗的。
为了检验程序运行结果,我们还在dispBase的第一行增加程序计数器js:
c2l(0,0,19);c2l(1,0,28);//JS
在变量中增加了新变量js,因为可能计数很多,采用了32位数:
int32_t js;
在dispMes中增加一行:
c2l(3,0,(js/100000)%10);c2l(4,0,(js/10000)%10);c2l(5,0,(js/1000)%10);c2l(6,0,(js/100)%10);c2l(7,0,(js/10)%10);c2l(8,0,(js)%10);
在main循环语句中增加:js++;
结果见照片图42。
|
-
41-2路PWM
-
42-增加了程序计数器
|