最近接触了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. Date, TimeZone, MongoDB, java中date的时区问题
  2. VAE(Variational Autoencoder)的原理
  3. 【数据挖掘笔记十三】数据挖掘的发展趋势和研究前沿
  4. mysql ddl dcl_MySQL常用DDL、DML、DCL语言整理(附样例)
  5. springboot属性注入
  6. mysql2017windows安装_mysql的windows安装
  7. 查询集-104.课时104.【Django视图高级】QueryDict的用法讲解(Av61533158,P104)
  8. java多线程详解(8)-volatile,Atomic比较
  9. 隔离见证_云见证–一种使我们的生活更轻松的新功能
  10. 自己的HTML5 播放器
  11. 编写一个程序,将用户输入的由数字字符和非数字字符组成的字符串中的数字提取出来(例如:输入asd123,34fgh_566kkk789,则产生的数字分别是123、34、789)。
  12. MC9S12XEP100 本地RAM不够用了怎么办
  13. hikaricp mysql_HikariCP
  14. Word2013设置多级标题自动编号
  15. 太阳高度角方位角计算
  16. [电动智能汽车-3]:原理 - 整车控制器VCU功能
  17. 中国城市乞丐的五大经典表情
  18. LeetCode 0799. 香槟塔
  19. “梦中行千里不如现实行一步。”创业亦是如此丨国仁网络资讯
  20. 游戏创业团队的技术选型之Flash AIR

热门文章

  1. PowerPCB Modeless Commands(或者PowerPCB快捷键命令)
  2. 无线高清视频数据采集方案_高清摄像头蓝牙模块
  3. Linux 内核的五大创新
  4. 李长军android语音开发_Android模仿微信录音、发送语音效果实现
  5. mysql sql语句过长_sql语句过长怎么办?
  6. mysql主键自增 insert_MySQL数据表中有自增长主键时如何插入数据
  7. redmine 部署
  8. [Linux]阿里云万网域名-腾讯云服务器nginx下配置免费的https
  9. 2022年电工(初级)国家题库及模拟考试
  10. oracle11 tns12505,TNS-12505 错误