FPGA----Verilog实现abc坐标系转dq坐标系(全网唯一)

1、本人采用Verilog实现了abc-dq、dq-abc、极坐标与笛卡尔坐标、低通滤波器、取余函数、最大值、最小值、PI比例积分器的模块编写,接下来几篇会将测试代码与测试结果一一列出,大家有需要请查看我的个人资料。

下面链接是github上的一个开源科学函数(包含abc-dq,乘法、除法、三角函数、PI控制器),然而我不会用!

https://github.com/hVHDL/hVHDL_math_libraryhttps://github.com/hVHDL/hVHDL_math_library

2、实验任务:完成abc坐标系向dq坐标系的转换

实验软/硬件:vivado 2019.1、ZCU106

实验过程:

上图表示了一个abc坐标系通过park变换转到dq0坐标系的例子,由于我课题做的是电机类,因此默认对称不存在0轴,因此我的代码也只编写了abc-dq轴的部分。

实验代码截图: 

需要请联系我的邮箱。

测试代码:

`timescale 1ns / 1ps
//
// Company: 东北电力大学
// Engineer: Yang Zheng
// 
// Create Date: 2022/07/02 22:12:30
// Design Name: 
// Module Name: testbench
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module testbench(

    );

    // dqtransform Parameters
parameter PERIOD = 10   ;
parameter theta  = 32'd0;

// dqtransform Inputs
reg   clk                                  = 0 ;
reg   rst                                  = 0 ;
reg   [31 : 0]  phase_a                    = 0 ;
reg   [31 : 0]  phase_b                    = 0 ;
reg   [31 : 0]  phase_c                    = 0 ;
reg   [31 : 0]  wt                         = 0 ;
reg   dqtransform_input_valid              = 0 ;

// dqtransform Outputs
wire  [31 : 0]  d_out                      ;
wire  [31 : 0]  q_out                      ;
wire  dqtransform_output_valid             ;
wire  dqtransform_valid_en                 ;


initial
begin
    forever #(PERIOD/2)  clk=~clk;
end

initial
begin
    #(PERIOD*2) rst  =  1;
end

dqtransform #(
    .theta ( theta ))
 u_dqtransform (
    .clk                       ( clk                                ),
    .rst                       ( rst                                ),
    .phase_a                   ( phase_a                   [31 : 0] ),
    .phase_b                   ( phase_b                   [31 : 0] ),
    .phase_c                   ( phase_c                   [31 : 0] ),
    .wt                        ( wt                        [31 : 0] ),
    .dqtransform_input_valid   ( dqtransform_input_valid            ),

    .d_out                     ( d_out                     [31 : 0] ),
    .q_out                     ( q_out                     [31 : 0] ),
    .dqtransform_output_valid  ( dqtransform_output_valid           ),
    .dqtransform_valid_en      ( dqtransform_valid_en               )
);

always @(posedge clk or negedge rst) begin
    if (!rst) begin
        
    end
    else begin
        if (dqtransform_valid_en) begin
            dqtransform_input_valid <= 1'b1;
            wt <= 32'h007ef9db;
            phase_a <= 32'h3D57A178;
            phase_b <= 32'hBF4A8E32;
            phase_c <= 32'h3F3D141B;

        end
    end
end
endmodule

 测试结果:

 

 

验证完毕! 

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
数字滤波器是一种数字信号处理器件,可以对输入信号进行滤波处理,以去除噪声或干扰信号,达到信号平滑或频谱分析的目的。 在Matlab方面,实现数字滤波器可以使用Matlab中提供的信号处理工具箱。首先,需要定义滤波器的特性,如滤波器类型(低通、高通、带通、带阻),滤波器的阶数和截止频率等参数。然后,可以利用工具箱中的函数设计数字滤波器,并将其应用于待处理的信号。最后,可以通过Matlab的绘图函数对滤波后的信号进行可视化或分析。 在FPGA方面,可以使用Altera公司的FPGA开发工具和Verilog语言来实现数字滤波器的硬件电路。在Verilog中,可以定义滤波器的输入和输出接口,以及滤波器内部的逻辑电路。然后,利用Altera的FPGA开发工具,将Verilog代码编译生成对应的硬件电路。最后,可以将设计好的FPGA电路加载到Altera的FPGA芯片上,实现数字滤波器的硬件运算。 无论是在Matlab还是FPGA实现数字滤波器,都需要考虑滤波器设计的性能需求和实时性要求。在Matlab中,由于其软件化的特性,可以方便地进行滤波器的设计和调试。而在FPGA中,通过硬件实现可以获得更高的运算速度和实时性,适用于对实时性要求较高的应用场景。 总之,数字滤波器的Matlab和FPGA实现可以根据具体的需求选择,Matlab适用于快速原型设计和验证,而FPGA适用于实时性要求较高的应用场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发光的沙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值