ADS7886的驱动
这是前一篇讲微弱信号检测的文章的后续
本文主要是接着上一篇"微弱信号检测装置"的后续,继续讲一下数模转换-关于AD7886的驱动以及相关代码
一、ADS7886是什么?
ADS7886是12位,1M-MSPS 模拟-数字转换器(ADC),设备包括一个基于带有采样保持的A/D变换器的SAR电容器.每个设备的接口是由片选(控制)信号CS和时钟信号SCLK控制微处理器和数字信号处理系统相联系的免黏结逻辑,输的采样信号由CS的下降沿决定,SCLK用于转换和串行数据输出.设备工作在从2.35V至2.35V的一个广泛的供应范围设备的低功耗使它适用于电池供电的应用.
二、如何驱动ADS7886?
1.看时序图
数据手册截图如下:
2.根据时序图编辑代码驱动AD
代码如下(示例):
void ADC_init() //奔向你,奔向光
{
GPIO_InitTypeDef GPIO_InitStructure; //
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //ʹÄÜIO¿ÚʱÖÓ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; //Ó³Éäµ½PB12csƬѡÐźÅÊä³ö,PB13Òý½Å,ÉèÖÃΪÊý×ÖʱÖÓÐźÅÊä³ö
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÉèÖùܽÅΪÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ÉèÖùܽŵķתËÙ¶ÈΪ50MHZ
GPIO_Init(GPIOA, &GPIO_InitStructure); //Òý½Å³õʼ»¯Íê³É
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //Ó³Éäµ½PB15Òý½Å,ÉèÖÃΪģÄâÐźÅÊäÈë
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖùܽÅΪģÄâÊäÈë
GPIO_Init(GPIOA, &GPIO_InitStructure); //Òý½Å³õʼ»¯Íê³É
AD_7886_SCLK=1;
AD_7886_CS=1; //ƬѡÐźÅÀ¸ß,adsÏÐÖÃ
//µ¥Æ¬»úÊäÈëʱÖÓÐźÅÀ¸ß
}
u16 ADC_read_value(void) //µ÷ÓÃads¶ÁÈ¡Êý¾Ýº¯Êý
{
u16 i;
u16 data = 0; //¶¨ÒåÒ»¸öÎÞ·ûºÅ16λ×Ö·ûÊý¾Ý
AD_7886_CS=0;
for(i=0;i<16;i++)
{
AD_7886_SCLK=0;
data=(data<<1)+AD_7886_DIN; //spi·¢ËÍÊý¾ÝÐÒéÊÇÏÈ·¢¸ßλ,ºó·¢µÍλ,ËùÒÔÒªÓÃ×óÒÆÔËË㽫Êý¾Ý·Åµ½¸ßλ
AD_7886_SCLK=1;
}
AD_7886_CS=1; //ƬѡÐźÅÀ¸ß,adsÏÐÖÃ
data=data>>1; //ÒòΪADC·¢Ë͵ĵÚÒ»¸öÊý¾ÝµÄʱ¼äÌ«¶Ì,ûÓб»µ¥Æ¬»ú½ÓÊÕµ½,ËüµÄ´¥·¢Ê±¼äÔçÓÚµ¥Æ¬»úʱÖÓϽµÑصĴ¥·¢,
//µ«ÊÇËüʵ¼Ê·¢ËÍÁË4¸ö0,ËùÒÔÔÚ´¦ÀíÊý¾ÝʱҪ½«Õâ¸ö0ͨ¹ýÓÒÒÆÔËËã²¹ÉÏ
//²ÉÑù700´Î
//Çó¾ùÖµ
return data;
}
因为上面的注释的文字格式不兼容,所以具体注释见图片
总结
以上就是本文主要讲的内容,代码只是把ADS7886的核心时序逻辑通过STM32F103的GPIO使能了,其他的显示和主函数部分比较简单,可以直接通过库函数调用,这里就不细说了,下期再见!