From 6201402bb40231bf0695f9dfcabce2550546881a Mon Sep 17 00:00:00 2001 From: Miaow <3703781@qq.com> Date: Wed, 31 Aug 2022 14:46:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E4=BA=86=E4=B8=8D=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E9=95=BF=E6=97=B6=E9=97=B4=E5=BC=80=E5=90=AF=E4=BF=9D?= =?UTF-8?q?=E6=8A=A4=20issue#6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +- examples/README.md | 5 +- firmware/README.md | 19 +++-- firmware/db/valveboard_firmware.db_info | 2 +- firmware/valveboard_firmware.v | 107 +++++------------------- hardware/README.md | 20 +++-- protocol/README.md | 5 +- 7 files changed, 59 insertions(+), 105 deletions(-) diff --git a/README.md b/README.md index f652656..3b4325d 100644 --- a/README.md +++ b/README.md @@ -35,5 +35,9 @@ b分支编号-h硬件版本-p协议版本-f固件版本 ## 作者 -**丁坤,2019年9月入学、丁坤QQ1091546069、丁坤电话17761700156**,他觉得老阀板工程很乱,重新开发了关于阀板的一切,并放到这个仓库里,计划以后就在这个仓库里迭代更新,作者已经毕业,但很乐意解答关于阀板的所有问题 +[过奕任](https://github.com/3703781)、丁坤。老阀板工程很乱,重新开发了关于阀板的一切,并放到这个仓库里,以后就在这个仓库里迭代更新。欢迎提[issue](https://github.com/NanjingForestryUniversity/valveboard/issues),bug随缘解决。 + +丁坤2019年入学虽然已经毕业,但也很乐意解答关于阀板的所有问题。丁坤QQ1091546069、丁坤电话17761700156。 + +过奕任2020年入学,目前正打算找其他人接管这个库,毕业了就不要找他,但永远可以找丁坤。 diff --git a/examples/README.md b/examples/README.md index cea0a56..9179a12 100644 --- a/examples/README.md +++ b/examples/README.md @@ -17,6 +17,9 @@ 基于嵌入式linux的程序,线程安全,具体板子为EPC-9600I-L,是广州致远电子有限公司开发的基于AM335x系列处理器的工控主板,处理器内核为800MHz的Arm Cortex-A8。 ## 作者 +[过奕任](https://github.com/3703781)、丁坤。欢迎提[issue](https://github.com/NanjingForestryUniversity/valveboard/issues),bug随缘解决。 -**丁坤,2019年9月入学、丁坤QQ1091546069、丁坤电话17761700156**,作者已经毕业,但很乐意解答有关的所有问题 +过奕任2020年入学,目前正打算找其他人接管这个库,毕业了就不要找他,但永远可以找丁坤。 + +丁坤2019年入学、丁坤QQ1091546069、丁坤电话17761700156,已经毕业,但很乐意解答所有问题。 diff --git a/firmware/README.md b/firmware/README.md index 0b2dada..79ac42b 100644 --- a/firmware/README.md +++ b/firmware/README.md @@ -11,9 +11,6 @@ Quartus软件 看程序注释 ## Changelog - -**作者是丁坤,2019年9月入学、丁坤QQ1091546069、丁坤电话17761700156**,他是搞嵌入式的,自师兄王聪(2018年9月入学)毕业后硬件领域师门出现空档期,被老倪催的没办法了,就顺手写了这份FPGA代码,作者已经毕业,但很乐意解答关于固件的所有问题 - ### v1.0 继承自老程序 @@ -31,7 +28,17 @@ Quartus软件 - 添加了高电压抑制,见[issue#4](https://github.com/NanjingForestryUniversity/valveboard/issues/4) - 修正了高电压时间为0.2ms -### 当前版本 +### v1.4 + +确认了阀不需要长时间开启保护,删除了阀板固件v1.4-beta1([commit 6af8df](https://github.com/NanjingForestryUniversity/valveboard/commit/6af8dfd09c268d677a46063cc9637f573e69919e))中的长时间开启保护,见[issue#6](https://github.com/NanjingForestryUniversity/valveboard/issues/6) + + +## 作者 +[过奕任](https://github.com/3703781)、丁坤 + +过奕任自师兄王聪(2018年入学)毕业后硬件方面师门出现空档期,被老倪催的没办法了,就学了硬件并顺手写了这份FPGA代码。丁坤是专门搞嵌入式的,但也看过这份代码。欢迎提[issue](https://github.com/NanjingForestryUniversity/valveboard/issues),bug随缘解决。 + +过奕任2020年入学,目前正打算找其他人接管这个库,毕业了就不要找他,但永远可以找丁坤。 + +丁坤2019年入学、丁坤QQ1091546069、丁坤电话17761700156,已经毕业,但很乐意解答所有问题。 -- 暂且添加每路阀独立的开启超时为200ms,见[issue#6](https://github.com/NanjingForestryUniversity/valveboard/issues/6) -- 通讯中断超时从原来的1s修改为200ms diff --git a/firmware/db/valveboard_firmware.db_info b/firmware/db/valveboard_firmware.db_info index 8b2948e..53e7a38 100644 --- a/firmware/db/valveboard_firmware.db_info +++ b/firmware/db/valveboard_firmware.db_info @@ -1,3 +1,3 @@ Quartus_Version = Version 20.1.1 Build 720 11/11/2020 SJ Lite Edition Version_Index = 520278016 -Creation_Time = Wed Aug 24 21:50:38 2022 +Creation_Time = Wed Aug 31 14:18:53 2022 diff --git a/firmware/valveboard_firmware.v b/firmware/valveboard_firmware.v index 04bf1c5..00a69ef 100644 --- a/firmware/valveboard_firmware.v +++ b/firmware/valveboard_firmware.v @@ -1,5 +1,5 @@ /* -丁坤的阀板程序v1.4-beta1 2022/8/24 +阀板程序v1.4 2022/8/31 经测试,高压时间改为0.2ms 使用的是合肥的阀,1.5A电流需0.2ms的100V(阀标称100V,现场供电为96V)高电压 */ @@ -20,14 +20,15 @@ module valveboard_firmware( parameter CHANNEL_NUM_MINUS_1 = CHANNEL_NUM - 1; parameter HIGH_VOLTAGE_TIME = 32'd4000; // 高压时间HIGH_VOLTAGE_TIME / 20MHz = 0.2ms parameter HIGH_VOLTAGE_TIME_MINUS_1 = HIGH_VOLTAGE_TIME - 1; - parameter LONGOPEN_COUNTER_THRESHOLD = 7'd20; // 一路阀打开超过LONGOPEN_COUNTER_THRESHOLD * 200_000 / 20MHz = 200ms就关闭 - parameter DISCONNECT_FAULT_COUNTER_THRESHOLD = 32'd4_000_000; // 通讯中断超过FAULT_COUNTER_THRESHOLD / 20MHz = 200ms,就关所有阀 - parameter DISCONNECT_FAULT_COUNTER_THRESHOLD_MINUS_1 = DISCONNECT_FAULT_COUNTER_THRESHOLD - 1; - parameter DISCONNECT_FAULT_COUNTER_THRESHOLD_PLUS_1 = DISCONNECT_FAULT_COUNTER_THRESHOLD + 1; + parameter FAULT_COUNTER_THRESHOLD = 32'd20_000_000; // 通讯中断超过FAULT_COUNTER_THRESHOLD / 20MHz = 200ms,就关所有阀 + parameter FAULT_COUNTER_THRESHOLD_MINUS_1 = FAULT_COUNTER_THRESHOLD - 1; + parameter FAULT_COUNTER_THRESHOLD_PLUS_1 = FAULT_COUNTER_THRESHOLD + 1; + + reg [CHANNEL_NUM_MINUS_1:0] cache_signal_high_voltage; reg [31:0] i; - reg [31:0] disconnect_fault_counter; + reg [31:0] fault_counter; reg [0:0] fault_flag [0:7]; // fault_flag支持8类错误信号 @@ -169,27 +170,27 @@ module valveboard_firmware( end /** - * 若通讯中断,超过DISCONNECT_FAULT_COUNTER_THRESHOLD个csys_clk就置位fault_flag[1] + * 若通讯中断,超过FAULT_COUNTER_THRESHOLD个csys_clk就置位fault_flag[1] * fault_flag[1]在posedge_line_sclk上升沿时刻清楚 */ always @(posedge sys_clk or negedge rst_n) begin if (!rst_n) begin - disconnect_fault_counter <= 0; + fault_counter <= 0; fault_flag[1] <= 0; end else if ({cache_line_sclk, line_sclk} == 6'b011111) begin - disconnect_fault_counter <= 0; + fault_counter <= 0; fault_flag[1] <= 0; end else begin - if (disconnect_fault_counter >= DISCONNECT_FAULT_COUNTER_THRESHOLD_PLUS_1) + if (fault_counter >= FAULT_COUNTER_THRESHOLD_PLUS_1) fault_flag[1] <= 1; - else if (disconnect_fault_counter >= DISCONNECT_FAULT_COUNTER_THRESHOLD_MINUS_1) begin - disconnect_fault_counter <= disconnect_fault_counter + 1; + else if (fault_counter >= FAULT_COUNTER_THRESHOLD_MINUS_1) begin + fault_counter <= fault_counter + 1; fault_flag[1] <= 1; end else begin - disconnect_fault_counter <= disconnect_fault_counter + 1; + fault_counter <= fault_counter + 1; fault_flag[1] <= 0; end end @@ -280,79 +281,13 @@ module valveboard_firmware( end end - - - /** - * 对系统时钟做分频得到100Hz的脉冲信号,后续用于判断阀是否长时间开启 - * 这样是不严谨的,应当以数据接收完成时刻开始计时,但CPLD资源不够了 - */ - reg [17:0] sys_clk_divider; - reg sys_clk_div; - always @(posedge sys_clk or negedge rst_n) begin - if (!rst_n) begin - sys_clk_divider <= 0; - sys_clk_div <= 0; - end - else if (total_fault_flag) begin - sys_clk_divider <= 0; - sys_clk_div <= 0; - end - else begin - if (sys_clk_divider == 199_999) begin - sys_clk_divider <= 0; - sys_clk_div <= 1; - end - else begin - sys_clk_divider <= sys_clk_divider + 1; - sys_clk_div <= 0; - end - end - end - - /* - * 在100Hz的脉冲信号时更新每路阀的开启时间计数器 - * 到达超时时间后暂停计数 - * 用100Hz的信号的原因是资源不够,必须减少计数器位宽 - * 这导致计数器存在随机的单周期不稳定时间 - */ - reg [7:0] longopen_counter [0:CHANNEL_NUM_MINUS_1]; - integer k; - always @(posedge sys_clk or negedge rst_n) begin - if (!rst_n) begin - for (k = 0; k < CHANNEL_NUM; k = k + 1) begin - longopen_counter[k] <= 0; - end - end - else if (total_fault_flag) begin - for (k = 0; k < CHANNEL_NUM; k = k + 1) begin - longopen_counter[k] <= 0; - end - end - else begin - for (k = 0; k < CHANNEL_NUM; k = k + 1) begin - if (cache2_line_sdata[k] == 0) begin - if (sys_clk_div && (longopen_counter[k] < LONGOPEN_COUNTER_THRESHOLD)) - longopen_counter[k] <= longopen_counter[k] + 7'd1; - else - longopen_counter[k] <= longopen_counter[k]; - end - else begin - longopen_counter[k] <= 0; - end - end - end - end /** * 高电压时间内(is_high_voltage_time高电平时),按cache2_line_sdata打开所需高电压;高电压时间后关闭 - * 按cache2_line_sdata打开低电压 * 需要注意的是,已经开着的喷阀, 在高压时间内,不会再次使用高电压,只是保持低电压 - * 此外,根据开启时间计数器是否超时来决定是否关闭某路阀 + * 按cache2_line_sdata打开低电压 * total_fault_flag会关闭所有喷阀 */ - integer m; - // 已经开着的喷阀,在高压时间内,不会再次使用高电压,只是保持低电压 - wire [CHANNEL_NUM_MINUS_1:0] signal_high_voltage_wire = ~last_line_sdata | cache2_line_sdata; always @ (posedge sys_clk or negedge rst_n) begin if (!rst_n) begin signal_low_voltage <= ~0; @@ -363,17 +298,13 @@ module valveboard_firmware( signal_high_voltage <= ~0; end else if (is_high_voltage_time) begin - // 阀的开启时间不超过LONGOPEN_COUNTER_THRESHOLD - for (m = 0; m < CHANNEL_NUM; m = m + 1) begin - signal_high_voltage[m] <= signal_high_voltage_wire[m] | ~(longopen_counter[m] < LONGOPEN_COUNTER_THRESHOLD); - signal_low_voltage[m] <= cache2_line_sdata[m] | ~(longopen_counter[m] < LONGOPEN_COUNTER_THRESHOLD); - end + // 已经开着的喷阀,在高压时间内,不会再次使用高电压,只是保持低电压 + signal_high_voltage <= ~last_line_sdata | cache2_line_sdata; + signal_low_voltage <= cache2_line_sdata; end else begin signal_high_voltage <= ~0; - for (m = 0;m < CHANNEL_NUM; m = m + 1) begin - signal_low_voltage[m] <= cache2_line_sdata[m] | ~(longopen_counter[m] < LONGOPEN_COUNTER_THRESHOLD); - end + signal_low_voltage <= cache2_line_sdata; end end diff --git a/hardware/README.md b/hardware/README.md index 4960b15..84f2b2e 100644 --- a/hardware/README.md +++ b/hardware/README.md @@ -1,6 +1,6 @@ # 阀板硬件 -这个文件夹下是丁坤画的48路阀板的原理图和PCB,用于烟梗分选机。整个机器用了六块48路阀板,驱动256路喷嘴,阀的型号是合肥旭伟电子气动有限公司的XW-F16,这个阀一个可以连接并控制16个喷嘴。每个阀的电阻是14欧姆,高压启动时峰值电流约1.5A,低压保持电流约0.8A。 +这个文件夹下是48路阀板的原理图和PCB,用于烟梗分选机。整个机器用了六块48路阀板,驱动256路喷嘴,阀的型号是合肥旭伟电子气动有限公司的XW-F16,这个阀一个可以连接并控制16个喷嘴。每个阀的电阻是14欧姆,高压启动时峰值电流约1.5A,低压保持电流约0.8A。 ![image-20211226143651047](README.assets/image-20211226143651047.png) @@ -50,20 +50,17 @@ CPLD烧录口为简牛口,用USB Blaster烧录的,开发软件为Quartus。 所需器件BOM里都有,板子开窗部分要加锡,钢网上已经体现了。测试板子是嘉立创做的,SMT也是嘉立创,直插元件和芯片需手焊 ## Changelog - -丁坤2019年9月入学、丁坤QQ1091546069、丁坤电话17761700156,他刚入学时就被师兄叫去焊接汪学良的阀板,后来接替师兄做了这个仓库里的阀板,作者已经毕业,但很乐意解答有关的所有问题 - ### v1.0 绿色的阀板,测试版本,继承于远古的原理图和布局 ### v1.1 -蓝色的阀板,丁坤画,具有ISO、LVDS、TTL接口,见[b01-h1.1-p1.1-f1.1](https://github.com/NanjingForestryUniversity/valveboard/releases/tag/b01-h1.1-p1.1-f1.1) +蓝色的阀板,过奕任选型和画原理图,丁坤layout,具有ISO、LVDS、TTL接口,见[b01-h1.1-p1.1-f1.1](https://github.com/NanjingForestryUniversity/valveboard/releases/tag/b01-h1.1-p1.1-f1.1) ### v1.2 -黄色的阀板,见 [b02-h1.2-p1.1-f1.2](https://github.com/NanjingForestryUniversity/valveboard/releases/tag/b02-h1.2-p1.1-f1.2) +黄色的阀板,过奕任画原理图和layout,见 [b02-h1.2-p1.1-f1.2](https://github.com/NanjingForestryUniversity/valveboard/releases/tag/b02-h1.2-p1.1-f1.2) - 采用带屏蔽的超六类RJ45端口代替原来的牛角座,增强了通信的稳定性 - 删除了ISO(隔离)端口 @@ -76,7 +73,7 @@ CPLD烧录口为简牛口,用USB Blaster烧录的,开发软件为Quartus。 ### v1.3 -绿色的阀板,见[b02-h1.3-p1.1-f1.3](https://github.com/NanjingForestryUniversity/valveboard/releases/tag/b02-h1.3-p1.1-f1.3) +绿色的阀板,过奕任画原理图和layout,见[b02-h1.3-p1.1-f1.3](https://github.com/NanjingForestryUniversity/valveboard/releases/tag/b02-h1.3-p1.1-f1.3) - 重画了原理图和PCB,PCB尺寸减小 - 增大阻容器件封装,解决100V耐压风险,[issue#1](https://github.com/NanjingForestryUniversity/valveboard/issues/1) @@ -86,3 +83,12 @@ CPLD烧录口为简牛口,用USB Blaster烧录的,开发软件为Quartus。 - 增加了每一路的标识丝印,南林的徽标 - 重新排列了阀的连接器,方便插拔 - 有需要的线路上增加了开窗,提高载流能力 + +## 作者 + +[过奕任](https://github.com/3703781)和丁坤一起设计了电路,画了板子。欢迎提[issue](https://github.com/NanjingForestryUniversity/valveboard/issues),bug随缘解决。 + +丁坤2019年入学时就被师兄叫去焊接汪学良的阀板,后来和过奕任接替师兄做了这个仓库里的阀板。丁坤已经毕业,但也很乐意解答关于板子的所有问题。丁坤QQ1091546069、丁坤电话17761700156。 + +过奕任2020年入学,目前正打算找其他人接管这个库,毕业了就不要找他,但永远可以找丁坤。 + diff --git a/protocol/README.md b/protocol/README.md index ed06727..6e5fc4a 100644 --- a/protocol/README.md +++ b/protocol/README.md @@ -68,6 +68,9 @@ DS90LV048具有内置终端电阻,电路设计和布局布线只需注意匹 ![image-20211109201037196](./README.assets/image-20211109201037196.png) ## 作者 +[过奕任](https://github.com/3703781)、丁坤。老阀板的协议不明确(其实就没有协议,逆向工程后改进出来的这份协议),所以就大概描述了一下协议相关信息。欢迎提[issue](https://github.com/NanjingForestryUniversity/valveboard/issues),bug随缘解决。 -**丁坤,2019年9月入学、丁坤QQ1091546069、丁坤电话17761700156**,他觉得老阀板的协议不明确(其实就没有协议,逆向工程后改进出来的这份协议),所以就大概描述了一下协议相关信息,作者已经毕业,但很乐意解答关于这份协议的所有问题 +过奕任2020年入学,目前正打算找其他人接管这个库,毕业了就不要找他,但永远可以找丁坤。 + +丁坤2019年入学虽然已经毕业,但也很乐意解答关于这份协议的所有问题。丁坤QQ1091546069、丁坤电话17761700156。