零知开源快速入门11-使用PWM进行调光

PWM在很多场景下都能得到应用,比如调光、电机调速、音频等。在这里我们使用PWM对LED进行亮度调节,下面跟着我一步步动手完成吧。

一、工具原料

电脑,windows系统
零知开发板
micro-usb线
LED灯一个
220Ω 电阻1个
电位器一个
面包板一个+若干跳线

二、硬件连接

1、硬件连接原理图

2、实际连线

三、方法步骤

1、打开零知实验室软件开发工具,然后新建项目,输入以下代码:

2、按照之前的方式先【编译】,然后【上传】到开发板中。


							
		/**
		*    文件: PWM调光测试.ino      by 零知实验室(www.lingzhilab.com)
		*    -- 零知开源,让电子制作变得更简单! --
		*    时间: 2018/06/26 09:55
		*    说明: 使用电位器来调节LED灯的亮度
		**/
		
		int led        = 0;//led连接到一个具有PWM引脚功能的脚上,这里连接到具有PWM功能的0脚
		int port = A0;//连接电位器的引脚,测量模拟输入
		
		int value = 0;//读取到的模拟输入值
		void setup() {
		        pinMode(led, OUTPUT);
		        Serial.begin(9600);
		}
		
		void loop() {
		        value = analogRead(port);
		        Serial.println(value);
		//因为模拟读取范围为0-4095,而pwm输出范围为0-65535,要将模拟数值和pwm值映射对应,
		//因此这里把读到的模拟值扩大16倍
		        analogWrite(led, value*16);
		        delay(100);//延时一会儿
		}								
							
							
						

四、成果展示

上面步骤成功完成后,我们就可以看到预期的结果了,打开【调试】,选择【串口调试】,调节电位计,可以看到变化:

同时,在我们调节电位计的时候,LED灯的亮度随之变化

可以使用下面代码测试结果:


							
	/*
	*12脚产生pwm测试
	*/
	
	const uint16_t pulseDelay = 200;
	const uint16_t pulseWidth = 200;
	//-----------------------------------------------------------------------------
	void toggle_led()
	{
	        digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
	}
	//-----------------------------------------------------------------------------
	void setup()
	{
	        
	
	        //设置 12脚 (Timer3 channel 1) 产生 pwm
	        pinMode(12, PWM);
	        Timer3.pause();
	        Timer3.setPrescaleFactor(1);
	        Timer3.setCompare(TIMER_CH1, 2);
	        Timer3.setOverflow(2);
	        Timer3.refresh();
	        Timer3.resume();
	}
	
	//-----------------------------------------------------------------------------
	void loop()
	{
	        
	}							
							
						

我使用100M的逻辑分析仪测试结果是25M(可以用示波器进行更精确测试),理论上是还可以增加的,把上面两个参数从2调到1。下图为逻辑分析仪测试结果: