搜索
bottom↓
回复: 42

【开源】一步步讲解制作STM32与CPLD结合的等精度频率计

  [复制链接]

出0入0汤圆

发表于 2014-6-17 11:36:33 | 显示全部楼层 |阅读模式
  只是业余时间做一做,所以制作跨度可能会到一年以上,为了更方便观看本帖内容请使用论坛的“ 只看该作者”功能




欢迎各位来拍砖,本人长相一般,也不怕你们用砖拍脸,哈哈,有什么想吐槽的尽管说出来
这个帖子适合零基础的人来学,每一步都会慢慢来,因为楼主实力太水说不出什么高深的东西,所以语言上也不会有很多专业的术语。

这块板子以做一个等精度频率计为目标,同时也要能够使用在其他的项目里,故板子将会把引脚尽量全部引出。

很多人会说:直接分别购买CPLD和STM32的最小系统板再用杜邦线连起来不就好了吗?哈哈,楼主也就是在折腾,也是个学习的过程。其实吧这个等精度频率计一块CPLD(或者74系列电路)+数码管就可以解决了,但是还是想学学STM32这个东西,所以就加进来了。

既然要用到CPLD和STM32,CPLD和STM32的做小系统是不能少的,所以先搬运论坛里STM32最小系统的帖子
http://www.amobbs.com/forum.php? ... F%E7%B3%BB%E7%BB%9F
然后再去下载CrazyBingo《从零开始走进FPGA》里面提到的CPLD最小系统
http://www.cnblogs.com/crazybingo/category/312072.html

然后我们就得到了两个原理图:



最小系统就这样愚公移山无耻的解决了


那么频率计是采集外部信号的,外部信号可能是:正弦波、三角波、方波、不规则的波形,外部信号的幅值可能比较大。
那么我们赶紧去抄一份输入信号处理的电路:
http://www.amobbs.com/thread-3595283-1-1.html
我们将红色部分框框内的电路抄下来就可以勉强组成我们的频率计电路啦:




好了,今天就先到这里,明天再说说等精度频率计的核心部分,然后开始用Quartus II 9.0写电路,然后用Quartus II 9.0自带的仿真器做仿真

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-6-17 11:38:26 | 显示全部楼层
谢谢楼主!等待继续开讲....

出0入0汤圆

发表于 2014-6-17 11:56:21 | 显示全部楼层
看了LZ的头像,知道,此贴必火

出0入0汤圆

发表于 2014-6-17 12:08:46 来自手机 | 显示全部楼层
顶起,学习下如何从头到尾做一个小设计

出0入0汤圆

发表于 2014-6-17 14:07:33 | 显示全部楼层
耶?下边那个电路好眼熟

出0入0汤圆

 楼主| 发表于 2014-6-17 18:15:15 | 显示全部楼层
  今天下午有点时间,先讲一下频率计的测量方法吧。
参考《等精度频率计的设计》(原文:)的解释,我简化了写了下来:


测量有三种方法,最后一种误差最小。



解释一下等精度测频法:

主要是用D触发器来控制精度

D触发器时序图


可以看出D改变状态后,Q在输入时钟CP的下一个上升沿才将状态改变为 Q=D;

那么我们用D触发器的Q来控制计数器是否开始计数的时能端E,将被测信号Fx输入到CP中会发生什么?
答案是当触发器的输入端D得到电平,则被测信号Fx下一个上升沿到来时,两个计数器才开始同时开始计数
                    同理输入端D得到电平,则被测信号Fx下一个上升沿到来时,两个计数器才开始同时停止计数

这样有什么好处呢?好处是我们计数器可以测出 被测信号Fx 多个完整的脉冲数。

好了,我们可以准确的测出在Q为高电平时Fx有Nx次电平的变化,但是我们不能测出标准信号Fs在Q为高电平时有Ns次电平变化,Fs电平变化数Ns的误差是+-1个。

那么有 Fx/Nx = Fs/(Ns+-1)

那么我们想提高整个系统的精度的最好办法是延长Q高电平的时间和提高Fs的频率使得 Fx = Fs*Nx/Ns


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-6-17 21:00:15 | 显示全部楼层
非常好,受益匪浅

出0入0汤圆

发表于 2014-6-17 23:27:04 | 显示全部楼层
感谢lz分享。

出0入0汤圆

发表于 2014-6-18 08:15:57 | 显示全部楼层
支持

出0入0汤圆

发表于 2014-6-18 09:19:44 | 显示全部楼层
不错,沙发,加顶,一直想做个这玩意,一直都没有动手

出0入0汤圆

 楼主| 发表于 2014-6-18 10:02:49 | 显示全部楼层
今天做一下仿真
关于Quartus II 9.0 的使用我就不多做阐述了,网上有很多文字的、图文的、视频的教程
再次我就贴出程序和图片


首先是写一个D触发器,虽然Quartus II中有几个现成的D触发器,但是为了一步步来,我们还是严谨一些全部自己写

module D(D,CP,Q);

input  D,CP;
output Q;

reg Q;
always@(posedge CP)
begin
        Q = D;
end

endmodule


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-6-18 10:06:57 | 显示全部楼层
感谢楼主分享!

出0入0汤圆

 楼主| 发表于 2014-6-18 11:24:41 | 显示全部楼层
然后是同步计数器  用了27bit,计数到了100663296时CO将输出高电平通知单片机拉低计D触发器D端

这是标准频率Fs的计数器CNT27bit_Fs,同理可得被测信号Fx的计数器CNT27bit_Fx
module CNT27bit_Fs(CP,E,CLR,CO,Q);

input  CP,E,CLR;
output[26:0]  Q;
output       CO;
reg[26:0]     Q;
reg          CO;

always@(posedge CP)
        if(CLR)       
        begin Q = 0; end
        else
        begin
                if(E)
                begin
                        Q = Q + 1'b1;
                        if(Q == 27'b110_0000_0000_0000_0000_0000_0000)
                        begin CO = 1; end
                        else
                        begin CO = 0; end
                end
                else
                begin Q = Q; end
        end

endmodule






完成后就将D触发器和计数器组合起来

编译后

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-6-18 11:32:53 | 显示全部楼层
这个是总框架的仿真图




后面的事情就是开始画CPLD和STM32的电路板了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-6-18 16:36:53 来自手机 | 显示全部楼层
支持下,前面的图是我以前发的帖子哈

出0入0汤圆

 楼主| 发表于 2014-6-18 21:41:32 | 显示全部楼层
dearterry30 发表于 2014-6-18 16:36
支持下,前面的图是我以前发的帖子哈

哈哈,谢谢原作者支持哈,就是看了你的帖子我才觉得频率计原来如此简单

出0入0汤圆

发表于 2014-6-19 17:50:00 | 显示全部楼层
支持lz!

出100入101汤圆

发表于 2014-6-19 20:10:00 | 显示全部楼层
图文并茂,不错!

出0入0汤圆

发表于 2014-6-19 22:15:21 | 显示全部楼层
分享一个小经验,STM32 和CPLD通信的几条线上必须串100左右电阻,避免程序烧写时候管教电平冲突,引起烧管脚现象

出0入0汤圆

发表于 2014-6-19 22:17:11 来自手机 | 显示全部楼层
貌似是好东西,先占个位

出0入0汤圆

 楼主| 发表于 2014-6-19 22:44:10 | 显示全部楼层
RAMILE 发表于 2014-6-19 22:15
分享一个小经验,STM32 和CPLD通信的几条线上必须串100左右电阻,避免程序烧写时候管教电平冲突,引起烧管 ...

谢谢提醒

出0入0汤圆

发表于 2014-7-8 13:21:33 | 显示全部楼层
刚好打算做一个,来学习借鉴一下

出0入0汤圆

发表于 2014-7-8 16:12:16 | 显示全部楼层
楼主辛苦了。

出0入0汤圆

发表于 2014-7-8 17:29:07 | 显示全部楼层
mark.....

出0入0汤圆

 楼主| 发表于 2014-7-8 22:51:41 | 显示全部楼层
这帖子估计要太监了,已经不在学校了,家里没有仪器没有板子,下班也没什么时间倒腾了。
不过关键的CPLD部分已经做好,传上源文件,需要的同志拿去便是

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-7-8 23:29:55 来自手机 | 显示全部楼层
altera有计数器的ip  ,可以试试

出0入0汤圆

发表于 2014-9-24 11:02:39 | 显示全部楼层
讲得很不错。谢谢

出0入0汤圆

发表于 2014-9-24 11:42:27 | 显示全部楼层
CPLD的分频器建议用多级分频的方式。这样相对于大的分频系数的分配的频率能支持的更高。

出0入0汤圆

发表于 2014-9-24 11:46:44 | 显示全部楼层
收藏,谢谢分享

出0入0汤圆

发表于 2014-9-24 11:57:17 | 显示全部楼层
如果把STM32换成8051,那就是我11年前参加电子设计大赛时的题目了

出0入0汤圆

发表于 2014-9-24 13:07:44 | 显示全部楼层
谢谢  分享。。。

出0入0汤圆

发表于 2014-12-16 23:26:12 | 显示全部楼层
mark频率计

出0入0汤圆

发表于 2014-12-16 23:30:08 | 显示全部楼层
写的很不错 ,STM32 与cpld的结合

出0入0汤圆

发表于 2015-1-5 09:03:07 | 显示全部楼层
很不错学习了
就是成本高了点

出0入0汤圆

发表于 2015-1-5 09:23:43 | 显示全部楼层
不错 学习一下

出0入0汤圆

发表于 2015-8-12 02:26:38 来自手机 | 显示全部楼层
很给力的干货

出0入0汤圆

发表于 2018-9-4 17:08:54 | 显示全部楼层
eva015401 发表于 2014-6-17 18:15
  今天下午有点时间,先讲一下频率计的测量方法吧。
参考《等精度频率计的设计》(原文:)的解释,我简 ...


请教一下这里的Delay()为多少合适,依据什么来设定



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-9-4 17:27:59 | 显示全部楼层
Mark:STM32与CPLD结合的等精度频率计  支持

出0入0汤圆

发表于 2018-9-4 21:25:14 | 显示全部楼层
非常好,受益匪浅

出0入0汤圆

发表于 2018-9-4 22:02:07 | 显示全部楼层
还有接口问题

出0入0汤圆

发表于 2018-9-5 19:48:40 来自手机 | 显示全部楼层
有是挖坟

出0入0汤圆

发表于 2018-9-8 09:51:34 来自手机 | 显示全部楼层
前几天坛子里有人讨论

出0入0汤圆

发表于 2019-9-2 11:51:27 | 显示全部楼层
楼主太强悍太有创意了,膜拜中
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 03:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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