This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR6989:MSP430FR6989

Guru**** 2524460 points
Other Parts Discussed in Thread: MSP430FR6989

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/665838/msp430fr6989-msp430fr6989

部件号:MSP430FR6989

您好,

我想测量有机设备的IV特性,为了实现这一目的,我要使用外部电路连接此设备,并且我要从MCU生成电压,在步骤之间有固定的时间延迟, 电压范围为0 V至3 V, 步进增量可以是任何小数字,当施加电压时,我想使用ADC读取每个点的外部电路输出并保存该输出,以便在末尾绘制IV图。 我编写了此代码,但它不能正常工作。 我仍然不知道如何保存输出,如何应用延迟。

#include <msp430fr6989.h>

#define period_PWM 4000

无符号int j;
无符号int I;
unsigned int ADC_value[1]={0};
浮点ADC_value_volt[1]={0};

_Bool flag_start = 0;

void init_tim_A(void);
void init_adc (void);
void init_gpio (void);
void init_dco(void);

Void主(void)


WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LOCKLPM2;

INIT_DCO();

init_gPIO();

init_tim_a();

INIT_ADC();


_enable_interrupt ();
ADC12CTL0 |= ADC12SC;

同时(1)


对于(i=0;i<=5095;i=i+200)

TA0CCR0 =(3.3)- 1;
TA0CTL |= MC_2;
_delay_cycles (1亿);//延迟
IF (flag_start == 1)

ADC12CTL0 || ADC12SC;//启动ADC
Flag_start = 0;
ADC_value_volt[0]= ADC_value[0]*ADC/4095; 3.3
//Y11_OUT = ADC_value_volt[1];
}
TA0CTL &=~MC_0;
}
//}
}
}

void init_adc (void)

P8SEL0 |= BIT7;//|BIT6|BIT5|BIT4;// 8.7 ,WFP 8.6 ,WFP 8.5 ,8.4 ADC选项选择
P8SEL1 |= BIT7;//|BIT6|BIT5|BIT4;

ADC12CTL0 &=~ADC12ENC;

ADC12CTL1 || ADC12CONSEQ_1;
ADC12CTL0 || ADC12SHT0_5|ADC12SHT1_5 | ADC12ON|ADC12MSC;
ADC12CTL1 || ADC12PDIV__1|ADC12SHP|ADC12DIV_5|ADC12SSEL_0;
ADC12CTL2 || ADC12RES_2;
ADC12IER0 |= BIT0;//|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8;;//启用中断

ADC12MCTL0 = ADC12INCH_4|ADC12EOS;

ADC12CTL0 || ADC12ENC;

}// ADC_INIT

void init_dco (void)

FRCTL0 = FRCTLPW | NWITS_2;

CSCTL0_H = CSOKEY >> 8;//解锁CS寄存器
CSCTL1 = DCOFSEL_5|DCORSEL;// DCO = 24 MHz
CSCTL3 = DIVA_0 | DIVS_0 | DIVM_0;
CSCTL0_H = 0;////锁定CS寄存器
}

void init_tim_a (void)

TA0CCR0 = Period_PWM/2 - 1;
TA0CCR1 =周期PWM - 1;
TA0CCTL0 = CCIE;
TA0CCTL1 = CCIE;
TA0CTL = tassel_2 | ID_0 | MC_2;


}


void init_gpio (void)

P1DIR || BIT5|BIT6;
P1OUT || BIT5;
}


#pragma vector = TIMER0_A0_vector
__interrupt void CCR0 (void)

P1OUT &=~BIT5;
}

#pragma vector = TIMER0_A1_vector
__interrupt void CCR1 (void)

IF (TA0CCTL1&CCIFG == CCIFG)

TA0CCTL1 &=~CCIFG;

P1OUT || BIT5;

TA0R = 0;
}
}

#pragma vector = ADC12_vector
__interrupt void ADC_ISR(void)

开关(ADC12IV)

案例0:中断;
案例2:中断;
案例4:中断;
案例6:中断;
案例8:中断;
案例10:中断;
案例12://矢量12:ADC12IFG0

ADC_VALUE [0]= ADC12MEM0;
Flag_start = 1;

}中断;


默认值:中断;
}
}

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我忘了提到我通过PWM生成的模拟电压,然后我将RC滤波器连接到外部电路中
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您联系我们以获得有关您申请的帮助。
    是的,我能够确定您使用PWM来生成和过滤模拟电压-太棒了,BTW!

    让我详细了解MSP430FR6989,以确保外设配置正确,并看看我是否可以提供更优化的代码示例供您尝试。

    我会尽快作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../1348.main.cSee下面的代码。  我借用了Code Composer Studio资源管理器中提供的MSP430FR6989的定时器和ADC示例,并进行了一些修改以满足您的需要。

    基本上,TA0CCR0控制PWM的周期,而TA0CCR1控制实际PWM占空比。

    TA1CCR0控制步进和测量之间的时间。

    该代码设置为采集128个样本并填充数组。  步长根据TA0CCR1 (0 - 99 % PWM)的步长和可能的最大计数计算得出。

    请告诉我这是否适合您。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢Dennis,我将尝试一下代码。