主题中讨论的其他器件: MSP430F67641、 MSP430F6779A、 MSP430I2041
您好、先生、
我总结一下、我将 msp430f67641A 用于三相四线能量计、其中我将使用3个 Σ-Δ(SD24B)电流通道和3个 SAR ADC (ADC10、通道编号 A5-A2)电压+1中性电流通道。 请告诉我如何操作。
我想使用 Σ-Δ ISR 和 SAR ADC ISR 进行采样,我不想为此使用 DMA,我以12MHz 时钟频率运行电路板,我在1秒内采集4096个样本 下面是我的设置。
//ADC 信息
void ADC_Init()
{
//表示 ADC
P9SEL |= BIT1+BIT2+BIT3;
P1SEL |= BIT0;
P1MAP0=31;
REFCTL0 = REFMSTR + REFVSEL_1 + REFON;// Enabale Reference = 2.0V */
SD24BCTL1 &=~SD24GRP0SC;/* SD16SC */
#if MCLK_DEF = 12
SD24BCTL0 = SD24SSEL_SMCLK //时钟为 SMCLK */
| SD24DIV2|SD24DIV0/* 16分频=> ADC 时钟:1.048576MHz *// SD24PDIV_1 |
| SD24REFS;/*使用内部基准*/
#endif
SD_REG (SD_REG_INCTL、RI_CHANNEL)=CURRENT_CT_GAIN;
SD_REG (SD_REG_CCTL、RI_channel)= SD24DF_1 | SD24ALGN | SD24SCS_4;
SD_REG (SD_REG_OSR、RI_CHANNEL)= 512 - 1;
SD_REG (SD_REG_INCTL、YI_CHANNEL)= CURRENT_CT_GAIN;
SD_REG (SD_REG_CCTL、YI_channel)= SD24DF_1 | SD24ALGN | SD24SCS_4;
SD_REG (SD_REG_OSR、YI_CHANNEL)= 512 - 1;
SD_REG (SD_REG_INCTL、BI_CHANNEL)= CURRENT_CT_GAIN;
SD_REG (SD_REG_CCTL、BI_CHANNEL)= SD24DF_1 | SD24ALGN | SD24SCS_4;
SD_REG (SD_REG_OSR、BI_CHANNEL)= 512 - 1;
SD24BTRGOSR=511;
SD24BTRGPRE=0;
ADC10CTL0 = 0;
asm ("NOP");
ADC10CTL0 = ADC10SHT1 | ADC10ON | ADC10MSC;
ADC10CTL1 = ADC10SHP | ADC10SH_3 | ADC10DIV_2 | ADC10SSEL_3 | ADC10CONSEQ_1;
ADC10CTL2 = ADC10RES | ADC10DF;
ADC10MCTL0 = ADC10SREF_1 | ADC10INCH_5;
SD24BTRGCTL |= SD24SCS_GROUP0; //触发器生成组0 +D24TRGIE */
SD24BCTL1 |= SD24GRP0SC; /*开始组0 */
ADC10IFG = 0;
ADC10IE |= ADC10IE0;
ADC10CTL0 |= ADC10ENC;
SD24BIE |= SD24IE2;
}
// SAR ADC ISR
#pragma vector=ADC10_vector
_interrupt void ADC10_ISR (void)
{
ADC10IFG=0;
静态无符号 char adc_samples_channel;
ADC_SAMSICS_CHANNEL =(ADC10MCTL0和0x000F);
开关(ADC_SAMESS_CHANNEL)
{
情况5:
asm ("NOP");
中断;
案例4:
V_Sample[0]= ADC10MEM0;对于 Voltage_R、为//ch_A5
中断;
案例3:
V_Sample[1]=ADC10MEM0; 对于 Voltage_Y、为//ch_A4
中断;
案例2:
V_Sample[2]= ADC10MEM0; 对于 Voltage_B、为//ch_A3
中断;
案例1:
I_Sample[3]= ADC10MEM0;//CH_A2表示 CURRENT_N
中断;
情况0:
asm ("NOP");
中断;
默认值:
asm ("NOP");
中断;
}
ADC10CTL0 &=~ADC10ENC;
ADC10CTL0 |= ADC10ENC;
}
// SD24B ISR
#pragma vector=SD24B_vector
_interrupt void SD24BISR (void)
{
unsigned char i;
SD24BIFG = 0;
I_Sampl[0]=SD_REG (SD_REG_MEMH、RI_channel);
I_Sampl[1]=SD_REG (SD_REG_MEMH、YI_CHANNEL);
I_Sample[2]= SD_REG (SD_REG_MEMH、BI_CHANNEL);
I_ACe[3]=dc_filter (&I_DC[3]、I_Sample[3]);
for (i=0;i<3;i++)
{
V_ACT[i]=dc_filter (&V_DC[i]、V_Sample[i]);
i_Act[i]=dc_filter (&i_DC[i]、i_Sample[i]);
}
//和其余代码---
}