AD7705电压采集

源码在我的资源中可免费下载,仅供参考!!!

AD7705:AD7705/7706 是应用于低频测量的 2/3 通道的模拟前端。该器件可以接受直接来自传感器的低电平的输入信号,然后产生串行的数字输出。利用Σ-∆转换技术实现了 16 位无丢失代码性能。选定的输入信号被送到一个基于模拟调制器的增益可编程专用前端。片内数字滤波器处理调制器的输出信号。通过片内控制寄存器可调节滤波器的截止点和输出更新速率,从而对数字滤波 器的第一个陷波进行编程。

设置AD7705/7706的程序代码
1.向通信寄存器写数据,选择通道1作为有效通道,将下一个操作设为对时钟寄存器进行写操作。
2.对时钟寄存器进行写操作,设置CLKDIV位,将外部时钟除2,假定外部时钟频率为4.9512,HZ,更新速率选为50HZ。
3.向通信寄存器写数据。选择通道1作为有效通道。将下一个操作设置为对设置寄存器的写操作。
4.向设置寄存器写数据,将增益设为1,设置为双极性、非缓冲模式,清除滤波器同步,开始自校准。
5.查询DRDY输出。
6.从数据寄存器上读数据。
7.跳回5、6步,直到从选定的通道中取出指定数量的采样。
SPI1_NSS PA4 CS
SPI1_SCK PA5 CLK
SPI1_MISO PA6 DOUT
SPI1_MOSI PA7 DIN
PA8 DRDY

使用步骤:
1.初始化SPI
2.初始化AD7705
3.读AD7705的转换数据输入通道并转换
5.显示读到的数值
下面展示一些 内联代码片

#include "AD7705.h"
#include "stm32f10x.h"
#include "delay.h"/* SPI1_NSS    PA4     CS SPI1_SCK    PA5     CLKSPI1_MISO   PA6     DOUTSPI1_MOSI   PA7     DINPA8     DRDY
*/void SPIx_Init(void){SPI_InitTypeDef  SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE );GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;// AdDrdy GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PA8ÅäÖóÉÉÏÀ­ÊäÈëGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_8);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//SPI CS DAC8554  AD7705 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //¸´ÓÃÍÆÍìÊä³öGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); SPI_Cmd(SPI1, DISABLE); //ʹÄÜSPIÍâÉèSPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPIÉèÖÃΪ˫ÏßË«ÏòÈ«Ë«¹¤SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //ÉèÖÃΪÖ÷SPISPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//SPI·¢ËͽÓÊÕ8λ֡½á¹¹ SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//ʱÖÓÐü¿ÕΪ¸ßSPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //Êý¾Ý²¶»ñÓÚµÚ¶þ¸öʱÖÓÑØSPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//ÄÚ²¿NSSÐźÅÓÐSSIλ¿ØÖÆSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//²¨ÌØÂÊÔ¤·ÖƵֵ256SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//Êý¾Ý´«Êä´ÓMSB¿ªÊ¼SPI_InitStructure.SPI_CRCPolynomial = 7; //CRCÖµ¼ÆËãµÄ¶àÏîʽ SPI_Init(SPI1, &SPI_InitStructure); //SPI¼Ä´æÆ÷µÄ³õʼ»¯SPI_Cmd(SPI1, ENABLE); //ʹÄÜSPIÍâÉèCS_ADC_LOW();SPIx_ReadWriteByte(0xff);//Æô¶¯´«Êä CS_ADC_HIGH();}//SPIx ¶Áдһ¸ö×Ö½Ú //TxData:ҪдÈëµÄ×Ö½Ú//·µ»ØÖµ:¶ÁÈ¡µ½µÄ×Ö½Úu8 SPIx_ReadWriteByte(u8 TxData) {u8 retry=0;while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)//¼ì²éÖ¸¶¨µÄSPI±ê־λÉèÖÃÓë·ñ£º·¢ËÍ»º´æ¿Õ±ê־λ{retry++; if(retry>200)return 0;}SPI_I2S_SendData(SPI1, TxData); //·¢ËÍÊý¾Ýretry=0;while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) {retry++;if(retry>200)return 0;}return SPI_I2S_ReceiveData(SPI1); //·µ»Ø½ÓÊÕµ½µÄÊý¾Ý}//дÊý¾Ývoid AD7705_WriteByte(u8 Dst_Addr) {CS_ADC_LOW(); //ʹÄÜÆ÷¼þdelay_us(20);      SPIx_ReadWriteByte(Dst_Addr);delay_us(100); CS_ADC_HIGH();//ʹÄÜ }
/********AD7705³õʼ»¯º¯Êý***********/void Init_AD7705(u8 chnanel) {u8 i;for(i=0;i<100;i++)/*¶àÓÚÁ¬Ðø32¸öDIN=1ʹ´®¿Ú¸´Î»*/ {AD7705_WriteByte(0xff);//³ÖÐøDIN¸ßµçƽд²Ù×÷£¬»Ö¸´AD7705½Ó¿Ú}delay_ms(1);switch(chnanel){case 1:AD7705_WriteByte(0x20); /* дͨѶ¼Ä´æÆ÷Ñ¡ÖÐch1*/AD7705_WriteByte(0x08);//0x04 /* 1MHzʱÖÓ£¬200HzÊý¾Ý¸üÐÂËÙÂÊ*/AD7705_WriteByte(0x10); /*Ñ¡ÔñÉèÖüĴæÆ÷£¬Ê¹ÓÃchnanel 1*/AD7705_WriteByte(0x44); //дÉèÖüĴæÆ÷£¬ÉèÖóɵ¥¼«ÐÔ£¬ÎÞ»º³å£¬ÔöÒæΪ1£¬Â˲¨Æ÷¹¤×÷£¬×ÔУ׼break;case 2:AD7705_WriteByte(0x21); /* дͨѶ¼Ä´æÆ÷Ñ¡ÖÐch2 */AD7705_WriteByte(0x08); /* 1MHzʱÖÓ£¬200HzÊý¾Ý¸üÐÂËÙÂÊ*/         AD7705_WriteByte(0x11); /*Ñ¡ÔñÉèÖüĴæÆ÷£¬Ê¹ÓÃchnane 2*/        AD7705_WriteByte(0x44); //дÉèÖüĴæÆ÷£¬ÉèÖóɵ¥¼«ÐÔ£¬ÎÞ»º³å£¬ÔöÒæΪ1£¬Â˲¨Æ÷¹¤×÷£¬×ÔУ׼ break;default: break;}}
/* ¶ÁAD7705ת»»Êý¾ÝÊäÈëͨµÀchannel */ u16 GetData7705_CH1(void) {        u16 temp1 = 0;u16 DataL = 0;u16 DataH = 0;   Init_AD7705(1);//³õʼ»¯Í¨µÀ2   delay_ms(1);AD7705_WriteByte(0x38);//Ñ¡ÖÐCH2Êý¾Ý¼Ä´æÆ÷¶Áwhile(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==1)    //µÈ´ýÊý¾Ý×¼±¸ºÃ {}CS_ADC_LOW(); //ʹÄÜÆ÷¼þdelay_us(20); DataH = SPIx_ReadWriteByte(0xff);  DataL = SPIx_ReadWriteByte(0xff);     delay_us(200);CS_ADC_HIGH();   //ƬѡȡÏû  DataH = DataH << 8;  temp1  =  DataH | DataL; return temp1; }
u16 GetData7705_CH2(void){     u16 temp2 = 0;u16 DataL = 0;u16 DataH = 0;   Init_AD7705(2);//³õʼ»¯Í¨µÀ2 delay_ms(1);AD7705_WriteByte(0x39);//Ñ¡ÖÐCH2Êý¾Ý¼Ä´æÆ÷¶Áwhile(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==1)    //µÈ´ýÊý¾Ý×¼±¸ºÃ {}CS_ADC_LOW(); //ʹÄÜÆ÷¼þdelay_us(20); DataH = SPIx_ReadWriteByte(0xff);  DataL = SPIx_ReadWriteByte(0xff);     delay_us(200);CS_ADC_HIGH();   //ƬѡȡÏû  DataH = DataH << 8;  temp2  =  DataH | DataL; return temp2;
}
// An highlighted block
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"
#include "ad7705.h"
//ALIENTEK Mini STM32¿ª·¢°å·¶Àý´úÂë15
//ADCʵÑé
//¼¼ÊõÖ§³Ö£ºwww.openedv.com
//¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾int main(void){ u32 adcx;float temp;delay_init();            //ÑÓʱº¯Êý³õʼ»¯     uart_init(9600);      //´®¿Ú³õʼ»¯Îª9600//LED_Init();             //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿ÚLCD_Init();Adc_Init();               //ADC³õʼ»¯    SPIx_Init();  POINT_COLOR=RED;//ÉèÖÃ×ÖÌåΪºìÉ« LCD_ShowString(60,50,200,16,16,"Mini STM32");  LCD_ShowString(60,70,200,16,16,"ADC TEST");   LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(60,110,200,16,16,"2014/3/9");   //ÏÔʾÌáʾÐÅÏ¢POINT_COLOR=BLUE;//ÉèÖÃ×ÖÌåΪÀ¶É«LCD_ShowString(60,130,200,16,16,"ADC_CH1_VAL:");        LCD_ShowString(60,150,200,16,16,"ADC_CH1_VOL:0.000000V");    Init_AD7705(2);     while(1){//adcx=Get_Adc_Average(ADC_Channel_1,10);adcx=GetData7705_CH2();LCD_ShowxNum(156,130,adcx,5,16,0);//ÏÔʾADCµÄÖµtemp=(float)adcx*(5.0/65535);//temp=(float)adcx*(3.3589/65535)*3/2;adcx=temp;LCD_ShowxNum(156,150,adcx,1,16,0);//ÏÔʾµçѹֵtemp-=adcx;temp*=1000000;LCD_ShowxNum(172,150,temp,6,16,0X80);LED0=!LED0;delay_ms(250); }
}   

STM32+AD7705实现电压采集相关推荐

  1. 基于STM32的ADC电压采集(DMA传输)

    我最近在写stm32的adc电压采集过程中遇到了一些问题,这些问题或许对stm32初学者入手adc有所帮助. 对adc采集到的数据进行均值滤波处理,新建一个数组ADC_ConvertedValue_1 ...

  2. HAL库实现基于STM32+RN8302B的电压采集

    一.硬件电路 这里以C相电压采集为例,来快速了解RN8302B的使用 二. 配置工作 1.准备好printf工程,参考之前的教程 STM32CubeIDE实现printf重定向输出到串口_飞由于度的博 ...

  3. stm32双adc电压采集

    ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;    //ADC工做模式:ADC同步规则组模式 ADC_DMACmd(ADC1, ENABLE);  ...

  4. 基于STM32的ADC电压采集proteus仿真LCD1602显示

    硬件设计 (末尾附文件) 仿真图如下所示: #include "bsp-lcd1602.h"void LCD1602_GPIO_Config(void) {RCC_APB2Peri ...

  5. 基于AD7705的超高精度电压采集电路板 4路电压采集端口,通过前端通过AD620运算放大器输出至AD5505通过STM32F030数据处理

    基于AD7705的超高精度电压采集电路板 4路电压采集端口,通过前端通过AD620运算放大器输出至AD5505通过STM32F030数据处理,电压采集精度达到万分之一伏.显示电路通过74HC164静态 ...

  6. 基于单片机串口远程多路温湿度采集仿真-基于单片机ADC0809八路电压采集系统设计-基于单片机16x32点阵多模式显示仿真设计-基于单片机餐厅呼叫控制系统仿真设计-基于STM32单片机的智能水杯设计

    1220基于单片机ADC0809八路电压采集系统设计-毕设课设资料 数码管显示,测量八路电压表. #define addo (5.0/255.0) #define zero 0.005 //用于校准A ...

  7. 个人项目 免费开源 基于STM32F103的oled示波器,频谱fft adc电压采集 spi接口0.96寸oled

    @基于stm32的adc检测波形 0.96oled显示(spi/iic)移植gui库(开源). 使用标准库开发,未使用dsp官方库. adc采集到电压并且在oled上显示. 支持0-3.3v电压采集显 ...

  8. 电机学习笔记 ADC dma 电流电压采集

    分析 在电机驱动电路中串入一个 0.02Ω.2W 的采样电阻,将电流信号 转换成电压信号,再经过隔离运放放大 8 倍后差分输出,使用普通运放将差分输出转换成单端输 出给 STM32 的 ADC 采样通 ...

  9. HCNR200线性光耦隔离电路/单片机电压采集电路仿真

    文章目录 前言 一.HCNR200线性光耦隔离电路 二.降压电路 总结 前言 最近要做一个STM32单片机电压采集电路,为了实现物理隔离和0V~28V电压采集,决定选用HCNR200线性光耦实现. 一 ...

  10. 【STM32学习】(30)STM32实现18B20温度采集(标准库和HAL库实现)

    单片机型号:STM32F103 源码下载链接:(2条消息) STM32实现18B20温度采集(标准库和HAL库实现)-电信文档类资源-CSDN下载 现要求完成温度采集并在串口或液晶屏上显示.我们这里使 ...

最新文章

  1. [Python Study Notes] Python的安装
  2. 反思赚钱:一定要动脑子 一定找发财点
  3. Source code for Bayesian based CS and blind debluring
  4. .NET Core + Kubernetes:Service
  5. [KMP]一本通(http://ybt.ssoier.cn:8088) 1698:字符串匹配
  6. (110)FPGA面试题-介绍Verilog块语句begin-end执行过程
  7. 在 vue/cli 中使用 Module Federation
  8. 中国全部城市的中心点坐标 json格式
  9. visio画图常见问题解答
  10. GAN合成语音相关论文
  11. mysql varchar 长度设置_Mysql中varchar长度设置方法
  12. Vue路由导航报错:NavigationDuplicated: Avoided redundant navigation to current location解决方法
  13. 《本科-线性代数笔记-精简汇总》,纯手工!
  14. 股票星期几买涨的概率大?
  15. 13.0_[Java 面向接口]-类和接口
  16. Android Studio Socket客户端 与电脑服务器收发消息
  17. Android Studio连接手机和夜神模拟器
  18. 手机扫描身份证识别AND行驶证识别
  19. 全面解析5种常见悬挂——拖曳臂式悬挂
  20. 【Flink】RECEIVED SIGNAL 15: SIG SIGTERM. Shutting down as requested.

热门文章

  1. 技术内参 | 神策分析架构演进:“变”与“不变” 中的思索与创新
  2. js 导出Excel
  3. 【已解决】node.dll丢失怎么办?计算机丢失node.dll是什么意思?
  4. php字符串的截取方式
  5. 【车辆分类】基于matlab的视频中车辆跟踪监测分类算法仿真,包括背景差分与帧间差分以及形态学处理
  6. python 微信模块_Python实现清理微信僵尸粉功能示例【基于itchat模块】
  7. 关于php后台的知识,xfplay影音先锋画面声音不同步的处理教程 爱狐网 (‾◡◝)...
  8. [离线]ps4共享屏幕到笔记本
  9. 使用IDEA格式化JSON数据串
  10. CSS中常用中文字体(font-family)的英文名称