一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 6930|回复: 0

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

[复制链接]
发表于 2009-1-2 20:45 | 显示全部楼层 |阅读模式
在直流伺服控制系统中,通过专用集成芯片或中小规模的数字集成电路构成的传统PWM控制电路往往存在电路设计复杂,体积大,抗干扰能力差以及设计困难、设计周期长等缺点?因此PWM控制电路的模块化、集成化已成为发展趋势.它不仅可以使系统体积减小、重量减轻且功耗降低,同时可使系统的可靠性大大提高.随着电子技术的发展,特别是专用集成电路(ASIC)设计技术的日趋完善,数字化的电子自动化设计(EDA)工具给电子设计带来了巨大变革,尤其是硬件描述语言的出现,解决了传统电路原理图设计系统工程的诸多不便.针对以上情况,本文给出一种基于复杂可编程逻辑器件(CPLD)的PWM控制电路设计和它的仿真波形. 5 m' |. J2 {" C! ^3 T. _, k+ L& `
) t+ N# u7 }9 u, o7 e7 G6 L
  1 PWM控制电路基本原理 " b- K8 a* A/ V' F: l
8 t7 i; b# a/ P0 w3 J( A
  为了实现直流伺服系统的H型单极模式同频PWM可逆控制,一般需要产生四路驱动信号来实现电机的正反转切换控制.当PWM控制电路工作时,其中H桥一侧的两路驱动信号的占空比相同但相位相反,同时随控制信号改变并具有互锁功能;而另一侧上臂为低电平,下臂为高电平.另外,为防止桥路同侧对管的导通,还应当配有延时电路.设计的整体模块见图1所示.其中,d[7:0]矢量用于为微机提供调节占空比的控制信号,cs为微机提供控制电机正反转的控制信号,clk为本地晶振频率,qout[3:0]矢量为四路信号输出.其内部原理图如图2所示.
) m# i% _) P0 b( e# @  该设计可得到脉冲周期固定(用软件设置分频器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模块的控制信号,用于控制电机的正反转. / d, t8 Y8 m9 j6 a- e8 e

' c: l: _6 P9 Y5 n7 X( L  2 电路设计 & _* N3 u8 d5 A  g+ }! X
9 S$ y3 y0 ?/ L+ a( V- g0 S- ?! P( }
  本设计采用的是Lattice半导体公司推出的is-plever开发平台,该开发平台定位于复杂设计的简单工具.它采用简明的设计流程并完整地集成了Leonardo Spectrum的VHDL综合工具和ispVMTM系统,因此,无须第三方设计工具便可完成整个设计流程.在原理设计方面,本设计采用自顶向下、层次化、模块化的设计思想,这种设计思想的优点是符合人们先抽象后具体,先整体后局部的思维习惯.其设计出的模块修改方便,不影响其它模块,且可重复使用,利用率高.本文仅就原理图中的I12计数器模块和I11延迟模块进行讨论. * A' }+ |/ w/ U  g

7 A& X- c( z# n! f) M4 A  计数器模块的VHDL程序设计如下:
! }' q  J" U6 S$ w1 d4 k" s8 x5 D0 i4 `0 K9 I/ @
  entity counter is
" C& `, O, m2 B6 ]. [% q0 U# o
6 ^2 E! v/ ^! @6 A3 u( k  port(clk: in std logic; 1 T2 L; c0 B; X
5 R! s, Q$ L! A* |
  Q : out std logic vector(7 downto 0);
/ P8 i7 E# z; O# U, Y$ m- S
8 J- G% ^) c! g% X$ [6 K% ^& I  cao: out std_logic);
# o8 c% l$ G$ u! {; _: D/ `$ _: x9 Q: f
  end counter;
3 Q* u' T0 |6 {1 V0 x+ q' }, {) G. M
* j/ Q+ b7 L5 U* y2 v9 N  architecture a_counter of counter is
3 h7 D9 ~! M# \$ }
1 ^: @. v3 h9 k- q6 g& `9 K  signal Qs: std_logic_vector(7 downto 0); 7 v9 V" M/ u, _

6 t( i8 U3 U) s% ]6 w* J  signal reset: std_logic; 1 p' q- A5 `1 N
, V+ |8 A) L4 I% _3 q
  signal caolock: std_logic; . u1 Z7 ~/ V# `
  t+ a! x+ J6 H3 E
  begin
# F' Y" w0 c3 A+ c- m1 H5 h# T/ b
. ?" f3 J% K6 n: \0 h  process(clk,reset)
$ Z% S- ~4 q! |0 v& A$ o$ K; w; O3 o2 D" t3 _! N- a
  begin
: [5 ^, J1 N. L6 c% V
' q+ o2 I+ T# p( r# J, p7 I1 }  if(reset=‘1')then , l% P9 w+ J  `4 S

  P6 p' L* g- j1 i9 K/ Z, S* o  Qs<=“00000000”; . A/ [$ _- Y+ [- @

! V+ N: a; }% d0 \. D# {  elsif clk'event and clk=‘1' then * u! d; C8 G2 Y! q# K2 X: ^
! q' U% O* b' a, y) e( {. _
  Qs<=Qs+‘1'; ; a% w" p9 h! ^. u# p/ H  R
. e0 b0 x3 Q3 Z. p. Y* r7 o( c
  end if; * ]3 e2 J8 Q2 ]( @  C7 L1 h3 e
9 z! k& {6 p' A& \& y# L, b
  end process; ! C+ N6 p0 ^* D2 V4 {+ E  Z

/ R2 ~( C* Q$ _' [- O  reset<=‘1' when Qs="255" else 9 f; o' _; i- n; Q7 D$ J

4 y7 ~6 ?) O, a* e! z  ‘0';
! y+ i: L! H  h+ F1 h
* t3 C, p  W% |+ ~1 H' R4 n  caolock<=‘1' when Qs="0" else
8 G& [8 q/ U* `
  m: I% c) _$ F$ v  ‘0'; ) t' J, ~) W& |. k! r6 s5 X! _+ M
6 x% ?) ^+ U) c
  Q<=Qs;
; x$ s; d6 B8 J! G6 ~% C( F$ ~+ @3 |: i1 x* q
  cao<=reset or caolock; : a/ Y' `7 A& u1 u4 `* d9 B
! E! v7 g, E; \' k, r
  end a_counter; 0 b' k' b- Q9 v, ~' l3 F* S

7 _- K" q; ~' j  p6 }在原理图中,延迟模块必不可少,其功能是对PWM波形的上升沿进行延时,而不影响下降沿,从而确保桥路同侧不会发生短路.其模块的VHDL程序如下: $ j  v" J2 Z, a2 u6 F0 g

* ], `8 Z# a, d  entity delay is " ~4 ~" D0 \; B' O

2 X) r' h' G8 ]1 A9 R$ q- D) t  port(clk: in std_logic;
* P( V+ p* f3 ~  B+ E3 v( c$ D7 V+ }5 ?
  input: in std_logic_vector(1 downto 0); 0 A* _2 J9 F! A9 \
4 h$ \; A% O0 B4 _
  output:out std_logic_vector(1 downto 0) % f/ J; B: X( |8 s* y

. ^& g' e/ i- N6 C* P5 R- G  end delay; 7 k; y0 a. Y% U( g8 s
2 j) T% z) T% J  \9 m# D4 K
  architecture a_delay of delay is 2 ^: G) S1 M0 b4 f0 ~- |

+ l+ N3 E/ @7 }8 o, U  signal Q1,Q2,Q3,Q4: std_logic; # J0 o6 W/ ?7 [3 N, U4 @0 \7 i/ C
" j* J' p& }! ~3 H' {: O
  begin ; W9 C* I; p* P- j" |2 U
" I6 ~& g- R( H; ^) e3 e! W
  process(clk)
# D1 u: e( v1 b% X! Y% r/ X: I1 d  D
  begin
; {9 Z2 u! f. ^. \" Y7 y: r$ G, ]: X4 V5 q
  if clk'event and clk=‘1' then 1 C4 f+ d( h& |$ M" X7 X8 H  i8 n
' j+ M! {: E) z2 ?5 w
  Q3<=Q2;
5 e, S! Y3 F* a' q. b& r7 H$ Z$ [6 P) e0 Q: z! _
  Q2<=Q1;
7 A9 r/ f2 Y0 ~5 f, k5 Y( X7 D$ k: |/ S
  Q1<=input(1); , n" F1 E4 w- E( F# N

  {/ |7 }( r" u- v  end if; ' m4 H$ v; Z5 `" t0 j0 R9 g
( [0 {% K' N8 h2 {: Q4 w+ |! p& k
  end process; 6 X# l6 Y4 ~2 k7 S
. K. @! T& e% g1 x  _
  Q4<=not Q3; ) o0 {5 q( u6 P" _* B/ t* O. ?) T" ~

2 y' d# r0 `' M  output(1)<=input(1)and Q3;
1 M- ]. w# @5 W% F6 Z$ z
/ j$ E/ v  c0 r6 i; h  output(0)<=input(0)and Q4; & o, r0 M0 q# S$ X+ M
$ N- P$ z1 g. d; D
  end a_delay;
# U& ~, _% X, {0 L" j) H8 M2 I' A3 |* m
  N) I. F4 U8 l3 d, \, S# T& y
  3 结束语
! o9 {5 s# j- ~# f# o$ U" o5 ^2 p/ J9 y
  采用可编程逻辑器件和硬件描述语言,同时利用其供应商提供的开发工具可大大缩短数字系统的设计时间,节约新产品的开发成本,另外,还具有设计灵活,集成度高,可靠性好,抗干能力强等特点.本文设计的PWM控制电路用于某光测设备的传动装置时,取得了良好的效果.

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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