随笔 - 249  文章 - 1  评论 - 1207  阅读 - 61万

Windows on Device 项目实践 1 - PWM调光灯制作

在前一篇文章《Wintel物联网平台-Windows IoT新手入门指南》中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及Hello Blinky项目的演示。在这篇文章开始,我们进入项目实践部分。

由于Windows on Device设计的时候以Galileo为硬件平台,所以其外设接口也是兼容了Arduino的标准。另外,其编程模式也是参考了Arduino中使用的Wiring Language。

1. PWM原理

Pulse Width Modulation 就是通常所说的PWM,译为脉冲宽度调制,简称脉宽调制。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法,由于计算机不能输出模拟电压,只能输出0 或5V 的的数字电压值,我们就通过使用高分辨率计数器,利用方波的占空比被调制的方法来对一个具体模拟信号的电平进行编码。PWM 信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么是5V(ON),要么是0V(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM 进行编码。输出的电压值是通过通和断的时间进行计算的。输出电压=(接通时间/脉冲时间)*最大电压值。

clip_image002

PWM 被用在许多地方,调光灯具、电机调速、声音的制作等等。PWM 的三个基本参数如下:

clip_image002[6]

  • 1、脉冲宽度变化幅度(最小值/最大值)
  • 2、脉冲周期(1 秒内脉冲频率个数的倒数)
  • 3、电压高度(例如:0V-5V)

Arduino 控制器有6 个PWM 接口分别是数字接口3、5、6、9、10、11,同样,在Galileo上也是这些接口支持PWM 输出。

2. 元器件和硬件连接

这次实践项目需要使用的元器件有:

  • 电位计模块*1
  • 直插LED*1
  • 220Ω直插电阻
  • 面包板*1
  • 面包板跳线 若干

电位计作为Galileo的模拟值输入,我们接到模拟口;LED灯我们接到PWM 接口上,这样通过产生不同的PWM 信号就可以让小灯有亮度不同的变化。

连接的原理图和硬件图如下:

clip_image002[8]clip_image002[10]

 

 

 

3. 源代码解析

在编写程序的过程中,我们会用到模拟写入analogWrite(PWM 接口,模拟值)函数,对于模拟写入analogWrite()函数,此函数用法也很简单,我们在本实验中读取电位计的模拟值信号并将其赋给PWM 接口使小灯产生相应的亮度变化,再在屏幕上显示出读取的模拟值,大家可以理解为此程序是在模拟值读取的实验程序中多加了将模拟值赋给PWM 接口这一部分,下面是一段供参考的源程序,使用了模拟输入接口0和数字接口11。

// Main.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "arduino.h"

int _tmain(int argc, _TCHAR* argv[])
{
    return RunArduinoSketch();
}

int potpin = 0;//定义模拟接口0
int ledpin = 11;//定义数字接口11(PWM 输出)
int val = 0;// 暂存来自传感器的变量数值

void setup()
{
    // TODO: Add your code here
    pinMode(ledpin, OUTPUT);//定义数字接口11 为输出
    //注意:模拟接口自动设置为输入
}

// the loop routine runs over and over again forever:
void loop()
{
    // TODO: Add your code here

    val = analogRead(potpin);// 读取电位计的模拟值并赋值给val
    Log(L"val: %d\r\n", val); //在调试窗口输出数值
    analogWrite(ledpin, val / 4);// 打开LED 并设置亮度(PWM 输出最大值为255)
    delay(10);//延时0.01 秒

}

4. 调试结果

启动Galileo,利用TelNet建立连接,然后点击调试。程序就会通过网口下载到Galileo上。我们旋转电位计的旋钮,不但可以看到屏幕上数值的变化,还也可以清楚的看到我们面包板上的LED 小灯的亮度也在随之变化。

IMG_0500 image

调试的视频链接如下,大家可以看看调光灯的效果:http://v.youku.com/v_show/id_XODU0NjY1OTQw.html

posted on   施炯  阅读(3409)  评论(4编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2009-12-23 移动物联网 之 家电节能 (2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示