mirror of
https://github.com/NanjingForestryUniversity/valveboard.git
synced 2025-11-08 14:24:05 +00:00
确认了不需要长时间开启保护 issue#6
This commit is contained in:
parent
6af8dfd09c
commit
6201402bb4
@ -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年入学,目前正打算找其他人接管这个库,毕业了就不要找他,但永远可以找丁坤。
|
||||
|
||||
|
||||
@ -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,已经毕业,但很乐意解答所有问题。
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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。
|
||||
|
||||

|
||||
|
||||
@ -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年入学,目前正打算找其他人接管这个库,毕业了就不要找他,但永远可以找丁坤。
|
||||
|
||||
|
||||
@ -68,6 +68,9 @@ DS90LV048具有内置终端电阻,电路设计和布局布线只需注意匹
|
||||

|
||||
|
||||
## 作者
|
||||
[过奕任](https://github.com/3703781)、丁坤。老阀板的协议不明确(其实就没有协议,逆向工程后改进出来的这份协议),所以就大概描述了一下协议相关信息。欢迎提[issue](https://github.com/NanjingForestryUniversity/valveboard/issues),bug随缘解决。
|
||||
|
||||
**丁坤,2019年9月入学、丁坤QQ1091546069、丁坤电话17761700156**,他觉得老阀板的协议不明确(其实就没有协议,逆向工程后改进出来的这份协议),所以就大概描述了一下协议相关信息,作者已经毕业,但很乐意解答关于这份协议的所有问题
|
||||
过奕任2020年入学,目前正打算找其他人接管这个库,毕业了就不要找他,但永远可以找丁坤。
|
||||
|
||||
丁坤2019年入学虽然已经毕业,但也很乐意解答关于这份协议的所有问题。丁坤QQ1091546069、丁坤电话17761700156。
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user