Files
SDC_ACQ_DAC/SDC-ACQ_DAC_固件交付说明.html
T

157 lines
9.1 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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&amp;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>0x6A0</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>0x6A1</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>0x6A2</code></td><td>四路频率</td><td>板卡发送,每 500 ms</td><td>4 个 <code>uint16</code>,单位 Hz;依次为 PA0、PA2、PA6、PB14。</td></tr>
<tr><td><code>0x6A3</code></td><td>DAC 设置</td><td>外部发送给板卡</td><td><code>[DAC 编号][mV_L][mV_H]</code>,编号仅允许 1 或 2。</td></tr>
<tr><td><code>0x6A4</code></td><td>DAC 应答</td><td>板卡发送,设置后</td><td><code>[结果][DAC 编号][mV_L][mV_H]</code>;结果 1 成功,0 失败。</td></tr>
<tr><td><code>0x6A5</code></td><td>ASSI RGB 灯控</td><td>外部发送给板卡</td><td><code>byte0</code>:0=关、1=黄常亮、2=黄闪、3=蓝闪、4=蓝常亮。</td></tr>
<tr><td><code>0x6A6</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 = 0x6A3,DLC = 3,DATA = 01 B8 0B
DAC2 输出 1.140 V:ID = 0x6A3,DLC = 3,DATA = 02 74 04
应答示例(DAC1 成功设为 3.000 V):ID = 0x6A4,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>0x6A4</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>