数电实验Verilog-步进电机

步进电机

步进电机的模拟使用nexys4板子上的led灯,状态图如下步进电机
根据状态图写代码,可以使用状态机的方法
在这里没有用状态机

首先还是分频

always@(posedge cp) 
		begin
			if(innercp<27'd100000000)
				innercp<=innercp+1;
			else
				innercp<=0;
		end

然后是状态变换

always@(posedge incp) begin 
			if(reset==1)
				abc<=3'b000;
			else if(M==0) //M==0时正转
				case(abc)
					3'b111:abc<=3'b000;
					3'b000:abc<=3'b110;
					3'b110:abc<=3'b010;
					3'b010:abc<=3'b011;
					3'b011:abc<=3'b001;
					3'b001:abc<=3'b101;
					3'b101:abc<=3'b100;
					3'b100:abc<=3'b110;
				endcase
			else
				case(abc)//M==1时反转
					3'b111:abc<=3'b000;
					3'b000:abc<=3'b110;
					3'b110:abc<=3'b100;
					3'b100:abc<=3'b101;
					3'b101:abc<=3'b001;
					3'b001:abc<=3'b011;
					3'b011:abc<=3'b010;
					3'b010:abc<=3'b110;
				endcase
		end

因为是照着状态图写,不会出现吸收态

28BYJ-48步进电机(EP4CE6)FPGA控制Verilog逻辑源码Quartus工程文件+文档资料, 28BYJ-48步进电机步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 2. 步进电机规格: 步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。 3. 实现原理 当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行 module STEP_MOTO_V1_0 ( //input input sys_clk , input sys_rst_n , input [2:0] key , output reg mot_out_a , output reg mot_out_b , output reg mot_out_c , output reg mot_out_d ); //reg define //reg [8-1:0] counter ; //reg [8-1:0] count ; reg [25:0] clk_cnt ; reg [ 2:0] step_cnt ; //wire wire step_en ; //wire define //parameter define /******************************************************************************************************* ** Main Program ** ********************************************************************************************************/ // gen a time counter , 5500000 * 20ns always @(posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n ==1'b0) clk_cnt <= 26'b0; else if (key[1]==1'd0 && key[2]==1'd1 && clk_cnt == 26'd250000 ) clk_cnt <= 26'b0; else if ( key[1]==1'd1 && key[2]==1'd0 && clk_cnt == 26'd600000 ) clk_cnt <= 26'b0; else if (clk_cnt == 26'd400000 ) clk_cnt <= 26'b0; else clk_cnt <= clk_cnt + 26'b1; end // step enable is active 500000 * 20ns assign step_en = ( clk_cnt == 26'b0 ) ? 1:0 ; always @(posedge step_en or negedge sys_rst_n) begin if
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值