欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
AD7705模塊(雙路16位ADC)配套資料
[打印本頁]
作者:
王阿向
時間:
2022-1-5 13:58
標題:
AD7705模塊(雙路16位ADC)配套資料
出廠的AD7606模塊缺省是8080 并行接口。
如果用SPI接口模式,需要修改 R1 R2電阻配置。
并口模式跳線: R1 懸空(不貼),R2貼10K電阻
SPI接口模式跳線:R1 貼10K電阻, R2 懸空(不貼)
AD7606 的配置很簡單,它沒有內部寄存器。量程范圍和過采樣參數是通過外部IO控制的。
采樣速率由MCU或DSP提供的脈沖頻率控制。
AD7606 必須使用單5V供電。
AD7606 和MCU之間的通信接口電平由VIO引腳控制。也就是說 VIO必須接單片機的電源,可以是3.3V也可以是5V。
【模塊引腳說明】
OS2 OS1 OS2 : 的組合狀態選擇過采樣模式。
000表示無過采樣,最大200Ksps采樣速率。
001表示2倍過采樣, 也就是硬件內部采集2個樣本求平均
010表示4倍過采樣, 也就是硬件內部采集4個樣本求平均
011表示8倍過采樣, 也就是硬件內部采集8個樣本求平均
100表示16倍過采樣, 也就是硬件內部采集16個樣本求平均
101表示32倍過采樣, 也就是硬件內部采集32個樣本求平均
110表示64倍過采樣, 也就是硬件內部采集64個樣本求平均
過采樣倍率越高,ADC轉換時間越長,可得到的最大采樣頻率就越低。
CVA,CVB : 啟動AD轉換的控制信號。CVA決定1-4通道,CVB決定5-8通道。
2個信號可以錯開短暫的時間。一般情況可以將CVA,CVB并聯在一起。
RAGE : 量程范圍選擇。0表示正負5V, 1表示正負10V.
RD : 讀信號
RST : 復位信號
BUSY : 忙信號
CS : 片選信號
FRST : 第1個通道樣本的指示信號
VIO : 通信接口電平
DB0-DB15 : 數據總線
【16位并行模式接線圖】 --- AD7606也支持8位總線模式,請參見AD7606數據手冊
AD7606模塊 MCU側
GND <----- 地
+5V <----- 5V電源
RAGE <----- 可接GPIO也可接固定電平
OS2 <----- 可接GPIO也可接固定電平
OS1 <----- 可接GPIO也可接固定電平
OS0 <----- 可接GPIO也可接固定電平
CVA <----- 接GPIO(輸出)用于啟動AD轉換 【推薦接具有PWM輸出能力的引腳】
CVB <---|
RD <----- 8080總線讀信號 NOE
RST <----- GPIO輸出 硬件復位AD606
BUSY -----> GPIO輸入 AD606正在轉換指示。【推薦接具有外部中斷能力的引腳】
CS <----- 8080總線片選 NCS
VIO <----- 單片機的電源
DB0-DB15 -----> 8080數據總線(16位)
FRST 可不接
【SPI接口模式接線圖】
AD7606模塊 MCU側
GND <----- 地
+5V <----- 5V電源
RAGE <----- 任意輸出GPIO,可接固定電平
OS2 <----- 任意輸出GPIO,可接固定電平
OS1 <----- 任意輸出GPIO,可接固定電平
OS0 <----- 任意輸出GPIO, 可接固定電平
CVA <----- 接GPIO(輸出)用于啟動AD轉換 【推薦接具有PWM輸出能力的引腳】
CVB <---|
RD/SCLK <----- SPI總線時鐘 SCK
RST <----- 任意輸出GPIO, 用于硬件復位AD606
BUSY -----> GPIO輸入, AD606正在轉換指示。【推薦接具有外部中斷能力的引腳】
CS <----- SPI總線片選 SCS
VIO <----- 單片機電源
DB7(DOUTA) -----> SPI總線數據線MISO
DB15 ------ GND
其他數據線: 可不接或接GND
FRST 可不接
【軟件定時采集的實現方案1】 --- 我們提供的 spi 的例子采用這種方案 見 bsp_spi_ad7606.c 文件
在定時器中斷服務程序中實現:
定時器中斷ISR:
{
中斷入口;
讀取8個通道的采樣結果保存到RAM; ----> 讀取的其實是上次的采集結果,對于連續采集來說,是沒有關系的
啟動下次ADC采集;(翻轉CVA和CVB)
中斷返回;
}
定時器的頻率就是ADC采樣頻率。這種模式可以不連接 BUSY 口線。
【軟件定時采集的實現方案2】 --- 我們提供的 8080接口例子采用這種方案 見 bsp_ad7606.c 文件
配置CVA CVB 引腳為PWM輸出模式,周期設置為需要的采樣頻率; ---> 之后MCU將產生周期非常穩定的AD轉換信號
將BUSY口線設置為中斷下降沿觸發模式;
外部中斷ISR
{
中斷入口;
讀取8個通道的采樣結果保存到RAM;
中斷返回;
}
【軟件定時采集的實現方案1和方案2的差異】
(1)方案1 可以少用 BUSY口線, 但是其他中斷服務程序或者主程序臨時關閉全局中斷時,可能導致ADC轉換周期存在輕微抖動。
(2)方案2 可以確保采集時鐘的穩定性,因為它是MCU硬件產生的。但是需要多接一根 BUSY口線。
單片機源程序如下:
#include "stm32f10x.h"
#include <stdio.h>
#include "bsp.h"
#include "bsp_spi_ad7606.h"
#include "bsp_timer.h"
FIFO_T g_tAD; /* 定義一個交換緩沖區,用于存儲AD采集數據,并用于寫入SD卡 */
void bsp_TIM4_Configuration(void);
/*
*********************************************************************************************************
* 函 數 名: bsp_InitAD7606
* 功能說明: 初始化AD7606 SPI口線
* 形 參:無
* 返 回 值: 無
*********************************************************************************************************
*/
void bsp_InitAD7606(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
/* AD_SPI_CS_GPIO, AD_SPI_MOSI_GPIO, AD_SPI_MISO_GPIO, AD_SPI_DETECT_GPIO
and AD_SPI_SCK_GPIO Periph clock enable */
RCC_APB2PeriphClockCmd(AD_CS_GPIO_CLK | AD_SPI_MISO_GPIO_CLK | AD_SPI_SCK_GPIO_CLK
, ENABLE);
/* AD_SPI Periph clock enable */
RCC_APB1PeriphClockCmd(AD_SPI_CLK, ENABLE);
/* Configure AD_SPI pins: SCK */
GPIO_InitStructure.GPIO_Pin = AD_SPI_SCK_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(AD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
/* Configure AD_SPI pins: MISO */
GPIO_InitStructure.GPIO_Pin = AD_SPI_MISO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(AD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = AD_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(AD_CS_GPIO_PORT, &GPIO_InitStructure);
/* AD_SPI Config */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
//SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Rx;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(AD_SPI, &SPI_InitStructure);
SPI_Cmd(AD_SPI, ENABLE); /* AD_SPI enable */
/* 配置其它的GPIO */
/* 使能GPIO時鐘 */
RCC_APB2PeriphClockCmd(AD_RESET_GPIO_CLK | AD_CONVST_GPIO_CLK | AD_OS0_GPIO_CLK
| AD_OS1_GPIO_CLK | AD_OS2_GPIO_CLK, ENABLE);
/* 配置RESET GPIO */
GPIO_InitStructure.GPIO_Pin = AD_RESET_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(AD_RESET_GPIO_PORT, &GPIO_InitStructure);
/* 配置CONVST GPIO */
GPIO_InitStructure.GPIO_Pin = AD_CONVST_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(AD_CONVST_GPIO_PORT, &GPIO_InitStructure);
/* 配置OS0-2 GPIO */
GPIO_InitStructure.GPIO_Pin = AD_OS0_PIN;
GPIO_Init(AD_OS0_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = AD_OS1_PIN;
GPIO_Init(AD_OS1_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = AD_OS2_PIN;
GPIO_Init(AD_OS2_GPIO_PORT, &GPIO_InitStructure);
/* 設置過采樣模式 */
ad7606_SetOS(0);
/* 設置GPIO的初始狀態 */
ad7606_Reset(); /* 硬件復位復AD7606 */
AD_CONVST_HIGH(); /* CONVST腳設置為高電平 */
bsp_TIM4_Configuration(); /* 配置TIM2定時中斷 */
}
/*
*********************************************************************************************************
* 函 數 名: ad7606_Reset
* 功能說明: 硬件復位AD7606
* 形 參:無
* 返 回 值: 無
*********************************************************************************************************
*/
void ad7606_Reset(void)
{
/* AD7606是高電平復位,要求最小脈寬50ns */
AD_RESET_LOW();
AD_RESET_HIGH();
AD_RESET_HIGH();
AD_RESET_HIGH();
AD_RESET_HIGH();
AD_RESET_LOW();
}
/*
*********************************************************************************************************
* 函 數 名: ad7606_SetOS
* 功能說明: 設置過采樣模式(數字濾波,硬件求平均值)
* 形 參:_ucMode : 0-6 0表示無過采樣,1表示2倍,2表示4倍,3表示8倍,4表示16倍
* 5表示32倍,6表示64倍
* 返 回 值: 無
*********************************************************************************************************
*/
void ad7606_SetOS(uint8_t _ucMode)
{
if (_ucMode == 1)
{
AD_OS2_0();
AD_OS1_0();
AD_OS0_1();
}
else if (_ucMode == 2)
{
AD_OS2_0();
AD_OS1_1();
AD_OS0_0();
}
else if (_ucMode == 3)
{
AD_OS2_0();
AD_OS1_1();
AD_OS0_1();
}
else if (_ucMode == 4)
{
AD_OS2_1();
AD_OS1_0();
AD_OS0_0();
}
else if (_ucMode == 5)
{
AD_OS2_1();
AD_OS1_0();
AD_OS0_1();
}
else if (_ucMode == 6)
{
AD_OS2_1();
AD_OS1_1();
AD_OS0_0();
}
else /* 按0處理 */
{
AD_OS2_0();
AD_OS1_0();
AD_OS0_0();
}
}
/*
*********************************************************************************************************
* 函 數 名: ad7606_StartConv
* 功能說明: 啟動AD7606的ADC轉換
* 形 參:無
* 返 回 值: 無
*********************************************************************************************************
*/
void ad7606_StartConv(void)
{
/* 上升沿開始轉換,低電平持續時間至少25ns */
AD_CONVST_LOW();
AD_CONVST_LOW();
AD_CONVST_LOW(); /* 連續執行2次,低電平約50ns */
AD_CONVST_HIGH();
}
/*
*********************************************************************************************************
* 函 數 名: bsp_TIM4_Configuration
* 功能說明: 配置TIM4定時器
* 形 參:無
* 返 回 值: 無
*********************************************************************************************************
*/
void bsp_TIM4_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* TIM2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
/* Configure the NVIC Preemption Priority Bits[配置優先級組] */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
/* Enable the TIM2 gloabal Interrupt [允許TIM2全局中斷]*/
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*
*********************************************************************************************************
* 函 數 名: bsp_SET_TIM4_FREQ
* 功能說明: 設置TIM4定時器頻率
* 形 參:_ulFreq : 采樣頻率,單位Hz,
* 返 回 值: 無
*********************************************************************************************************
*/
void bsp_SET_TIM4_FREQ(uint32_t _ulFreq)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
uint16_t usPrescaler;
uint16_t usPeriod;
TIM_DeInit(TIM4); /* 復位TIM2定時器 */
/* TIM2 configuration
TIM2CLK = 36 MHz
*/
if (_ulFreq == 0)
{
return; /* 采樣頻率為0,停止采樣 */
}
else if (_ulFreq <= 100) /* 采樣頻率小于100Hz */
{
usPrescaler = 36000; /* TM2CLK = 72 000 000/36000 = 2000 */
usPeriod = 2000 / _ulFreq;
}
else if (_ulFreq <= 200000) /* 采樣頻率 :100Hz - 200kHz */
{
usPrescaler = 36 - 1; /* TM2CLK = 36 000 000/36 = 2 000 000 */
usPeriod = 2000000 / _ulFreq;
}
else /* 采樣頻率大于 200kHz */
{
return;
}
TIM_TimeBaseStructure.TIM_Period = usPeriod - 1; /* 計數周期 */
TIM_TimeBaseStructure.TIM_Prescaler = usPrescaler; /* 分頻系數 */
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; /* */
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //計數方向向上計數
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
/* Clear TIM2 update pending flag[清除TIM2溢出中斷標志] */
TIM_ClearFlag(TIM4, TIM_FLAG_Update);
TIM_SetCounter(TIM4, 0);
/* Enable TIM2 Update interrupt [TIM2溢出中斷允許]*/
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
/* TIM2 enable counter [允許tim2計數]*/
TIM_Cmd(TIM4, ENABLE);
}
/*
*********************************************************************************************************
* 函 數 名: ad7606_ReadBytes
* 功能說明: 讀取AD7606的采樣結果
* 形 參:
* 返 回 值: 無
*********************************************************************************************************
*/
uint16_t ad7606_ReadBytes(void)
{
uint16_t usData = 0;
/* Wait until the transmit buffer is empty */
while (SPI_I2S_GetFlagStatus(AD_SPI, SPI_I2S_FLAG_TXE) == RESET)
{
}
/* Send the byte */
SPI_I2S_SendData(AD_SPI, 0xFFFF);
/* Wait until a data is received */
while (SPI_I2S_GetFlagStatus(AD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
{
}
/* Get the received data */
usData = SPI_I2S_ReceiveData(AD_SPI);
/* Return the shifted data */
return usData;
}
/*
*********************************************************************************************************
* 函 數 名: ad7606_IRQSrc
* 功能說明: 定時調用本函數,用于讀取AD轉換器數據
* 形 參:無
* 返 回 值: 無
*********************************************************************************************************
*/
void ad7606_IRQSrc(void)
{
uint8_t i;
uint16_t usReadValue;
TIM_ClearFlag(TIM4, TIM_FLAG_Update);
/* 讀取數據
示波器監測,CS低電平持續時間 35us
*/
AD_CS_LOW();
for (i = 0; i < CH_NUM; i++)
{
usReadValue = ad7606_ReadBytes();
if (g_tAD.usWrite < FIFO_SIZE)
{
g_tAD.usBuf[g_tAD.usWrite] = usReadValue;
++g_tAD.usWrite;
}
}
AD_CS_HIGH();
ad7606_StartConv();
}
/*
*********************************************************************************************************
* 函 數 名: GetAdcFormFifo
* 功能說明: 從FIFO中讀取一個ADC值
* 形 參:_usReadAdc : 存放ADC結果的變量指針
* 返 回 值: 1 表示OK,0表示暫無數據
*********************************************************************************************************
*/
uint8_t GetAdcFormFifo(uint16_t *_usReadAdc)
{
uint16_t usWrite;
DISABLE_INT();
usWrite = g_tAD.usWrite;
ENABLE_INT();
if (usWrite != g_tAD.usRead)
{
*_usReadAdc = g_tAD.usBuf[g_tAD.usRead];
DISABLE_INT();
if (++g_tAD.usRead >= FIFO_SIZE)
{
g_tAD.usRead = 0;
}
ENABLE_INT();
return 1;
}
return 0;
}
/*
*********************************************************************************************************
* 函 數 名: ad7606_StartRecord
* 功能說明: 開始采集
* 形 參:_ulFreq : 采樣頻率, 單位 HZ
* 返 回 值: 無
*********************************************************************************************************
*/
void ad7606_StartRecord(uint32_t _ulFreq)
{
//ad7606_Reset(); /* 復位硬件 */
ad7606_StartConv(); /* 啟動采樣,避免第1組數據全0的問題 */
g_tAD.usRead = 0; /* 必須在開啟TIM2之前清0 */
g_tAD.usWrite = 0;
bsp_TIM4_Configuration(); /* 配置TIM2定時中斷 */
bsp_SET_TIM4_FREQ(_ulFreq); /* 設置采樣頻率, 并使能TIM2定時采樣中斷 */
}
/*
*********************************************************************************************************
* 函 數 名: ad7606_StopRecord
* 功能說明: 停止采集
* 形 參:無
* 返 回 值: 無
*********************************************************************************************************
*/
void ad7606_StopRecord(void)
{
/* TIM2 enable counter [允許tim2計數]*/
TIM_Cmd(TIM4, DISABLE);
}
void TIM4_IRQHandler(void)
{
ad7606_IRQSrc();
}
復制代碼
全部資料51hei下載地址:
AD7606數據采集模塊資料(2015-01-22).7z
(3.99 MB, 下載次數: 35)
2022-1-6 04:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1641362416(1).png
(28.4 KB, 下載次數: 106)
下載附件
2022-1-5 14:00 上傳
作者:
溫xyz
時間:
2022-1-13 10:14
到底是7705還是7606?
作者:
wxh126
時間:
2022-11-4 13:33
到底是7705還是7606?
作者:
aa2206
時間:
2022-11-18 15:13
是7705
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1