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. 17.07.26 Oracle安装
  2. conv--向量的卷积和多项式乘法
  3. ubuntu/deepin常用软件清单(都是使用sudo apt-get install安装方式)
  4. iOS CoreAnimation
  5. CocoaAsyncSocket 套接字
  6. 委托与事件-闲聊系列(二)
  7. java 读取配置文件工具_java读取配置文件信息properties的工具类
  8. 办信用卡被拒绝是什么原因?
  9. 求职互联网数据分析,如何准备行业知识?
  10. 【2023年战略管理公开课计划】向华为学习 业务领先的战略规划SP(BLM)和战略解码BP(BEM)
  11. 聚焦新零售 阿里云重磅推出零售云
  12. 微信小程序实现页面强制刷新
  13. 关于React18控制台报错:ReactDOM.render is no longer supported in React 18 Use createRoot instead. Until.....
  14. 【毒鸡汤】英译毒鸡汤——人生已经如此艰难,何不落井下石
  15. Firefox的扩展开发介绍
  16. 最新Maven(apache-maven-3.8.6)在Win10安装部署(超详细)
  17. 经常聊天会日久生情吗?
  18. 关于PS设计里的八个便捷小技巧
  19. 倍福--清除随机分配的内存地址
  20. go语言基础语法-切片

热门文章

  1. Selenium和Appium教程合集
  2. 三菱Q系列常用注意事项
  3. windows下使用labelImg标注图像
  4. 企业微信API使用基本教程
  5. 手动注册native方法
  6. asp.net助学贷款管理系统
  7. 机器学习——鸢尾花数据集
  8. mt管理器主题修改教程_华为格式状态栏使用教程
  9. webSocket 干货分享 附带项目源码
  10. 黑苹果alc269声卡仿冒id_黑苹果定制声卡驱动(ALC892为例)