基于System-Verilog实现DE2-115开发板驱动HC_SR04超声波测距

目录

前言

一、SystemVerilog——下一代硬件设计语言

与Verilog关系

与SystemC关系

二、实验原理

2.1 传感器概述:

2.2 传感器引脚

2.3 传感器工作原理

2.4 整体测距原理及编写思路

三、System-Verilog文件

3.1 时钟分频

3.2 超声波测距

3.3 数码管驱动

3.4 VGA驱动

3.5 模块说明

3.6 引脚分配

总结

参考


前言

环境

  1. 硬件 DE2-115 HC-SR04超声波传感器

  2. 软件 Quartus 18.1

目标结果

使用DE2-115开发板驱动HC-SR04模块,并将所测得数据显示到开发板上的数码管。

模拟倒车雷达,集成蜂鸣器,led和vga提示功能

  1. 蜂鸣器提示,小于20cm,1s一响;小于10cm,0.5s一响
  2. LED提示,小于20cm, 全亮提示 ;
  3. VGA提示,小于20cm ,显示 警告warning 图片

小tips:
VSCODE插件安装一波

一、SystemVerilog——下一代硬件设计语言

        SystemVerilog结合了来自 Verilog、VHDL、C++的概念,还有验证平台语言和断言语言,也就是说,它将硬件描述语言(HDL)与现代的高层级验证语言(HVL)结合了起来。使其对于进行当今高度复杂的设计验证的验证工程师具有相当大的吸引力。 [1]

        这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力。它主要定位在芯片的实现和验证流程上。SystemVerilog(SV)拥有芯片设计及验证工程师所需的全部结构,它集成了面向对象编程、动态线程和线程间通信等特性,作为一种工业标准语言,SV全面综合了RTL设计、测试平台、断言和覆盖率,为系统级的设计及验证提供强大的支持作用。

        Systemverilog除了作为一种高层次,能进行抽象建模的语言被应用外,它的另一个显著特点是能够和芯片验证方法学结合在一起,即作为实现方法学的一种语言工具。使用验证方法学可以大大增强模块复用性、提高芯片开发效率,缩短开发周期。芯片验证方法学中比较著名的有:VMM、OVM、AVM和UVM等。

与Verilog关系

        System Verilog是Verilog语言的拓展和延伸。Verilog适合系统级,算法级,寄存器级,逻辑级,门级,电路开关级设计而System Verilog更适合于可重用的可综合IP和可重用的验证用IP设计,以及特大型基于IP的系统级设计和验证。

与SystemC关系

SystemC和SystemVerilog这两种语言,支持诸如信号、事件、接口和面向对象的概念,但每一种语言又均拥有自己明确的应用重点:

●SystemC对于体系架构开发编写抽象事务处理级(TL)模型、或执行建模来说最为有效,特别是对于具有很强C++实力的团队和有基于C/C++ IP 集成要求(如处理器仿真器),以及为早期软件开发设计的虚拟原型来说,更是如此。

●SystemVerilog对于RTL、抽象模型和先进的验证平台的开发来说最有效率,因为它具备了执行这方面任务所需的基础架构,例如受限制随机激励生成、功能覆盖或断言。

●SystemVerilog显然是描述最终的RTL设计本身的首选语言,不仅在于其描述真实硬件和断言的能力,还在于对工具支持方面的考虑。

●SystemVerilog电子电气工程师学会标准为IEEE 1800-2017 。

二、实验原理

2.1 传感器概述:

HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们,它将产生一个输出脉冲,其宽度可用于确定脉冲传播的距离。就是如此简单!该传感器体积小,易于在任何机器人项目中使用,并提供2厘米至400厘米(约1英寸至13英尺)之间出色的非接触范围检测,精度为3mm。

2.2 传感器引脚

  • VCC 是HC-SR04超声波距离传感器的电源

  • Trig 引脚用于触发超声波脉冲

  • Echo 回声当接收到反射信号时,引脚产生一个脉冲。脉冲的长度与检测发射信号所需的时间成正比

  • GND 用于接地

2.3 传感器工作原理

当持续时间至少为10 µS(10微秒)的脉冲施加到触发引脚时,一切就开始了。响应于此,传感器以40 KHz发射八个脉冲的声音脉冲。这种8脉冲模式使设备的“超声特征”变得独一无二,从而使接收器能够将发射模式与环境超声噪声区分开。八个超声波脉冲通过空气传播,远离发射器。同时,回声引脚变为高电平,开始形成回声信号的开始。如果这些脉冲没有被反射回来,则回波信号将在38毫秒后超时并返回低电平。因此38 ms的脉冲表示在传感器范围内没有阻塞。

回去,则在收到信号后,Echo引脚就会变低。这会产生一个脉冲,其宽度在150 µS至25 mS之间变化,具体取决于接收信号所花费时间。

HC-SR04的时序图如下:

通过时序图我们可以知道,我们给HC-SR04发送长达 10us 的TTL脉冲,然后模块就会进行测距,测距的结果通过回响信号传达,回响的TTL电平信号时间即是超声波从HC-SR04模块发出,触碰到障碍物后返回到HC-SR04模块的时间总和。

TTL是逻辑电平标准,当电压达到2.4V-5V之间,那么为逻辑1(高电平),电压在0V~0.4V之间,那么为逻辑0(低电平)。所以我们可以直接通过GPIO口来输出以及输入时序所需的电平信号。

然后,将接收到的脉冲的宽度用于计算到反射物体的距离。这可以通过我们在初中学到的简单的距离-速度-时间方程来解决。

距离=速度x时间 ,当然温度,以及环境噪声等对实验结果都有影响,因此公式应在不同环境下进行修改

总所周知,声音的速度为340m/s,因此我们将回响电平的时间除340再除2之后得到的就是单位为米的测距结果。

2.4 整体测距原理及编写思路

编写思路:

        以上时序图表明我们只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2:建议测量周期为60ms以上,以防止发射信号对回响信号的影响。

结合说明书我们可以知道,我们仅需提供10us的高电平给Trig口即可。然后HC-SR04在测量完毕之后会将结果通过Echo回响回来。

所以我们只需要将Trig口拉高,等待10us(最好再延长一些,代码中用的是15us)后再拉低即可。

接着就只需要等待Echo将数据传输回来,通过时序图我们可以得知回响信号是拉高Echo口,再拉低,中间持续的时间就是测距的结果。

所以我们给Echo口配置一个中断事件,设置为上跳变下跳变都触发,另外再用一个变量记录Echo口到底是拉高还是拉低即可。

如果是拉高,那么我们需要记录下持续的时间,这时候我们需要用定时器计时,所以需要在一开始的时候就配置好定时器的初始化。唯一的问题就是该如何配置定时器的预分频器和自动重装器了。

根据说明书我们可以知道HC-SR04的精度为3mm,而测距的公式为 us/58-cm,稍加计算可知,如果我们需要测量3mm,那么得到的时间为17.4us,以此为一个刻度,那么定时器的频率应该为57471Hz。然而这样太麻烦了,而且也不好用,因此我们可以随意一些,我在代码中使用的是预分频器为72,自动重装器为100,那么得到的频率为72MHz/72/100=1000Hz,也就是一次定时器中断的时间为100us,而自动重装器里的每一个值就是1us,所以每次外部中断的下降沿触发之后只需要将定时器触发的次数*100再加上自动重装器里的值就可以得到回响信号的持续时间了,单位是us。

三、System-Verilog文件

3.1 时钟分频

clk_div.sv

// //产生一个以微秒为周期的时钟信号clk_us,该信号可用于驱动一些需要精确时间控制的电路
module clk_div(input logic Clk,           // 输入系统时钟,50MHzinput logic Rst_n,         // 输入复位信号,低电平有效output logic clk_us        // 输出微秒级时钟信号
);// 参数声明 1us = 1000ns = 50个时钟周期parameter int CNT_MAX = 19'd50;  //1us的计数值为 50 * Tclk(20ns)// 内部线网/寄存器声明logic [18:0] cnt;          // 定义一个19位的计数器logic add_cnt;             // 计数器使能信号logic end_cnt;             // 计数器结束信号,达到最大值时有效// 计数器的寄存器逻辑always_ff @(posedge Clk, negedge Rst_n) beginif (!Rst_n) begin       // 如果复位信号有效,则计数器清零cnt <= '0; endelse if (add_cnt) begin // 如果计数器达到最大值,则计数器重置if (end_cnt) begincnt <= '0; endelse begin          // 否则计数器继续计数cnt <= cnt + 1'b1; endendelse begincnt <= cnt;         // 如果计数器未使能,则保持当前值endend// 赋值计数器使能信号,始终使计数器有效assign add_cnt = 1'b1; // 赋值计数器结束信号,当计数器使能并且计数值达到CNT_MAX - 1时有效assign end_cnt = add_cnt && cnt >= CNT_MAX - 19'd1;// 赋值输出时钟信号,当计数器达到最大值时输出一个脉冲assign clk_us = end_cnt;endmodule

3.2 超声波测距

hc_sr_trig.sv

// hc_sr_trig 模块定义开始,用于生成超声波触发信号
//   Description  ﹕超声波触发测距模块
// 波形周期 300ms,前 15us 高电平
module hc_sr_trig (input logic clk_us,    // 输入 1MHz 系统时钟input logic Rst_n,     // 输入复位信号,低电平有效output logic trig      // 输出触发测距信号
);// 参数声明 300_000*1_000ns = 3 *10^8ns = 0.3s = 300ms// 波形周期 300ms,前 10us 高电平// 建议测量周期为 60ms 以上,以防止发射信号对回响信号的影响。parameter int CYCLE_MAX = 19'd300_000; // 定义触发信号的一个周期计数,基于 1MHz 时钟// 内部线网/寄存器声明logic [18:0] cnt;       // 计数器,用于生成触发信号的时间控制logic add_cnt;          // 计数器使能信号logic end_cnt;          // 计数器结束信号,达到预定义周期时有效// 计数器逻辑,用于控制触发信号的产生always_ff @(posedge clk_us, negedge Rst_n) beginif (!Rst_n) begin    // 如果复位信号有效,则计数器清零cnt <= '0;end else if (add_cnt) begin  // 如果计数器使能if (end_cnt) begin       // 如果计数器达到预定义的最大周期cnt <= '0;           // 计数器重置end else begincnt <= cnt + 1'b1;   // 否则计数器递增endend else begincnt <= cnt;              // 如果计数器未使能,则保持当前值endendassign add_cnt = 1'b1;           // 赋值计数器使能信号,始终使计数器有效assign end_cnt = add_cnt && (cnt == CYCLE_MAX - 9'd1); // 赋值计数器结束信号,当计数器值达到 CYCLE_MAX - 1 时有效// 赋值触发信号,当计数器值小于 15 时,输出高电平,作为触发// cnt < 15 置为高电平,表示前 15us 为高电平,作为触发信号// 此逻辑基于 HC-SR04 模块的触发信号需求,通常为 10 微秒的高电平assign trig = (cnt < 15) ? 1'b1 : 1'b0;/*计数器 cnt 用于生成持续一定时间的触发信号 trig。当计数器小于 15 时,trig 为高电平,表示触发信号是活跃的。计数器在每个 1MHz 时钟的上升沿递增,当计数器达到设定的最大周期 CYCLE_MAX 时,计数器重置,重新开始计数。这样,trig 信号就会周期性地输出高电平脉冲,以满足 HC-SR04 超声波传感器的触发需求。*/endmodule

hc_sr_echo.sv

// 处理HC-SR04超声波传感器的回声信号,并计算距离
//   Description  ﹕超声波检测距离模块
// 本模块理论测试距离 2cm~510cm
// 输出结果保留两位小数
module hc_sr_echo
(input logic Clk,        // 输入50MHz时钟信号input logic clk_us,     // 输入1MHz系统时钟信号input logic Rst_n,      // 输入复位信号,低电平有效input logic echo,       // 输入超声波回声信号output logic [18:0] data_o  // 输出检测到的距离,以厘米为单位,保留三位小数
);/* 		S(um) = 17 * t 		-->  x.abc cm	*/
//Parameter Declarationsparameter T_MAX = 16'd60_000; // 定义计数器的最大值,对应510厘米logic r1_echo, r2_echo;  // 用于边沿检测的寄存器logic echo_pos, echo_neg;  // 回声信号的上升沿和下降logic [15:0] cnt;  // 1MHz时钟下的计数器,用于测量回声脉冲宽度logic add_cnt;  // 计数器使能信号logic end_cnt;  // 计数器结束信号logic [18:0] data_r;  // 距离数据的中间寄存器// 逻辑描述// 使用50MHz时钟检测回声信号的边沿,以避免使用1MHz时钟导致的2us延时always_ff @(posedge Clk or negedge Rst_n) beginif (!Rst_n) beginr1_echo <= 1'b0;r2_echo <= 1'b0;endelse beginr1_echo <= echo;r2_echo <= r1_echo;endend// 产生上升沿和下降沿信号assign echo_pos = r1_echo & ~r2_echo;  // 回声信号上升沿assign echo_neg = ~r1_echo & r2_echo;  // 回声信号下降沿// 计数器逻辑,用于测量回声脉冲宽度always_ff @(posedge clk_us or negedge Rst_n) beginif (!Rst_n) begincnt <= '0; endelse if (add_cnt) beginif (end_cnt) begincnt <= cnt;  // 如果达到最大测量范围,则保持当前计数值endelse begincnt <= cnt + 1'b1; // 否则计数器递增endendelse begin  // 如果回声信号低电平,计数器归零cnt <= '0;endendassign add_cnt = echo; // 赋值计数器使能信号,当回声信号为高电平时使能计数器assign end_cnt = add_cnt && cnt >= T_MAX - 1; //赋值计数器结束信号,当计数器达到最大值T_MAX时有效 超出最大测量范围则保持不变,极限// 测试距离=(高电平时间*声速(340M/S))/2;// 距离数据处理逻辑,将计数值转换为距离always_ff @(posedge Clk or negedge Rst_n) beginif (!Rst_n) begindata_r <= 'd2;  // 复位时中间寄存器置为2,用于小数点后三位的计算endelse if (echo_neg) begin// 当回声信号下降沿到来时,将计数值左移四位并加上自身,实现小数点后三位的计算//t = cnt*1000ns = cnt*10-6s//s = 340*t mdata_r <= (cnt << 4) + cnt;endelse begindata_r <= data_r;  // 否则保持当前值endend// 将中间寄存器的数据右移一位,实现除以2的操作,得到最终的距离数据assign data_o = data_r >> 1;endmodule

3.3 数码管驱动

seg_driver


// seg_driver模块用于驱动七段显示器,显示数字或特定的符号。
module seg_driver(input   logic       Clk,     // 输入的时钟信号。input   logic       Rst_n,   // 低电平有效的复位信号。input   logic [18:0] data_o, // 输入的数字数据,这里假设是测得的距离数据。output  logic [6:0]  hex1,   // 第1个七段显示器的段选信号输出。output  logic [6:0]  hex2,   // 第2个...output  logic [6:0]  hex3,output  logic [6:0]  hex4,output  logic [6:0]  hex5,output  logic [6:0]  hex6,output  logic [6:0]  hex7,output  logic [6:0]  hex8     
);// 参数定义区,定义了特殊显示值和小数点的编码,以及计数器的最大值。
parameter NOTION  = 4'd10,  // 定义数字"10"用于消隐的编码。FUSHU   = 4'd11,  // 定义数字"11"用作小数点的编码。MAX20us = 10'd1000; // 定义20微秒计数器的最大值。// 寄存器声明区,声明了用于控制和显示数字的内部寄存器。
logic [9:0]   cnt_20us;  // 用于动态扫描定时的20微秒计数器。
logic [7:0]   sel_r;     // 动态扫描控制的片选信号寄存器。
logic [3:0]   number;    // 要显示的数字,范围0-9或特殊编码。
logic [6:0]   seg_r;     // 根据number解析得到的七段显示器段选编码。// 每个七段显示器的段选编码寄存器,用于存储最终输出到显示器的段选编码。
logic [6:0]   hex1_r,   hex2_r,   hex3_r,   hex4_r,   hex5_r,   hex6_r,   hex7_r,   hex8_r;// 20微秒计数器始终块,用于周期性地重置计数器来实现动态扫描。
always_ff @(posedge Clk or negedge Rst_n) beginif (!Rst_n) begincnt_20us <= 0;  // 复位时计数器清零。endelse if (cnt_20us == (MAX20us - 1)) begincnt_20us <= 0;  // 计数器达到最大值时重置。endelse begincnt_20us <= cnt_20us + 1;  // 否则计数器递增。end
end// 动态扫描控制始终块,用于生成选择当前激活的七段显示器的片选信号。
always_ff @(posedge Clk or negedge Rst_n) beginif (!Rst_n) beginsel_r <= 8'b11_11_11_10;  // 复位时初始化片选信号。endelse if (cnt_20us == (MAX20us - 1)) beginsel_r <= {sel_r[6:0], sel_r[7]};  // 计数器达到最大值时,片选信号左移循环。endelse beginsel_r <= sel_r;  // 否则保持当前片选信号不变。end
end// 组合逻辑块,根据片选信号sel_r获取要显示的数字。
always_comb begincase (sel_r)// 根据sel_r的值选择对应的数字或特殊编码。// 这些编码对应于输入数据data_o的不同部分。// ...(此处省略了部分case语句)default: number = 4'd0;  // 默认情况下不显示任何数字。endcase
end// 组合逻辑块,根据数字解析出对应的七段显示器段选值seg_r。
always_comb begincase (number)// 对应数字0-9的七段显示器编码。// ...(此处省略了部分case语句)NOTION: seg_r = 7'b111_1111;  // 消隐编码,所有段都不亮。FUSHU: seg_r = 7'b011_1111;  // 小数点编码,只点亮小数点部分。default: seg_r = 7'b111_1111;  // 默认消隐。endcase
end// 组合逻辑块,根据片选信号sel_r将seg_r值赋给对应的七段显示器寄存器。
always_comb begin// 初始化所有寄存器为消隐状态。hex1_r = 7'b111_1111;hex2_r = 7'b111_1111;hex3_r = 7'b111_1111;hex4_r = 7'b111_1111;hex5_r = 7'b111_1111;hex6_r = 7'b111_1111;hex7_r = 7'b111_1111;hex8_r = 7'b111_1111;// 根据当前选中的显示器,将seg_r的值赋给对应的寄存器。case (sel_r)8'b11_11_11_10: hex1_r = seg_r;8'b11_11_11_01: hex2_r = seg_r;// ...(此处省略了部分case语句)default: ;endcase
end// 将寄存器的值通过assign语句输出到端口,连接到外部的七段显示器硬件。
assign  hex1 = hex1_r;
assign  hex2 = hex2_r;
assign  hex3 = hex3_r;
assign  hex4 = hex4_r;
assign  hex5 = hex5_r;
assign  hex6 = hex6_r;
assign  hex7 = hex7_r;
assign  hex8 = hex8_r;endmodule

3.4 VGA驱动

vga_dirve.sv

module vga_dirve (input logic clk,            // 系统时钟input logic rst_n,          // 复位input logic [23:0] rgb_data, // 16位RGB对应值output logic vga_clk,    // vga时钟 25Moutput logic h_sync,     // 行同步信号output logic v_sync,     // 场同步信号output logic [11:0] addr_h, // 行地址output logic [11:0] addr_v,  // 列地址output logic [7:0] rgb_r,  // 红基色output logic [7:0] rgb_g,  // 绿基色output logic [7:0] rgb_b  // 蓝基色
);// 640 * 480 60HZ
localparam int H_FRONT = 16; // 行同步前沿信号周期长
localparam int H_SYNC = 96;  // 行同步信号周期长
localparam int H_BLACK = 48; // 行同步后沿信号周期长
localparam int H_ACT = 640;   // 行显示周期长
localparam int V_FRONT = 11; // 场同步前沿信号周期长
localparam int V_SYNC = 2;   // 场同步信号周期长
localparam int V_BLACK = 31; // 场同步后沿信号周期长
localparam int V_ACT = 480;  // 场显示周期长// 800 * 600 72HZ (已注释,使用640*480)
// ...localparam int H_TOTAL = H_FRONT + H_SYNC + H_BLACK + H_ACT; // 行周期
localparam int V_TOTAL = V_FRONT + V_SYNC + V_BLACK + V_ACT; // 列周期logic [11:0] cnt_h; // 行计数器
logic [11:0] cnt_v; // 场计数器
logic [23:0] rgb;  // 对应显示颜色值// 对应计数器开始、结束、计数信号
logic flag_enable_cnt_h, flag_clear_cnt_h, flag_enable_cnt_v, flag_clear_cnt_v, flag_add_cnt_v, valid_area;// 25M时钟 行周期*场周期*刷新率 = 800 * 525* 60
logic clk_25;
// 50M时钟 1040 * 666 * 72
// ...// PLL实例化生成时钟
pll pll_inst (.areset(~rst_n),.inclk0(clk),.c0(clk_50), // 50M.c1(clk_25)  // 25M
);// 根据不同分配率选择不同频率时钟
assign vga_clk = clk_25;// 行计数
always_ff @(posedge vga_clk or negedge rst_n) beginif (!rst_n) begincnt_h <= 0;end else if (flag_enable_cnt_h) begincnt_h <= flag_clear_cnt_h ? 0 : cnt_h + 1;end
end// 行同步信号
always_ff @(posedge vga_clk or negedge rst_n) beginif (!rst_n) beginh_sync <= 0;end else if (cnt_h == H_SYNC - 1) beginh_sync <= 1;end else if (flag_clear_cnt_h) beginh_sync <= 0;end
end// 场计数
always_ff @(posedge vga_clk or negedge rst_n) beginif (!rst_n) begincnt_v <= 0;end else if (flag_enable_cnt_v) begincnt_v <= flag_clear_cnt_v ? 0 : cnt_v + flag_add_cnt_v;end
end// 场同步信号
always_ff @(posedge vga_clk or negedge rst_n) beginif (!rst_n) beginv_sync <= 0;end else if (cnt_v == V_SYNC - 1) beginv_sync <= 1;end else if (flag_clear_cnt_v) beginv_sync <= 0;end
end// 对应有效区域行地址 1-640
always_ff @(posedge vga_clk or negedge rst_n) beginif (!rst_n) beginaddr_h <= 0;end else if (valid_area) beginaddr_h <= cnt_h - H_SYNC - H_BLACK + 1;end
end// 对应有效区域列地址 1-480
always_ff @(posedge vga_clk or negedge rst_n) beginif (!rst_n) beginaddr_v <= 0;end else if (valid_area) beginaddr_v <= cnt_v - V_SYNC - V_BLACK + 1;end
end// 有效显示区域
assign valid_area = cnt_h >= H_SYNC + H_BLACK && cnt_h <= H_SYNC + H_BLACK + H_ACT &&cnt_v >= V_SYNC + V_BLACK && cnt_v <= V_SYNC + V_BLACK + V_ACT;// 显示颜色
always_ff @(posedge vga_clk or negedge rst_n) beginif (!rst_n) beginrgb <= 24'b0;end else if (valid_area) beginrgb <= rgb_data;end
endassign rgb_r = rgb[23:16];
assign rgb_g = rgb[15:8];
assign rgb_b = rgb[7:0];endmodule // vga_dirve

3.5 模块说明

这里要求超声波模块的正负极分别接入5V和GND,其余trigger和echo自由接线,我这里使用的是GPIO[0]和GPIO[1]

3.6 引脚分配

首先这里提出引脚配置,其中trig和echo引脚与自己所接线的位置向同即可

总结

本项目成功实现了基于FPGA DE2-115开发板的HC-SR04超声波测距模块,并通过多个关键模块的协同工作,实现了超声波测距的基本功能,并将测量结果显示在数码管上,同时集成了蜂鸣器、LED和VGA提示功能,增强了用户体验。这个项目充分展示了FPGA的强大功能和灵活性,为我们今后的研究和开发提供了宝贵的经验。

参考

FPGA基于DE2-115 开发板板和HC_SR04驱动的超声波测距

基于DE2 115开发板驱动HC_SR04超声波测距模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

共享购模式:数据驱动的消费增值新体验

共享购模式是一种创新的消费增值系统&#xff0c;它通过整合商家资源&#xff0c;实现商家让利和消费者增值的双重目标。以下是该模式的详细收益分析&#xff1a; 商家让利机制&#xff1a;商家入驻平台需持有价值500元的共享积分作为保证金&#xff0c;确保交易的诚信与质量。…

LabVIEW液压伺服压力机控制系统与控制频率选择

液压伺服压力机的控制频率是一个重要的参数&#xff0c;它直接影响系统的响应速度、稳定性和控制精度。具体选择的控制频率取决于多种因素&#xff0c;包括系统的动态特性、控制目标、硬件性能以及应用场景。以下是一些常见的指导原则和考量因素&#xff1a; 常见的控制频率范…

【介绍下Spark MLlib机器学习】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Java实现经纬度坐标转换

一、坐标系统简介 坐标系统&#xff0c;是描述物质存在的空间位置&#xff08;坐标&#xff09;的参照系&#xff0c;通过定义特定基准及其参数形式来实现。 坐标是描述位置的一组数值&#xff0c;按坐标的维度一般分为一维坐标&#xff08;公路里程碑&#xff09;和二维坐标…

SpringFramework总结

一.SpringFramework介绍 (一)Spring 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。 Spring 已经不再是一个单纯的应用框架&#xff0c;而是逐渐发展成为一个由多个不同子项目&#xff08;模块&#xff09;组成的成熟技术&#xff0c;例如 Spring Frame…

【机器学习系列】“购物篮分析入门:使用Apyori库进行关联规则挖掘”

目录 一、关联分析介绍 关键概念&#xff1a; 1. 支持度&#xff08;Support&#xff09; 2. 置信度&#xff08;Confidence&#xff09; 3. 提升度&#xff08;Lift&#xff09; 4. 频繁项集 5. 关联规则 应用场景&#xff1a; 实现方法 二、导入数据集 额外介绍一…

实用商务口语:“企业文化”用英语怎么说?柯桥学英语去银泰

企业文化是指企业员工共有的一套观念、信念、价值和价值行为准则&#xff0c;以及由此导致的行为模式。 英文可以说&#xff1a;enterprise / company / corporate culture。 情景对话练习01 A:Your company made a lot of achievements last year; how do you make it? 你们…

开源Mamba-2性能狂飙8倍!多个Mamba超强进化体拿下顶会

MambaOut的热度刚过去没多久&#xff0c;Mamba-2就带着它狂飙8倍的性能炸场了。 Mamba-2的核心层是对Mamba的选择性SSM的改进&#xff0c;同等性能下&#xff0c;模型更小&#xff0c;消耗更低&#xff0c;速度更快。与Mamba不同&#xff0c;新一代的Mamba-2再战顶会&#xff…

【AI大模型】Transformers大模型库(二):AutoModelForCausalLM

目录​​​​​​​ 一、引言 二、AutoModelForCausalLM 2.1 概述 2.2 主要功能 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#xff0c;为huggingface上数以万计的预训练大模型提供预测、训练等服务。 &#x1f917; Transfo…

【Python机器学习】预处理对监督学习的作用

还是用cancer数据集&#xff0c;观察使用MinMaxScaler对学习SVC的作用。 首先&#xff0c;在原始数据上拟合SVC&#xff1a; cancerload_breast_cancer() X_train,X_test,y_train,y_testtrain_test_split(cancer.data,cancer.target,random_state0 ) svmSVC(C100) svm.fit(X_t…

推荐个 Edge/Chrome/Firefox 都支持的 IP 定位查询扩展

作为一个博客站长&#xff0c;对 IP 地址应该都不陌生&#xff0c;可以说是跟站长的工作是息息相关的&#xff0c;反正明月几乎每天都会面临 IP 查询、定位的需要&#xff0c;今天让明月给找到了一个叫”IP 定位查询“的浏览器扩展&#xff0c;在 Edge 和 Firefox 下体验后感觉…

多卡聚合智能融合通信设备在无人机无线视频传输应用

无人驾驶飞机简称“无人机”&#xff0c;是利用(无线电)遥控设备和自备的程序控制装置操纵的不载人飞行器&#xff0c;现今无人机在航拍、农业、快递运输、测绘、新闻报道多个领域中都有深度的应用。 无人机无线视频传输保证地面人员利用承载的高灵敏度照相机可以进行不间断的画…

【蓝桥杯2025备赛】分巧克力

【蓝桥杯2025备赛】分巧克力 [蓝桥杯 2017 省 AB] 分巧克力 题目描述 儿童节那天有 K K K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N N N 块巧克力&#xff0c;其中第 i i i 块是 H i W i H_i \times W_i Hi​Wi​ 的方格组成的长方形…

自动化执行任务的脚本代码分享!

在当今信息化社会&#xff0c;自动化执行任务的脚本代码已经成为提高工作效率、减少人工错误的重要工具。 无论是数据处理、文件操作&#xff0c;还是网络请求、系统监控&#xff0c;脚本代码都能帮助我们实现自动化操作&#xff0c;从而释放人力&#xff0c;让我们有更多时间…

LeetCode-103. 二叉树的锯齿形层序遍历【树 广度优先搜索 二叉树】

LeetCode-103. 二叉树的锯齿形层序遍历【树 广度优先搜索 二叉树】 题目描述&#xff1a;解题思路一&#xff1a;层序遍历&#xff0c;唯一区别就是ans.append(level[::-1] if len(ans) % 2 else level)背诵版&#xff1a;解题思路三&#xff1a;0 题目描述&#xff1a; 给你二…

网络层-IP协议 二

一、网段划分 为了进行组网,把一个IP地址,分成了两个部分: 网络号 主机号 例如:192.168.2.100 这个IP地址中,前面一部分 : 192.168.2就是我们的网络号 后面一部分 100就是我们的主机号. 家用宽带来说,一般默认就是前面三个字节是网络号,主机号的范围就表示局域网中可以有…

避免使用for循环操作高维数组:numpy.apply_along_axis用法

文章目录 场景实际操作编写相关函数np.apply_along_axis 场景 设想我有一列高维向量&#xff0c;读取之后的数据都是字符串变量&#xff0c;我需要把这些字符串数据转换为复数之后求绝对值 实际操作 在使用pd.read_csv()读取数据之后&#xff0c;将这一列数据转换为numpy数…

信息系统项目管理师0145:敏捷与适应方法(9项目范围管理—9.2项目范围管理过程—9.2.3敏捷与适应方法)

点击查看专栏目录 文章目录 9.2.3 敏捷与适应方法9.2.3 敏捷与适应方法 对于需求不断变化、风险大或不确定性高的项目,在项目开始时通常无法明确项目的范围,而需要在项目期间逐渐明确。敏捷或适应型方法特意在项目早期缩短定义和协商范围的时间,为后续细化范围、明确范围争取…

打响G7国家降息第一枪!加拿大央行宣布降息

KlipC报道&#xff1a;6月5日&#xff0c;加拿大央行宣布降息25个基点至4.75%&#xff0c;与市场预期一致。加拿大央行是G7国家中第一个降息的央行。其还表示有持续证据表明核心通胀正在缓解&#xff0c;货币政策不再需要那么限制性。 KlipC分析师表示&#xff0c;在2023年7月&…

打破信息孤岛,U-Mail邮件系统轻松集成各类业务系统

随着国家大力推动企业数字化转型&#xff0c;企业内部数字化建设需要各种业务系统来提高企业生产力&#xff0c;然而&#xff0c;随着在业务数据量逐步增大的情形下&#xff0c;如何更加高效地整合、协同各个系统之间的信息交互&#xff0c;并且更好地融合企业邮件系统&#xf…