如何用ADC采样方式来实现对一个正弦波的采样

yyang0514 2015-05-05 07:49:01
我用的STM32F103的片子,需要对一个正弦波(正弦波输出幅度可控制在2.4~3.3V左右,并且信号很干净)进行采样,目标是对频率准确判断。请问我应该从哪里入手。
问题很空,主要确实不知道应该从哪里问起,请见谅。

如果有现成的算法或例子那就更好了。
...全文
5387 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
stayoyo 2018-09-28
  • 打赏
  • 举报
回复
FFT...........................
yyang0514 2015-05-10
  • 打赏
  • 举报
回复
引用 7 楼 u012586257 的回复:
[quote=引用 4 楼 wangfan027 的回复:] 其实用不着这么麻烦, 你弄个比较器, 比较信号和0V, 然后把比较器输出接到计数器上对比较器输出进行反转计数不就行了么. 只要频率又不要精确的波形不需要那复杂
这个主意好。搭一个迟滞比较器电路(负电平可以直接用二极管隔断,这样不需要双电源),其输出为整形后的脉冲信号,接到单片机外部中断入口,用定时中断控制计时或计数(依信号频率而定)就可以得到频率了[/quote] 我查了一下STM32 有FFT变化的DSP库函数。但是不清楚如何使用,主要有两个问题: 1.ADC初始化之后如何将数据传给pssIn指针。能否如下进行调用。 能否如下实现:

u32 adcin[1024]={0};
   while(1)
   {
     
		for(i=0;i<1024;i++)
		{
			ADC_SoftwareStartConvCmd(ADC1,ENABLE);
			while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
			adcin[i]=ADC_GetConversionValue(ADC1);		
		}
		/*参数pssOUT表示FFT输出数组指针,参数pssIN表示要进行FFT运算的输入数组指针,参数Nbin表示了点数*/
	    cr4_fft_1024_stm32(&X_out[0], &adcin[0], 1024);
		dsp_asm_powerMag();	
		adcx=10000;
		while(adcx--);

   }	
2. 如何将pssout输出的数据转化为频率或幅度。函数只给了头文件,实现用的是汇编,看不懂。 请帮忙看一下。 FFT库函数
	
/*参数pssOUT表示FFT输出数组指针,参数pssIN表示要进行FFT运算的输入数组指针,参数Nbin表示了点数*/
void cr4_fft_256_stm32(void *pssOUT, void *pssIN, uint16_t Nbin);;
dceacho 2015-05-07
  • 打赏
  • 举报
回复
引用 5 楼 yyang0514 的回复:
[quote=引用 4 楼 wangfan027 的回复:] 其实用不着这么麻烦, 你弄个比较器, 比较信号和0V, 然后把比较器输出接到计数器上对比较器输出进行反转计数不就行了么. 只要频率又不要精确的波形不需要那复杂
谢谢,有没有相关文章或方案推荐。[/quote] 这个倒没, 不过就一简单的模拟电路, 你看下LM358的PDF, 就明白怎么弄了
mangoalx 2015-05-07
  • 打赏
  • 举报
回复
引用 4 楼 wangfan027 的回复:
其实用不着这么麻烦, 你弄个比较器, 比较信号和0V, 然后把比较器输出接到计数器上对比较器输出进行反转计数不就行了么. 只要频率又不要精确的波形不需要那复杂
这个主意好。搭一个迟滞比较器电路(负电平可以直接用二极管隔断,这样不需要双电源),其输出为整形后的脉冲信号,接到单片机外部中断入口,用定时中断控制计时或计数(依信号频率而定)就可以得到频率了
yyang0514 2015-05-06
  • 打赏
  • 举报
回复
引用 3 楼 of123 的回复:
[quote=引用 2 楼 yyang0514 的回复:] [quote=引用 1 楼 u012586257 的回复:] 找个FFT的模块来计算频率,应该有现成的
谢谢。追问一下 如何采集正弦波电压为负的情况呢?[/quote] 两种方案: 1 使用 2 个 ADC,其中一个极性反接。 2 将信号的电平抬升,使其波谷大于等于 0。[/quote] 谢谢,我先去看下FFT的算法
yyang0514 2015-05-06
  • 打赏
  • 举报
回复
引用 4 楼 wangfan027 的回复:
其实用不着这么麻烦, 你弄个比较器, 比较信号和0V, 然后把比较器输出接到计数器上对比较器输出进行反转计数不就行了么. 只要频率又不要精确的波形不需要那复杂
谢谢,有没有相关文章或方案推荐。
dceacho 2015-05-06
  • 打赏
  • 举报
回复
其实用不着这么麻烦, 你弄个比较器, 比较信号和0V, 然后把比较器输出接到计数器上对比较器输出进行反转计数不就行了么. 只要频率又不要精确的波形不需要那复杂
of123 2015-05-06
  • 打赏
  • 举报
回复
引用 2 楼 yyang0514 的回复:
[quote=引用 1 楼 u012586257 的回复:] 找个FFT的模块来计算频率,应该有现成的
谢谢。追问一下 如何采集正弦波电压为负的情况呢?[/quote] 两种方案: 1 使用 2 个 ADC,其中一个极性反接。 2 将信号的电平抬升,使其波谷大于等于 0。
yyang0514 2015-05-06
  • 打赏
  • 举报
回复
引用 1 楼 u012586257 的回复:
找个FFT的模块来计算频率,应该有现成的
谢谢。追问一下 如何采集正弦波电压为负的情况呢?
mangoalx 2015-05-05
  • 打赏
  • 举报
回复
找个FFT的模块来计算频率,应该有现成的

27,372

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧