一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 7484|回复: 0

一种基于CPLD的PWM控制电路设计

[复制链接]
发表于 2009-1-2 20:45 | 显示全部楼层 |阅读模式
在直流伺服控制系统中,通过专用集成芯片或中小规模的数字集成电路构成的传统PWM控制电路往往存在电路设计复杂,体积大,抗干扰能力差以及设计困难、设计周期长等缺点?因此PWM控制电路的模块化、集成化已成为发展趋势.它不仅可以使系统体积减小、重量减轻且功耗降低,同时可使系统的可靠性大大提高.随着电子技术的发展,特别是专用集成电路(ASIC)设计技术的日趋完善,数字化的电子自动化设计(EDA)工具给电子设计带来了巨大变革,尤其是硬件描述语言的出现,解决了传统电路原理图设计系统工程的诸多不便.针对以上情况,本文给出一种基于复杂可编程逻辑器件(CPLD)的PWM控制电路设计和它的仿真波形.
/ Q) r* j7 z& F: @9 ?: y
, S/ c1 a, y  U4 C  1 PWM控制电路基本原理
: `9 ~* A  ~: G
8 P" s2 x% e; F2 K( i  为了实现直流伺服系统的H型单极模式同频PWM可逆控制,一般需要产生四路驱动信号来实现电机的正反转切换控制.当PWM控制电路工作时,其中H桥一侧的两路驱动信号的占空比相同但相位相反,同时随控制信号改变并具有互锁功能;而另一侧上臂为低电平,下臂为高电平.另外,为防止桥路同侧对管的导通,还应当配有延时电路.设计的整体模块见图1所示.其中,d[7:0]矢量用于为微机提供调节占空比的控制信号,cs为微机提供控制电机正反转的控制信号,clk为本地晶振频率,qout[3:0]矢量为四路信号输出.其内部原理图如图2所示. 6 Z- t  U* ^6 p  D8 _( P
  该设计可得到脉冲周期固定(用软件设置分频器I9可改变PWM开关频率,但一旦设置完毕,则其脉冲周期将固定)、占空比决定于控制信号、分辨力为1/256的PWM信号.I8模块为脉宽锁存器,可实现对来自微机的控制信号d[7:0]的锁存,d[7:0]的向量值用于决定PWM信号的占空比.clk本地晶振在经I9分频模块分频后可为PWM控制电路中I12计数器模块和I11延时模块提供内部时钟.I12计数器在每个脉冲的上升沿到来时加1,当计数器的数值为00H或由0FFH溢出时,它将跳到00H时,cao输出高电平至I7触发器模块的置位端,I7模块输出一直保持高电平.当I8锁存器的值与I12计数器中的计数值相同时,信号将通过I13比较器模块比较并输出高电平至I7模块的复位端,以使I7模块输出低电平.当计数器再次溢出时,又重复上述过程.I7为RS触发器,经过它可得到两路相位相反的脉宽调制波,并可实现互锁.I11为延时模块,可防止桥路同侧对管的导通,I10模块为脉冲分配电路,用于输出四路满足设计要求的信号.CS为I10模块的控制信号,用于控制电机的正反转.
$ l4 t+ p) b9 o& }  o$ Y8 e
2 v* `1 M' U+ z8 s9 h4 S* z# K/ S  2 电路设计
( t- P9 x. v6 F3 N" n" y& s& z! U* L: }6 J1 U/ }9 s
  本设计采用的是Lattice半导体公司推出的is-plever开发平台,该开发平台定位于复杂设计的简单工具.它采用简明的设计流程并完整地集成了Leonardo Spectrum的VHDL综合工具和ispVMTM系统,因此,无须第三方设计工具便可完成整个设计流程.在原理设计方面,本设计采用自顶向下、层次化、模块化的设计思想,这种设计思想的优点是符合人们先抽象后具体,先整体后局部的思维习惯.其设计出的模块修改方便,不影响其它模块,且可重复使用,利用率高.本文仅就原理图中的I12计数器模块和I11延迟模块进行讨论.
; {, m* q  l) p) H* L3 m2 m% k. i0 Q1 {
  计数器模块的VHDL程序设计如下:
- j- B/ _8 P! e# d; k2 Z, W% z+ X8 F) w; w1 c& l
  entity counter is
7 ^) p  G2 F* H3 ~' ^, x! w, y+ z$ S, w
  port(clk: in std logic; " ^# d9 S* a# ?4 M( F( [: }! H
& X' o( ^- x5 o& l& H
  Q : out std logic vector(7 downto 0);   K+ B8 K+ B. Q. b

1 o$ O1 \$ J4 |2 [2 F" _# x  cao: out std_logic); " O$ q, y0 _' P" z( E3 e
7 W9 d8 n; g+ F
  end counter; # ^$ z: t& N# D4 F- n% t
. ^0 E% h; X8 X9 r3 B3 t7 y
  architecture a_counter of counter is
8 y9 @; ?' f  o& m* T5 c  e: d# w! i* J6 k% y
  signal Qs: std_logic_vector(7 downto 0);
0 s% \, {) p, Q; u8 H3 n. Q4 _
% L- z) i) P! r2 `  signal reset: std_logic; . w- G* W" D9 u# @& R
$ t6 v& W3 y1 [* L# n6 G2 \: U& B
  signal caolock: std_logic;
% y7 P- S* i! c( X2 ?6 l! M. G  y2 w' q/ y! `8 F# P: [9 D% E
  begin , P, S$ x" m! n% ?8 h

' |3 `; T, i0 D# b/ X  process(clk,reset)
; b, D% ^$ u- j% d
, D' u4 [+ i  q- F" c1 J8 Z1 F/ B- t  begin ' q) E# v! P6 r' C! x1 ?
6 w: r0 R# f1 ^' P4 T% [2 i
  if(reset=‘1')then % R4 d3 K! L+ R; |
3 s8 e1 p& H) `  f, l6 ]
  Qs<=“00000000”; ( @4 O9 J) g  |
3 }, D% T9 s, s: {
  elsif clk'event and clk=‘1' then
  x" O- B. g9 Y! T
: B9 L4 z/ F5 Z- L2 [6 v5 _/ p! i* Z  Qs<=Qs+‘1';
4 K8 n) s6 ]+ M& g& j' y% L2 H) q0 W0 K+ ^
  end if;
* {  ~& a9 v  P% r7 p# G, b/ `$ x  q& e3 R  k* Y
  end process; 9 E( M. ?/ h# I" V% t" ~5 l8 ?' Y9 Z

- v5 ?; J4 }5 `% T  reset<=‘1' when Qs="255" else
" H) l# Y% L; ?' x* X6 w
% S7 s$ Z7 V/ z3 u" U0 x  ‘0'; * M+ E2 _- y, s6 J& V

( v) m. s, Z9 Q, t6 K+ ^. @( ^  caolock<=‘1' when Qs="0" else
5 A7 T; m; `, W  |* A1 J" M( G9 ]! z, R5 d8 I& E
  ‘0';
% d7 R. f# G& ^2 x. ]# m6 @5 v  V) w! z# n! S
  Q<=Qs;
. o2 J% ^3 {# J) P% T( s+ g" W6 }# u3 U/ K% B% b
  cao<=reset or caolock;
" h6 r% c( S0 P  S6 j9 w
' A* Y2 p4 q1 M9 b5 k# c  end a_counter; ; `& o% L- u8 W# O: ~

- M3 U( [" q( o1 ~* l在原理图中,延迟模块必不可少,其功能是对PWM波形的上升沿进行延时,而不影响下降沿,从而确保桥路同侧不会发生短路.其模块的VHDL程序如下:
. k6 g/ n8 E2 }& g1 s6 V
! ?- R( V& w1 `  entity delay is - f) Z4 L# ?; V/ c* `

; I/ D* ]: z( i! T' p: H) X! v/ }  port(clk: in std_logic; " r" N; i7 L( O4 J7 V
, r8 n; @3 V: z6 B6 F$ J1 T3 n3 n
  input: in std_logic_vector(1 downto 0); 9 b; X) w+ }; ~1 v$ Z/ D+ o
* `% H8 [0 N0 _, n6 L
  output:out std_logic_vector(1 downto 0) 9 K; _4 i3 `) Z8 s
" r0 d: ^1 o& F1 B* M( z
  end delay; ( A7 r- O6 Y" A! h4 ]
8 z8 d, k% T$ l  Z
  architecture a_delay of delay is . a- Y. O! P- @
7 z5 \, k) t9 @  K$ t; r4 ^
  signal Q1,Q2,Q3,Q4: std_logic;
# o+ X, A: W0 m; S% _, f
$ _' A0 C+ {) |3 P& J  begin
) d8 m0 e4 O) @# C, Z& B0 b6 j2 x7 }
  process(clk)
% H+ \2 ]0 y; u7 Z
$ w2 j* j# U+ u" |, E  begin
- ~$ {% e% Z; r8 A% `; w( ?9 g4 Y8 X
' Z0 i1 s) `6 T, }# P  if clk'event and clk=‘1' then 9 s. p6 f2 a( g2 ^" o, G

' y/ b) t1 F! u0 B! ~7 Q% |  Q3<=Q2;
! v5 o5 |6 s1 k
$ F  e1 n( l, x, B9 ]9 W& `  Q2<=Q1;
8 p# C% O9 l3 e& t( @' L! Q, R; @1 D
) E" L: ]$ y8 [- f( U) f( j  V& S  Q1<=input(1);
$ A" d7 {% T5 R' {0 q& z: `2 Z" L+ [) Z6 V( H; v7 U
  end if; ( t: o( I% B% m+ O

) o) D+ d& ?# ^4 G  end process; ; g4 @% [" s/ j' e
- L4 `4 G: x& A% e
  Q4<=not Q3;
) t  F3 b1 I* _1 e% L
8 N4 Q1 x. M5 x; z3 v  output(1)<=input(1)and Q3;
, {6 S# X, M: r6 g4 O. S3 C4 n4 R- R, [+ l, a
  output(0)<=input(0)and Q4;
/ C" O$ Y' a; o+ D1 H6 f; q% _7 Y0 s4 R& A0 \6 w0 m4 f
  end a_delay; ) S9 P9 {" h6 C. m( h
. x# E+ u; |3 f" k
; C% `+ ?) ]# g) A1 T
  3 结束语 ; Y8 L* z) C7 l8 F9 B

3 o2 l) _. U0 g8 V; [  采用可编程逻辑器件和硬件描述语言,同时利用其供应商提供的开发工具可大大缩短数字系统的设计时间,节约新产品的开发成本,另外,还具有设计灵活,集成度高,可靠性好,抗干能力强等特点.本文设计的PWM控制电路用于某光测设备的传动装置时,取得了良好的效果.

本版积分规则

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

GMT+8, 2026-2-25 15:05 , Processed in 0.028421 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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