ADS7886的驱动

本文介绍了如何使用STM32F103通过GPIO驱动ADS7886进行12位ADC转换。首先,文章阐述了ADS7886的基本特性,包括其接口控制和工作原理。然后,详细解析了ADS7886的时序图,并提供了相应的初始化及读取数据的C语言代码实现。通过拉低和拉高片选信号CS及时钟信号SCLK,实现了数据的串行读取。最后,代码中展示了如何读取16位转换结果并处理因采样时序导致的数据丢失问题。
摘要由CSDN通过智能技术生成

ADS7886的驱动

这是前一篇讲微弱信号检测的文章的后续


本文主要是接着上一篇"微弱信号检测装置"的后续,继续讲一下数模转换-关于AD7886的驱动以及相关代码


一、ADS7886是什么?

ADS7886是12位,1M-MSPS 模拟-数字转换器(ADC),设备包括一个基于带有采样保持的A/D变换器的SAR电容器.每个设备的接口是由片选(控制)信号CS和时钟信号SCLK控制微处理器和数字信号处理系统相联系的免黏结逻辑,输的采样信号由CS的下降沿决定,SCLK用于转换和串行数据输出.设备工作在从2.35V至2.35V的一个广泛的供应范围设备的低功耗使它适用于电池供电的应用.

二、如何驱动ADS7886?

1.看时序图

数据手册截图如下:
CS为控制信号,低电平有效;SCLK为外部时钟输入信号,SDO为输出信号

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使能了,其他的显示和主函数部分比较简单,可以直接通过库函数调用,这里就不细说了,下期再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值