改MSP430G2253产生占空比可调的P

来源:扬中家居装修网 发布时间:2020-08-16

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;

}

}

8个月宝宝肚子胀气怎么办
合肥白癜风治疗中心
八个月宝宝受凉了怎么办
相关推荐
杜高犬拉肚子怎么办是什么原因位置

杜高犬拉肚子怎么办?是什么原因?杜高犬拉肚子怎么办?是什么原因? 12:20:22出处:络点击:414 ...[详细]

设计观点2022.06.12
杜高犬怎么养杜高犬饲养位置

杜高犬怎么养?杜高犬饲养杜高犬怎么养?杜高犬饲养 18:44:14by 呦呦杜高犬怎么养? 狗最好从小就养,才能更好的培养感情,但如果养的...[详细]

设计观点2022.06.12
松狮咬骨头的好处位置

松狮咬骨头的好处松狮咬骨头的好处 17:19:33出处:络点击:1875 导读: 经常可以看到松狮狗狗抱...[详细]

设计观点2022.06.12
松狮吃什么狗粮好教大家如何饲养松狮位置

松狮吃什么狗粮好 教大家如何饲养松狮松狮吃什么 好 教大家如何饲养松狮松狮吃什么 好,养宠物的人肯定最在意的就是宠物的饮食健...[详细]

设计观点2022.06.12
杜高犬多少钱一只杜高犬幼犬价格在位置

杜高犬多少钱一只 杜高犬幼犬价格在8000元左右杜高犬多少钱一只 杜高犬幼犬价格在8000元左右杜高犬多少钱一只,现在越来越多的人喜欢...[详细]

设计观点2022.06.12
杜高犬会咬人吗事出必有因位置

杜高犬会咬人吗?事出必有因杜高犬会咬人吗?事出必有因其实,有少部分的杜高犬是会主动去攻击人类的,但是大多数这些杜高犬会去...[详细]

设计观点2022.06.12