K60 ADC

2019-04-15 12:29发布

今天我又花样作死看了一下K60在用LPLD固件库下ADC的使用
由于使用固件库,这里的ADC就像PIC里的一样(51的忘了,好久没用了)
但是这里有几个和以前我接触过得单片机不一样的,就是以前玩的单片机ADC模块都只要设置好VCF基准电压,用哪个通道,像PIC的就多一个左对齐右对齐,时钟选择就没了。 这里还要配置是使用单端采集还是差分采集,ADC精度,采样时间,硬件平均(其实这个我没搞懂是什么东西)
关于单端还是差分,我就用LPLD里用的那个图说好了 K60 <wbr>ADC 如果用单端,就是只用ADC0 DP1把外部的电压读入进行ADC;如果是差分需要把ADC0 DP1和ADC0 DM1都读入,取他们的差值ADC,所以会出现负数。我记得LPLD是这么说的,当电压有波动不稳定时,采用单端就会不稳定,但是采用差分就会抵消掉波动,能得到稳定的电压。
ADC精度,我感觉这是 一个非常人性化的设置,居然还可以设置ADC精度,像以前PIC精度都是固定的= = 单端精度有8位10位12位16位 差分精度有9位11位13位16位 对于设置不同的精度,得到的返回值也会不同,例如单端8位 0~255,单端16位0~65535;所以不同的精度设置,在调节开发板上的电阻可能会不一样
采样时间应该就是越长越准吧,没这么注意
硬件平均就不知道了,问了同学也没能解决
对了,我的板子上的ADC是这样接的 K60 <wbr>ADC


接下来贴上代码 ADC初始化 void adc_init(void) {   //配置ADC采样参数   adc_init_struct.ADC_Adcx = ADC1;   adc_init_struct.ADC_DiffMode = ADC_SE;        //单端采集   adc_init_struct.ADC_BitMode = SE_8BIT;       //单端12位精度   adc_init_struct.ADC_SampleTimeCfg = SAMTIME_SHORT;    //短采样时间   adc_init_struct.ADC_HwAvgSel = HW_4AVG;       //4次硬件平均   adc_init_struct.ADC_CalEnable = TRUE; //使能初始化校验   //初始化ADC   LPLD_ADC_Init(adc_init_struct);   //为了保证复用功能不被占用,最好使能相应ADC通道   //RUSH开发板的电位器使用DAD1通道进行采集   //单端DAD1通道的引脚为(ADC1_DM1)   LPLD_ADC_Chn_Enable(ADC1, AD20);  }
gpio初始化 void init_gpio() {   gpio_init_struct.GPIO_PTx = PTA;   gpio_init_struct.GPIO_Pins = GPIO_Pin10;   gpio_init_struct.GPIO_Dir = DIR_OUTPUT;   gpio_init_struct.GPIO_Output = OUTPUT_H;   gpio_init_struct.GPIO_PinControl = IRQC_DIS;   LPLD_GPIO_Init(gpio_init_struct); } 我这里用的ADC输入,若超过某个值就点亮一盏灯
主函数里一点要初始化ADC和GPIO,我已开始没有初始化GPIO以为我ADC程序错了,检查了半天,还有不要忘记声明ADC,GPIO函数和初始化类 void main (void) {   uint16 result;      //初始化ADC   adc_init();   init_gpio();      while(1)   {     result = LPLD_ADC_Get(ADC1, AD20);     if(result>100)       PTA10_O=0;     else        PTA10_O=1;   }  }
运行 一开始没到边界值 K60 <wbr>ADC

到边界值了,有点微闪
K60 <wbr>ADC

超过边界值,就很亮了 K60 <wbr>ADC


oh。。。。。。h,yeah