最近在做adc128s022的采集,麻烦大神详细解释一下这个adc0832时序图图,说一下思路或者程序参考一下,谢谢

STM32采集ADC128S022误差很大,怎么减小误差_嵌入式_云汉芯城电子工程师论坛-云汉芯城电子工程师社区
发表于& 10:42:09
程序修改后的测试:
实际电压mv
200.004639
214.470947
240.937256
241.403564
231.870117
236.336426
239.802734
236.269043
233.135474
249.201782
254.468213
查看最佳答案
这个家伙很懒,什么也没有留下
上一帖子:
下一帖子:
发表于& 16:37:32
你就拿出这个数据表,没有程序的介绍,没有硬件的介绍,别人怎么帮你看
---------------------HDU_Wireless------------------
----------》》》》▄︻┻┳═一 《《《----------
发表于& 12:55:32
int main(void)
&static uint16_t results[NUM_OF_RESULTS];&&&&
&Init_Usart();
&//GPIO_Configuration();
& SPI_Configuration();
&&for(i=0;i&8;i++)
&&&results[i] = TIADC128S022_ReadChannel0();
&&&tmp+=results[i];
&&&Delay(100);
&&&&& tmp&&=SCALE_FACTOR;
&&& V=tmp*1.0288086;
&&& tmp=0;
&&& printf("%fmvrn",V);
&&& // TI_ADC128S022_ADC_vout&();
u16 TIADC128S022_ReadChannel0(void)
&& //uint16_t data = 0;
&& // uint8_t tmp = 0;
&&& unsigned long Ret = 0;
&&& //tmp = SPI_ReadWriteByte(0);
& // Delay(1000);
&& // data = tmp && 8;
&& // tmp = SPI_ReadWriteByte(0);
&& //& Delay(1000);
&& // data = data +
&&& SPI_ReadWriteByte(0) ;&&&&&& //?è????u±?°?¨u??? 3/4 ?
&//SPI_ReadWriteByte(0X10);&& //1?¨u?
& // SPI_ReadWriteByte(0X08);&& //2?¨u?
&//while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) == 1)
& //&&&&& {
& //&&&&&&&&&&&&& ;
& //&&&&& }
&&&&Ret = ReadTIAD128S022_16BitValue();
&&&&return R
u16 ReadTIAD128S022_16BitValue(void)
&&&&&&& unsigned int DataL = 0;
&&&&&&& unsigned int DataH = 0;
&&&&&&& unsigned int Ret = 0;
DataH = SPI_ReadWriteByte(0xff);
&& Delay(100);
&&& DataH = DataH && 8;
&&& DataL = SPI_ReadWriteByte(0xff);
&&&& Delay(100);
&&& Ret = DataL + DataH;&
&&return R
这个家伙很懒,什么也没有留下
发表于& 12:57:23
这个家伙很懒,什么也没有留下
发表于& 14:48:24
几个可能:
1.ADC的vref管脚电压不准,你好好测测
2.ADC的电压采样输入口的电压测下,你的数据不知道是怎么测得的,不要测滤波器之前的,特别是有运放的时候!
3.你先找找看,找不到再说。。。。。。。。
这个家伙很懒,什么也没有留下
发表于& 09:06:16
从两个方面来解决:
1、用示波器测试一下STM32的ADC基准电压是不是稳定,这个是影响ADC采集波动的最大原因。
2、程序上增加软件滤波,可以增加到16通道的软件滤波,那样效果更好。
祝你早日解决问题。
这个家伙很懒,什么也没有留下
发表于& 13:12:08
[最佳答案]
实际的电压不同,参考电压的vef 也应该变化的,否则就有误差了
日拱一卒,功不唐捐 为者常成,行者常至
发表于& 14:43:26
这个家伙很懒,什么也没有留下
发表于& 23:48:00
采集一路电压精度0.0几mv可以了,采集4路电压值都不对,偏小
这个家伙很懒,什么也没有留下
发表于& 09:13:18
使用AD芯片测得的电压值偏低200mV,确实像是参考电压的问题,测测vref+和vref-(如果有的话)。
Happiness only real when shared.调STM32 SPI采集外部AD
adc128s022的采集,谁有程序参考一下吗,谢谢
[问题点数:20分,结帖人u]
调STM32 SPI采集外部AD
adc128s022的采集,谁有程序参考一下吗,谢谢
[问题点数:20分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。---------------------------------------------------
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
# User specific environment and startup programs
QTDIR=/usr/local/Trolltech/Qt-4.7.3
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
QMAKESPEC=$QTDIR/mkspecs/linux-g++:$QMAKESPEC
Qt_include_QtGui=$QTDIR/include/QtGui:$Qt_include_QtGui:$Qt_include_QtGui
PATH=$HOME/bin:$QTDIR/bin:QMAKESPEC:$PATH
export QTDIR PATH MANPATHLD_LIBRARY_PATH Qt_include_QtGui
-------------------------
[root@man hello]# qmake -project
[root@man hello]# qmake hello.pro
[root@man hello]# make &error.txt 2&&1
前面两个命令都没错,就是make的时候报错:
--------------------------------------
gcc -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.7.3/mkspecs/linux-g++-64 -I. -I/usr/local/Trolltech/Qt-4.7.3/include/QtCore -I/usr/local/Trolltech/Qt-4.7.3/include/QtGui -I/usr/local/Trolltech/Qt-4.7.3/include -I. -I. -o hello.o hello.c
In file included from /usr/local/Trolltech/Qt-4.7.3/include/QtCore/qobjectdefs.h:45,
from /usr/local/Trolltech/Qt-4.7.3/include/QtCore/qobject.h:47,
from /usr/local/Trolltech/Qt-4.7.3/include/QtCore/qcoreapplication.h:45,
from /usr/local/Trolltech/Qt-4.7.3/include/QtGui/qapplication.h:45,
from /usr/local/Trolltech/Qt-4.7.3/include/QtGui/QApplication:1,
from hello.c:1:
/usr/local/Trolltech/Qt-4.7.3/include/QtCore/qnamespace.h:54: 警告:返回类型默认为‘int’
/usr/local/Trolltech/Qt-4.7.3/include/QtCore/qnamespace.h: 在函数‘QT_MODULE’中:
/usr/local/Trolltech/Qt-4.7.3/include/QtCore/qnamespace.h:54: 错误:expected declaration specifiers before ‘namespace’
/usr/local/Trolltech/Qt-4.7.3/include/QtCore/qnamespace.h:1787: 错误:expected declaration specifiers before ‘Q_DECLARE_OPERATORS_FOR_FLAGS’
/usr/local/Trolltech/Qt-4.7.3/include/QtCore/qnamespace.h:1808: 错误:expected declaration specifiers before ‘class’
/usr/local/Trolltech/Qt-4.7.3/include/QtCore/qnamespace.h:1863: 错误:expected declaration specifiers before ‘;’ token
In file included from /usr/local/Trolltech/Qt-4.7.3/include/QtCore/qobject.h:47,
from /usr/local/Trolltech/Qt-4.7.3/include/QtCore/qcoreapplication.h:45,
from /usr/local/Trolltech/Qt-4.7.3/include/QtGui/qapplication.h:45,
from /usr/local/Trolltech/Qt-4.7.3/include/QtGui/QApplication:1
--------------------------------------------------
#include&QApplication&
#include&QLabel&
int main(int arg, char *argv[]){
QApplication app(arg,argv);
QLabel *label = new QLabel("HELLO QT !");
label -& show();
return app.exec();
程序在windowsQt编译正常通过
------解决方案--------------------扩展名 改成 cpp
------解决方案--------------------qt
程序是c++的, 编译的时候使用g++而不是gcc
stm32f10x103ZE查询法串口通信 那位高手给小弟我看一上这段代码有什么有关问题,为什么串口调试没反应
stm32f10x103ZE查询法串口通信 那位高手给我看一下这段代码有什么问题,为什么串口调试没反应#include"stm32f10x_lib.h"void RCC_Configuration(void);void GPIO_Configuration(void);void USART_Configuration(void);void Delay(vu32 nCount){
for(; nCount != 0; nCount--);}int main(void){
RCC_Configuration();
GPIO_Configuration();
USART_Configuration();
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET)
USART_SendData(USART1,USART_ReceiveData(USART1));//pc发送字符然后pc接收
for(i=0;i&500;i++);
}}void RCC_Configuration(void){
ErrorStatus HSEStarUpS
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStarUpStatus =RCC_WaitForHSEStartUp();
if(HSEStarUpStatus==SUCCESS)
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOF,ENABLE);}void GPIO_Configuration(void){
GPIO_InitTypeDef GPIO_InitS
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}void USART_Configuration(void){
USART_InitTypeDef USART_InitS
USART_ClockInitTypeDef USART_ClockInitS
USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_N
USART_InitStructure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_ClockInitStructure.USART_Clock = USART_Clock_D
USART_ClockInitStructure.USART_CPOL = USART_CPOL_L
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2E
USART_ClockInitStructure.USART_LastBit = USART_LastBit_D
USART_ClockInit(USART1, &USART_ClockInitStructure);
USART_Cmd(USART1,ENABLE);
}------解决方案--------------------
这样写,应该没什么问题:if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET){
i = USART_ReceiveData(USART1);
USART_SendData(USART1, number);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == SET);
------解决方案--------------------
这样写,应该没什么问题:if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET){
i = USART_ReceiveData(USART1); USART_SendData(USART1, i);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == SET);
如果您喜欢IT行业或者对IT行业感兴趣,想开拓技术视野,欢迎加入本站官方QQ群:,在群里认识新朋友和交流技术^_^
本站联系邮箱:求大神帮忙看一下这个式子用C语言怎么实现 大致说一下思路和方法 如果能有简单的程序那就更感谢啦_百度知道
求大神帮忙看一下这个式子用C语言怎么实现 大致说一下思路和方法 如果能有简单的程序那就更感谢啦
t-t'×U(y-y'|≤T
≤Yy是矢量 即y=(x,t+t'////2:|t&#39,t)=∫dt'2;2)积分限为;
∫dy'2)U(y+y&#39W(y
我有更好的答案
语言是实现不了你说的这东西的,只不过高数里面的数学公式或者数学方法是需要C语言去封装后才可以实现你现在的式子,当然了,不是实现不了
这个C语言还没这么厉害。C语言只会算加减速乘除,其它都是变为加减速乘除来运算的。
其他类似问题
为您推荐:
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁正在用STM32F107单片机做外部adc128s022的的5路采集_嵌入式_云汉芯城电子工程师论坛-云汉芯城电子工程师社区
发表于& 17:27:38
正在用STM32F107做外部adc128s022的的5路采集,,没有思路谁做过能说说思路或者程序参考一下吗,谢谢
查看最佳答案
这个家伙很懒,什么也没有留下
上一帖子:
下一帖子:
发表于& 19:28:58
大致看了一下adc128s022这个芯片的手册。是一个8通道输入,12bit,串行输出的ADC。下面是它的操作时序
DIN是控制内部寄存器的数据输入,DOUT是AD转化的输出。下面是具体寄存器的数据格式
只要控制ADD2,ADD1,ADD0这三位就可以采集不同通道的模拟电压。然后输出的AD值高位在前,在ADD0这个位载入后,AD值马上就出来了。
---------------------HDU_Wireless------------------
----------》》》》▄︻┻┳═一 《《《----------
发表于& 23:05:47
AD的初始化部分应该怎么写,麻烦你详细讲一下,谢谢
这个家伙很懒,什么也没有留下
发表于& 09:05:32
我也正想学习STM32的单片机采集多路ADC的问题,哈哈……不会帮顶……
今天的付出,是为了明天更好的享受!&
发表于& 12:02:34
既然你用了外置的AD芯片就不需要初始化了。写一个读取AD值的函数。第一步就是下拉CS。选通芯片。然后就开始写控制寄存器。比如写0X00,那么就是采集第一路的AD值,然后把值读出来。时钟是你的主机stm32给的
---------------------HDU_Wireless------------------
----------》》》》▄︻┻┳═一 《《《----------
发表于& 17:49:15
我用的STM32F107是25M晶振,AD芯片的是
0.8 MHz to 3.2 MHz.我应该怎么分频,
用什么方式,看手册是SPI
这个家伙很懒,什么也没有留下
发表于& 20:46:23
[最佳答案]
你可以用stm32的硬件SPI。发送16位的数据,然后也会收到16位的数据,收到数据的低12位就是需要的AD值。
至于时钟分频,SPI操作的结构体中应该有这个参数的吧。
---------------------HDU_Wireless------------------
----------》》》》▄︻┻┳═一 《《《----------
发表于& 10:06:38
extern void Delay(vu32 nCount);
#define NUM_OF_RESULTS&& 8&&& // Number of temp sensor samples to take
#define ADC_CHANNEL&&&&& 0&&& // ADC channel for conversion
#define SCALE_FACTOR&&&& 3&&& // For averaging converted samples
#define ADC12_RATIO&&& 0.805664&& // 00mV ref & 12bit converter, straight binary o/p)
#define ADC_INPUT0&&&&&&& 0
#define ADC_INPUT1&&&&&&& 1
#define ADC_INPUT2&&&&&&& 2
#define ADC_INPUT3&&&&&&& 3
#define ADC_INPUT4&&&&&&& 4
#define ADC_INPUT5&&&&&&& 5
#define ADC_INPUT6&&&&&&& 6
#define ADC_INPUT7&&&&&&& 7
unsigned char ADC_Input& = 0x00;&
unsigned char ADC_Cnt& = 0x00;&
unsigned short ADC_Data& = 0x0000;&&&&&&&&&&
unsigned char ADC_Numbytes = 0x00;
void TI_ADC128S022_Init(void)
&& ADC_Numbytes = 16;
&& ADC_Data& = 0;
&& AD_CS_DISABLE();
&&& AD_SCLK_DISABLE();
&& Delay(1000);
&&& AD_CS_ENABLE();
&&&&switch(NUM_OF_RESULTS)&
&&&case 0:ADC_Input = ADC_INPUT0;&&&&
&&&case 1:ADC_Input = ADC_INPUT1;&&&&&
&&&case 2:ADC_Input = ADC_INPUT2;&&&&&
&&&case 3:ADC_Input = ADC_INPUT3;&&&&&
&&&case 4:ADC_Input = ADC_INPUT4;&&&&&
&&&case 5:ADC_Input = ADC_INPUT5;&&&&&
&&&case 6:ADC_Input = ADC_INPUT6;&&&&&
&&&case 7:ADC_Input = ADC_INPUT7;&&&&
&&&default:&&
&& ADC_Input = 0xe1;
&& for(ADC_Cnt = 0; ADC_Cnt & ADC_N ADC_Cnt++)&
&&&& Delay(1000);&&&
&&&& AD_SCLK_DISABLE();&&
&&&& if (ADC_Cnt&5)
&&&& if(ADC_Input&0x80)&
&&&&&ADC_DOU_ENABLE();
&&&&&&&ADC_DOU_DISABLE();
&&&&&&&&&&& }
&&&&&&ADC_Input &&= 1;
&&&&&&else
&&&&&&&ADC_DOU_DISABLE();
&&&&&&&&&&& }
&&&&&&Delay(1000);
&&&&&&AD_SCLK_ENABLE();
&&&&&&Delay(1000);
&&&&&&&&&& // if(ADC_Cnt &= 4 )
&&&&&//&&ADC_Data &&= 1;&
&&&&&&&&&&&
&&&&&&//if(ADC_DIN_ENABLE)
&&&&&&//&{
&&&&&&//&&& ADC_Data |= 0x0001;
&&&&&&&&&& //&& }
&&&&&&//&else
&&&&&&//&{
&&&&&&&&// ADC_Data &= 0
&&&&&&&&&&& //& }&&&
&&& AD_CS_DISABLE();
&&&&& //AD_SCLK_ENABLE();
&&&& // *adc_data&& = ADC_D
&&& //&&& printf("%d
",ADC_Data);&&&&&&& //这儿打印出来的值是4095
void TI_ADC128S022_ADC_vout&(void)
& static uint16_t results[NUM_OF_RESULTS];&&&&&& // To store ADC output
& static uint32_t sum_adc_data = 0;&&&&&&&&&&&&& // accumulate and avg adc results
& volati&&&&&&&&&&&&&&&&&&& // ADC vout
& for(i=0; i&8;i++)
&&& results[i] = SPI_ReadWriteByte(ADC_CHANNEL); // read and store ADC Channel output&&
&&& sum_adc_data += results[i];&&&&&&&&&&&&&&&&& // accumulate result
&&& Delay(1000);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // acquisition time&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& sum_adc_data &&= SCALE_FACTOR;&&&&&&&&&&&&&&&& // Average the accumulated sum
& vout = sum_adc_data * ADC12_RATIO;&&&&&&&&&&&& // ADC vout&
& sum_adc_data = 0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // Set Breakpoint here & see measured vout&&&&
&&&while(1)
&&printf("%f
",vout);&&&&&&&//这儿打印值是205.444321
&&Delay(5000000);
int main(void)
&Init_Usart();
& SPI_Configuration();
&TI_ADC128S022_Init();
&TI_ADC128S022_ADC_vout();
问题出在哪了,这是我的程序
这个家伙很懒,什么也没有留下
发表于& 10:09:02
你的程序是什么问题?
---------------------HDU_Wireless------------------
----------》》》》▄︻┻┳═一 《《《----------
发表于& 10:11:54
SPI配置,我用的64分频
这个家伙很懒,什么也没有留下
发表于& 10:52:09
你去看下clk一个周期多少时间,算一下就可以知道分多少频的。
---------------------HDU_Wireless------------------
----------》》》》▄︻┻┳═一 《《《----------}

我要回帖

更多关于 adc0832时序图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信