基于FPGA的直流电机调速系统设计

链接:https://pan.baidu.com/s/12nHXq54EEjUeYRVefVXLIg
提取码:1234

功能

本设计主要分为三个主要部分:按键控制部分、数码管转速档位显示部分、PWM信号产生部分。分别采用verilog 语言完成底层模块的设计和以原理图的方法完成顶层模块的设计,采用自顶向下的设计方法,实现通过按键控制直流电机的转速,并将转速档位分为10个等级,同时将当前的转速档位显示到数码。在软件平台下分别对设计项目、各个模块以及顶层模块进行仿真分析。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


module key(
    clk,
    reset_n,
    key,
    key_en_out
    );
input  clk,reset_n,key; //时钟输入,按键输入
output key_en_out;//经消抖后的按键信号下降沿检测有效信号输出


/***********************按键消抖***************************/
// 功能:按键消抖
// 说明:
    // 采用状态机的方式对按键信号进行消抖
    // 状态机型消抖电路
    // 状态机型消抖电路采用有限状态机的设计方法来描述与实现,状态机有S0,S1,S2,s3四种状态,
    // 在S0状态下key_out输出为低电平,并以clk时钟信号的频率采样按键输入信号,如果key_in=‘0’,
    // 则保持在S0状态,并继续采样按键输入信号的状态;
    // 如果key_in=‘1’,则转入S1状态;在S1状态下key_out输出仍为低电平,
    // 继续采样按键输入信号的状态,如果key_in=‘1’,则转入S2状态,如果key_in=‘0’则转入S0状态;
    // 在S2状态下继续采样按键输入信号的状态,如果key_in=‘1’,则保持在S2状态,
    // key_out输出正脉冲,如果key_in=‘0’,则转入S3状态;
    // 在S3状态下继续采样按键输入信号的状态,如果key_in=‘1’,则保持在S3状态,
    // key_out输出正脉冲,如果key_in=‘0’,则转入S0状态;key_out输出消抖后的低电平有效信号。
    // 本设计消抖模块采用的是14个状态机进行消抖
// ***********************************************************
reg  key_out;

parameter s0=4'd0,
          s1=4'd1,
          s2=4'd2,
          s3=4'd3,
          s4=4'd4,
          s5=4'd5,
          s6=4'd6,
          s7=4'd7,
          s8=4'd8,
          s9=4'd9,
          s10=4'd10,
          s11=4'd11,
          s12=4'd12,
          s13=4'd13;
reg [3:0] state;


reg         clk_div;//产生分频信号用于对按键信号进行消抖

reg[31:0]   counter1;


always @(posedge clk or negedge reset_n)
begin 
    if(!reset_n)
    begin
        counter1 <= 32'd0;
        clk_div <= 1'b0;
    end
    else 
    if(counter1 == 32'd499)
    begin
        counter1 <= 32'd0;
        clk_div <= ~clk_div;
    end
    else
        counter1 <= counter1 + 1'b1;
end

// always @(posedge clk or negedge reset_n)//仅用于仿真
always @(posedge clk_div or negedge reset_n)//
 begin
    if(reset_n == 1'b0)
    begin
        state<=s0;
        key_out<=1'b1;
    end
    else
    begin
        case (state)
     s0:
      begin 
       key_out<=1'b1;
	   if(key==1'b0)
		  state<=s1;
	   else 
	      state<=s0;
	  end
	 s1:
	  begin 
	   if(key==1'b0)
		 state<=s2;
	   else 
	     state<=s0;
	   end 
	 s2:
	  begin 
	   if(key==1'b0)
		 state<=s3;
	   else 
	     state<=s0;    
	   end 
       s3:
	  begin 
	   if(key==1'b0)
		 state<=s4;
	   else 
	     state<=s0;    
	   end
       s4:
	  begin 
	   if(key==1'b0)
		 state<=s5;
	   else 
	     state<=s0;    
	   end
       s5:
	  begin 
	   if(key==1'b0)
		 state<=s6;
	   else 
	     state<=s0;    
	   end
       s6:
	  begin 
	   if(key==1'b0)
		 state<=s7;
	   else 
	     state<=s0;    
	   end
       s7:
	  begin 
	   if(key==1'b0)
		 state<=s8;
	   else 
	     state<=s0;    
	   end
       s8:
	  begin 
	   if(key==1'b0)
		 state<=s9;
	   else 
	     state<=s0;    
	   end
       s9:
	  begin 
	   if(key==1'b0)
		 state<=s10;
	   else 
	     state<=s0;    
	   end
       s10:
	  begin 
	   if(key==1'b0)
		 state<=s11;
	   else 
	     state<=s0;    
	   end
        s11:
	  begin 
	   if(key==1'b0)
		 state<=s12;
	   else 
	     state<=s0;    
	   end
       s12:
	  begin 
	   if(key==1'b0)
		 state<=s13;
	   else 
	     state<=s0;    
	   end
	 s13:
	   begin 
	    if(key==1'b0)
	     begin
		 key_out<=1'b0;
		 state<=s13;
		 end 
		else 
		 begin
		 key_out<=1'b1;
		 state<=s0;
	     end
	   end
	 default:
	     state<=s0;
    endcase
    end
 end
//检测消抖后按键信号的下降沿
reg        key_out_r1; 
reg        key_out_r2; 
always @(posedge clk or negedge reset_n)
begin 
    if(!reset_n)
    begin
        key_out_r1 <= 1'b0;
        key_out_r2 <= 1'b0;
    end
    else 
    begin
        key_out_r1 <= key_out;
        key_out_r2 <= key_out_r1;
    end
end
assign key_en_out = ~(key_out_r2 && (~key_out_r1));//下降沿检测 低电平有效
endmodule


  • 4
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
直流电动机的PWM双闭环调速系统主要由以下几个部分组成: 1. 电机驱动电路:包括MOSFET、IGBT等开关元件、电容、电感等电路元件,用于将PWM信号转换为电机驱动信号。 2. 控制器:控制器可以采用单片机或者FPGA等数字电路实现,主要用于控制PWM波形的生成以及反馈控制。 3. 速度测量模块:用于测量电机速度,通常采用编码器或霍尔元件等。 4. 速度控制环:将速度测量模块采集到的速度信号与设定速度进行比较,计算出速度误差,并输出控制信号给PWM控制器。 5. 电流控制环:将PWM控制器输出的电流信号与设定电流进行比较,计算出电流误差,并输出控制信号给PWM控制器。 下面是PWM双闭环调速系统的具体实现步骤: 1. 选取合适的电机驱动电路,例如采用MOSFET或IGBT等开关元件,同时根据电机额定电压、电流等参数选取合适的电路元件。 2. 选取合适的控制器,例如采用单片机FPGA等数字电路实现,同时根据控制器的计算能力和实时性能选取合适的芯片。 3. 选取合适的速度测量模块,例如采用编码器或霍尔元件等,同时根据电机的转速范围和精度要求选取合适的传感器。 4. 设计速度控制环,根据测量到的电机速度与设定速度的比较计算出速度误差,并输出控制信号给PWM控制器。 5. 设计电流控制环,根据PWM控制器输出的电流信号与设定电流的比较计算出电流误差,并输出控制信号给PWM控制器。 6. 实现PWM波形的生成,根据速度控制环和电流控制环的输出信号生成PWM波形,控制电机的转速和转矩。 7. 调试和优化系统参数,根据实际测试结果调整控制器、电路元件和传感器等参数,以达到最优的控制效果。 总之,PWM双闭环调速系统可以实现对直流电动机的精确控制,可以应用于各种机器人、自动化设备、电动车等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值