请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP-EXP430FR5994 您好,
我正在研究BLDCs (无刷直流电动机)。 为了产生PWM信号以运行电机,我使用计时器B,其时钟信号被选为SMCLK。 我将1 MHz DCO时钟信号设置为MCLK和SMCLK的信号源。 使用这些设置,我可以使用生成的PWM运行BLDCs。 由于几个原因,现在我需要将DCO频率更改为8 MHz,同时将定时器B时钟信号SMCLK的频率保持在1MHz。 为了实现这些目标,我尝试使用计时器B TBCTL寄存器的ID位(内部分配器(ID_3))或时钟源寄存器CSCTL3的DIVs位(SMCLK源分配器(DIVS_3))。 采用这种新配置时,尽管定时器B时钟源的频率保持不变,但电机不会使用这种新设置运行。 我阅读了设备特定数据表和家庭用户指南的相关部分,但无法找到合适的解决方案。 如果您能提供帮助,我将很高兴。 谢谢你。
////////////////////////// *********** 配置1*************** //////////////////////////////////
#include <MSP4S.h>
#include <stdio.h>
void main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止监视计时器
//时钟设置
CSCTL0_H = CSOKEY >> 8; //解锁CS寄存器
CSCTL1 = DCOFSEL_0 | DCORSEL; //将DCO设置为1MHz
CSCTL2 =拉美_ VLOCLK | SESS__DCOCLK | SELM__DCOCLK;//设置ACLK = VLOCLK;MCLK = SMCLK = DCO
//延迟~10us,让DCO结算。 60个周期= 20个周期缓冲+(10us /(1/4MHz))
__DELAY周期(60);
CSCTL3 = DIVA__1 | DIVs__1 | DIVM__1; //设置所有分禾器
//锁定CS寄存器-为什么不创建PUC?
CSCTL0_H = 0;
//电机1
P1DIR |= BIT4;
P1SEL0 |= BIT4;
P1SEL1 &=~BIT4;
TBCTL = MC_0; //在配置计时器B之前停止计时器
TBCCR0 = 2万;
TBCCTL1 = OUTMOD_7;
TBCCR1 = 850;
//电机2,
P1DIR |= BIT5;
P1SEL0 |= BIT5;
P1SEL1 &=~BIT5;
TBCCTL2 = OUTMOD_7;
TBCCR2 =850;
//电机3.
P3DIR |= BIT4;
P3SEL0 |= BIT4;
P3SEL1 &=~BIT4;
TBCCTL3 = OUTMOD_7;
TBCCR3 = 850;
//电机4.
P4DIR |= BIT4;
P4SEL0 |= BIT4;
P4SEL1 &=~BIT4;
TBCCTL5 = OUTMOD_7;
TBCCR5 =850;
TBCTL = TBSSEL_2 + MC_1 + ID_0;
//TBEX0 = TBIDEX_1;
TBCTL |= TBCLR;
//禁用GPIO开机默认高阻抗模式以激活
//以前配置的端口设置
PM5CTL0 &=~LOCKLPM2;
__DELAY周期(100万);
TBCCR1=1330;
__DELAY周期(100万);
TBCCR2=1330;
__DELAY周期(100万);
TBCCR3=1350;
__DELAY周期(100万);
TBCCR5=1330;
}////////////////////////
*********** 配置2*************** //////////////////////////////////
#include <MSP4S.h>
#include <stdio.h>
void main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止监视计时器
//时钟设置
CSCTL0_H = CSOKEY >> 8; //解锁CS寄存器
CSCTL1 = DCOFSEL_3 | DCORSEL; //将DCO设置为8MHz
CSCTL2 =拉美_ VLOCLK | SESS__DCOCLK | SELM__DCOCLK;//设置ACLK = VLOCLK;MCLK = SMCLK = DCO
//延迟~10us,让DCO结算。 60个周期= 20个周期缓冲+(10us /(1/4MHz))
__DELAY周期(60);
CSCTL3 = DIVA__1 | DIVs__8 | DIVM__1; //设置所有分禾器
//锁定CS寄存器-为什么不创建PUC?
CSCTL0_H = 0;
//电机1
P1DIR |= BIT4;
P1SEL0 |= BIT4;
P1SEL1 &=~BIT4;
TBCTL = MC_0; //在配置计时器B之前停止计时器
TBCCR0 = 2万;
TBCCTL1 = OUTMOD_7;
TBCCR1 = 850;
//电机2,
P1DIR |= BIT5;
P1SEL0 |= BIT5;
P1SEL1 &=~BIT5;
TBCCTL2 = OUTMOD_7;
TBCCR2 =850;
//电机3.
P3DIR |= BIT4;
P3SEL0 |= BIT4;
P3SEL1 &=~BIT4;
TBCCTL3 = OUTMOD_7;
TBCCR3 = 850;
//电机4.
P4DIR |= BIT4;
P4SEL0 |= BIT4;
P4SEL1 &=~BIT4;
TBCCTL5 = OUTMOD_7;
TBCCR5 =850;
TBCTL = TBSSEL_2 + MC_1 + ID_3;
//TBEX0 = TBIDEX_1;
TBCTL |= TBCLR;
//禁用GPIO开机默认高阻抗模式以激活
//以前配置的端口设置
PM5CTL0 &=~LOCKLPM2;
__DELAY周期(100万);
TBCCR1=1330;
__DELAY周期(100万);
TBCCR2=1330;
__DELAY周期(100万);
TBCCR3=1350;
__DELAY周期(100万);
TBCCR5=1330;
}
真诚