最近接触了TI的ADC128S022的ADC采样芯片,芯片集成了8个模拟输入通道,支持12位的采样精度,转换过程时钟平率可达1~3.2MHZ,非常高效,因此在手持终端,便携式系统,医疗器械领域,导航等领域里有广泛的应用,3.3v /5V的输入电压均可,与主控制器支持通过SPI的方式实现交互通信;
通过对地址的寄存器的解读可以知道每个通道的地址信息:
ADC128S_Channel_ADRR[8]={0x0000,0x0800,0x1000,0x1800,0x2000,0x2800,0x3000,0x3800};//8个通道对应的地址
在应用的时候只用了前四个通道;
了解一下工作时序:

片选CS端,既有使能工作关开关的作用,也可以在置为高电平的时候有低功耗的作用,由时序关系可以看出在片选使能之后,在SCK下降沿下有数据输出,在上升沿的时候读输入数据(主要为地址信息),0通道为默认选项,可以在0通道转换的时候输入后一个周期希望输出的通道地址;
我的做法是采用软件模拟SPI,用mod 3 的方式在实现对芯片的读写功能操作:
首先是对管脚做配置:

  GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;                        //MISOGPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;                        //sclk  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;      GPIO_Init(GPIOE,&GPIO_InitStructure); ADC128S_CS=1;                                                           //选择模式1的方式进入trace  ADC128S_SCLK=1;AI_ReceiveBuf.new_buff=AI_ReceiveBuffArr;               //数据操作结构体的成员量定义和赋值AI_ReceiveBuf.pre_buff=AI_ReceivePreBuffArr;AI_ReceiveBuf.AI_ReceiveFlag=0;AI_ReceiveBuff_PTR=&AI_ReceiveBuf;

我的读取操作是每次轮询四个通道,并做N此的均值处理,提高采样的稳定性能,直接读取的过程:
void YF_ADC128S_ReadADValue(_AI_ReceiveBuff_PTR ptr,u16* read_addre,u8 total_channels)
{
static u8 AI_CycleCount=0;
u16 so_date=0;
u16 si_date=0;
if(AI_CycleCount<ADC128S_CycleSUM)
{
ADC128S_SCLK=1;
ADC128S_CS=1;
delay_us(1);
ADC128S_CS=0;
delay_us(1);
for(int i=0;i<total_channels;i++)
{
si_date=read_addre[i+1]; //下次循环转换通道选择 需要在这次写到寄存器中
// if(i==total_channels-1)si_date=read_addre[0];
for(int j=0;j<16;j++)
{
ADC128S_SCLK=0;
delay_nsx6(5);
if(ADC128S_MISO) //下降沿接收数据接收数据 默认首个字节接收到的数据是channel 0通道
{
so_date|=0x01;
}
if(si_date&0x8000)
{
ADC128S_MOSI=1;
}else
{
ADC128S_MOSI=0;
}
delay_nsx6(2);
ADC128S_SCLK=1;
delay_nsx6(5);
si_date<<=1;
if(j<15)
{
so_date<<=1;
}
}
ai_receivebuffarr[i]+=so_date&0x0fff;
so_date=0;
}
ADC128S_SCLK=1;
ADC128S_CS=1;
delay_us(1);
AI_CycleCount++;
}
if(AI_CycleCount=ADC128S_CycleSUM)
{
for(int k=0;k<4;k++)
{
ptr->new_buff[k]=(u16)(ai_receivebuffarr[k]/ADC128S_CycleSUM);
ai_receivebuffarr[k]=0;
}
ADC128S_VoltageConversion(ptr->new_buff,total_channels); //把数字量转换为输入的模拟电压值
if(Beyond_FristAI=0)
{
ptr->pre_buff[0]=ptr->new_buff[0];
ptr->pre_buff[1]=ptr->new_buff[1];
ptr->pre_buff[2]=ptr->new_buff[2];
ptr->pre_buff[3]=ptr->new_buff[3];
ptr->AI_ReceiveFlag=1;
Beyond_FristAI=1;
}
if(IS_AIReceiveValid(ptr)!=0) //输入是否在所需的精度内
{
ptr->pre_buff[0]=ptr->new_buff[0];
ptr->pre_buff[1]=ptr->new_buff[1];
ptr->pre_buff[2]=ptr->new_buff[2];
ptr->pre_buff[3]=ptr->new_buff[3];
ptr->AI_ReceiveFlag=1;
}
AI_CycleCount=0;
}
}
在调试过程中对芯片的采样精度感觉还满意,基本在±20mv内波动。
由此,基本结束芯片的应用,在应用的时候直接在所在的结构体中查看BUFF中的数据即为实时的转换数据!
以上为自己的调试过程心得,欢迎交流!Q:1436015419

TI 模数ADC128S022芯片的应用例程相关推荐

  1. TI物料电子元器件芯片LM3402MM/NOPB

    TI物料电子元器件芯片常规出货 LM3402MM/NOPB CD4098BM96 OPA2349UA/2K5 TPD4F003DQDR LM3402MM/NOPB LM3402MM/NOPB DRV8 ...

  2. TI的STELLARIS芯片不能使用JTAG仿真器进行仿真

    这二天在做一个产品,有一个开发板用的是TI的LM3S芯片,这个厂家的芯片好多年前就知道,中文名字叫流明,当时ST的ARM芯片正在兴起,周立功的也在代理这颗芯片,有一些了解.现在找ZLGMCU的网站,基 ...

  3. TI的Zigbee芯片 CC2530中添加波特率2400,4800等UART 波特率

    在使用TI的ZigBee芯片做UART通信的时候,发现缺少2400.4800,等波特率,自己添加了一下并测试成功,方法如下: 1. 在_hal_uart_isr.c中修改如下: 2.  _hal_ua ...

  4. 如何直接从TI官方获得芯片的原理图和封装

    如何直接从IT官方获得芯片的原理图和封装 先在TI官网查找芯片,随便用搜索引擎,搜索TI进入TI 官网.搜索msp430f6638(随便一个芯片)如下: 找到你需要的结果点击订购和质量. 拉到最下面, ...

  5. 如何使用TI的DSP芯片cmd文件

    CMD文件一句话来表达:定义芯片内部硬件资源和分配管理软件代码的一个配置文件.因此从cmd文件的组织上你能看到两个部分:1定义硬件资源,2管理软件代码 (非原创,总结与网络) 用户通过编写CMD 文件 ...

  6. ti dra712多处理器芯片

    该芯片为多处理器,Arm Cortex-A15 和cortex-M4.图像处理单元. 使用的为ti提供的vision sdk ,该sdk用于ti adas soc系列的多处理开发包,该软件框架允许用户 ...

  7. 关于TI毫米波雷达芯片(IWR6843)电源替代方案的探讨

    背景: 2021年下半年以来,由于疫情.芯片产能和市场囤积等各方面因素影响,我们使用的一款电源芯片买不到现货了(现货价格400元/片, 原价17元/片),下次供货期约为2025年,故需要寻找一款国产替 ...

  8. SD3077、SD3078时钟芯片数据手册、例程

    目录 芯片管脚设置: 管脚说明: 原理框图: 芯片资料获取: 部分驱动代码: 主函数: 部分驱动函数--中断调用函数: 部分驱动函数--I2C在指定地址读/写一字节数据函数: 部分驱动函数--IRTC ...

  9. 关于TI的28335芯片概述

    转载自:https://www.cnblogs.com/layup/archive/2013/04/07/3006253.html TMS320F28335属于TMS320C2000™数字信号控制器( ...

最新文章

  1. 浅谈Java中的final关键字
  2. Windows 10 powershell 中文乱码解决方案
  3. 测量一组类下三角矩阵的质量和频率n=m+1
  4. nRF52832 — 连接指定name、UUID、addr的蓝牙设备
  5. webservice 函数2007不可以用_Excel出了一个新函数,太好用啦!但我不建议你们学……...
  6. oracle一行拆多行函数,Oracle 实现多行转换成一行 使用oracle 10g collect函数
  7. 计算机系在职研究生 网络班,在职研究生都有网络班吗?
  8. 程序的编译与链接、预处理符号、指令
  9. html span离div块有边距,html块 div span
  10. Python(二十五):排序、反转
  11. 详解超网技术(路由聚合技术)
  12. Qt 之 QQ系统表情(一)
  13. 配置mysql读写分离
  14. VS Qt 项目 “fatal error C1083: ”无法打开包括文件
  15. 苹果开发者证书申请流程
  16. 今天结束了ie被劫持的生活
  17. 1.1.6 LSDB同步
  18. php 提取视频中的音频,如何把视频中的音频提取出来
  19. 【总结】1183- 毕业去字节之前的一些感想
  20. iis7 php 403,详解Nginx 出现 403 Forbidden 的解决办法

热门文章

  1. html 插入avi视频,松下变频空调“ECONAVI节能导航”深度评测
  2. python硬件编程语言_1 Python入门及计算机硬件知识
  3. 模具设计小诀窍(顺口溜)
  4. 保存计算机设备表,涉密信息设备和存储设备确定审批表.docx
  5. 1399元起!荣耀9X发布:全系搭载7nm麒麟810,升降全面屏,主流手游满帧体验
  6. 如何读取不确定列数的txt文档?
  7. 【Microsoft Azure 的1024种玩法】四十八.基于Azure Virtual Machines快速搭建SQL Server应用
  8. java-php-python-ssm-网络学习平台-计算机毕业设计
  9. [Linux]阿里云万网域名-腾讯云服务器nginx下配置免费的https
  10. 机器学习VS深度学习