主题中讨论的其他器件:冲击
#define CALADC12_25V_30C *((unsigned int *)0x1A22) // Temperature Sensor Calibration-30 C
#define CALADC12_25V_85C *((unsigned int *)0x1A24) //See device datasheet for TLV table memory mapping
void ADC_ui(void)
{
REFCTL0 |= REFTCOFF;//
ADC12CTL3 &=~ ADC12TCMAP;
ADC12CTL0 |=ADC12SHT0_2;
ADC12MCTL0 = ADC12VRSEL_1+ADC12INCH_12; // ref+=AVcc, channel = A2
ADC12MCTL1 = ADC12VRSEL_1+ADC12INCH_14; // ref+=AVcc, channel = A4
ADC12MCTL2 = ADC12VRSEL_1+ADC12INCH_4+ADC12EOS;
ADC12IER0 = 0x04; // Enable ADC12IFG.3
}
void ADC_all(void)
{
All_over=1;
REFCTL0 &=~ REFTCOFF;
ADC12CTL0 |= ADC12SHT0_8;
ADC12CTL3 |= ADC12TCMAP;
ADC12MCTL0 = ADC12VRSEL_1+ADC12INCH_12;// P3.0-A12
ADC12MCTL1 = ADC12VRSEL_1+ADC12INCH_14;// P3.2-A14
ADC12MCTL2 = ADC12VRSEL_1+ADC12INCH_4;// P1.4-A4
ADC12MCTL3 = ADC12VRSEL_1+ADC12INCH_2;// P1.2-A2
ADC12MCTL4 = ADC12VRSEL_1+ADC12INCH_30+ADC12EOS;//
ADC12IER0 = 0x10; // Enable
}
#define TIME_SAMPLE (u16)(round)(32768/(1000.0/20)-1)
void ADC_init(void)
{
P1SEL1 |= BIT1+BIT2+BIT4; //ref+ BAT
P1SEL0 |= BIT1+BIT2+BIT4;
P2SEL1 |= BIT4; //C+
P2SEL0 |= BIT4;
P3SEL1 |= (BIT0+BIT1+BIT2);//isk ilk vol
P3SEL0 |= (BIT0+BIT1+BIT2);//
while(REFCTL0 & REFGENBUSY);
REFCTL0 = REFVSEL_2;// | REFON;
//while(REFCTL0 & REFGENRDY);//Reference voltage output is ready to be used
ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 |= ADC12ON|ADC12MSC; // // Turn on ADC12, set sampling time
ADC12CTL1 |= ADC12SHP|ADC12SHS_1| ADC12CONSEQ_1; //CSTARTADD_0++ // Use sampling timer, single sequence
//ADC12CTL2 |= ADC12RES_2|ADC12PWRMD; // 12-bit conversion results
ADC_ui();
ADC12CTL0 |= ADC12ENC;
TA0CCR0 = TIME_SAMPLE;//20ms // PWM Period
TA0CCR1 = TIME_SAMPLE;//20ms; // TACCR1 PWM Duty Cycle
TA0CCTL1 = OUTMOD_3; // TACCR1 set/reset
TA0CTL = TASSEL__ACLK | MC__UP; // ACLK, up mode
}
#pragma vector=ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
LPM3_EXIT;
Vol_RT = ADC12MEM0; //vol
Isk = ADC12MEM1; //isk
Ilk = ADC12MEM2; //ilk
u16 bat_ad = ADC12MEM3; //BAT
u16 temp_ad = ADC12MEM4;//TEMP
if(All_over==1)
{
All_over=2;
BATVAL= ((u32)bat_ad*8375/40950);//BATVAL 2.5/2*6.7*100
//ChargeVAL =((u32)charge_ad*8375/40950);
temper = (s16)((((long)temp_ad - CALADC12_25V_30C) * (85 - 30)) /
(CALADC12_25V_85C - CALADC12_25V_30C) + 30.0f);
}
ADC_start();
for(u8 i=0;i<=5;i++) {
NOP();
}
SysF.TIMA=1;
TA_task();
}
void ADC_start(void)
{
ADC12CTL0 &=~ ADC12ENC;
static u8 All_sample_last=0;
if(All_sample_last!=All_sample)
{
All_sample_last=All_sample;
if(All_sample==1)
{
All_sample=0;
ADC_all(); //5 channels
}
else
{
ADC_ui(); //3 channels
}
}
ADC12CTL0 |= ADC12ENC;
}
在现场操作期间、ADC 转换结果很有可能异常、超过50000。
错误条件:
Vol_RT:52188
Iuk:21524
℃:60 μ m
这些现象超出了我的理解!但我在调试时无法复制。


