久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2760|回復: 1
打印 上一主題 下一主題
收起左側

FPGA控制馬達 T型 加減速代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:35884 發表于 2019-9-11 11:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
項目上用的,FPGA 控制馬達 T型 加減速代碼,加減速時間 速度可調。


module        Motor_test(
                                                        input                wire                        rst_n,
                                                        input                wire                        clk10m,                                                        
                                                        output        wire                        motor_pul,
                                                        output        wire                        motor_done,                // Execute Finish
                                                        output        wire                        motor_busy,
                                                        output        wire                        motor_invalid,
                                                        input                wire                        iMotor_en,                // Begin Execute
(* MARK_DEBUG="true" *)                                                        input                wire [7:0]        test_Moto
                                                        //output        reg[9:0]                i
);

//`include "MOTOR_Param.h"
//---- Motor Parameter----
//parameter                Mid_Thr                =  20'b0100_0000_0000_0000;        // Max_Speed - Init_Speed
//parameter                Acc_Time                =        2;                                        //Speed up the time
//parameter                Inc_value        =        20'd10;                        // Incress parameter
//parameter                Total_Define        =        20'd40000;        //Total running number of rotation
//parameter                Slow_Set                        =         20'd1500;        // Set Turns of End
//////////////////////////////////////////////////////////////
// parameter                Speed_Time                =        20'd1000;//20'd2000;        //Speed Up Turns Number        
// parameter                Slow_Time                =        20'd1000;//20'd2000;        //Slow Down Start Turns (Total_Circle - Slow_Set)

// parameter                Init_Speed        =        20'd500;//20'd1000;                //initial velocity Constant Speed or Velocity
// parameter                Max_Speed        =        20'd2000;//20'd3000;                //Maxiam Speed Start Spped ,launch velocity
///////////////////////////////////////////////////////////////////////////////////

parameter                Speed_Time                =        20'd2000;//20'd2000;        //Speed Up Turns Number        
parameter                Slow_Time                =        20'd2000;//20'd2000;        //Slow Down Start Turns (Total_Circle - Slow_Set)

parameter                Init_Speed        =        20'd800;//20'd1000;                //initial velocity Constant Speed or Velocity
parameter                Max_Speed        =        20'd2800;//20'd3000;                //Maxiam Speed Start Spped ,launch velocity

// Motor Clock

        
reg                                motor_en;
reg        [19:0]        time_cnt;        

reg        [1:0]                key_en_reg;
reg        [19:0]        cnt;
reg        [19:0]        cnt_time;
reg                                motor_dir_reg;
reg                                motor_pul_reg;
//motor pulse period
reg        [19:0]        pul_value_temp;
//r
reg        [15:0]        motor_cmd;
reg                                motor_done_reg;
reg                                 motor_en1;
reg        [19:0]        Total_Circle;
//************************************************************
// Motor Output
assign                motor_pul  = motor_pul_reg;
assign                motor_done = motor_done_reg;
//************************************************************
// enable period
//************************************************************
parameter  subdivide = 6400*2;//6400細分   6400個脈沖驅動器旋轉360庿  6400*2 叿6400個脈冿
//160/12=40/3=13.333   為傳動比 電機轎13.33 轉盤轉一圿

//步進角度1.8庿  毿1.8度要32個脈冿

//轉鿿 計算

//頻率=10_000_000(10mhz)/1600(分頻系數)=6250 hz

//旋轉丿個細劌 時間=1/6250=0.00016 s

//電機旋轉丿圿 時間 =6400*0.00016 = 1.024 秿

//轉盤丿圿 時間 = 1.024*13.33(傳動比)= 13.64992 秿

//電機轉鿟:1/1.024 = 0.9765625圿/秿
//轉盤轉鿟:1/13.64992 = 0.0732605026256564圿/秿

//傳動毿 13.333  步進觿1.8  細分6400

parameter  ALL360_1= (subdivide*40)/(3*1);//170666     160/12=40/3
parameter  ALL180_2= (subdivide*40)/(3*2);
parameter  ALL120_3= (subdivide*40)/(3*3);
parameter   ALL90_4= (subdivide*40)/(3*4);
parameter   ALL72_5= (subdivide*40)/(3*5);
parameter   ALL60_6= (subdivide*40)/(3*6);
parameter   ALL51_7= (subdivide*40)/(3*7);
parameter   ALL45_8= (subdivide*40)/(3*8);
parameter  ALL30_12= (subdivide*40)/(3*12);
//parameter  ALL15_13= (subdivide*40)/(3*18);//9457  change to 20 °c        360/20=18  
//parameter  ALL40_14= (subdivide*40)/(3*9);//9457  change to 40 °c        360/20=18

//parameter  ALL15_13= (subdivide*40)/(3*36);//9457  change to 10 °c        360/10=36   usd this value mark
//parameter  ALL40_14= (subdivide*40)/(3*18);//9457  change to 20 °c        360/20=18

parameter  ALL15_13= (subdivide*40)/(3*15);//9457  change to 24 °c        360/24=15   usd this value mark
parameter  ALL40_14= (subdivide*40)/(3*7);//9457  change to 48 °c        360/48=7

//parameter  ALL15_13= (subdivide*40)/(3*24);//42666//42666   



always        @(posedge clk10m or negedge rst_n)
begin
        if(!rst_n)
                Total_Circle <= 20'b0;        //Total_Define
        else
        begin
                case(test_Moto)
                8'h00:
                        Total_Circle <= ALL360_1;
                8'h01:
                        //Total_Circle <= 20'd288000;                //20'd320000;        // 1600*180
                          Total_Circle <= ALL360_1;                //20'd320000;        // 1600*180
                        
                8'h02:
                        Total_Circle <= ALL180_2;                //20'd160000;        // 1600*200                        
                        //Total_Circle <= ALL90_4;                //20'd160000;        // 1600*200                        
                8'h03:
                        Total_Circle <= ALL120_3;                //20'd106700;        // 1600*200
                8'h04:
                        Total_Circle <= ALL90_4;                //80000;        // 1600*200                        
                8'h05:
                        Total_Circle <= ALL72_5;                //64000;        // 1600*200                        
                8'h06:
                        Total_Circle <= ALL60_6;                //53400;        // 1600*200
                8'h07:
                        Total_Circle <= ALL51_7;                //45720;        // 1600*200                        
                8'h08:
                        Total_Circle <= ALL45_8;                //40000;        // 1600*200        
                8'h0C:
                        Total_Circle <= ALL30_12;
                8'h0D:
                        Total_Circle <= ALL15_13;        
                8'h0E:
                        Total_Circle <= ALL40_14;               
        /*
        8'h01:
                Total_Circle <= 20'd288000;        //20'd320000;    // 1600*180
            8'h02:
                Total_Circle <= 20'd144000;        //20'd160000;    // 1600*200            
            8'h03:
                Total_Circle <= 20'd96000;        //20'd106700;    // 1600*200
            8'h04:
                Total_Circle <= 20'd72000;        //80000;    // 1600*200            
            8'h05:
                Total_Circle <= 20'd57600;        //64000;    // 1600*200            
            8'h06:
                Total_Circle <= 20'd48000;        //53400;    // 1600*200
            8'h07:
                Total_Circle <= 20'd41142;        //45720;    // 1600*200            
            8'h08:
                Total_Circle <= 20'd36000;        //40000;    // 1600*200   
            8'h0C:
                Total_Circle <= 20'd24000;
            8'h0D:
                Total_Circle <= 20'd12000;   
        */               
                default:
                        Total_Circle <= 20'd24000;
                endcase
        end
end
//************************************************************
// enable signal
// Attition:must dected motor_done_reg falling is sent next motor command
always        @(posedge clk10m or negedge rst_n)
begin
        if(!rst_n)
                motor_done_reg        <= 1'b0;
        else if(cnt_time >= Total_Circle - 1)//before notice
                motor_done_reg        <= 1'b1;
        else
                motor_done_reg        <= 1'b0;
end

always        @(posedge clk10m or negedge rst_n)//clk125
begin
        if(!rst_n)
                motor_en1 <= 1'b0;
        else
        begin
                if(cnt_time == Total_Circle)
                        motor_en1 <= 1'b0;
                else
                        motor_en1 <= iMotor_en;
        end
end
// Operation Siganl
// pwm width count
always        @(posedge clk10m or negedge rst_n)
if(!rst_n)
                motor_en <= 0;
        else
                motor_en <= motor_en1;

always        @(posedge clk10m or negedge rst_n)
begin
        if(!rst_n)
                cnt <= 20'd0;
        else if(motor_en)
        begin        
                if(cnt == pul_value_temp)
                        cnt <= 20'd0;
                else
                        cnt <= cnt + 1'b1;
        end
        else
                cnt <= 20'd0;
end
//pwm circle count
always        @(posedge clk10m or negedge rst_n)
begin
        if(!rst_n)
                cnt_time <= 20'd0;
        else if(motor_en)
        begin
                if(cnt == pul_value_temp)
                begin
                        if(cnt_time == Total_Circle)
                                cnt_time <= 20'd0;
                        else
                                cnt_time <= cnt_time + 1'b1;
                end
                else;
        end
        else
                cnt_time <= 20'd0;
end
// Test Speed up  _____/-------\_____
always        @(posedge clk10m or negedge rst_n)
begin
        if(!rst_n)
                pul_value_temp <= Max_Speed;
        else if(motor_en)
        begin
                if(cnt_time < Speed_Time) // Speed up time 2000
                        pul_value_temp <= Max_Speed - cnt_time;//3000 - 1900*10 = 5000        *Inc_value        Speed_Time +
                else if(cnt_time > (Total_Circle - Slow_Time)) // Slow down time
                        pul_value_temp <= Init_Speed + (cnt_time - (Total_Circle - Slow_Time));//(cnt_time - Slow_Time)        *10 2000
                else
                        pul_value_temp <= Init_Speed;//pul_value_temp;        //Constant Speed
        end
        else
                pul_value_temp <= Max_Speed;
end        
// pwm out        
always        @(posedge clk10m or negedge rst_n)
begin
        if(!rst_n)
                motor_pul_reg <= 1'b0;
        else if(cnt == pul_value_temp)
                motor_pul_reg <= ~motor_pul_reg;
        else;
end        

endmodule

// parameter                Speed_Time                =        20'd2000;//20'd2000;        //Speed Up Turns Number        
// parameter                Slow_Time                =        20'd2000;//20'd2000;        //Slow Down Start Turns (Total_Circle - Slow_Set)

// parameter                Init_Speed        =        20'd800;//20'd1000;                //initial velocity Constant Speed or Velocity
// parameter                Max_Speed        =        20'd2800;//20'd3000;                //Maxiam Speed Start Spped ,launch velocity




Motor_test.rar

2.2 KB, 下載次數: 14, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:257160 發表于 2019-9-27 20:02 | 只看該作者
太復雜了~~~~~~~
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色三级在线播放 | 国产一级片一区二区 | 欧美极品在线 | 久久国产精品一区二区三区 | 久久在线 | 国产一区二区精品 | 深夜爽视频 | 欧美日韩一区在线观看 | 成人精品在线观看 | 国产视频在线观看一区二区三区 | 中文字幕在线播放第一页 | 天堂中文av | 国产精品揄拍一区二区久久国内亚洲精 | 国产精品美女久久久免费 | 国产精品久久久久久久午夜片 | 国产成人综合一区二区三区 | 四虎影视免费在线 | 精品国产久 | www.日本国产 | 久久综合av | 久久宗合色 | 久久精品亚洲 | 久久精品欧美一区二区三区不卡 | 日韩精品一区二区三区中文字幕 | www.久久久久久久久久久 | 91免费视频观看 | 一区二区三区在线免费 | 日韩a视频 | 一区二区在线看 | 成人av一区 | 91av视频| 午夜激情在线视频 | 午夜精品久久久久久久星辰影院 | 久久日韩粉嫩一区二区三区 | 婷婷五月色综合 | 欧美操操操 | 亚洲性视频网站 | 亚洲国产精品99久久久久久久久 | 久精品久久 | 色必久久 | 羞羞色网站 |