一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 8104|回复: 3

增量式光栅旋转编码器的4倍频解码

[复制链接]
发表于 2012-3-14 14:49 | 显示全部楼层 |阅读模式
CPLD应用:增量式光栅旋转编码器的4倍频解码
0 n2 e3 k( v. P1 c6 b) u. L' q5 Z$ y" ?6 n  Z' w
刚学了几天的CPLD,上传我的第一个应用,不知道实际工作情况如何,希望高手指点指点,谢谢 , X8 ^3 S! i6 `, _" {

7 p- k- _" w3 }% k1 W+ Q如果CLK时钟频率为25Mhz,则至少可以对输出频率2.5Mhz以下增量式光栅旋转编码器的进行4倍频解码 4 L" Q# R2 K5 Z3 z

; a, l7 \% j. Y) E+ {+ I概念如下:   u, m) a- U9 [& G( u8 t
9 u" u# r2 U, @. F% f& x6 M3 h
增量式光栅旋转编码器分辨率:2500p/r (常用伺服系统的编码器) 1 v/ j" b7 u, @" k
按工作时最大的输出频率为2.5Mhz计算,编码器可以工作到60000r/m,当然这样的旋转速度实际上是很难达到的,实际上的常用的伺服电机最大工作到5000r/m
$ Y# \: L7 A5 b9 N8 w
* ^7 k  d# p0 f( b" X* }CLK:倍频用时钟频率 4 a3 O% I8 x; l5 |9 [
A:编码器A相 6 y. g3 {9 m$ _+ U) k* h- O' D3 E
B:编码器B相
& k9 M$ \' [* ]8 `) {: v# H
9 ^/ `4 h6 }* O: l/ R4 bCP:解码后的脉冲
% i# {: q$ D! A3 w5 H" `4 J% ODIR:旋转方向
; |0 S6 p( {" I. X: @" s8 x* F2 @& \- `: c# \% I- D
仿真图片如下:
; L% w2 V" ]8 K( ~2 d! Q" j  U+ Lhttp://cache.ourdev.cn/bbs_upload782111/files_8/ourdev_178480.PNG% ~6 c& w- K( p' n
% G- \( X8 d6 m4 i3 I1 B6 E
6 L9 q- b0 P. N7 I* A) l
Verilog hdl代码:
4 S- Z; V  r/ o  r1 Y- u2 R2 q$ c& N/ h1 c# j
module decoder(CLK, A, B, CP, DIR); ( H! }, W% I. d: y5 a0 S5 T
input CLK; * u3 _7 i2 G7 i9 B+ `/ Y) p3 V
input A;
! {" n4 a; z  x: o: v/ \input B; $ k/ ?, ]& h1 N+ y; n0 J' m
output CP; % U3 n# r  P8 ^' ~" l2 R/ y, |
output DIR; " J2 g5 Z6 W3 t/ p- g* E  \

: p0 Q8 t' ~" A: Y) ~reg CP;
# \- K2 T* K' r" ?, v, mreg DIR;
2 j$ x( S. O, B( J/ K8 r. m) T
( J" H8 R; V9 T. t. o  a# S& Kwire a_xor_b;
9 P1 {8 t# b7 D- m/ s9 V# y7 |: S% areg a_xor_b_temp;
. a! _$ V4 u- X% Preg[3:0] a_xor_b_counter; ; F- o  ]& r) }: e

. N6 p5 l* [  T7 d! j$ S
& H# i% J: d6 y+ q5 x& G! }+ Kxor (a_xor_b, A, B);        3 n% z% B: i0 U
' ]5 e$ Q* _. h+ s6 ~( _
always @(posedge CLK)
' T4 l- [5 m% ^' V# {( x' _2 {begin       
9 u4 J4 G" `- ~% W! d0 ]if(a_xor_b_temp != a_xor_b)
# Y1 f  e) u* k6 a0 W( n  Ebegin
- w9 f$ u  d6 f6 Y5 D, _) qCP = 1'b1;
" v! I6 [' h+ r1 j4 p6 E, ^$ _, ka_xor_b_temp = a_xor_b;        ; T% n+ l6 Y; w$ u& B8 T% Q6 ]
a_xor_b_counter = 4'b0000; 7 n) {8 q. @( o% e
end ' h# l& h% L& J1 R5 G
else & |5 C& R% c; Z0 w8 J* o
begin
3 ^2 Y  m% z' c, b9 V6 D% \! b, Ga_xor_b_counter = a_xor_b_counter + 4'b0001; 8 r9 x, {- X6 N& t/ t) H
if(a_xor_b_counter >= 4'b0010)                 // 根据实际应用,可以改变a_xor_b_counter上限值来改变输出脉宽
. f3 s4 M4 ], A7 l6 Ubegin
( m) W! m$ V5 n- }7 y! o: V) }) ICP = 1'b0; . K+ w! v2 z: K5 A
end       
3 x. B7 e3 o$ |* {end
. N/ t+ ~  \% ~3 D) h) \4 `end " N8 A4 u9 P* O+ a/ f; i& e) V

1 n* z# ?$ W- S8 d) q8 [+ r& _always @(posedge A) begin 3 m  E: i5 e  x9 H" H8 x: Z8 Q
DIR = ~B; 6 ~  P; q+ q# K$ @1 L5 D
end # y" q4 U1 x, _/ w: a" k

) w9 s( y6 b% |+ d' B4 oendmodule
8 Z8 H! P/ k  m5 `% `  E' d7 j1 H
发表于 2012-3-16 14:44 | 显示全部楼层
楼主能不能科普一下CPLD,比如用啥东西烧写或者下载。还请教这个细分的脉宽是否也是六分之一的编码器的脉宽?
回复

使用道具 举报

 楼主| 发表于 2012-3-16 16:53 | 显示全部楼层
OK回应楼上兄弟的问题
' h6 L5 L3 P" l) }; _, e$ q4 HCPLD(Complex Programmable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统.
6 w8 ]- ^. J2 ~& `! a+ j
6 P5 O3 w. o  j3 i0 y( r' M   CPLD主要是由可编程逻辑宏单元(MC,Macro Cell)围绕中心的可编程互连矩阵单元组成。其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。 发展历史及应用领域  20世纪70年代,最早的可编程逻辑器件--PLD诞生了。其输出结构是可编程的逻辑宏单元,因为它的硬件结构设计可由软件完成(相当于房子盖好后人工设计局部室内结构),因而它的设计比纯硬件的数字电路具有很强的灵活性,但其过于简单的结构也使它们只能实现规模较小的电路。为弥补PLD只能设计小规模电路这一缺陷,20世纪80年代中期,推出了复杂可编程逻辑器件--CPLD。目前应用已深入网络、仪器仪表、汽车电子、数控机床、航天测控设备等方面。 器件特点  它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。CPLD器件已成为电子产品不可缺少的组成部分,它的设计和应用成为电子工程师必备的一种技能。 如何使用  CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统
" I% q& o- |( _* H# [9 V4 d  这里以抢答器为例讲一下它的设计(装修)过程,即芯片的设计流程。CPLD的工作大部分是在电脑上完成的。打开集成开发软件(Altera公司 Max+pluxII)→画原理图、写硬件描述语言(VHDL,Verilog)→编译→给出逻辑电路的输入激励信号,进行仿真,查看逻辑输出结果是否正确→进行管脚输入、输出锁定(7128的64个输入、输出管脚可根据需要设定)→生成代码→通过下载电缆将代码传送并存储在CPLD芯片中。7128这块芯片各管脚已引出,将数码管、抢答开关、指示灯、蜂鸣器通过导线分别接到芯片板上,通电测试,当抢答开关按下,对应位的指示灯应当亮,答对以后,裁判给加分后,看此时数码显示加分结果是否正确,如发现有问题,可重新修改原理图或硬件描述语言,完善设计。设计好后,如批量生产,可直接复制其他CPLD芯片,即写入代码即可。如果要对芯片进行其它设计,比如进行交通灯设计,要重新画原理图、或写硬件描述语言,重复以上工作过程,完成设计。这种修改设计相当于将房屋进行了重新装修,这种装修对CPLD来说可进行上万次。 2 F4 J# ~4 H0 p& B
  家庭成员:经过几十年的发展,许多公司都开发出了CPLD可编程逻辑器件。比较典型的就是Altera、Lattice、Xilinx世界三大权威公司的产品,这里给出常用芯片: Altera EPM7128S (PLCC84) - O; @, L2 e7 ?( {  O; j6 U/ e
  Lattice LC4128V (TQFP100)
  E6 I' x# i2 u5 c  Xilinx XC95108 (PLCC84)
4 P4 o1 R3 m# m编辑本段FPGA与CPLD的辨别和分类  FPGA与CPLD的辨别和分类主要是根据其结构特点和工作原理。通常的分类方法是: 4 @8 H7 b" V8 r' X; l9 K8 k" l# j
  将以乘积项结构方式构成逻辑行为的器件称为CPLD,如Lattice的ispLSI系列、Xilinx的XC9500系列、Altera的MAX7000S系列和Lattice(原Vantis)的Mach系列等。
7 y( W/ Y: U7 N' E8 O# F4 u  将以查表法结构方式构成逻辑行为的器件称为FPGA,如Xilinx的SPARTAN系列、Altera的FLEX10K或ACEX1K系列等。
4 I7 S8 i* N- N# U, f3 ^( t5 v0 G  尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点: ) M) g- H8 t/ T2 L) [; n
  ①CPLD更适合完成各种算法和组合逻辑,FP GA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。
1 u; J/ h1 E; E/ E& Q9 Y- \- T- k  ②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。 - i" X$ r3 Y& a; D, Q7 F( V; i& {
  ③在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FP GA可在逻辑门下编程,而CPLD是在逻辑块下编程。
7 B' t5 d1 V) J+ ?) J* a  ④FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。
+ \- _. O; f1 s& E  ⑤CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。
$ |# B+ w0 n3 w" r7 }* e' n) F  ⑥CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。 ; W! f9 S! e& q
  ⑦在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。
$ D9 _. K6 r) y* a4 q  ⑧CPLD保密性好,FPGA保密性差。 5 E0 b8 O  Z9 J* `
  ⑨一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。
回复

使用道具 举报

 楼主| 发表于 2012-3-16 16:55 | 显示全部楼层
关于CPLD的语言
0 J: L# |- Q/ ~& M* D, [& G关于FPGA和CPLD:1.CPLD早出来,是基于乘积式的 FPGA晚出来,是基于查表式的, 就是说内部结构不一样 2.乘积式对于每次输入都很勤劳的算一遍 查表式根据输入查找对应的结果,是很偷懒的一种 查表式对应的结果哪里来?就是由EDA软件来算的,最后将得到的结果配置到FPGA里.由此可以理解为FPGA就是一个RAM 3.既然是RAM,FPGA就需要配置芯片(譬如FLASH),CPLD不要 4.FPGA门电路数量通常比CPLD多 5.CPLD内部延时固定,FPGA内部延时不固定(在几ns之间变化) 6.如果用于实现组合逻辑,多用CPLD; 用于实现时序逻辑,多用FPGA 当然都用FPGA也可以,不过两者各有各自发挥的优势(价格,功耗等方面) 总之,两者各有各自发挥的优势和适用的场合.虽然硬件结构不同,但是对于编程者来说开发语言却是可以相同的,下面说下开发语言:关于VHDL和verilog:1.VHDL和verilog综合出来效果是不太一样的, 但是对于一般用户没什么区别2.verilog的语法比较灵活(有点像C语言),适合设计规模比较小的系统3.VHDL语法相对来说比较严格,适合比较设计规模比较大的系统4.国内,欧美用verilog比较多,日本据说用VHDL比较多我推荐学verilog,比VHDL语法灵活,更容易上手.
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-28 12:48 , Processed in 0.030194 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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