MSP430F4250 AD解讀
1.關于MSP430F4250:
2.關于MSP430F4250 AD:
參考MSP430X4XXFamily User’s Guide:
關于16位AD采樣有兩種:
2.1 MSP430F4250選的是哪種?
其實并不是軟件設置哪種,而是型號決定,由上述可知,MSP430F4250使用的是SD16_A
2.2 MSP430F4250 AD的輸入電壓范圍是多少?
此時參考的手冊需要更換為MSP430F42X0手冊:
2.3 MSP430F4250 AD的轉換結果在哪?數(shù)據(jù)格式是什么?
繼續(xù)參考MSP430X4XX Family User’s Guide手冊:
AD的轉換結果就在SD16MEMx這個寄存器里保存,數(shù)據(jù)格式和設置有關:
其中SD16UNI和SD16DF都是SD16CCTLx(其中x是用戶選擇的通道編號)寄存器中的兩位。
另外補充,關于FSR:
MSP430F4250 AD有內部參考電壓1.2V,如果設置了選取內部參考電壓,那么FSR = 1.2V/2/GAIN= 0.6V(當GAIN = 1時)。
如果沒有選取內部參考電壓,那么FSR = Vref/2/GAIN(想得到最大的輸入范圍,就把AVcc[3.3v]接到單片機的Vref引腳上)。(純屬個人理解和設置,最高只試過1.6V的,但是手冊上的意思應該可以0-3.3V,暫時沒有嘗試)。
是否選擇內部參考電壓,在SD16CTL寄存器中的:
2.4 MSP430F4250 AD的轉換速率?
參考MSP430X4XX Family User’s Guide手冊,AD轉換速率和單片機時鐘配置有關:
可知如果使用32768-Hz的外部晶振,則CPU主時鐘MCLK=外設時鐘SMCLK=1MHz左右(默認值,如果想要改變則可以通過設置SCFQCTL和SCFI0進行倍頻)。AD設置時鐘源可以選擇是ACLK(32768Hz)和SMCLK(1MHz),AD時鐘選擇上選擇SMCLK(SMCLK=MCLK為最快)即可得到最快的轉換速率,下面是一種設置下的轉換速率的說明:
256的過采樣率,并且每四次采樣觸發(fā)一次中斷,那么約244us進行一次AD轉換。
AD代碼如下:
#include??
#define???Num_of_Results???80
/*?Arrays?to?store?SD16_A?conversion?results?*/
/*?NOTE:?arrays?need?to?be?global?to???????*/
/*???????prevent?removal?by?compiler???????*/
static?unsigned?int?results[Num_of_Results];
void?main(void)
{
??volatile?unsigned?int?i;??????????????????//?Use?volatile?to?prevent?removal
????????????????????????????????????????????//?by?compiler?optimization
??WDTCTL?=?WDTPW?+?WDTHOLD;?????????????????//?Stop?WDT
??FLL_CTL0?|=?XCAP14PF;?????????????????????//?Configure?load?caps
??for?(i?=?0;?i?<?10000;?i++);??????????????//?Delay?for?32?kHz?crystal?to
????????????????????????????????????????????//?stabilize
??P1SEL?=?0;????????????????????????????????//GPIO
??P1DIR?=?0xff;?????????????????????????????//out
??
??SD16CTL?=?SD16REFON+SD16SSEL0;????????????//?1.2V?ref,?SMCLK
??SD16INCTL0?|=?SD16INTDLY_0;???????????????//?Interrupt?on?4th?sample
??SD16CCTL0?|=?SD16IE?;?????????????????????//?Enable?interrupt
??for?(i?=?0;?i?<?0x3600;?i++);?????????????//?Delay?for?1.2V?ref?startup
??_EINT();??????????????????????????????????//?Enable?general?interrupts
??SD16CCTL0?|=?SD16SC;??????????????????????//?Set?bit?to?start?conversion
??_BIS_SR(LPM0_bits);???????????????????????//?Enter?LPM0
??
}
#pragma?vector=SD16_VECTOR
__interrupt?void?SD16ISR(void)
{
??static?unsigned?int?index?=?0;
??switch?(SD16IV)
??{
??case?2:???????????????????????????????????//?SD16MEM?Overflow
????break;
??case?4:???????????????????????????????????//?SD16MEM0?IFG
????results[index]?=?SD16MEM0;??????????????//?Save?CH0?results?(clears?IFG)
????P1OUT?=?0x03;???????????????????????????//Pin?0,1?out?1
????if?(++index?==?Num_of_Results)
????{
??????index?=?0;????????????????????????????//?SET?BREAKPOINT?HERE
??????//SD16CCTL0?&=~?SD16SC;
??????P1OUT?=?0x00;?????????????????????????//Pin?0,1?out?0???
????}
????break;
??}
}AD代碼的示波器測試:(通過觀察P1.0輸出)
連續(xù)轉換的每次轉換時間為224us,轉換80次為19.6ms。
以上純屬個人見解,初學者可以參考但一切以官方手冊為準。





