本篇文章是MSP430G2 LaunchPad系列教程的一部分,我们正在学习使用德州仪器的MSP430G2 LaunchPad开发板。到目前为止,我们已经学习了开发板的基础知识,并介绍了如何读取模拟电压以及使用MSP430G2进行连接LCD等。现在我们继续了解MSP430G2单片机中的PWM模块。我们将通过改变电位器来控制LED的亮度,因此,将电位器连接到MSP430的模拟引脚,然后读取其模拟电压,因此建议在继续学习之前先了解ADC的文章。

什么是PWM信号?

脉宽调制(PWM)是控制电路中最常用的数字信号。该信号以预定的时间和速度设置为高电平(3.3v)和低电平(0v)。信号保持高电平的时间称为“开启时间”,信号保持低电平的时间称为“关闭时间”。如下所述,PWM有两个重要参数:

PWM的占空比:

PWM信号保持高电平的时间百分比称为占空比。如果信号始终处于开启状态,则占空比为100%,如果处于始终关闭状态,则占空比为0%。

占空比=开启时间/(开启时间+关闭时间)

Duty-cycle-of-the-PWM.png (7.62 KB, 下载次数: 40)

2018-5-15 16:08 上传

PWM的频率:

PWM信号的频率决定了PWM完成一个周期的速度。如上图所示,一个周期内完成PWM信号的ON和OFF状态。在本篇文章中,频率为500Hz,该值是Energia IDE设置的默认值。

PWM信号的实时应用有很多,PWM信号可以用来控制伺服电机,也可以转换为模拟电压,这样就可以通过电压控制LED的亮度。让我们来了解一下如何实现。

如何将PWM信号转换为模拟电压?

要将PWM信号转换为模拟电压,我们可以使用称为RC滤波器的电路。这是一个简单且最常用的电路。该电路只包括一个电阻和一个电容串联,如下图所示。、

How-to-convert-PWM-signal-to-Analog-voltage.png (13.71 KB, 下载次数: 42)

2018-5-15 16:08 上传

该电路主要实现的功能是,当PWM信号为高时,电容器通过电阻器充电,当PWM信号变低时,电容器通过存储的电荷放电。通过这种方式,我们将始终在输出端具有恒定的电压,这将与PWM占空比成正比。

在上面显示的图形中,黄色的一个是PWM信号,蓝色的一个是输出模拟电压。正如你所看到的,输出波形不会是一个纯粹的直流波形,但它应该很适合我们的应用。如果您需要纯粹的直流波来处理其他类型的应用,您应该设计一个开关电路。

电路原理图:

使用MSP430G2生成脉宽调制(PWM)和控制LED亮度的电路图

Circuit-diagram for-generating-Pulse-width-Modulation-(PWM)-using-MSP430G2-and-C.png (47.58 KB, 下载次数: 41)

2018-5-15 16:08 上传

电路图非常简单:它只有一个电位器和一个电阻和电容来组成一个RC电路和Led本身。电位器用于提供模拟电压,根据该电压可以控制PWM信号占空比。该电位器的输出连接到模拟电压的引脚P1.0。然后我们必须产生一个PWM信号,这可以通过使用引脚P1.2来完成,然后这个PWM信号被发送到RC滤波器电路,以将PWM信号转换成模拟电压,然后将其提供给LED。

我们应该注意到,并非MSP开发板上的所有引脚都可以读取模拟电压或可以产生PWM引脚,这一点非常重要。下图显示了可以完成特定任务的具体引脚。始终以此为指导来选择您的引脚进行编程。

Blinking-an-LED-on-MSP430G2_0.jpg (91.36 KB, 下载次数: 36)

2018-5-15 16:08 上传

如上所示组装完整的电路,您可以使用面包板和少量跳线,并轻松实现连接。

编程MSP430G2 LaunchPad:

一旦硬件准备就绪,我们就可以开始编程。程序中的第一件事是声明我们要使用的引脚。这里我们将使用引脚4(P1.2)作为输出引脚,因为它能够产生PWM。因此,我们创建一个变量并分配引脚名称,以便稍后在程序中引用它。

int PWMpin = 4; //我们将MSP模块的第4个引脚用作PWM引脚复制代码

接下来我们介绍setup函数。写在这里的任何代码都会只执行一次,这里我们声明使用这个第4引脚作为输出引脚,因为PWM是输出功能。请注意,我们在此使用了变量PWMpin而不是数字4,这样代码看起来更有意义:

void setup() {

pinMode(PWMpin,OUTPUT); //The PEMpin is set as Outptut

}复制代码

最后我们介绍loop函数。这里写的任何代码都会一次又一次的执行。在这个程序中,我们必须读取模拟电压,并相应地产生一个PWM信号。所以首先让我们先从引脚A0读取模拟电压开始,因为我们已连接到电位器。

在这里,我们使用AanalogRead函数来读取该值,该函数将基于施加到该引脚的电压值从0-1024返回一个值。然后我们将这个值存储到一个名为“val”的变量,如下所示

int val = analogRead(A0); //读取引脚A0的ADC值复制代码

我们必须将0到1024之间的值从ADC转换为0到255之间的值,以将其赋给PWM功能。将一组数值转换为另一组数值,Energia具有类似于Arduino的map函数。因此,我们将0-1204的值转换为0-255并将其保存回变量“val”中。

val = map(val,0,1023,0,255); // ADC将给出0-1023的值,将其转换为0-255复制代码

现在我们根据电位器的位置得到一个0-255的变量值。我们所要做的就是在PWM引脚上使用这个值,这可以使用下面的行来完成。

analogWrite(PWMPIN,VAL); //将该值写入PWM引脚。复制代码

让我们回到为什么0-255被写入PWM引脚的问题。该值0-255决定了PWM信号的占空比。例如,如果信号的值为0,则表示占空比为0%,127为50%,255为100%。

用PWM控制LED的亮度:

一旦你了解了硬件和代码,现在是时候对电路的工作有一些乐趣了。将代码上传到MSP430G2开发板并转动电位器旋钮。当您旋转旋钮时,引脚2上的电压将发生变化,将由微控制器读取,并根据该电压,在引脚4上产生PWM信号。电压越高,占空比越大,反之亦然。

Pulse-width-Modulation-(PWM)-using-MSP430G2-Controlling-Brightness-of-LED.jpg (54.5 KB, 下载次数: 40)

2018-5-15 16:08 上传

然后该PWM信号被转换为模拟电压来发光LED。 LED的亮度与PWM信号占空比成正比。除了面包板上的LED之外,您还可以注意到smd LED(红色)的亮度与面包板LED相似。这是LED也连接到相同的引脚,但它没有RC网络,所以它实际上闪烁非常快。你可以在黑暗的房间里摇动电路板来检查闪烁的频率。

代码:

int PWMpin = 4; //We are using the 4th pin on the MSP module as PWM pin

void setup() {

pinMode(PWMpin,OUTPUT); //The PEMpin is set as Outptut

}

void loop() {

int val = analogRead(A0);    // read the ADC value from pin A0

val = map(val, 0, 1023, 0, 255);  //The ADC will give a value of 0-1023 convert it to 0-255

analogWrite(PWMpin,val);  //Write that value to the PWM pin.

}复制代码

msp430发送pwm信号_使用MSP430G2单片机的PWM模块控制LED指示灯的亮度相关推荐

  1. 51单片机红外通信及控制LED灯(LCD1602显示)

    51单片机红外通信及控制LED灯(LCD1602显示) 大家好,又和大家见面了,离上一次DS18B20传感器的文章已经过去了一个星期了,这期我将给大家带来,基于STC89C52芯片和HS0038红外接 ...

  2. 自动感光调节LED灯亮度C语言程序,PWM控制LED灯的亮度(C 语言)

    控制LED灯的亮度,通过调节电压的方式可以达到,但不理想,而且可调的范围很小,电压稍高,还容易把LED烧毁,唯一可行的方法就是通过PWM(脉冲宽度调节)来控制其亮度. 以下程序是在单片机中控制LED. ...

  3. msp430发送pwm信号_如何采用MSP430单片机实现PWM信号

    概念 PWM信号是一种具有固定周期.不定占空比的数字信号. 如果Timer_A的计数器工作在增计数模式,输出采用输出模式7(复位/置位模式) 利用寄存器TAxCCR0控制PWM波形的周期,用其他某个寄 ...

  4. 单片机基础:开关控制LED灯的亮灭

    (一) 单片机的初级运用.通过两个开关来控制LED灯的亮灭.首先要使用Proteus来绘制电路原理图.图中的LED灯为共阴接法.如图: (二)当单片机P3口做输入时,首要让其端口输出1.如图中的P3^ ...

  5. 单片机的单个IO口可以发送数据吗_关于51单片机各个引脚它的功能你了解多少?...

    对于40引脚双列直插51单片机各个引脚功能情况分析. P0端口一默认是开漏准双向IO口,没有输出没有驱动能力,要做逻辑输出要在外部接上拉电阻. P0端口除了作为普通的输入输出功能,还可以用来当做数据总 ...

  6. qlistwidget窗口隐藏会发送什么信号_为什么wifi连的人越多,就越慢?

    生活中,我们经常会遇到wifi连的人越多,网就会变慢的情形.下面小速带您一起来探寻背后的原因. △:有线网络,一根网线上用的人多了怎么避免冲突? CSMA/CD应用在OSI 的数据链路层,它的工作原理 ...

  7. rust怎么发送求救信号_海上遇险怎么发求救信号?

    海上遇险怎么发求救信号? 当你在海上遇险时,不要紧张,要选择正确的求救方式: 1.海上遇险时可通过船上装备的甚高频.中频或高频数字选呼设备及国际海事通信卫星,向附近船只或岸站发出求救信号,SOS: 2 ...

  8. pyqt5 发送键盘信号_为什么提款机的键盘要用金属?看完之后长知识了……

    瓷都晚报蝉联江西十大最具影响力媒体微信 为什么ATM提款机的按键要用金属? 银行的ATM机一般都是金属数字键盘,它有防止泄密的好处. 想一想:当你用手指按下密码之后,键盘的温度就会被改变.如果我们在交 ...

  9. rust怎么发送求救信号_探险遇难发送求救信号的方法

    不能保证我们每次的探险都是安全的,尤其在恶劣的条件下进行探险,我们很难保证是否安全,可能会遇到危险,那户外探险遇到危险怎么办呢,如何发求救信号呢,这里给大家介绍几种: 1.夜晚遇险火光求救信号是非常有 ...

最新文章

  1. 研发管理101军规#001 两周迭代,形成团队持续习惯
  2. Mac安装MySQL数据库
  3. 第一次写购物车,甚是简陋。
  4. 404 Note Found 团队会议纪要
  5. 如何在 SAP BTP Java 应用里使用 SQLite 数据库
  6. linux安装卷管理,Linux安装管理ISCSI卷(initiator端)
  7. 隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别
  8. 心理压力如何测试软件,心理压力测试 缓解压力有什么办法
  9. JDK 和 tomcat 安装 配置
  10. 周五,放松心情,听我来分享问题背后的背后(一)
  11. 机器学习算法——GBDT
  12. 给大家分享几个经典c语言简单案例
  13. C语言运算符和表达式
  14. hpsocket java代码_java版本调用HP-Socket服务端代码
  15. 动态库和静态库的区别
  16. 关闭Postman v5.0自动更新
  17. 解释一下积分变上限函数
  18. ubuntu fuji xerox scanner扫描仪安装和使用
  19. Flowchart流程图示例
  20. 管理者的50堂课之创始人篇 读书笔记

热门文章

  1. 安装trinity、解决报错
  2. fixed 和 fixed
  3. 天翼云等服务器配置Apache Web服务
  4. 使用pydicom实现Dicom文件读取与CT图像窗宽窗位调整
  5. 生成HTTPS协议需要的SSL证书
  6. Taylor定理证明
  7. 网上流行护眼色的RGB值和颜色代码
  8. Manjaro 安装MySQL
  9. K-Means聚类实验报告实例
  10. 三星s2 硬刷Android 8,六年老机吃上奥利奥:第三方三星S2安卓8.0刷机包发布