完善 CAN DBC 与交付文档
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>SDC-ACQ&DAC 固件交付说明</title>
|
||||
<style>
|
||||
@page { size: A4; margin: 16mm 17mm 17mm; }
|
||||
* { box-sizing: border-box; }
|
||||
body {
|
||||
color: #17212b;
|
||||
font-family: "Noto Sans CJK SC", "Noto Sans CJK TC", sans-serif;
|
||||
font-size: 9.5pt;
|
||||
line-height: 1.55;
|
||||
margin: 0;
|
||||
}
|
||||
h1, h2, h3 { color: #103a5d; margin: 0; }
|
||||
h1 { font-size: 23pt; letter-spacing: .4pt; }
|
||||
h2 {
|
||||
border-bottom: 1.3pt solid #1f709e;
|
||||
font-size: 14pt;
|
||||
margin: 16pt 0 7pt;
|
||||
padding-bottom: 3pt;
|
||||
}
|
||||
h3 { font-size: 10.5pt; margin: 9pt 0 3pt; }
|
||||
p { margin: 3pt 0 6pt; }
|
||||
.hero {
|
||||
background: #eef6fa;
|
||||
border-left: 5pt solid #1f709e;
|
||||
margin: 0 0 13pt;
|
||||
padding: 12pt 15pt;
|
||||
}
|
||||
.subtitle { color: #466176; font-size: 11pt; margin-top: 3pt; }
|
||||
.meta { color: #50677a; font-size: 8.5pt; margin-top: 11pt; }
|
||||
.tag {
|
||||
background: #d7edf8;
|
||||
border-radius: 9pt;
|
||||
color: #0d547d;
|
||||
display: inline-block;
|
||||
font-size: 8pt;
|
||||
margin: 7pt 5pt 0 0;
|
||||
padding: 2pt 8pt;
|
||||
}
|
||||
table { border-collapse: collapse; margin: 5pt 0 8pt; width: 100%; }
|
||||
th { background: #1d638c; color: #fff; font-weight: 600; }
|
||||
td, th { border: .45pt solid #abc3d1; padding: 4pt 5pt; text-align: left; vertical-align: top; }
|
||||
tr:nth-child(even) td { background: #f5f9fb; }
|
||||
code, pre { font-family: "Noto Sans Mono CJK SC", "DejaVu Sans Mono", monospace; }
|
||||
code { background: #eef2f4; border-radius: 2pt; padding: 0 2pt; }
|
||||
pre {
|
||||
background: #142b3d;
|
||||
color: #f0f7fb;
|
||||
font-size: 8.5pt;
|
||||
line-height: 1.4;
|
||||
margin: 5pt 0 8pt;
|
||||
overflow-wrap: break-word;
|
||||
padding: 7pt 9pt;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
ul { margin: 3pt 0 7pt; padding-left: 17pt; }
|
||||
li { margin: 1pt 0; }
|
||||
.notice { background: #fff7df; border-left: 3pt solid #d69d2d; margin: 7pt 0; padding: 6pt 8pt; }
|
||||
.ok { background: #edf8f1; border-left: 3pt solid #28915b; margin: 7pt 0; padding: 6pt 8pt; }
|
||||
.small { color: #50677a; font-size: 8.2pt; }
|
||||
.page-break { break-before: page; }
|
||||
.footer { border-top: .5pt solid #b7c8d3; color: #607789; font-size: 8pt; margin-top: 16pt; padding-top: 5pt; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<section class="hero">
|
||||
<h1>SDC-ACQ&DAC 固件交付说明</h1>
|
||||
<p class="subtitle">STM32F407VET6 采集、双 CAN 与双路 DAC 控制板</p>
|
||||
<p class="meta">文档版本:1.1 | 日期:2026-08-09 | 固件工程:A11_F407_SDC_ACQ_DAC_CubeMX</p>
|
||||
<span class="tag">15 路状态采集</span><span class="tag">4 路频率输入</span><span class="tag">双 CAN 500 kbit/s</span><span class="tag">双 MCP4725 DAC</span><span class="tag">串口调试</span>
|
||||
</section>
|
||||
|
||||
<h2>1. 功能概览</h2>
|
||||
<table>
|
||||
<tr><th style="width:20%">功能</th><th>当前实现</th></tr>
|
||||
<tr><td>状态采集</td><td>采集 PD0–PD14 共 15 路数字输入。上电和任一输入变化时,向 CAN1、CAN2 发送完整状态与变化掩码。</td></tr>
|
||||
<tr><td>频率采集</td><td>采集 PA0、PA2、PA6、PB14 的上升沿频率,每 500 ms 通过 CAN 和串口输出。</td></tr>
|
||||
<tr><td>电压采集</td><td>ADC1_IN8(PB0)测量外部经分压后的输入;对外输出分压前、已标定且滤波后的电压。</td></tr>
|
||||
<tr><td>CAN</td><td>CAN1 与 CAN2 均为 500 kbit/s、11 位标准数据帧,并使用相同协议。</td></tr>
|
||||
<tr><td>DAC</td><td>通过 I2C2 控制两颗 MCP4725,接收 CAN 命令或串口命令设置 0–5.000 V 输出。</td></tr>
|
||||
<tr><td>运行指示</td><td>PE0 每 500 ms 翻转一次作为运行心跳;发生初始化错误时 PE0、PE1 快速翻转。</td></tr>
|
||||
</table>
|
||||
|
||||
<h2>2. 接口和引脚</h2>
|
||||
<table>
|
||||
<tr><th>接口</th><th>MCU 引脚 / 外设</th><th>说明</th></tr>
|
||||
<tr><td>15 路状态输入</td><td>PD0–PD14 / EXTI</td><td>bit0 对应 PD0,bit14 对应 PD14。</td></tr>
|
||||
<tr><td>频率输入</td><td>PA0/TIM5、PA2/TIM9、PA6/TIM3、PB14/TIM12</td><td>上升沿输入捕获。</td></tr>
|
||||
<tr><td>电压输入</td><td>PB0 / ADC1_IN8</td><td>报告值为分压前电压,单位 mV。</td></tr>
|
||||
<tr><td>CAN1 / CAN2</td><td>PB8/PB9;PB5/PB6</td><td>分别为 RX/TX。</td></tr>
|
||||
<tr><td>DAC I2C</td><td>PB10/PB11 / I2C2</td><td>DAC1 地址 0x61,DAC2 地址 0x60(7 位地址)。</td></tr>
|
||||
<tr><td>调试串口</td><td>PA9/PA10 / USART1</td><td>115200、8N1、无硬件流控。</td></tr>
|
||||
</table>
|
||||
|
||||
<h2 class="page-break">3. CAN 协议</h2>
|
||||
<p>所有字段均为小端序(低字节在前)。板卡主动上报的帧会分别发到 CAN1 和 CAN2。</p>
|
||||
<table>
|
||||
<tr><th style="width:13%">CAN ID</th><th style="width:19%">名称</th><th style="width:22%">方向 / 时机</th><th>数据定义</th></tr>
|
||||
<tr><td><code>0x100</code></td><td>心跳</td><td>板卡发送,每 1 s</td><td><code>A1 01 seq_L seq_H uptime_0..3</code>;板号 A1、协议版本 1、序号、运行时间 ms。</td></tr>
|
||||
<tr><td><code>0x102</code></td><td>输入电压</td><td>板卡发送,每 500 ms</td><td><code>uint16</code>,单位 mV。例如 <code>90 2F</code> = 0x2F90 = 12176 mV = 12.176 V。</td></tr>
|
||||
<tr><td><code>0x103</code></td><td>四路频率</td><td>板卡发送,每 500 ms</td><td>4 个 <code>uint16</code>,单位 Hz;依次为 PA0、PA2、PA6、PB14。</td></tr>
|
||||
<tr><td><code>0x321</code></td><td>DAC 设置</td><td>外部发送给板卡</td><td><code>[DAC 编号][mV_L][mV_H]</code>,编号仅允许 1 或 2。</td></tr>
|
||||
<tr><td><code>0x322</code></td><td>DAC 应答</td><td>板卡发送,设置后</td><td><code>[结果][DAC 编号][mV_L][mV_H]</code>;结果 1 成功,0 失败。</td></tr>
|
||||
<tr><td><code>0x330</code></td><td>15 路状态</td><td>板卡发送,上电或状态变化</td><td>状态 <code>uint16</code>、变化掩码 <code>uint16</code>、时间戳 <code>uint32 ms</code>。</td></tr>
|
||||
</table>
|
||||
|
||||
<h3>DAC 设置示例</h3>
|
||||
<p>电压 V 到 CAN 数据的换算:<code>mV = round(V × 1000)</code>,随后拆为低字节和高字节。</p>
|
||||
<pre>DAC1 输出 3.000 V:ID = 0x321,DLC = 3,DATA = 01 B8 0B
|
||||
DAC2 输出 1.140 V:ID = 0x321,DLC = 3,DATA = 02 74 04
|
||||
|
||||
应答示例(DAC1 成功设为 3.000 V):ID = 0x322,DATA = 01 01 B8 0B</pre>
|
||||
<div class="notice">DAC 输出范围为 0–5000 mV。软件中 DAC1、DAC2 到板级 MC_L、MC_R 的实际对应关系应以实物测量为准。</div>
|
||||
|
||||
<h2>4. ADC 电压说明</h2>
|
||||
<p>ADC 输出为分压前输入电压,换算使用 100 kΩ / 30 kΩ 分压参数,并采用实测标定系数 <code>12300 / 11656</code>。单次报告包含 16 次 ADC 平均,随后对最近 4 次报告做移动平均;输出刷新周期为 500 ms,滤波时间约 2 秒。</p>
|
||||
<pre>串口示例:ADC=12300mV PWM=10,0,0,0Hz</pre>
|
||||
|
||||
<h2>5. 串口使用</h2>
|
||||
<p>串口参数:115200、8 数据位、1 停止位、无校验、无流控。USB-TTL 应交叉连接:PA9/TX → 转换器 RX,PA10/RX → 转换器 TX,并连接公共地。</p>
|
||||
<pre>DAC1 1.234
|
||||
DAC2 2500
|
||||
D1 2.5V</pre>
|
||||
<p>命令不区分大小写,支持伏特小数或毫伏整数。设置完成后串口会回显结果,CAN1/CAN2 同时发送 <code>0x322</code> 应答。</p>
|
||||
|
||||
<h2>6. 频率输入说明</h2>
|
||||
<p>频率使用相邻上升沿时间差计算;连续 1 秒没有新边沿时,该通道输出 0 Hz。当前版本只测频率,不输出占空比。</p>
|
||||
<div class="notice"><strong>测频限制:</strong>当前实现为主循环轮询捕获标志,不是捕获中断或 DMA。定时器计数时钟理论上为 TIM5 16 MHz、其余三路 100 kHz,但这不是可靠测量上限。高于数百 Hz 的连续信号可能因串口输出等主循环阻塞而丢失边沿;如需可靠的 kHz 级测量,应改为输入捕获中断或 DMA。</div>
|
||||
|
||||
<h2>7. 编译、CubeMX 与下载</h2>
|
||||
<pre>cd A11_F407_SDC_ACQ_DAC_CubeMX
|
||||
cmake --preset Release
|
||||
cmake --build --preset Release
|
||||
|
||||
# 修改 .ioc 后重新生成(保留 USER CODE 区)
|
||||
./tools/cubemx_generate.sh</pre>
|
||||
<p>生成文件:<code>build/Release/A11_F407_SDC_ACQ_DAC.bin</code>。</p>
|
||||
<pre>/opt/st/stm32cubeclt_1.21.0/STM32CubeProgrammer/bin/STM32_Programmer_CLI \
|
||||
-c port=SWD mode=UR reset=HWrst \
|
||||
-w build/Release/A11_F407_SDC_ACQ_DAC.bin 0x08000000 -v -rst</pre>
|
||||
|
||||
<h2>8. 现场检查要点</h2>
|
||||
<ul>
|
||||
<li>CAN 总线上应有其他正常节点或分析仪 ACK;无 ACK 时 CAN 控制器可能持续重发,表现为无有效发送。</li>
|
||||
<li>串口无输出时检查 TX/RX 是否交叉、USB-TTL 与板卡是否共地,以及串口速率是否为 115200。</li>
|
||||
<li>下载异常时检查 3.3 V、NRST、SWDIO、SWCLK、GND 和 VCAP_1/VCAP_2 去耦。</li>
|
||||
<li>外部硬件看门狗当前未焊接,固件未实现喂狗逻辑。</li>
|
||||
</ul>
|
||||
|
||||
<p class="footer">配套文件:CAN 数据库 <code>SDC_ACQ_DAC.dbc</code>;详细工程维护说明见 <code>固件使用说明.md</code>。构建目录与 .bin、.elf、.hex 等产物不纳入版本库。</p>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user