一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 6931|回复: 0

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

[复制链接]
发表于 2009-1-2 20:45 | 显示全部楼层 |阅读模式
在直流伺服控制系统中,通过专用集成芯片或中小规模的数字集成电路构成的传统PWM控制电路往往存在电路设计复杂,体积大,抗干扰能力差以及设计困难、设计周期长等缺点?因此PWM控制电路的模块化、集成化已成为发展趋势.它不仅可以使系统体积减小、重量减轻且功耗降低,同时可使系统的可靠性大大提高.随着电子技术的发展,特别是专用集成电路(ASIC)设计技术的日趋完善,数字化的电子自动化设计(EDA)工具给电子设计带来了巨大变革,尤其是硬件描述语言的出现,解决了传统电路原理图设计系统工程的诸多不便.针对以上情况,本文给出一种基于复杂可编程逻辑器件(CPLD)的PWM控制电路设计和它的仿真波形. : K8 a/ ^0 t2 ?& i: O" ~

. G; @# ^2 K0 J  1 PWM控制电路基本原理 2 Y7 v, g' o( G9 K

' V8 [: ?5 T. v1 [5 l0 e. B  为了实现直流伺服系统的H型单极模式同频PWM可逆控制,一般需要产生四路驱动信号来实现电机的正反转切换控制.当PWM控制电路工作时,其中H桥一侧的两路驱动信号的占空比相同但相位相反,同时随控制信号改变并具有互锁功能;而另一侧上臂为低电平,下臂为高电平.另外,为防止桥路同侧对管的导通,还应当配有延时电路.设计的整体模块见图1所示.其中,d[7:0]矢量用于为微机提供调节占空比的控制信号,cs为微机提供控制电机正反转的控制信号,clk为本地晶振频率,qout[3:0]矢量为四路信号输出.其内部原理图如图2所示.
# W2 S; [$ e, v5 z! I5 s. w* ?  该设计可得到脉冲周期固定(用软件设置分频器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模块的控制信号,用于控制电机的正反转.
- y; [/ z& N% |) j7 c& `+ F
8 U/ d5 ^( T' K5 C8 U! F5 F& M  2 电路设计
9 y1 w3 x1 X6 s$ L+ J+ m: f" k4 V+ t. _/ k! h& q- x0 [) P
  本设计采用的是Lattice半导体公司推出的is-plever开发平台,该开发平台定位于复杂设计的简单工具.它采用简明的设计流程并完整地集成了Leonardo Spectrum的VHDL综合工具和ispVMTM系统,因此,无须第三方设计工具便可完成整个设计流程.在原理设计方面,本设计采用自顶向下、层次化、模块化的设计思想,这种设计思想的优点是符合人们先抽象后具体,先整体后局部的思维习惯.其设计出的模块修改方便,不影响其它模块,且可重复使用,利用率高.本文仅就原理图中的I12计数器模块和I11延迟模块进行讨论.
9 A; b$ o& ?) Y5 Y
# i" ~) g# R  L5 f. C! h4 u  计数器模块的VHDL程序设计如下:
8 q  l8 |0 K4 `& [! V  ~
! A; L7 k% Z% w  entity counter is
8 C# \; B+ L( R, S( f! E5 j
8 M/ ^9 U" z: S, X) c  port(clk: in std logic;
; N8 w$ H. ?" l+ a2 ]( J8 f) S2 x# A1 D% x6 `3 L. c  x
  Q : out std logic vector(7 downto 0);
  l' e" v4 A& I& m; a+ w* w7 \& I# r4 B$ ~' C; r% A- ]3 [
  cao: out std_logic);
; F( p3 R/ \/ H' ?/ E; a6 Z% g$ X
5 J; O7 J& C4 d5 ]  end counter; 8 m, i( G2 {' @) W9 i. G

0 d% O9 \/ p; y5 C' t  architecture a_counter of counter is
% R7 D6 u# r- F# }' b2 A+ ?3 @3 Y' R% u+ }+ Z
  signal Qs: std_logic_vector(7 downto 0); 9 B9 e- Q; [* Z; O6 _) s- r7 o
! k0 m; w; D) [4 A  D3 A) X8 L2 W3 m
  signal reset: std_logic;
/ u% |: m; c% O" V0 q" A# T4 [( X5 C: P) M; M
  signal caolock: std_logic;
, Y5 x; J; T& _( L+ a) d8 N! a
! Y" Y7 h; B* \% m: {$ R) n8 W  begin , q9 Y' W5 x+ C. c$ h. w5 {

' H6 p0 s' o5 S* t  process(clk,reset) # @6 P9 B# X( e5 i" S0 G

  [1 u  n) N4 ?  begin
( B" r) z4 L; d0 ?6 P: b# k5 ^
2 M/ n2 C9 g) P$ C; }4 ~; x  if(reset=‘1')then . H: `& O. [& `- @' w2 F/ H

  m  A+ @# u6 v8 B: b  Qs<=“00000000”; 7 l5 M' G- R! r5 T* H  u: b4 K

8 |. ]) \* h7 f1 K; u  elsif clk'event and clk=‘1' then
9 y9 v" e) o6 w0 _( @, ]- z
! ]% z' D- p( Q  Qs<=Qs+‘1';
% V) \; C- ]$ J1 O7 F: }! j
; A7 e# i4 _7 S  end if;
3 C, ?0 A/ O7 }( r3 j0 V1 Y1 @, l+ y0 x: {6 j% c% V
  end process; 2 g9 s! U7 e9 {+ Y9 D: E

6 V+ h+ j9 U) m4 m3 f  reset<=‘1' when Qs="255" else 1 j" V3 e4 H  y) Q% i
( I% ^$ Y- p& z* S
  ‘0'; ! }: t: p$ ^1 M: u$ R4 X: S
. Y( {2 W% M7 S6 f' Y2 h
  caolock<=‘1' when Qs="0" else 0 r# E2 E7 m+ y$ t# i; z

2 A4 j  Z- z4 J% U) ^) I2 S  ‘0'; 3 s' e  G! U7 y0 J. r
) l0 g) z( ~) j2 B2 f
  Q<=Qs; ' R* V9 R  B& H7 `  j

( M/ R# P- I+ r0 G4 ?  y9 I  cao<=reset or caolock;
. U3 n( _9 {& z8 P! `$ w6 z9 q
: k( C& r1 J7 d2 z% N  end a_counter; , r. R3 t( P0 b

/ a/ Y- ~! R# X5 [/ A, @/ \9 S在原理图中,延迟模块必不可少,其功能是对PWM波形的上升沿进行延时,而不影响下降沿,从而确保桥路同侧不会发生短路.其模块的VHDL程序如下: . r9 }8 Y: W* x$ Y0 O" ]

6 z5 q% p- _, g/ Z9 R5 l  entity delay is
2 k( |% L6 V7 \4 f* B; D! N: [0 C- N
  port(clk: in std_logic;
; J1 R: e( r5 v3 d$ w
( @7 n+ c5 L5 d- Y. q  input: in std_logic_vector(1 downto 0);
" x1 Z2 l- P9 g2 ]* U1 }
5 E' f# G' w6 O  output:out std_logic_vector(1 downto 0) . C5 N- o  h4 i- c6 M
6 v% y7 y5 F" T: k  x4 f/ ]5 P
  end delay; ; d2 d3 X* P7 O3 ~

# Y. c& X; {+ J# ?; @  architecture a_delay of delay is
; L# ?' L, g& h& [# v. T( ]- {; {, h& L6 r' |7 A. D/ N
  signal Q1,Q2,Q3,Q4: std_logic; - G- m( [! }9 B( N$ {

% S2 e! A# F* r( b% S  begin
0 B0 v% q# o- O, {% L* a% R+ k' p5 A2 s9 S1 V; F2 |# l2 X* e
  process(clk)
" N5 m; q7 W  O% v. Q2 Z
1 A8 _3 y7 z. b  begin
, ]( O( Z! K1 B+ ~! P9 h6 i, s4 Z4 s
  if clk'event and clk=‘1' then   G. L3 p* T! L3 P! c# ~/ k
1 {- }/ l3 y0 P7 h% H
  Q3<=Q2;
6 a; H; W# t9 ~9 G
* x8 G& a; ~& J( ?  Q2<=Q1;
5 q. l$ l) `. }0 I; y- D7 r4 \' I+ `0 a; d9 u7 V) W- n5 N
  Q1<=input(1); 5 d0 s$ g+ r% }5 Z8 Y
9 \* t' U, Y* V5 t7 B
  end if;
5 x  @' ^3 n' }) e( ~
. P" W" o2 Z( K3 W  d5 j. \  p% L/ Z- b  end process; # |8 ^5 B* S0 o# L6 E
! S  D: `' g. V: d. Y* t* S  w
  Q4<=not Q3;
  w. O+ J8 V$ U$ P( m! i
3 y5 O; X4 h9 }9 |  output(1)<=input(1)and Q3; $ t# U4 L0 H; [9 g( _
! B, X/ N  i) w& X
  output(0)<=input(0)and Q4;
/ `1 U& ]+ e7 S6 t) n
! L  g* h6 Q8 ?: O" }; S9 s  end a_delay;
( r$ H" G% H2 H1 _
; S# a7 G  u" X- O$ U' {, Q2 W& B/ R7 ~
  3 结束语
& z, ]( Y! B0 D
! q* R& Q* b8 z" n0 Q4 k: \  采用可编程逻辑器件和硬件描述语言,同时利用其供应商提供的开发工具可大大缩短数字系统的设计时间,节约新产品的开发成本,另外,还具有设计灵活,集成度高,可靠性好,抗干能力强等特点.本文设计的PWM控制电路用于某光测设备的传动装置时,取得了良好的效果.

本版积分规则

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

GMT+8, 2025-8-20 12:18 , Processed in 0.028948 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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