完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
函数说明
本程序采用16位并行模式下对AD7606的8个采样通道进行同步采样,并对采样后的数据进行卡尔曼滤波处理。 GPIO初始化函数 void AD7606Init(void) //AD06060初始化函数 { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC| RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF| RCC_AHB1Periph_GPIOG|RCC_AHB1Periph_GPIOH|RCC_AHB1Periph_GPIOI,ENABLE); //使能GPIOA的时钟 /***********************8GPIO输出配置******************************/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //上拉输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //高速GPIO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_Init(GPIOB,&GPIO_InitStructure);//PB7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_Init(GPIOI,&GPIO_InitStructure);//PI4 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_Init(GPIOE,&GPIO_InitStructure);//PE0,1 /************************GPIO输入配置*********************************/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12; GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4| GPIO_Pin_5|GPIO_Pin_6; GPIO_Init(GPIOD,&GPIO_InitStructure);//PD0,1,2,3,4,5,6 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10; GPIO_Init(GPIOG,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_6|GPIO_Pin_7; GPIO_Init(GPIOI,&GPIO_InitStructure); AD760600_RESET = 0; AD760600_CONVST =1; AD760600_CS = 1; AD760600_RD_SCLK = 1; AD7606驱动函数 /***********************AD760600驱动函数****************************/ void AD760600Reset(void) { AD760600_RESET = 1; delay_us(1); AD760600_RESET = 0; AD760600_CONVST = 0; delay_us(1); AD760600_CONVST = 1; } void AD760600ReadOneSample(u16*Dout,u8 Channels) { u8 i,j; u8 Date; AD760600Reset(); u8 Read_Busy ; Read_Busy = AD760600_BUSY; while(Read_Busy == 1) { Read_Busy = AD760600_BUSY; } AD760600_CS = 0; for(i=0;i《Channels;i++) //Channels 通道数 { AD760600_RD_SCLK = 0; Date = AD760600_DB0《《0|AD760600_DB1《《1|AD760600_DB2《《2|AD760600_DB3《《3|AD760600_DB4《《4|AD760600_DB5《《5| AD760600_DB6《《6|AD760600_DB7《《7|AD760600_DB8《《8|AD760600_DB9《《9|AD760600_DB10《《10|AD760600_DB11《《11|AD760600_DB12《《12| AD760600_DB13|AD760600_DB14《《14|AD760600_DB15《《15; AD760600_RD_SCLK = 1; delay_us(1); Dout[i] = Date; } AD760600_CS = 1; for(j=1;j《=8;j++) { Dout[j] = Kalman(Dout[j]); } } 卡尔曼滤波 #define KalMan_Q 1 #define KalMan_R 1000 float Kalman(float z) { static float x_1; float x_mid = x_1; float x_now; static float p_1; float p_mid = p_1; float p_now; float k; x_mid = x_1; p_mid = p_1 +KalMan_Q; k = p_mid/(p_mid+KalMan_R); x_now = x_mid+k*(z-x_mid); p_now = (1-k)*p_mid; p_1 = p_now; x_1 = x_now; return x_now; } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1100 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1118 浏览 1 评论
551 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
417 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1004 浏览 2 评论
1595浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
265浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
279浏览 3评论
248浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
241浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-17 14:57 , Processed in 0.813646 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号