网站开发后需要交接哪些材料厚街做网站的公司
web/
2025/9/25 19:24:17/
文章来源:
网站开发后需要交接哪些材料,厚街做网站的公司,中关村手机在线频道,网络营销优化外包在开发臭氧发生器的时#xff0c;我们需要一个高分辨率的AD采集#xff0c;于是选择了AD7192#xff0c;选择这款ADC的原因比较简单。首先它是24位的符合我们的精度要求#xff1b;其次它自带时钟#xff0c;便于节省空间#xff1b;第三它有4路单端或2路差分输入#x…在开发臭氧发生器的时我们需要一个高分辨率的AD采集于是选择了AD7192选择这款ADC的原因比较简单。首先它是24位的符合我们的精度要求其次它自带时钟便于节省空间第三它有4路单端或2路差分输入与我们需要三路采集相符。
1、AD7192简介
AD7192是一款适合高精密测量应用的低噪声完整模拟前端内置一个低噪声、 24 位Σ-Δ型模数转换器 (ADC)。片内低噪声增益级意味着可直接输入小信号。
AD7192可配置为两路差分输入或四路伪差分输入。片内通道序列器可以使能多个通道AD7192 按顺序在各使能通道上执行转换这可以简化与器件的通信。 片内 4.92 MHz时钟可以用作 ADC 的时钟源 或者也可以使用外部时钟或晶振。 该器件的输出数据速率可在 4.7 Hz 至 4.8 kHz 的范围内变化。
AD7192提供两种数字滤波器选项。 滤波器的选择会影响以编程输出数据速率工作时的均方根噪声和无噪声分辨率、建立时间以及 50 Hz/60 Hz 抑制。 针对要求所有转换均需建立的应用 AD7192 具有零延迟特性。
其功能结构图如下 2、硬件设计
AD7192的串行接口包含四个信号CS、DIN、SCLK 和DOUT/RDY。所以我们采用标准的SPI接口来实现AD7192的数据操作。具体的硬件设计图如下 4路输入分别通过运算放大器做前端处理然后以标准信号输入到AD7192数字输入输出则接到MCU的SPI接口。
3、软件设计
AD7192内部具有多个寄存器对AD7192的操作就是通过这些片内寄存器进行控制和数据寄存器/数据寄存器加状态信息配置。这些寄存器包括通信寄存器、状态寄存器、模式寄存器、配置寄存器、ID寄存器、GPOCON寄存器、失调寄存器以及满量程寄存器。其中通信寄存器和状态寄存器共享地址读操作时针对的是状态寄存器写操作时针对的是通讯寄存器。对任何寄存器的操作都是从写通讯寄存器开始。
1、AD7192初始化
在使用AD719前先对其实先初始化。首先是软件复位连续写入40个1就可对AD7192实现复位。复位完成后对零点和量程进行较准。而后读取各寄存器状态。具体实现代码如下
/*AD7192初始化配置*/
void AD7192Initialization(void (*ReadWriteForAd7192)(uint8_t *,uint8_t *,uint16_t ),void (*ChipSelected)(bool),uint16_t (*GetReadyInput)(void))
{AD7192SoftwareReset(ReadWriteForAd7192,ChipSelected);AD7192InternalZeroScaleCalibration(ReadWriteForAd7192,ChipSelected,GetReadyInput);AD7192InternalFullScaleCalibration(ReadWriteForAd7192,ChipSelected,GetReadyInput);/*读取并存储全部寄存器的值*/ReadAD7192Register(REG_COM_STA, 8, AD7192Registers, REG_COM_STA,ReadWriteForAd7192,ChipSelected);AD7192InternalZeroScaleCalibration(ReadWriteForAd7192,ChipSelected,GetReadyInput);AD7192InternalFullScaleCalibration(ReadWriteForAd7192,ChipSelected,GetReadyInput);
}
零点和量程校准包括内部校准和外部校准我们这里使用内部校准。
2、读取转换数据
读取转换的结果有2中方式单次获取和连续获取。单次转换模式下AD7192 在完成转换后处于关断模式。 将模式寄存器中的MD2、MD1和MD0分别设置为0、0、1便可启动单次转换此时AD7192将上电执行单次转换然后返回关断模式。时序图如下所示 单次转换数据获取具体实现代码如下
uint32_t GetStartSingleConvertionValue(uint32_t Channels,void (*ReadWriteForAd7192)(uint8_t *,uint8_t *,uint16_t ),void (*ChipSelected)(bool),uint16_t (*GetReadyInput)(void))
{uint32_t dataCode0;AD7192StartSingleConvertion(Channels,ReadWriteForAd7192,ChipSelected);dataCode AD7192ReadConvertingData(ReadWriteForAd7192,ChipSelected,GetReadyInput);dataCode dataCode 0x00FFFFFF;ReadAD7192Register(REG_DATA, 1, AD7192Registers, REG_DATA,ReadWriteForAd7192,ChipSelected);return dataCode;
}
连续转换模式是上电后的默认转换模式。AD7192连续转换每次完成转换后状态寄存器中的RDY位变为低电平。如果CS为低电平则完成一次转换时DOUT/RDY 线路也会变为低电平。若要读取转换结果用户需要写入通信寄存器指示下一操作为读取数据寄存器。从数据寄存器中读取数据字后DOUT/RDY变为高电平。时序图如下所示 连续转换数据获取具体实现代码如下
void GettContinuousConvertionValue(uint32_t Channels,uint32_t *dataCodes,int number,void (*ReadWriteForAd7192)(uint8_t *,uint8_t *,uint16_t ),void (*ChipSelected)(bool),uint16_t (*GetReadyInput)(void))
{uint32_t dataCode0;AD7192StartContinuousConvertion(Channels,ReadWriteForAd7192,ChipSelected);for(int i0;inumber;i){dataCode AD7192ReadConvertingData(ReadWriteForAd7192,ChipSelected,GetReadyInput);dataCode dataCode 0x00FFFFFF;dataCodes[i]dataCode;}
}
3、读取内部温度
AD7192内置一个温度传感器。利用配置寄存器中的CH2位可以选择温度传感器。如果CH2位设置为1就会使能温度传感器。使用温度传感器并选择双极性模式时如果温度为0K器件应返回0x800000码。为使传感器发挥最佳性能需要执行单点校准。因此应记录25°C 时的转换结果并计算灵敏度。 灵敏度约为2815码 /°C。温度传感器的计算公式为
温度 (K) ( 转换结果 – 0x800000)/2815 K
温度 (°C) 温度 (K) – 273
单点校准之后内部温度传感器的精度典型值为 ±2°C。具体的实现代码如下
/*读取内部温度数据返回摄氏度温度*/
float GetTemperatureValue(void (*ReadWriteForAd7192)(uint8_t *,uint8_t *,uint16_t ),void (*ChipSelected)(bool),uint16_t (*GetReadyInput)(void))
{uint32_t temperatureCode0;float temp 0.0;AD7192Registers[REG_MODE] 0;AD7192Registers[REG_CONF] 0;AD7192Registers[REG_MODE] MODE_SING|DAT_STA_DIS|INCLK_MCLK2EN|SINC_4|ENPAR_EN|CLK_DIV_DIS|SINGLECYCLE_DIS|REJ60_DIS|0x080;
// AD7192Registers[REG_MODE] MODE_CONT|DAT_STA_DIS|INCLK_MCLK2TRI|SINC_4|ENPAR_DIS|CLK_DIV_DIS|SINGLECYCLE_DIS|REJ60_DIS|0x060;WriteAD7192Register(REG_MODE, 1, AD7192Registers,ReadWriteForAd7192,ChipSelected);AD7192Registers[REG_CONF] CHOP_DIS|REF_IN1|TEMP|BURN_DIS|REFDET_DIS|BUF_DIS|UB_BI|GAIN_1;WriteAD7192Register(REG_CONF, 1, AD7192Registers,ReadWriteForAd7192,ChipSelected);temperatureCode AD7192ReadConvertingData(ReadWriteForAd7192,ChipSelected,GetReadyInput);temp (temperatureCode-0x800000)/2815.0-273;return temp;
}
欢迎关注
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81782.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!