【经验分享】KL27 ADC采样引脚设计注意点
本帖最后由 FSL_TICS_ZJJ 于 2015-10-30 17:29 编辑使用MKL27Z64VFM4芯片,PTE30引脚做为ADC输入引脚,经过配置后,通过改变PTE30引脚的电压,发现输出的ADC采样值永远是接近ADC转换位的最大值,比如配置为12位,则转换值大概4095。是什么导致这个问题的呢?
具体原因请查看附件文档:
希望能对大家的设计有帮助,同时欢迎大家分享自己的宝贵经验! void Init_ADC( void )
{
ADCHSelect = 0;
ADC_ConvertedValue = 0;
ADC_ConvertedValue = 0;
ADC_ConvertedValue = 0;
ADC_Relust = 0;
ADC_Relust = 0;
ADC_Relust = 0;
SIM->SCGC6 |= SIM_SCGC6_ADC0_MASK;
ADC0->SC1 = 0;
ADC0->SC1 = 0;
ADC0->SC2 |= 0x01; //差一点中枪,64K KL27,PTE30作为ADC输入
ADC0->SC3 |= 0x07;
ADC0->CFG1 = ADC_CFG1_MODE(3)|
ADC_CFG1_ADIV(3)|
ADC_CFG1_ADICLK(0)|
ADC_CFG1_ADLSMP_MASK;
ADC0->CFG2 = ADC_CFG2_ADLSTS(0)|
ADC_CFG2_ADHSC_MASK|
ADC_CFG2_ADLSTS(2);
NVIC_EnableIRQ(ADC0_IRQn);
}
void ADC_TrigCH(u8 ch_n)
{
ADC0->SC1= ADC_SC1_AIEN_MASK | ADC_SC1_ADCH(ch_n & 0x1F);
}
void ADC0_IRQHandler()
{
u16 dat = ADC0->R;
switch ((ADC0->SC1 & 0x1F) - 8) {
case 0:ADC_ConvertedValue= dat; break; //PTB0
case 1:ADC_ConvertedValue= dat; break; //PTB1
default: ADC_ConvertedValue= dat; break; //PTB30 增加ADC->SC2 |= 1后,ADC采样正确
}
}
测试结果:PTE30可以作为ADC输入使用 manley 发表于 2015-10-30 17:08
void Init_ADC( void )
{
ADCHSelect = 0;
是的,PTE30作为ADC输入的时候,一定要选择VDDA作为参考电压,而不是VREF.
关键就是小于36脚封装,REFSEL=0的时候,是PTE30为参考电压。
文档说的不对的地方已经修正了。
页:
[1]