找回密码
 注册
关于网站域名变更的通知
查看: 171|回复: 1
打印 上一主题 下一主题

EDA实验与实践 moto_test

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-8 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
EDA实验与实践 moto_test

' S( p: i, h. p0 w  e' ~' f' u! v2 g/ D
module moto_test(clock,key,duty_cycle,pwm_en,pwm_in,motoa,motob,led);
; D+ k. R/ q" iinput clock;                            //系统时钟(48MHz)
! M' m1 W+ D$ w5 O/ [+ O% q! hinput[2:0] key;                            //按键输入(KEY1~KEY3)$ a. U* ^' Q6 {5 v
output[3:0]duty_cycle;                    //PWM占空比控制输出/ ?" g3 P* f' T) a1 _! f0 ]) ?9 M, f1 K
output pwm_en;                            //PWM控制使能端6 n- w$ R& ~3 Q: B; I
input pwm_in;                            //产生的PWM波输入
; {4 m: A( Q& i* ]; koutput motoa;                            //PWM波输出4 ?8 d. N; b7 e, U# N$ W' K
output motob;                            //PWM波输出
6 A( Z4 W! U0 O! C! c1 Loutput[4:0] led;! }6 g7 ~* L1 Q! B
//I/O寄存器. Q# w4 `7 U6 F- s" ~
reg[3:0]duty_cycle;- }# i: [. p( {  D5 x2 w
reg pwm_en;        
7 c- X  V7 u& S% i//内部寄存器
6 f/ T$ t4 s+ y, nreg[16:0]count;                            //时钟分频计数器  V" M5 m; S1 Z% a5 w; E
reg[2:0] dout1,dout2,dout3,buff;        //消抖寄存器0 {: H! h6 K, A' O$ r" j; v
reg moto_dir;                            //电机正反转
3 J* C# L# A( d  Sreg div_clk;                            //分频时钟
5 V/ a4 T5 y: Q. t; \wire[2:0] key_edge;                        //按键消抖输出
, J- d6 i+ S8 i0 U
4 d3 I1 i) _% e9 R- fassign led = ~{pwm_en,duty_cycle};            //LED输出状态指示
" R. K/ w" k% a' |, |- y8 w: ], f  Y3 S7 \5 n1 R0 Q! Q! F
//时钟分频部分
  M9 U- I4 W8 jalways @(posedge clock)
5 L- `+ R% v7 n+ ^3 m, dbegin8 F/ `. O8 \$ `+ w2 b' o
    if (count < 17'd120000)
( X' R8 d3 M3 Y. E( a    begin
7 c- V6 O. q9 H5 m( z         count <= count + 1'b1;
3 F, r9 D: g) R8 e7 X, R+ ]$ G! m         div_clk <= 1'b0;# v: ^2 B# n- q7 Z+ }
     end
% X. A; M/ e4 M6 D: Q: Z     else& T) ~6 D% ^: Z5 F: o) l" T4 d9 g
     begin% y& ~8 ^2 l! U' \/ C: q# Q
         count <= 17'd0;# w! L. f$ A0 O/ z8 R4 b
         div_clk <= 1'b1;
' M8 [8 ?& s2 f& b     end
( I, f7 Z' V8 N1 ]: v. S: v; ^+ T9 ~. Pend
/ f# S7 R9 [9 z8 `' X4 d
# N" I6 Y/ T- H' n- X* T//按键消抖部分, A! e' W# I+ r/ L
always @(posedge clock)
  C$ ^( }& D. B& P" lbegin8 S: u$ |0 H9 P, C- i
    if(div_clk)7 p. T+ y- f/ w# @  n
    begin& d/ N$ w  C0 W/ O
        dout1 <= key;! J  l' U( b8 z5 T- ?% n
        dout2 <= dout1;
3 D% B8 ]5 x8 _9 j" B        dout3 <= dout2;
2 T7 K* m( N) `0 W    end   
. t0 z) Z) Y& [! d! e8 Aend
4 B( \" H2 i6 H2 n* O" p0 |4 C0 V$ }! e% t1 ]
//按键边沿检测部分
3 ^  f# p# C" U/ W9 Aalways @(posedge clock)" E# c, u9 z; W7 d0 n4 M# j8 x
begin
, _" U2 `* }1 C4 y; `  U9 [/ n    buff <= dout1 | dout2 | dout3;7 L6 Z4 X5 _! W! P1 O2 \9 v) G
end0 K3 i5 R5 e3 f4 z
: h. z9 i  I4 L2 s
assign key_edge = ~(dout1 | dout2 | dout3) & buff;" O5 n& C1 J& k1 Z
: X, R4 u% ~: ?. r/ Y
always @(posedge clock)                            //按键1,控制电动机速度
5 Q5 d' s5 K! Abegin$ B; s. h2 L. `( Q
    if(key_edge[0])    " E# S5 g  B  p
        duty_cycle <= duty_cycle + 1'b1;* u7 q3 u' F' ~$ v) l4 T
end
2 z* w# Z, S$ f5 _& h+ B( e8 m/ G; Y. g/ s6 G
always @(posedge clock)                            //按键2,控制电动机启动、停止
/ h  N8 [) g" bbegin
! ]2 v8 K" e+ R    if(key_edge[1])    $ ~2 Q% P6 d2 e4 L' B7 c
        pwm_en <= ~pwm_en;
# z4 G: s% ]& {: q( |end
% m6 Z  _4 ~4 v- s' Z$ Y' K8 C: m
% ?2 ^7 B' m: h% F/ ualways @(posedge clock)                            //按键3,控制电动机正/反转" q7 {+ f2 e& ?6 w6 \- _+ P9 f0 N
begin1 v0 b9 p% C4 Y$ m
    if(key_edge[2])   
; }3 x+ i$ o! A9 L' O  ^; u        moto_dir <= ~moto_dir;  [) ?6 f+ ]3 `
end
6 E, X" ], O0 v' K. V6 ?2 y  a" h& _# S; Q" F
assign motoa = moto_dir ? pwm_in : 1'b0;
  _/ c8 u# v( y# J$ fassign motob = moto_dir ? 1'b0 : pwm_in;
7 ?8 \2 ~- `6 O
% J) Y$ u0 W! ^0 Wendmodule- g4 r/ G4 K, g2 T6 |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-2 08:33 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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