完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
主控为STM32F107VC,7片AD7705用于采集PT100的信号,PT100为三线制,2.5V基准电压通过一个电阻串联到PT100,然后PT100上端接入AD7705的通道,下端接地。AD7705基准电压2.5V,电源5V。测量输入电压88mv左右。设置的参数如下:
程序运行后,输出的AD数据不稳定,刚开始全是65535,然后重新上电后,过几秒种输出数据是18410左右,和计算出来的值差不多,应该是正常值 ,但是运行一会后,输出 数据就全部是0或都一会18410,一会0.请问是什么原因? 16 AD7705_AD[7][2]; 16 PT100_R[7]; 16 PT100_T[7]; GPIO_AD7705( 无效) { GPIO_InitTypeDef GPIO_Init结构; RCC_APB2Periph-Periph-GPIOC(RCC_APB2Periph_GPIOC) RCC_APB2Periph_GPIOD RCC_APB2Periph_GPIOE RCC_APB2Periph_GPIOB, Enable); /* PC 11输入 MISO*/ GPIO_ Init Structure.GPIO_Pin = GPIO_Pin_11; GPIO_Instructure.GPIO_Pin = GPIO_Pin_11; GPIO_Intistructure.GPIO_Pin = GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 GPIO_Init结构.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOC, GPIO_InitStructure); /* PC 12输出 MOSI*/ GPIO_Intiste Struitrationre.GPIO_Pin = GPIO_Pin_12; GPIO_Intistructure.GPIO_Pin = GPIO_Pin_12; GPIO_Intistructure.GPIO_Pin = GPIO_Pin =GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init结构.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOC, GPIO_InitStructure); /* PC 10输出 SCLK*/ GPIO_Intistestructure.GPIO_Pin = GPIO_Pin_10; GPIO_Intistructure.GPIO_Pin = GPIO_Pin_10; GPIO_Intistructure.GPIO_Pin = GPIO_Pin =GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init结构.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOC, GPIO_InitStructure); /* PD 12输出 RST*/ GPIO_Intiste Struitrationre.GPIO_Pin = GPIO_Pin_12; GPIO_Intistructure.GPIO_Pin = GPIO_Pin_12; GPIO_Intistructure.GPIO_Pin = GPIO_Pin =GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init结构.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOD, GPIO_InitStructure); /* PE 3,7,9,11,13,15 DRDY 1 2 3 4 5 6中断输入*/ GPIO_Intistructure.GPIO_Pin = GPIO_Pin_3GPIO_Pin_7GPIO_Pin_9GPIO_Pin_11GPIO_Pin_13GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 GPIO_Init结构.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOE,GPIO_Introductre); /* PD 10 DRDY 7中断输入*/ GPIO_Intistestructure.GPIO_Pin = GPIO_Pin_10; GPIO_Intistructure.GPIO_Pin = GPIO_Pin_10; GPIO_Intistructure.GPIO_Pin = GPIO_Pin =GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 GPIO_Init结构.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOD, GPIO_InitStructure); /* PB 2,10 输出 cs 1 6*/ GPIO_Intistestructure.GPIO_Pin = GPIO_Pin_2GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init结构.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOB,GPIOO_Init结构); /* PE 8,10,12,14 输出 cs 2 3 4 5*/ GPIO_Intistructure.GPIO_Pin = GPIO_Pin_8GPIO_Pin_10GPIO_Pin_Pin_12GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init结构.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOE,GPIO_Introductre); /* PD 11 输出 cs 7*/ GPIO_ Init Structure.GPIO_Pin = GPIO_Pin_11; GPIO_Instructure.GPIO_Pin = GPIO_Pin_11; GPIO_Intistructure.GPIO_Pin = GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init结构.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOD, GPIO_InitStructure); 设置_cs_ad7705_1; 设置_cs_ad7705_2; 设置_cs_ad7705_3; 设置_cs_ad7705_4; 设置_cs_ad7705_5; 设置_cs_ad7705_6; 设置_cs_ad7705_7; } /**AD7705复位**/ 重置7705( u8 ch) 无效 { 未签名字符i; 切换(ch) { 案例1:{ CLR_CS_AD7705_1; 中断;} 默认:中断; } a. 延迟_1.us(100); for(i=0;i<40;i++) { /* 多于连续32个 DIN=1 使串口复位 */ clr_clk_ad7705; 延迟_1us( 20) ; 设置_sdi_ad7705; 延迟_1us( 20) ; set_clk_ad7705; 延迟_1us( 20) ; } 切换(ch) { 例 1:{ SET_CS_AD7705_1; 折断;} 默认:中断; } } /*等待DRDY变低*/ 无效的 AD7705_ WaitDRDY_L( u8 ch) { 切换(ch) { 例 1 :{ 而 (INT_ AD7705_H_ 1); 休息; } 默认:中断; } } /*等待DRDY变高*/ 无效的 AD7705_ WaitDRDY_H( u8 ch) { 切换(ch) { 例 1 :{ 而 (INT_ AD7705_L_ 1); 休息; } 默认:中断; } } /* 功能:向AD7705写入一个字节 ch:输入通道 c :写入数据 */ 写入Byte7705( u8 ch, u8 c) 无效 { u8 tmp_8u,i; mp_8u=c; 切换(ch) { 案例1:{SET_CS_AD7705_1;SET_CLK_AD7705;延迟_1us(20);CLR_CS_AD7705_1;中断;} 默认:中断; } for(i=0; i<8; i++) { a. 延迟_1us(10); clr_clk_ad7705; a. 延迟_1us(10); 如果( (tmp_ 8u 0x80) =0) clr_sdi_ad7705; 其它 设置_sdi_ad7705; tmp_8u <<= 1; a. 延迟_1us(10); set_clk_ad7705; } a. 延迟_1us(10); 切换(ch) { 例 1:{ SET_CS_AD7705_1; 折断;} 默认:中断; } ///写作7705 /* 功能:从AD7705读一个字节 ch:输入通道 返回8位数据 */ u8 读Byte7705( u8 ch) { 8 i; u8 x=0; 切换(ch) { 案例1:{SET_CS_AD7705_1;SET_CLK_AD7705;延迟_1us(20);CLR_CS_AD7705_1;中断;} 默认:中断; } for (i = 0,x=0 ; i < 16 ; i++) { clr_clk_ad7705; a. 延迟_1us(10); x<<=1; (SDO_AD7705_H) x 0x01; set_clk_ad7705; a. 延迟_1us(10); } 切换(ch) { 例 1:{ SET_CS_AD7705_1; 折断;} 默认:中断; } 返回 x; } /* 功能:从AD7705读一个字 ch:输入通道 返回16位数据 */ u16 读Word7705( u8 ch) { 8 i; u16 x=0; 切换(ch) { 案例1:{SET_CS_AD7705_1;SET_CLK_AD7705;延迟_1us(20);CLR_CS_AD7705_1;中断;} 默认:中断; } for (i = 0 ; i < 16 ; i++) { clr_clk_ad7705; 延迟_1us( 20) ; x<<=1; (SDO_AD7705_H) x 0x01; set_clk_ad7705; 延迟_1us( 20) ; } 切换(ch) { 例 1:{ SET_CS_AD7705_1; 折断;} 默认:中断; } 返回 x; } 无效的 AD7705_ Configation( 撤销) { /*初始化IO口*/ gpio_ad7705( ); 延遲_ ms(10); /*硬件复位*/ 设置_rst_ad7705; 延迟_ms(1); clr_rst_ad7705; 延迟_ms(2); 设置_rst_ad7705; 延迟_ms(5); /*同步*/ 重置7705(1); 延迟_ms(5); WriteByte7705(1, 0x20) ; //通道1 ,下一个写时钟寄存器 WriteByte7705(1, 0x04) ; //写时钟寄存器设置更新速率为50Hz WriteByte7705(1, 0x10) ; //通道1 ,下一个写设置寄存器 WriteByte7705(1, 0x5C) ; //写设置寄存器 ,设置成单极性、无缓冲、增益为8、滤波器工作、自校准 ad7705_waitdrdy_l(1); WriteByte7705(1, 0x21) ; //通道2 ,下一个写时钟寄存器 WriteByte7705(1, 0x04) ; //写时钟寄存器设置更新速率为50Hz WriteByte7705(1, 0x11) ; //通道1 ,下一个写设置寄存器 WriteByte7705(1, 0x5C) ; //写设置寄存器 ,设置成单极性、无缓冲、增益为8、滤波器工作、自校准 ad7705_waitdrdy_l(1); } /*获取AD*/ 获取 AAD7705Ad( u8 ch, u8 num) 无效 { 切换(ch) { 案例1: { 如果 (num =1) { ad7705_waitdrdy_l(1); 书写Byte7705(1, 0x38); AD7705_AD[0][0] = 读Word7705(1); ad7705_waitdrdy_h(1); } 其它 { ad7705_waitdrdy_l(1); 书写Byte7705(1, 0x39); AD7705_AD[0][1] = 读Word7705(1); ad7705_waitdrdy_h(1); } 课间休息; } } } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
392 浏览 1 评论
1034 浏览 0 评论
在使用MAX1978对加热电阻进行控温时,温度控不住,一直加热?
897 浏览 2 评论
1949 浏览 2 评论
945 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-31 20:05 , Processed in 0.556827 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号