# verilog-stepmotor **Repository Path**: yuan_hp/verilog-stepmotor ## Basic Information - **Project Name**: verilog-stepmotor - **Description**: 通过脉冲控制步进电机的控制器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-15 - **Last Updated**: 2025-05-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: Verilog, stepmotor ## README # 说明 这是一个步进电机控制器,产生脉冲和方向信号,还有使能信号. ``` 该模块控制速度的过程如下所示,为了节省硬件资源,加速和减速阶段并非均匀的 _______ 加速-->/ \ ______/ \减速阶段 | \_______________________ | | EXT_STEPS | 启动速度 减速到最小速度 额外按最小速度走一点 1.例化模板 加减速 cbb_StepMotor #( .FCLK(1000_000), // 系统时钟 .W(32) , // 步进电机位宽 .SW (32), // 位移记录的位宽 .EN_ACC(1'b1), // 使能加减速 .MIN_FS( 10_000 ), // 最小速度 .MAX_FS (20_000), // 最大速度 .INIT_FS ( 10_000 ),// 启动速度 .ACCEL (8 ), // 加速度,每次加速减小的分频系数 .DECEL (2 ), // 减速度,每次减速增加的分频系数 .EXT_STEPS( 10) , // 减速到最小速度后,按最小速度走的步数,避免速度刚下来有过冲失步 .ADJUST_STEPS (1) // 多少个脉冲调节一次速度 ) u_cbb_StepMotor ( .clk( clk ), .rst_n( rst_n) , .i_divider(25) , // 时钟分频值,脉冲频率 为fclk/2/i_divider,只在 EN_ACC=1 时生效 .i_step(step) , // 要走的位移,正负表示方向 .i_start(start) , // 上升沿触发一次运动 .i_zero(zero) , // 外部光电开关或其他器件表示的步进电机0位置 .i_autoStopAtZero(1'b1) , // 是否需要自动停止,当找到零点时 ,1:自动停止 // 反馈信号 .o_busy() , // 是否忙 .o_x() , // 当前位移 // 驱动器接口 .o_pulse(), // 步进电机脉冲输出 .o_dir(), // 步进电机方向 .o_en() // 步进电机使能 ); 无加减速 cbb_StepMotor #( .FCLK(1000_000), // 系统时钟 .W(32) , // 步进电机位宽 .SW (32), // 位移记录的位宽 .EN_ACC(1'b0), // 使能加减速 ) u_cbb_StepMotor ( .clk( clk ), .rst_n( rst_n) , .i_divider(25) , // 时钟分频值,脉冲频率 为fclk/2/i_divider,只在 EN_ACC=1 时生效 .i_step(step) , // 要走的位移,正负表示方向 .i_start(start) , // 上升沿触发一次运动 .i_zero(zero) , // 外部光电开关或其他器件表示的步进电机0位置 .i_autoStopAtZero(1'b1) , // 是否需要自动停止,当找到零点时 ,1:自动停止 // 反馈信号 .o_busy() , // 是否忙 .o_x() , // 当前位移 // 驱动器接口 .o_pulse(), // 步进电机脉冲输出 .o_dir(), // 步进电机方向 .o_en() // 步进电机使能 ); ```