OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4036|回复: 14

STM32开发板能实现对输入正弦信号非等间隔采样吗?

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-7-3
在线时间
0 小时
发表于 2015-7-3 16:26:34 | 显示全部楼层 |阅读模式
5金钱
如题,请问原子哥能实现对信号的非等间隔采样吗?能否写程序控制ADC对输入电压信号非等间隔采样,eg.ADC采样第一个点后隔时间t1采样第二个点以此类推,采样第十四个点后隔时间t14采样第十五个点,然后以后都用前面提到的t1.....t14采样时间间隔,对一个连续信号进行采样,可以实现吗?ADC可以这样工作吗?请原子哥指教,给出个实现方案,先谢谢了~~~~~坐等回复?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-3 21:24:28 | 显示全部楼层
用delay就可以。
不过速度不能太快。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-7-3
在线时间
0 小时
 楼主| 发表于 2015-7-4 10:29:09 | 显示全部楼层
回复【2楼】正点原子:
---------------------------
如果我的延时的最间隔是回复【2楼】正点原子:
---------------------------------
如果总的采样转换时间为Tconv(us),那么我所使用的最小采样间隔为delay_us(Tconv),其他的采样间隔都>=delay_us(Tconv时,ADC能转换的过来吗?执行命令时是不是也要占用时间?
回复

使用道具 举报

2

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2014-12-29
在线时间
36 小时
发表于 2015-7-4 10:53:45 | 显示全部楼层
按照等间隔采样,然后按照不等间隔取数据就行了。

时间控制一般是用定时器中断吧,你在中断中自己处理这个数据我是要还是不要就可以了

也可以使用dma循环采集,将数据存储在数组中,你按照你需要的间隔去取数据就行了,

但是不知道不等间隔采样有什么用
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-7-3
在线时间
0 小时
 楼主| 发表于 2015-7-4 12:01:37 | 显示全部楼层
回复【4楼】hhlh2l:
---------------------------------
 你说的这个方法我用NI的数字采集卡试过,但是这样还是基于均匀采样抽值的,意义不大;我现在在做周期性非均匀采样,就是设计15个采样点,让ADC用这固定的14个采样间隔循环采样,如果总的采样转换时间为Tconv(us),那么我所使用的最小采样间隔为delay_us(Tconv),其他的采样间隔都>=delay_us(Tconv);我设置的分频因子为6 72/6=12M,采样时间为13.5个周期。主函数和adc的初始化函数如下:请问这样可以实现非均匀采样的功能吗?


 #include "adc.h"
 #include "delay.h"
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//ADC 代码    
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/7
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved   
////////////////////////////////////////////////////////////////////////////////// 
   
   
//初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3    
void  Adc_Init(void)

ADC_InitTypeDef ADC_InitStructure; 
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );   //使能ADC1通道时钟
 

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M

//PA1 作为模拟通道输入引脚                         
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
GPIO_Init(GPIOA, &GPIO_InitStructure);

ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   

  
ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1

ADC_ResetCalibration(ADC1); //使能复位校准  
 
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束

ADC_StartCalibration(ADC1);  //开启AD校准
 
while(ADC_GetCalibrationStatus(ADC1));  //等待校准结束
 
// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能

}   
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)   
{
   //设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_13Cycles5); //ADC1,ADC通道,采样时间为13.5周期        
  
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
 
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
}

/*u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}*/   




#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"  
#include "adc.h"
//ALIENTEK战舰STM32开发板实验17
//ADC 实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司   
 int main(void)
 {  
    u16 adcx;
float temp;
delay_init();       //延时函数初始化   
NVIC_Configuration();   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600);   //串口初始化为9600
  LED_Init();      //LED端口初始化
LCD_Init();  
  Adc_Init();    //ADC初始化

POINT_COLOR=RED;//设置字体为红色 
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"ADC TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2012/9/7");
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");       
LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");        
while(1)
{
//adcx=Get_Adc_Average(ADC_Channel_1,10);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);
//LED0=!LED0;
//delay_ms(250);

delay_us(3);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(3);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(3);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(5);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(4);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(5);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(5);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(5);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(4);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(3);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(5);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(4);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(4);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);

delay_us(3);
adcx=Get_Adc(ADC_Channel_1); 
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);  

}
 }>
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11555
金钱
11555
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-7-4 12:04:32 | 显示全部楼层
回复【4楼】hhlh2l:
---------------------------------

这个方法有创意。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11555
金钱
11555
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-7-4 12:08:22 | 显示全部楼层
回复【5楼】PNS:
---------------------------------

但是这样还是基于均匀采样抽值的,意义不大.......


这句话,是什么道理? AD 采样的间隔,会影响什么?
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-7-3
在线时间
0 小时
 楼主| 发表于 2015-7-4 12:19:14 | 显示全部楼层
回复【7楼】xuande:
---------------------------------
给你举个例子吧,如果用100HZ的均匀采样速度采集数据,按理论值最多能处理50HZ的信号,如果用我们研究的理论设计采样间隔对信号采样,就能用60HZ的平均采样率来处理50HZ信号,大大降低了对ADC采样速度的要求,可以使ADC能够处理频率更高的信号.
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-7-3
在线时间
0 小时
 楼主| 发表于 2015-7-5 13:50:33 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我现在在做周期性非均匀采样,就是设计15个采样点,让ADC用这固定的14个采样间隔循环采样,如果总的采样转换时间为Tconv(us),那么我所使用的最小采样间隔为delay_us(Tconv),其他的采样间隔都>=delay_us(Tconv);我设置的分频因子为6 72/6=12M,采样时间为13.5个周期。主函数和adc的初始化函数如下:请问这样可以实现非均匀采样的功能吗? 坐等回复。。。。。


 #include "adc.h" 
 #include "delay.h" 
//////////////////////////////////////////////////////////////////////////////////   
//本程序只供学习使用,未经作者许可,不得用于其它任何用途 
//ALIENTEK战舰STM32开发板 
//ADC 代码     
//正点原子@ALIENTEK 
//技术论坛:www.openedv.com 
//修改日期:2012/9/7 
//版本:V1.0 
//版权所有,盗版必究。 
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019 
//All rights reserved    
//////////////////////////////////////////////////////////////////////////////////  
    
    
//初始化ADC 
//这里我们仅以规则通道为例 
//我们默认将开启通道0~3     
void  Adc_Init(void) 

ADC_InitTypeDef ADC_InitStructure;  
GPIO_InitTypeDef GPIO_InitStructure; 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );   //使能ADC1通道时钟 
  

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M 

//PA1 作为模拟通道输入引脚                          
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚 
GPIO_Init(GPIOA, &GPIO_InitStructure);

ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值 

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式 
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式 
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式 
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动 
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐 
ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目 
ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器    

   
ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1 

ADC_ResetCalibration(ADC1); //使能复位校准   
  
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束 

ADC_StartCalibration(ADC1);  //开启AD校准 
  
while(ADC_GetCalibrationStatus(ADC1));  //等待校准结束 
  
// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能 

}    
//获得ADC值 
//ch:通道值 0~3 
u16 Get_Adc(u8 ch)    

   //设置指定ADC的规则组通道,一个序列,采样时间 
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_13Cycles5); //ADC1,ADC通道,采样时间为13.5周期         
   
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
  
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 

return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果 


/*u16 Get_Adc_Average(u8 ch,u8 times) 

u32 temp_val=0; 
u8 t; 
for(t=0;t<times;t++) 

temp_val+=Get_Adc(ch); 
delay_ms(5); 

return temp_val/times; 
}*/    




#include "led.h" 
#include "delay.h" 
#include "key.h" 
#include "sys.h" 
#include "lcd.h" 
#include "usart.h"   
#include "adc.h" 
//ALIENTEK战舰STM32开发板实验17 
//ADC 实验   
//技术支持:www.openedv.com 
//广州市星翼电子科技有限公司    
 int main(void) 
 {   
    u16 adcx; 
float temp; 
delay_init();       //延时函数初始化    
NVIC_Configuration();   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 
uart_init(9600);   //串口初始化为9600 
  LED_Init();      //LED端口初始化 
LCD_Init();  
  Adc_Init();    //ADC初始化 

POINT_COLOR=RED;//设置字体为红色  
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"ADC TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); 
LCD_ShowString(60,110,200,16,16,"2012/9/7");
//显示提示信息 
POINT_COLOR=BLUE;//设置字体为蓝色 
LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");        
LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");         
while(1) 

//adcx=Get_Adc_Average(ADC_Channel_1,10); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 
//LED0=!LED0; 
//delay_ms(250); 

delay_us(3); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(3); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(3); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(5); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(4); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(5); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(5); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(5); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(4); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(3); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(5); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(4); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(4); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80); 

delay_us(3); 
adcx=Get_Adc(ADC_Channel_1);  
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 
temp=(float)adcx*(3.3/4096); 
adcx=temp; 
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 
temp-=adcx; 
temp*=1000; 
LCD_ShowxNum(172,150,temp,3,16,0X80);   


 }>
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-5 22:22:26 | 显示全部楼层
回复【3楼】PNS:
---------------------------------
保证采样速度,不高于延时+ADC转换时间即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-7-3
在线时间
0 小时
 楼主| 发表于 2015-7-6 07:56:33 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
延时是指的那部分时间啊?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-6 22:55:37 | 显示全部楼层
回复【11楼】PNS:
---------------------------------
自己加的delay等函数。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-7-3
在线时间
0 小时
 楼主| 发表于 2015-7-7 08:53:08 | 显示全部楼层
我有一个疑问,为什么在单次采样模式下,我调用一次adcx=Get_Adc(ADC_Channel_1); 从串口打印数据为什么会有三个采样值?
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-7-3
在线时间
0 小时
 楼主| 发表于 2015-7-7 08:53:56 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
我有一个疑问,为什么在单次采样模式下,我调用一次adcx=Get_Adc(ADC_Channel_1); 从串口打印数据为什么会有三个采样值?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-7 23:19:14 | 显示全部楼层
回复【14楼】PNS:
---------------------------------
不可能,你哪里搞错了吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 22:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表