一、AD7705简介

AD7705为差分输入的16位ADC,拥有两组差分输入通道。自带可编程增益,增益可在1到128调节。支持SPI接口。

AD7705功能框图如图所示:

AD7705的主要寄存器有通信寄存器(Communication Register)、时钟寄存器(Clock Register)、建立寄存器(Setup Register )和数据寄存器(Data Register)。在这些寄存器中,只有数据寄存器是16位的。

通信寄存器负责寄存器寻址、读写控制、通道选择等。设置通信寄存器为0x20时,表示为写命令模式,并指向时钟寄存器,选择AIN1(+),AIN1(-)作为输入通道。

时钟寄存器负责时钟分频、输出速率选择等。设置时钟寄存器为0x07时,表示不分频主时钟(由于使用的主时钟为2.4576MHz,不用分频,使用4.9152MHz作为主时钟时需要分频),输出速率为500Hz。AD7705的最大输出速率为500Hz,2ms输出一个有效数据,因此只试用与低频信号的采样。

建立寄存器负责ADC模式、增益选择、缓冲输出、数字滤波等。设置建立寄存器为0x40时,表示设置增益为1,差分输入模式,无输出缓冲,无数字滤波。

二、AD7705控制

AD7705的控制就是对上述的几个寄存器进行操作,以什么样的循序来操作呢?

首先,对通信寄存器操作,设置通道,并选择时钟寄存器,作为下一个操作目标,通信寄存器命令执行完毕后就会连线到时钟寄存器,再输入操作时钟寄存器的命令。此时,AD7705的地址指针又指向了通信寄存器,因此,操作建立寄存器,就需要再次对通信寄存器操作,选择到建立寄存器,再对建立寄存器操作。这三个寄存器操作完成后,就完成了对AD7705的初始化,之后转换完成信号DRDY有效,发送读取数据命令,读取数据寄存器值。

初始化:通信寄存器->时钟寄存器->通信寄存器->建立寄存器

读取:等待DRDY为低电平->发送读取数据命令->读取数据

三、软件SPI

AD7705读写SPI操作时序如图所示:

从SPI时序中可以看到,SCLK在空闲时为高电平,且在SCLK的第二个边沿采样数据,因此此SPI的模式为CPOL=1,CPHA=1。

软件SPI代码如下所示:

/*
软件SPI
CPOL = 1 ,空闲状态为高电平
CPHA = 1 ,在第二个边沿采样
*/
//AD7705写数据
void Writetoreg(uint8_t byteword)
{uint8_t i;AD7705_CS_Pin_RESET;       //片选for(i=0;i<8;i++){if(byteword & 0x80)AD7705_DIN_Pin_SET;else AD7705_DIN_Pin_RESET;byteword <<= 1;AD7705_SCLK_Pin_RESET;__NOP();                   //以72MHz系统时钟计算,大概延时时间在10ns-20ns__NOP();__NOP();__NOP();__NOP();AD7705_SCLK_Pin_SET;__NOP();__NOP();__NOP();__NOP();__NOP();}AD7705_SCLK_Pin_SET;       //空闲AD7705_DIN_Pin_SET;AD7705_CS_Pin_SET;
}//AD7705读数据
uint16_t Read(void)
{uint8_t i;uint16_t data = 0x00;AD7705_CS_Pin_RESET;       //片选for(i=0;i<16;i++){AD7705_SCLK_Pin_RESET;__NOP();__NOP();__NOP();__NOP();__NOP();AD7705_SCLK_Pin_SET;__NOP();__NOP();__NOP();__NOP();__NOP();data <<= 1;if( AD7705_DOUT_Pin_State )data |= 0x01;}AD7705_SCLK_Pin_SET;      //空闲AD7705_CS_Pin_SET;return data;
}

代码中的__NOP()是为了满足AD7705对SPI时间间隔的要求,而增加的延时。

四、AD7705初始化与数据读取代码

使用HAL函数库,代码如下所示:

/*
AD7705初始化
设置输入差分端口、时钟、增益等
*/
void AD7705_Init(void)
{uint8_t i;HAL_GPIO_WritePin(GPIOA,AD7705_CS_Pin|AD7705_SCLK_Pin,GPIO_PIN_SET);Writetoreg(0x20);      //向通信寄存器写入数据。选择下一个操作的寄存器为时钟寄存器,选择AIN1+/AIN1-数据通道Writetoreg(0x07);      //向时钟寄存器写入数据。接入的外部时钟为2.4576MHz,使能时钟,不对其分频,输出速率为500HzWritetoreg(0x10);      //向通信寄存器写入数据。选择下一个操作的寄存器为配置寄存器,选择AIN1+/AIN1-数据通道Writetoreg(0x40);      //向配置寄存器写入数据。增益为1,差分模式,缓冲输出关闭HAL_Delay(1);
}/*
读取AD7705输出的16为数据
*/
uint16_t AD7705_GetData(void)
{uint16_t AD7705_data;while( AD7705_DRDY_Pin_State );  //等待DRDY为低电平Writetoreg(0x38);     //向通信寄存器写入数据。定位到数据寄存器,并设置为读模式。AD7705_data = Read();
}  

STM32——软件SPI控制AD7705相关推荐

  1. STM32硬件SPI控制TM1638 按键数码管LED显示模块

    STM32硬件SPI控制TM1638按键数码管LED显示模块   从淘宝买来的,TM1638专门是控制LED的,LED组合起来就可以变成数码管,还有按键,这个我就没管了,不想管了,发这个帖子只是为了记 ...

  2. STM32F030软件SPI控制74HC165

    仅仅作为一个调试记录,供硬件设计使用. 环境 硬件:NUCLEO-F030R8.某宝购买的74HC165模组,接了 888 路按键. 开发环境:Win10+IAR EWARM 8.22.1 原理图 只 ...

  3. 【0.96寸 OLED屏实现1500Fps的帧率】STM32 软件、硬件SPI、I2C驱动总结

    目录 SPI版 OLED SPI 端口定义 七针OLED引脚定义 六针OLED引脚定义 软件SPI 硬件SPI 启用DMA 帧率测试 I2C 版 软件I2C 硬件I2C DMA STM32F103VE ...

  4. STM32用SPI方式控制OLED模块

    一.OLED 1. OLED模块的外观 2. OLED模块的电路图 3. OLED模块参数 项目 说明 接口特性 3.3V(串电阻后,可与 5V 系统连接) 通信接口 4 线 SPI 屏幕分辨率 12 ...

  5. STM-32:SPI通信协议/W25Q64简介—软件SPI读写W25Q64

    目录 一.SPI简介 1.1电路模式 1.2通信原理 1.3SPI时序基本单元 1.3.1起始和终止 1.3.2交换字节 二.W25Q64 2.1W25Q64简介 2.2W25Q64硬件电路 2.3W ...

  6. 【STM32】标准库与HAL库对照学习教程十三--软件IIC控制AT24C02

    [STM32]标准库与HAL库对照学习教程十三--软件IIC控制AT24C02 一.前言 二.准备工作 三.AT24C02(EEPROM)介绍 1.AT24C02简介 2.引脚功能 3.设备地址 四. ...

  7. 基于STM32的SPI基本介绍

    STM32---SPI(DMA)通信的总结(库函数操作) 本文主要由7项内容介绍SPI并会在最后附上测试源码供参考: 1.     SPI的通信协议 2.     SPI通信初始化(以STM32为从机 ...

  8. 基于stm32、spi协议的Fatfs文件系统移植(附完整代码下载)

    开发环境:Window 7 32bit 开发工具:Keil uVision4 硬件:stm32f103vct6 目录 1.硬件设计: 2.软件设计 1.SPI收发数据 2.向SD卡发送的命令格式: 3 ...

  9. STM32的SPI及IIC

    目录 STM32的SPI及IIC 1.SPI的配置方式 SPI**简介** SPI**特征** SPI**功能描述** SPI通信配置 2.IIC 的配置方式 IIC简介 I2C 初始化结构体详解 I ...

  10. 【STM32】SPI协议通信详解

    目录 一.SPI协议简介 二.SPI物理层 三.SPI协议层 1.通讯的起始和停止信号 2.数据有效性 3.时钟信号的相位和极性(重点) 四.SPI 特性及架构(重点) 1.通信引脚 2.时钟控制逻辑 ...

最新文章

  1. 数据结构(C语言版) 第 六 章 图 知识梳理 + 习题详解
  2. sysbench性能压测以及mysql性能压测
  3. flask基础(上篇)
  4. C# 通用Clone
  5. 修复Net4.0在IE11下doPostBack无效的问题
  6. tensorflow越跑越慢_tensorflow如何解决越运行越慢的问题
  7. DPDK笔记 RSS(receive side scaling)网卡分流机制
  8. springboot 添加 lombok 报错更新 版本号
  9. 图象关于y轴对称是什么意思_高中数学常考问题1:函数、基本初等函数的图象与性质,真题分析...
  10. 50 道网络面试题及答案
  11. 公链、私链、联盟链、侧链简介
  12. xp服务器文件写保护怎么删除,Xp系统磁盘被写保护无法复制文件解决方法
  13. linux stm32 虚拟串口驱动安装,stm32的usb虚拟串口驱动win7系统64位和32位不能正常安装的解决办法!stm32 virtual comport win7(终极解决办法)...
  14. ASP.NET实现将word文档转换成pdf的方法
  15. 手把手教你搭建最新国产开源网络安全渗透测试集成靶场vulfocus
  16. 耿丹CS16-2班第三次作业汇总
  17. vue+ElementUI页面模板
  18. 基于SpringBoot+VUE的线上教学管理平台系统
  19. 2021/8/21错题
  20. 用Python快速实现一个垃圾分类APP|附带微信小程序

热门文章

  1. 用matlab求三次方程根,三次方程的根式求解(通俗版本)
  2. 计算机应用基础课程思政方案,课程思政《计算机应用基础》教学设计.pdf
  3. 显示器分辨率、显示器大小和视频分辨率的关系
  4. Iterator中的 FailFast FailSafe【学习笔记】
  5. 携程异步消息系统实践
  6. LOVE2D中实现一个简单的摇杆
  7. python爬取去哪儿网机票_5元机票?去哪儿网及深航回应:未发现售价5元的机票订单...
  8. 量子多体理论怎么样理解,多体系统的量子理论
  9. 平面设计师okr_掌握OKR工作法,教你快速提升工作效率
  10. 硬盘分区怎么不删除文件合并_硬盘分区怎么合并?