设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 234|回复: 0
收起左侧

Quartus Verilog HDL/FPGA 实现驱动 28BYJ-48 四相八拍系列的步进电机的正转与反转

[复制链接]
发表于 2023-3-14 21:38:28 | 显示全部楼层 |阅读模式
main.png
  1. module stepper(                        //四相八拍28BYJ-48步进电机驱动模块
  2.         //电机转子64个节拍转一圈 每个节拍转5.625度 输出轴减速比为64,则4096个节拍转一圈
  3.         input clk,                                //节拍时钟 频率越高旋转越快 (最高1Khz,再高可能无法转动)
  4.         input rst,                                //异步低电平复位 (停转复位使绕组断电)
  5.         input to,                                //旋转方向 0:顺时针 1:逆时针
  6.         output reg [3:0] out        //节拍输出,接步进电机 (ULN2003需5V供电)
  7. );

  8. reg [2:0] i;
  9. initial i = 3'd0;
  10. wire [3:0] beat [7:0];
  11. assign beat[0] = 4'b0001;
  12. assign beat[1] = 4'b0011;
  13. assign beat[2] = 4'b0010;
  14. assign beat[3] = 4'b0110;
  15. assign beat[4] = 4'b0100;
  16. assign beat[5] = 4'b1100;
  17. assign beat[6] = 4'b1000;
  18. assign beat[7] = 4'b1001;

  19. always @(posedge clk or negedge rst) begin
  20.         if(!rst) begin
  21.                         i <= 3'd0;
  22.                         out <= 4'b0000;
  23.                 end else begin
  24.                         i <= to ? (i + 3'd1) : (i - 3'd1);
  25.                         out <= beat[i];
  26.         end
  27. end
  28. endmodule

  29. `define fosc 50000000        //有源晶振频率
  30. module main(
  31.         input clk,                                //有源晶振时钟
  32.         output [3:0] out                //接步进电机
  33. );
  34. integer i;
  35. integer j;
  36. reg motor_clk;                //步进电机时钟 1Khz
  37. reg to;                                //步进电机旋转方向

  38. always @(posedge clk) begin
  39.         i = i + 1;
  40.         if(i >= `fosc/1000/2) begin
  41.                 i = 0;
  42.                 motor_clk <= !motor_clk;
  43.         end
  44. end

  45. always @(posedge motor_clk) begin
  46.         j = j + 1;
  47.         if(j >= 4096) begin
  48.                 j = 0;
  49.                 to <= !to;
  50.         end
  51. end

  52. stepper m1(
  53.         .clk(motor_clk),
  54.         .rst(1'd1),
  55.         .to(to),
  56.         .out(out)
  57. );

  58. endmodule
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-19 01:19 , Processed in 0.555031 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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