MSP430G2253 产生占空比可调的PWM

2020-02-12来源: eefocus关键字:MSP430G2253  占空比可调  PWM

最近刚刚做了一个用430驱动白光LED的代码   其中用到了以前用到的ADC和PWA这些常用的外设  发现对片子掌握的还是太基础 现在复习一下  以后用到的时候也算有个参考 今天就只学习一点最基本的功能 用430产生一个占空比可调的PWM


先说一下步骤:

1:首先我们要知道那个引脚可以作为定时PWM的输出引脚 如果不太熟悉引脚 就去查阅册  


2:配置这个IO  这种情况下 无论那个系列的片子 基本作为PWM输出的时候 IO配置为输    出 选择其端口复用功能 详细配置  看手册


3:设置PWM的周期  TACCR0 或者CCR0  貌似是一个冬冬吧  这里面的数值决定了你PWM的   周期 举个简单的例子 比如你使用1MHZ的时钟频率  CCR0=100 则PWM的周期为100us     那么相应的频率就是10Khz


4:设置寄存器TACTL  设置输出模式 这里输出模式有7种  这里我贴一个图片 可以很好的理解这几种模式:



大家可以仔细观察一下  七种输出模式的2和6两种模式  他们输出的PWM恰好是互补的  其实这为我们需要互补的两个PWM提供了一个很好的生成方法  特别使我们在驱动全桥的让对角线交互导通的时候需要用到这种互补的PWM并且 他还可以生成死区区间  这点在英文手册中有讲到 有需要的可以去看一下  死区时间=时钟周期*(TACCR1-TACCR2)


5:设置相应的占空比 就是定时器捕获比较寄存器  其实就是CCR1和CCR2的赋值问题 


6:操作TACTL 也就是定时器A控制寄存器 选择时钟源和计数模式 至于分频和中断什么这里暂时不考虑了 寄存器里面的计数模式决定你是否开启了定时器 以及你的计数模式

如图:


配置完成这些自然就能产生相应的PWM了  但是我们如何改变占空比呢  其实比较简单  只需要我们按键改变一下CCR1或者CCR2里面的值皆就可以了


下面附上一段代码 仅供参考  按键接P1.3和P1.4  P1.2产生PWM  在示波器上可以明显看到用按键控制波形的变化 


代码如下:

#include

long int flag=10;//决定PWM占空比的变量

/****************************************************************************

函数名称 :delay

函数功能:延时   延时的长短由tmp的数值决定

函数参数:无

函数返回值:无

*****************************************************************************/

void delay(void)

{

    unsigned int tmp;

    for(tmp = 120;tmp > 0;tmp--);

}

 

/*****************************************************************************

函数名称 :Key

函数功能 :检测按键  用来改变flag的值 进而改变PWM的占空比  目前PWM的精确度为1%

函数参数:无

函数返回值:无

*****************************************************************************/

void Key()

  P1DIR&=~(BIT3+BIT3);//设置IO为输入模式

  P1REN|=BIT3+BIT4;//启用上拉/下拉模式

  P1OUT|=BIT3+BIT4;//设置为上拉模式               

  {         

    if((P1IN&BIT3)==0)//按键按下

    {

      delay();                  //延时用来消除按键的抖动

      while(!(P1IN&BIT3));      //等待按键松手

      flag+=1;                  //flag+1   用来改变占空比

      if(flag>100)              //占空比到100  清零

        flag=0;

    }

    if((P1IN&BIT4)==0)//同上注释

    {

      delay();

      while(!(P1IN&BIT4));

      flag-=1;

      if(flag>100)

        flag=0;

    }

  }

}

 

/**************************************************************************

函数名称: PWM_Init

函数功能:初始化PWM

函数参数:无

函数返回值:无

***************************************************************************/

void  PWM_Init()

{

  P1DIR |= BIT2;                            // 设置P1.2为输出

  P1SEL |= BIT2;                            // 选择P1.2的PWM功能

  P1SEL2 = 0;     //选择默认引脚功能 

  CCR0 = 100;                              // 设定PWM  周期  

  CCTL1 = OUTMOD_7;                         

  TACTL = TASSEL_2 + MC_1;                  // SMCLK时钟  增计数模式 

}

 

int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗

  PWM_Init();

  for (;;)

  {

    Key();

    CCR1 = flag;

  }

}

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

上一篇:msp430TIME_B PWM输出
下一篇:基于msp430G2553的低频方波频率、占空比、峰峰值测量函数

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

推荐阅读

MSP430G2553时钟系统配置
在MSP430单片机中,一个时钟周期 = MCLK晶振的倒数。如果MCLK是8MHz,则一个时钟周期为1/8us。一个机器周期 = 一个时钟周期,即430每个动作都能完成一个基本操作。一个指令周期 = 1~6个机器周期,具体根据具体指令而定。另外,指令长度只是一个存储单位,与时间没有必然的关系。MSP430G2553单片机的时钟模块主要包括:    三个时钟:辅助时钟ACLK 、主时钟MCLK 、子系统时钟SMCLK    三个时钟源:内部低频时钟源LFXT1 、内部数字控制RC振荡器DCO、外部低频振荡器(需要焊上晶振) 对于时钟系统的配置,一共用到四个寄存器
发表于 2020-02-11
MSP430G2553时钟系统配置
MSP430G2553学习笔记 DAY2 中断学习及初始化设置
,LED改变一次亮灭状态。#include<msp430g2553.h>int main(){    WDTCTL = WDTPW | WDTHOLD;    P1DIR = BIT6;    P1REN = BIT3;    P1OUT = BIT3;    P1IE = BIT3;//开P1.3中断    P1IES = BIT3;//P1.3中断触发边沿选择下降沿,0为上升沿,1为下降沿;    P1IFG &= ~BIT3;//P1.3中断标志位置0 
发表于 2020-02-11
MSP430G2553 定时器中断实例
代码#include "MSP430G2553.h"void led_init();void timer0_init();void main( void ){  // Stop watchdog timer to prevent time out reset  WDTCTL = WDTPW + WDTHOLD;  //--配置时钟-----  BCSCTL1=CALBC1_1MHZ;  DCOCTL=CALDCO_1MHZ;  //--LED初始化----  led_init();      
发表于 2020-02-11
基于MSP430G2553官方开发板的音乐播放器
;   return 0;}int led_toggle(void){    /* 调用 API 读出当前电平 然后输出相反电平 */    P1OUT ^= LED_PIN_R;    return 0;}PWM#include "io430g2553.h"#define DEADTIME 20 //预设死区时间,以TA的clk为单位/*******设定TA输出IO口,目前设定为MSP430G2553,20Pin封装无TA0.2********/#define TA01_SET P1SEL |= BIT6; P1DIR |= BIT6
发表于 2020-02-10
基于MSP430G2553官方开发板的音乐播放器
msp430g2553单片机 感应温度的呼吸灯
//程序烧进板子后先进入led灯交替闪烁的待机模式;按下按键后,进入应用模式,绿灯开始呼吸;此时温度上升后绿灯呼吸加快,温度下降后呼吸又会变慢。当温度过高时红灯亮#include  "msp430g2553.h"#define     LED1                  BIT0#define     LED2                 
发表于 2020-02-08
MSP430G2553(一)IO外部中断说明
这一篇文章将说明MSP430G2553的IO中断配置,整个P1的IO都可以配置IO中断,但中断处理函数只有一个,MSP430和大多数MCU一样提供上升沿、下降沿选择。在Launchpad上有按键S2,接在P1.3口,当按下后P1.3将接入高电平,从而触发中断。所有寄存器的具体名称和地址,可以查看M430G2553 datasheet 第 21页中对于P1的寄存器定义在实例代码中,配置了P1.3和P1.6的LED灯,当按下P1.3的按键产生中断,LED灯将切换点亮1.按键的中断配置要配置按键中断,需要先设置P1.3口为输入,并且设置上拉电阻以保障稳定性,P1DIR &= ~BIT3;//设置P1.3为输入 
发表于 2020-02-08
小广播
何立民专栏 单片机及嵌入式宝典

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

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