327 lines
8.1 KiB
C
327 lines
8.1 KiB
C
![]() |
#include "VM_AD7606.h"
|
|||
|
#include "delay.h"
|
|||
|
#include "usart.h"
|
|||
|
#include "VM_Sampling_Control.h"
|
|||
|
|
|||
|
uint8_t AD_Data_Arr[16448];
|
|||
|
uint8_t AD7606_Sampling_Flag = 0; //AD<41>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ 0: ֹͣ<CDA3>ɼ<EFBFBD>; 1: <20><>ʼ<EFBFBD>ɼ<EFBFBD>
|
|||
|
uint16_t AD_Arr_Num = 4; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD>ñ<EFBFBD>־
|
|||
|
uint16_t AD_Tim_Num = 0; //AD<41>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint16_t AD7606_SFC = 4; //AD<41><44><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
|
|||
|
uint16_t AD7606_SONC = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
int16_t AD7606_DATA_Arr = 0; //<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ݴ<EFBFBD>ȡ<EFBFBD><C8A1>
|
|||
|
|
|||
|
|
|||
|
//AD7606<30><36><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
void AD7606_Init(void){
|
|||
|
|
|||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
|||
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
|||
|
__HAL_RCC_GPIOG_CLK_ENABLE();
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.Mode = GPIO_MODE_INPUT;//<2F><><EFBFBD><EFBFBD>ģʽ
|
|||
|
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; //<2F>ٶ<EFBFBD>50MHz
|
|||
|
GPIO_InitStructure.Pull = GPIO_NOPULL; //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//PD DB0 DB1 DB2
|
|||
|
GPIO_InitStructure.Pin = AD7606_DB0| AD7606_DB1| AD7606_DB2;
|
|||
|
HAL_GPIO_Init(GPIOD,&GPIO_InitStructure);
|
|||
|
|
|||
|
//PA DB3 DB4 DB5 DB6
|
|||
|
GPIO_InitStructure.Pin = AD7606_DB3| AD7606_DB4| AD7606_DB5| AD7606_DB6;
|
|||
|
HAL_GPIO_Init(GPIOA,&GPIO_InitStructure);
|
|||
|
|
|||
|
//PC DB7 DB8 DB9 DB10
|
|||
|
GPIO_InitStructure.Pin = AD7606_DB7| AD7606_DB8| AD7606_DB9| AD7606_DB10;
|
|||
|
HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);
|
|||
|
|
|||
|
//PG DB11 DB12 DB13 BUSY FRSTDATA
|
|||
|
GPIO_InitStructure.Pin = AD7606_DB11| AD7606_DB12| AD7606_DB13| AD7606_BUSY| AD7606_FRSTDATA;
|
|||
|
HAL_GPIO_Init(GPIOG,&GPIO_InitStructure);
|
|||
|
|
|||
|
//PB DB14 DB15
|
|||
|
GPIO_InitStructure.Pin = AD7606_DB14| AD7606_DB15;
|
|||
|
HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;//<2F><><EFBFBD><EFBFBD>ģʽ
|
|||
|
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; //<2F>ٶ<EFBFBD>50MHz
|
|||
|
GPIO_InitStructure.Pull = GPIO_NOPULL; //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//PB CONVST RANGE
|
|||
|
GPIO_InitStructure.Pin = AD7606_CONVST| AD7606_RANGE;
|
|||
|
HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);
|
|||
|
|
|||
|
//PE OS0 OS1 OS2 BYTE_SEL STBY
|
|||
|
GPIO_InitStructure.Pin = AD7606_OS0| AD7606_OS1| AD7606_OS2| AD7606_STBY| AD7606_BYTE_SEL;
|
|||
|
HAL_GPIO_Init(GPIOE,&GPIO_InitStructure);
|
|||
|
|
|||
|
//PG RESET RD CS
|
|||
|
GPIO_InitStructure.Pin = AD7606_RESET| AD7606_RD| AD7606_CS;
|
|||
|
HAL_GPIO_Init(GPIOG,&GPIO_InitStructure);
|
|||
|
|
|||
|
|
|||
|
AD7606_Config();
|
|||
|
}
|
|||
|
|
|||
|
//AD7606<30><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void AD7606_Config(void){
|
|||
|
delay_us(1); //<2F><>ʱ<EFBFBD>ȴ<EFBFBD>AD7606<30>ϵ<EFBFBD>
|
|||
|
AD7606_Reset(); //<2F>ϵ縴λ
|
|||
|
AD7606_STBY_NORMAL(); //<2F><><EFBFBD><EFBFBD>ģʽ
|
|||
|
AD7606_RANGE_5V(); //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>뷶Χ <20><><EFBFBD><EFBFBD>5V
|
|||
|
AD7606_PRL(); //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
|||
|
AD7606_Semples(AD7606_SEMPLE_200K); //0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
AD7606_Reset(); //<2F>ϵ縴λ
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OS[2:0]
|
|||
|
void AD7606_Semples(u8 AD7606_Semp_Select){
|
|||
|
switch(AD7606_Semp_Select){
|
|||
|
case AD7606_SEMPLE_200K: //000
|
|||
|
AD7606_OS2_LOW();
|
|||
|
AD7606_OS1_LOW();
|
|||
|
AD7606_OS0_LOW();
|
|||
|
break;
|
|||
|
case AD7606_SEMPLE_100K: //001
|
|||
|
AD7606_OS2_LOW();
|
|||
|
AD7606_OS1_LOW();
|
|||
|
AD7606_OS0_HIGH();
|
|||
|
break;
|
|||
|
case AD7606_SEMPLE_50K: //010
|
|||
|
AD7606_OS2_LOW();
|
|||
|
AD7606_OS1_HIGH();
|
|||
|
AD7606_OS0_LOW();
|
|||
|
break;
|
|||
|
case AD7606_SEMPLE_25K: //011
|
|||
|
AD7606_OS2_LOW();
|
|||
|
AD7606_OS1_HIGH();
|
|||
|
AD7606_OS0_HIGH();
|
|||
|
break;
|
|||
|
case AD7606_SEMPLE_12K5: //100
|
|||
|
AD7606_OS2_HIGH();
|
|||
|
AD7606_OS1_LOW();
|
|||
|
AD7606_OS0_LOW();
|
|||
|
break;
|
|||
|
case AD7606_SEMPLE_6K25: //101
|
|||
|
AD7606_OS2_HIGH();
|
|||
|
AD7606_OS1_LOW();
|
|||
|
AD7606_OS0_HIGH();
|
|||
|
break;
|
|||
|
case AD7606_SEMPLE_3K125: //110
|
|||
|
AD7606_OS2_HIGH();
|
|||
|
AD7606_OS1_HIGH();
|
|||
|
AD7606_OS0_LOW();
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void AD7606_Data_Pro(uint8_t *Data){
|
|||
|
AD7606_DATA_Arr = HAL_GPIO_ReadPin(GPIOD, AD7606_DB0)|
|
|||
|
HAL_GPIO_ReadPin(GPIOD, AD7606_DB1) << 1|
|
|||
|
HAL_GPIO_ReadPin(GPIOD, AD7606_DB2) << 2|
|
|||
|
HAL_GPIO_ReadPin(GPIOA, AD7606_DB3) << 3|
|
|||
|
HAL_GPIO_ReadPin(GPIOA, AD7606_DB4) << 4|
|
|||
|
HAL_GPIO_ReadPin(GPIOA, AD7606_DB5) << 5|
|
|||
|
HAL_GPIO_ReadPin(GPIOA, AD7606_DB6) << 6|
|
|||
|
HAL_GPIO_ReadPin(GPIOC, AD7606_DB7) << 7|
|
|||
|
HAL_GPIO_ReadPin(GPIOC, AD7606_DB8) << 8|
|
|||
|
HAL_GPIO_ReadPin(GPIOC, AD7606_DB9) << 9|
|
|||
|
HAL_GPIO_ReadPin(GPIOC, AD7606_DB10) << 10|
|
|||
|
HAL_GPIO_ReadPin(GPIOG, AD7606_DB11) << 11|
|
|||
|
HAL_GPIO_ReadPin(GPIOG, AD7606_DB12) << 12|
|
|||
|
HAL_GPIO_ReadPin(GPIOG, AD7606_DB13) << 13|
|
|||
|
HAL_GPIO_ReadPin(GPIOB, AD7606_DB14) << 14|
|
|||
|
HAL_GPIO_ReadPin(GPIOB, AD7606_DB15) << 15;
|
|||
|
|
|||
|
Data[0] = AD7606_DATA_Arr >> 8;
|
|||
|
Data[1] = AD7606_DATA_Arr;
|
|||
|
}
|
|||
|
|
|||
|
//AD7606<30><36>λ<EFBFBD>ź<EFBFBD>
|
|||
|
void AD7606_Reset(void){
|
|||
|
/* AD7606<30>Ǹߵ<C7B8>ƽ<EFBFBD><C6BD>λ<EFBFBD><CEBB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>50ns ָ<><D6B8>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>Ϊ60ns*/
|
|||
|
AD7606_RST_LOW();
|
|||
|
|
|||
|
AD7606_RST_HIGH();
|
|||
|
|
|||
|
AD7606_RST_LOW();
|
|||
|
}
|
|||
|
|
|||
|
//AD7606<30><36>ʼת<CABC><D7AA><EFBFBD>ź<EFBFBD>
|
|||
|
void AD7606_Start_Convst(void){
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>25ns */
|
|||
|
AD7606_CONVST_HIGH();
|
|||
|
//delay_us(1);
|
|||
|
|
|||
|
AD7606_CONVST_LOW();
|
|||
|
//delay_us(1);
|
|||
|
|
|||
|
AD7606_CONVST_HIGH();
|
|||
|
}
|
|||
|
|
|||
|
//AD7606<30><36><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ź<EFBFBD>
|
|||
|
void AD7606_End_Convst(void){
|
|||
|
AD7606_CONVST_HIGH();
|
|||
|
//delay_us(1);
|
|||
|
|
|||
|
AD7606_CONVST_LOW();
|
|||
|
//delay_us(1);
|
|||
|
|
|||
|
AD7606_CONVST_HIGH();
|
|||
|
}
|
|||
|
|
|||
|
//AD7606<30><36>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
void AD7606_Read(uint8_t *Data){
|
|||
|
|
|||
|
int j = 0;
|
|||
|
AD7606_CS_HIGH();
|
|||
|
AD7606_RD_HIGH();
|
|||
|
|
|||
|
AD7606_Start_Convst(); //<2F><>ʼת<CABC><D7AA>
|
|||
|
//delay_us(1);
|
|||
|
|
|||
|
while(AD7606_BUSY_STATE){}//<2F>ȴ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//delay_us(1);
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
AD7606_CS_LOW(); //<2F><><EFBFBD><EFBFBD>CS<43><53> <><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>ȡ
|
|||
|
AD7606_RD_LOW(); //<2F><><EFBFBD><EFBFBD>RD<52><44> <20>ȴ<EFBFBD>FRSTDATA<54><41>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ
|
|||
|
// while(!AD7606_FRST_STATE){}
|
|||
|
//delay_us(1);
|
|||
|
|
|||
|
for(j=0; j<8; j++){
|
|||
|
AD7606_Data_Pro( &Data[AD_Arr_Num + (j*1028)] );
|
|||
|
|
|||
|
AD7606_RD_HIGH(); //<2F>л<EFBFBD>RD<52><44>״̬ <><D7BC><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>һͨ<D2BB><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
AD7606_RD_LOW();
|
|||
|
}
|
|||
|
|
|||
|
AD_Arr_Num += 2;
|
|||
|
|
|||
|
//<2F><><EFBFBD>ݻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
AD7606_CS_HIGH();
|
|||
|
AD7606_RD_HIGH();
|
|||
|
|
|||
|
CDC_Data_Send();
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ֽ<EFBFBD>
|
|||
|
void Float_to_Byte(float data, uint8_t *arr){
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
union{
|
|||
|
float float_val;
|
|||
|
|
|||
|
struct{
|
|||
|
uint8_t low_byte;
|
|||
|
uint8_t mlow_byte;
|
|||
|
uint8_t mhigh_byte;
|
|||
|
uint8_t high_byte;
|
|||
|
}byte_arr;
|
|||
|
|
|||
|
}Float_Byte;
|
|||
|
|
|||
|
//<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Float_Byte.float_val = data;
|
|||
|
|
|||
|
//<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
arr[0] = Float_Byte.byte_arr.high_byte;
|
|||
|
arr[1] = Float_Byte.byte_arr.mhigh_byte;
|
|||
|
arr[2] = Float_Byte.byte_arr.mlow_byte;
|
|||
|
arr[3] = Float_Byte.byte_arr.low_byte;
|
|||
|
}
|
|||
|
|
|||
|
void Data_to_ADbuf(void){
|
|||
|
AD_Data_Arr[1028*0 + 0] = 0x00;
|
|||
|
AD_Data_Arr[1028*0 + 1] = 0x00;
|
|||
|
AD_Data_Arr[1028*0 + 2] = 0x00;
|
|||
|
AD_Data_Arr[1028*0 + 3] = 0x00;
|
|||
|
|
|||
|
AD_Data_Arr[1028*1 + 0] = 0x01;
|
|||
|
AD_Data_Arr[1028*1 + 1] = 0x01;
|
|||
|
AD_Data_Arr[1028*1 + 2] = 0x01;
|
|||
|
AD_Data_Arr[1028*1 + 3] = 0x01;
|
|||
|
|
|||
|
AD_Data_Arr[1028*2 + 0] = 0x02;
|
|||
|
AD_Data_Arr[1028*2 + 1] = 0x02;
|
|||
|
AD_Data_Arr[1028*2 + 2] = 0x02;
|
|||
|
AD_Data_Arr[1028*2 + 3] = 0x02;
|
|||
|
|
|||
|
AD_Data_Arr[1028*3 + 0] = 0x03;
|
|||
|
AD_Data_Arr[1028*3 + 1] = 0x03;
|
|||
|
AD_Data_Arr[1028*3 + 2] = 0x03;
|
|||
|
AD_Data_Arr[1028*3 + 3] = 0x03;
|
|||
|
|
|||
|
AD_Data_Arr[1028*4 + 0] = 0x04;
|
|||
|
AD_Data_Arr[1028*4 + 1] = 0x04;
|
|||
|
AD_Data_Arr[1028*4 + 2] = 0x04;
|
|||
|
AD_Data_Arr[1028*4 + 3] = 0x04;
|
|||
|
|
|||
|
AD_Data_Arr[1028*5 + 0] = 0x05;
|
|||
|
AD_Data_Arr[1028*5 + 1] = 0x05;
|
|||
|
AD_Data_Arr[1028*5 + 2] = 0x05;
|
|||
|
AD_Data_Arr[1028*5 + 3] = 0x05;
|
|||
|
|
|||
|
AD_Data_Arr[1028*6 + 0] = 0x06;
|
|||
|
AD_Data_Arr[1028*6 + 1] = 0x06;
|
|||
|
AD_Data_Arr[1028*6 + 2] = 0x06;
|
|||
|
AD_Data_Arr[1028*6 + 3] = 0x06;
|
|||
|
|
|||
|
AD_Data_Arr[1028*7 + 0] = 0x07;
|
|||
|
AD_Data_Arr[1028*7 + 1] = 0x07;
|
|||
|
AD_Data_Arr[1028*7 + 2] = 0x07;
|
|||
|
AD_Data_Arr[1028*7 + 3] = 0x07;
|
|||
|
|
|||
|
AD_Data_Arr[1028*8 + 0] = 0x00;
|
|||
|
AD_Data_Arr[1028*8 + 1] = 0x00;
|
|||
|
AD_Data_Arr[1028*8 + 2] = 0x00;
|
|||
|
AD_Data_Arr[1028*8 + 3] = 0x00;
|
|||
|
|
|||
|
AD_Data_Arr[1028*9 + 0] = 0x01;
|
|||
|
AD_Data_Arr[1028*9 + 1] = 0x01;
|
|||
|
AD_Data_Arr[1028*9 + 2] = 0x01;
|
|||
|
AD_Data_Arr[1028*9 + 3] = 0x01;
|
|||
|
|
|||
|
AD_Data_Arr[1028*10 + 0] = 0x02;
|
|||
|
AD_Data_Arr[1028*10 + 1] = 0x02;
|
|||
|
AD_Data_Arr[1028*10 + 2] = 0x02;
|
|||
|
AD_Data_Arr[1028*10 + 3] = 0x02;
|
|||
|
|
|||
|
AD_Data_Arr[1028*11 + 0] = 0x03;
|
|||
|
AD_Data_Arr[1028*11 + 1] = 0x03;
|
|||
|
AD_Data_Arr[1028*11 + 2] = 0x03;
|
|||
|
AD_Data_Arr[1028*11 + 3] = 0x03;
|
|||
|
|
|||
|
AD_Data_Arr[1028*12 + 0] = 0x04;
|
|||
|
AD_Data_Arr[1028*12 + 1] = 0x04;
|
|||
|
AD_Data_Arr[1028*12 + 2] = 0x04;
|
|||
|
AD_Data_Arr[1028*12 + 3] = 0x04;
|
|||
|
|
|||
|
AD_Data_Arr[1028*13 + 0] = 0x05;
|
|||
|
AD_Data_Arr[1028*13 + 1] = 0x05;
|
|||
|
AD_Data_Arr[1028*13 + 2] = 0x05;
|
|||
|
AD_Data_Arr[1028*13 + 3] = 0x05;
|
|||
|
|
|||
|
AD_Data_Arr[1028*14 + 0] = 0x06;
|
|||
|
AD_Data_Arr[1028*14 + 1] = 0x06;
|
|||
|
AD_Data_Arr[1028*14 + 2] = 0x06;
|
|||
|
AD_Data_Arr[1028*14 + 3] = 0x06;
|
|||
|
|
|||
|
AD_Data_Arr[1028*15 + 0] = 0x07;
|
|||
|
AD_Data_Arr[1028*15 + 1] = 0x07;
|
|||
|
AD_Data_Arr[1028*15 + 2] = 0x07;
|
|||
|
AD_Data_Arr[1028*15 + 3] = 0x07;
|
|||
|
}
|
|||
|
|