[笔记].小练Verilog版本PWM驱动步进电机

news/2024/7/8 6:53:29

硬件:MAX II EPM240T100C5
软件:Quartus II 10.0

step_motor.v

module step_motor
//#(parameter RPM50 = 40, RPM300 = 6)
#(parameter RPM50 = 1000, RPM300 = 3)
(
    // global clock and asyn  reset
    input CLOCK_50,
    input RST_N,
    // step motor interface
    output wire ENA,
    output wire PUL,
    output wire DIR,
    //test
    output wire PIN_64
);
//assign PIN_64 = pwm_out;

localparam SUBDIVISION = 64;

function integer log2(input integer n);
    integer i;
    for(i=0; 2**i <=n; i=i+1) log2=i+1;
endfunction

// generate 6KHz tick
localparam DIV_50M_INTO_6K = 8333 / SUBDIVISION;
reg [log2(DIV_50M_INTO_6K):1] cnt0; // 0~8332

always@(posedge CLOCK_50)
    if(DIV_50M_INTO_6K-1 == cnt0) cnt0 <= 0;
    else cnt0 <= cnt0 + 1'b1;
  
wire tick_6KHz = (DIV_50M_INTO_6K-1 == cnt0) ? 1 : 0;

// generate pulse signal at low frequency
localparam DIV_1SEC = 50_000_000; // 10Hz
reg [log2(DIV_1SEC):1] cnt1;
always@(posedge CLOCK_50, negedge RST_N)
        if(!RST_N) cnt1 <= 0;
        else if (cnt1 == DIV_1SEC - 1) cnt1 <= 0;
        else cnt1 <= cnt1 + 1;
 

reg [log2(RPM50):1] period;
reg acc_dec;
always@(posedge CLOCK_50, negedge RST_N)
    if(!RST_N)  begin
        period <= RPM50;
        //acc_dec <= 0;
    end
    else if(cnt1 == DIV_1SEC - 1)  begin
        //if(period == RPM300) acc_dec <= ~acc_dec;
        
        //if(acc_dec)  begin
            if(period == RPM300) period <= RPM50;
            else period <= period - 1;
        //end   
        //period <= RPM50;
        //else  period <= period - 1;
    end

wire adjust_enable = (cnt1 == DIV_1SEC - 1)  ? 1 : 0;
  
/* PWM */
wire pwm_out;
pwm_generator #(.N(log2(RPM50)), .START_SPEED(RPM50)) pwm_generator_inst
(
    // global clock and asyn reset
    .CLOCK_50(CLOCK_50),
    .RST_N(RST_N),
    // clock enable tick
    .clock_enable(tick_6KHz),
    // PWM interface
    .adjust_enable(adjust_enable),
    .period(period),
    .pwm_out(pwm_out)
);

assign PUL = pwm_out;
assign ENA = 1;
assign DIR = 0;

endmodule

pwm_generator.v

module pwm_generator
#(parameter N=10, START_SPEED = 100)
(
    // global clock and asyn reset
    input CLOCK_50,
    input RST_N,
    // clock enable tick
    input clock_enable,
    // PWM interface
    input adjust_enable,
    input [N:1] period,
    output reg pwm_out
);

reg [N:1] period_r;
reg [N:1] pulse_width_r;

// pass the parameter 
always@(posedge CLOCK_50, negedge RST_N)
    if(!RST_N)    begin
        period_r <= START_SPEED;
        pulse_width_r <= START_SPEED >> 1;
    end
    else if(adjust_enable) begin
        period_r <= period;
        pulse_width_r <= period >> 1;
    end

// counter
reg [N:1] cnt;    
always@(posedge CLOCK_50, negedge RST_N) 
    if(!RST_N) cnt <= 0;
    else if(clock_enable) begin
        if(cnt == period_r) cnt <= 0;
        else cnt <= cnt + 1'b1;
    end

// generate pulse    
always@(posedge    CLOCK_50, negedge RST_N)
    if(!RST_N) pwm_out <= 0;
    else if(clock_enable) begin
        if(cnt < pulse_width_r) pwm_out <= 1;
        else pwm_out <= 0;
    end
    
endmodule

转载于:https://www.cnblogs.com/yuphone/archive/2011/04/16/2017680.html


http://www.niftyadmin.cn/n/3754996.html

相关文章

网络看不到计算机和设备,网络发现已关闭,网络计算机和设备不可见。请启用网络和共享中心中的网络发现。解决方法...

今天一位朋友的Windows10笔记本&#xff0c;网络这里出现如下错误提示&#xff1a;网络发现已关闭&#xff0c;网络计算机和设备不可见。请启用网络和共享中心中的网络发现。原因&#xff1a;由于我的这位朋友中午去上课的时候还可以连寝室的网络&#xff0c;下午回来就连不上了…

西南大学计算机与信息科学学院奖学金,西南大学计算机与信息科学学院:奖学金机制公平...

采访嘉宾&#xff1a;西南大学计算机与信息科学学院副院长 肖国强历年研究生招生情况我们是西南大学计算机与信息科学学院&#xff0c;我们学院有计算机科学与技术一级学科硕士点&#xff0c;还有教育技术学、图书馆学和情报学专业硕士点。我们学院是跨系科、跨专业、多门类的融…

职来职往经典语录

学历代表你的过去&#xff0c;财力代表现在的努力&#xff0c;学习能力代表将来的成就。大多数人都想要改造这个世界&#xff0c;但却罕有人想改造自己。无论你在好单位还是一时不得志&#xff0c;都请你保持学习&#xff0c;这是你未来立足之本。——申晨 你很细节&#xff0c…

普通计算机安装服务器系统安装教程,Windows 2003 Server web 服务器系统安装图文教程...

从硬件的角度说&#xff0c;客户端对硬件要求相对比较低&#xff0c;服务器对硬件要求相对比较高&#xff0c;要求很高的稳定性和安全性。从软件上&#xff0c;客户端操作系统软件主要有Windows 95、Windows 98、Windows 2000 Profession、Windows XP Profession、Windows Vist…

网络支撑着我们的娱乐方式

可以说很多人连接网络的第一目的就是为了娱乐。通过网络娱乐有这几个分类&#xff1a; 在线兴趣小组&#xff1a; 像一些网站或者论坛聊天室之类的。 在线游戏&#xff1a; 记得我和一些朋友聊天&#xff0c;说在大学都学到了什么&#xff0c;很多人都这么说&#xff1a;”玩了…

电子计算机发明于1946年对不对,国家公务员测验考试常识题.doc

文档介绍&#xff1a;2011国家公务员考试常识900题(最新)1、古书中男子手里常握有"三尺",请问它指什么? (高级题) A: 剑2、大气中起吸收紫外线、保护地球生命作用地是哪种成分? (中级题) D: 臭氧 3、用齿轮传动不能改变运动地方向,对吗? (低级题) 不对b5E2RG…

收到51CTO的奖品

收到51CTO寄来的奖品&#xff0c; U盘挺漂亮的呢 呵呵。。。 转载于:https://blog.51cto.com/enetq/560585

超级计算机cpu架构,上海交大超算采用CPU+GPU+MIC三重架构

2013上半年&#xff0c;由浪潮负责承建的上海交大超算系统成为全国教育部高校计算峰值最高的超算系统&#xff0c;该系统计算性能达到263万亿次&#xff0c;性能超过上海超级计算机中心的“魔方”(200万亿次)&#xff0c;也因此成为上海乃至华东地区最快的超算系统。同时&#…