使用MSP430G2单片机的PWM模块控制LED指示灯的亮度

2019-10-22来源: eefocus关键字:MSP430G2  单片机  PWM  模块控制  LED指示灯

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


什么是PWM信号?

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


PWM的占空比:

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

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



PWM的频率:

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

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


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

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


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


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


电路原理图:

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



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


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



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


编程MSP430G2 LaunchPad:

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

  1. int PWMpin = 4; //我们将MSP模块的第4个引脚用作PWM引脚


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

  1. void setup() {

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

  3. }


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

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

  1. int val = analogRead(A0); //读取引脚A0的ADC值


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

  1. val = map(val,0,1023,0,255); // ADC将给出0-1023的值,将其转换为0-255


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

  1. analogWrite(PWMPIN,VAL); //将该值写入PWM引脚。


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


用PWM控制LED的亮度:

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


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


代码:

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


  2. void setup() {

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

  4. }


  5. void loop() {

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

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

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

  9. }


关键字:MSP430G2  单片机  PWM  模块控制  LED指示灯 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477966.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:使用MSP430G2 LaunchPad开发板连接LCD液晶显示屏的方法
下一篇:使用MSP430G2 LaunchPad开发板驱动伺服电机的方法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430G2553与MSP430F5336系列单片机总结[4]——比较器B的使用
比较器B是什么,顾名思义,它其实就是用来比较模拟电压+输入端和-输入端的电压大小,然后设置输出信号CBOUT的值的,如果 + 端电压高于 - 端电压,则CBOUT置高,否则置低。主要的控制寄存器有CBCTL0,CBCTL1,CBCTL2,CBCTL3,CBINT,CBIV,在MSP430G2553中没有比较器B,但是F5336中有,所以接下来的代码全都是F5336的比较器B使用程序:1.比较器B输入通道CB0接外部模拟输入信号,并且引至比较器+输入端,内部参考电压发生器利用共享电压源产生2.0V参考电压。最后当CB0输入模拟信号电压高于2.0V时,CBOUT输出高电平,当CB0输入模拟信号电压低于2.0V时,输出低电平
发表于 2019-11-06
MSP430G2553使用CCS8.0编程注意点总结
本文总结了在利用MSP430G2553做实验时的一些通用错误及注意点,用的软件为CCS8.0,供大家借鉴,具体工程不再给出,若有相似问题或本文有错误,可留言,我尽量回复。文末附有MSP430的用户手册、数据手册、学习笔记及《从零开启大学生电子设计之路》电子版及相关例程的下载地址,我也会尽量持续总结并更新。【错误1】:在“UART_Global.h“中已经定义全局变量“extern unsigned int CHANGE_MODE;”,然而编译时仍然出现错误,错误提示为:error #10234-D: unresolved symbols remain。【解决】:经过在网上查找并对比相关例程发现,在“.h”文件中定义后,仍需在相应
发表于 2019-10-30
使用MSP430G2 LaunchPad开发板连接步进电机的方法
在本篇文章中,我们将介绍如何使用MSP430 LaunchPad开发板连接一个步进电机。 MSP-EXP430G2是德州仪器(TI)提供的开发工具,又名LaunchPad,用于学习和练习如何使用他们提供的微控制器。该开发板属于MSP430产品线,我们可以使用它对所有MSP430系列微控制器进行编程。如果您是MSP430的新手,请查看MSP430 LaunchPad的入门教程。所需的材料●    MSP430 LaunchPad开发板●    35BYJ46或28-BYJ48步进电机●    ULN2003驱动芯片●    连接导线● 
发表于 2019-10-23
使用MSP430G2 LaunchPad开发板连接步进电机的方法
使用MSP430G2 LaunchPad开发板驱动伺服电机的方法
在本篇文章中,我们将主要介绍一些有关伺服电机的基础知识以及如何将伺服电机与MSP430G2 LaunchPad开发板进行连接。 MSP-EXP430G2是德州仪器提供的开发工具,也称为LaunchPad,用于学习和实践如何使用其微控制器。该开发板属于MSP430产品线类别,我们可以对所有MSP430系列微控制器进行编程。伺服电机和PWM在详细讨论之前,首先我们应该了解伺服电机。伺服电机包含了直流电机、位置控制系统和转动机构。伺服电机在现代世界有很多应用,因此它们有不同的形状和尺寸。我们将在本篇文章中使用的是SG90伺服电机,它是最流行且最便宜的电机之一。 SG90是一款180度伺服器。所以用这个伺服我们可以将轴从0-180度定位
发表于 2019-10-23
使用MSP430G2 LaunchPad开发板驱动伺服电机的方法
使用MSP430G2 LaunchPad开发板连接LCD液晶显示屏的方法
本篇文章是我们学习使用Energia IDE开发环境编程MSP430G2 LaunchPad的教程系列中的第三篇教程。在上一篇教程中,我们学习了如何控制MSP430G2 LaunchPad开发板上的数字输入和输出引脚。在本教程中,我们将学习如何将LCD与开发板连接,以便我们可以显示一些有用的信息。我们在这个项目中使用的LCD是最常用的16×2点阵式液晶显示器,也就是所谓的字符显示器。我们大多数人都会通过公共PCO或其他电子项目来接触到这一点。像这样的显示对于我们将来的教程中显示数据和其他调试信息将非常方便。由于提供了库,将该LCD与MSP430连接起来非常简单。所以让我们开始学习吧!所需材料●    德州仪器
发表于 2019-10-22
使用MSP430G2 LaunchPad开发板连接LCD液晶显示屏的方法
单片机常用芯片MAX7219驱动
一次接收16位数据,在接收的16位数据中:D15~D12可以与操作无关,可以任意写入,D11~D8决定所选通的内部寄存器地址,D7~D0为待显示数据或是初始化控制字。在CLK脉冲作用下,DIN的数据以串行方式依次移入内部16位寄存器,然后在一个LOAD上升沿作用下,锁存到内部的寄存器中。注意在接收时,先接收最高位D16,最后是D0,因此,在程序发送时必须先送高位数据,在循环移位。工作时序图见图7。由于51是8位单片机故需要分两次来送数据。具体操作见驱动程序详解。图7  数据读写时序3 电路原理图电路原理图电路原理图如图7,MAX7219与单片机的连接只需要3条线:LOAD(CS)片选引脚、CLK串行时钟引脚、DIN
发表于 2019-11-08
单片机常用芯片MAX7219驱动
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved