世纪电源网社区logo
社区
Datasheet
标题
返回顶部
讨论

MSP430输出PWM波形问题

[复制链接]
查看: 196 |回复: 1
1
liuyan11
  • 积分:541
  • |
  • 主题:8
  • |
  • 帖子:31
积分:541
LV6
高级工程师
  • 2023-3-20 15:37:11
#include "msp430x14x.h"
#define uint unsigned int
#define uchar unsigned char
uchar PWM[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//时钟初始化函数
void int_clk()
{
uchar i;
BCSCTL1&=~XT2OFF; //XT2开启
BCSCTL2|=SELM1+SELS+DIVS1+DIVS0; //MCLK为8MHZ,SMCLK为1MHZ
do{
IFG1&=~OFIFG;//清除振荡器失效标志
for( i=255;i>0;i--);
}while((IFG1&OFIFG)!=0);//如果标志位为1,则继续循环等待
IFG1&=~OFIFG;

}

void int_pwm_L()
{
TACTL=TASSEL1+MC0+ID0+ID1;//选择SMCLK 增计数 ,8分频
TACCR0=2500;
TACCTL1=OUTMOD0+OUTMOD1+OUTMOD2;
TACCR1=500; // 占空比20%

}
void int_pwm_H()
{
TACTL=TASSEL1+MC0+ID0+ID1;//选择SMCLK 增计数 ,8分频
TACCR0=2500;
TACCTL1=OUTMOD0+OUTMOD1+OUTMOD2; //模式7 置位/复位
TACCR1=2000; //占空比80%

}

void pwm_L(int i)
{
int_pwm_L();
P1SEL|=PWM;
P1DIR|=PWM;

}

void pwm_H(int i)
{int_pwm_H();

P1SEL|=PWM;
P1DIR|=PWM;

}

void main()
{WDTCTL=WDTPW+WDTHOLD;
int_clk();
pwm_H(2);
pwm_L(6);

while(1);
}
当编入程序后P1.2和P1.6都输出50HZ占空比为20%的方波;
当我将PWM_L相关代码删掉后只是输出P1.2则得到50HZ占空比为80%的方波,这是为什么?
我本想让P1.2输出占空比为80%,P1.6输出占空比为20%




收藏收藏
沧浪一生
  • 积分:441
  • |
  • 主题:14
  • |
  • 帖子:63
积分:441
LV6
高级工程师
最新回复
  • 2023-3-20 16:05:45
  • 倒数1
 
首先,你用的同一个PWM 控制器,它运行的时候是顺序执行的,
就是你先运行的是PWM_H() 则他先被设置成80% 然后你的PWM输出被连接到P1.6。
然后你运行的是PWM_L() 被设置成20% 然后你的PWM输出被连接到P1.2。
就相当与你的PWM输出模块同时连接了两个引脚。
你去掉了PWM_L(); 则你下面的语句没有执行。

其次。如果要完成你的要求,需要用到两个PWM模块,你看看你用的单片机能不能达到。
PWM0 给P1.2 PWM1给P1.6.
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号