【Servo】信号激励;激励数据、采集数据、跟踪数据
硬件/嵌入式系统中的“信号激励 的概念
一、什么是信号激励(Signal Excitation/Signal Stimulus)?
信号激励,又叫信号刺激、信号输入激励,在硬件/电路/信号测试领域,指的是:
人为给被测系统/被测对象注入特定的输入信号,来“激发”系统的响应。
- 这些信号可以是正弦波、方波、阶跃、随机噪声、斜坡、定值脉冲、复杂任意波形等。
- 信号激励一般由“信号源”“函数发生器”“MCU DAC/存储器”产生,注入被测系统。
- 被测系统在接受激励后,会有对应的响应信号输出(比如电压、电流、速度、转矩等)。
- “激励”用于测试、校准、调试、仿真、验证等目的。
举例:
- 给电机控制器注入正弦信号激励,观测电机速度的频响特性。
- 给ADC输入一段阶跃信号激励,看采集通道能否正常采样并响应。
- 给伺服系统加载“自定义波形”信号激励,用于算法性能测试。
二、个别场景下的“信号激励”具体理解
“原跟踪数据区域可用于临时放置信号激励”。
- 原来 MCU/硬件的4000H~ ~7FFFH RAM区存放采样数据,现在扩展到4000H~~9FFFH,可以多存一点数据。
- 这段RAM(内存区域)用来临时存放“信号激励”数据——也就是要注入到系统里的预设波形。
- “每个通道激励数据8192字节”= 一路激励信号能预存8192字节数据,可以支持6通道激励(总计6*8192字节)。
- 通过这个区域,系统可以在不同测试时刻,将激励信号通过DAC/数字总线/脉冲等形式输出到外部。
三、工程实际用途
- 软件工程师可以用上位机生成各种激励数据,下发到硬件指定RAM区域。
- MCU读取RAM,把这些“激励波形”输出到外部回路或自身信号处理模块。
- 可以实现“任意激励”“自定义波形”“多通道同步激励”等功能,方便测试各种响应。
小结
- 信号激励=人为施加到系统/通道/设备的“输入信号”,用来测试其响应或性能。
- 你的硬件支持“把激励数据临时放到某个RAM区域”,一旦需要可以“六路同时输出激励”。
- 这样能方便多通道同步测试、系统辨识、算法验证等应用。
如何用代码生成激励波形并下发?
用代码生成激励波形并下发 :
1. 上位机生成激励波形(以C#为例)
常见激励波形包括:正弦波、方波、三角波、阶跃、随机噪声等。可以先用 C# 代码生成一组波形数据,然后打包下发到下位机。
【举例】生成一个 1kHz 正弦波激励
// 参数设置
int sampleCount = 8192; // 激励点数(和MCU一帧长度一致)
double sampleRate = 10000.0; // 采样率10kHz
double freq = 1000.0; // 1kHz激励
double amplitude = 2000; // 幅值// 生成激励波形数组
short[] exciteData = new short[sampleCount];
for (int i = 0; i < sampleCount; i++)
{double t = i / sampleRate;exciteData[i] = (short)(amplitude * Math.Sin(2 * Math.PI * freq * t));
}
- 对于“多通道激励”,可以为每个通道分别生成不同波形的数组。
2. 波形数据下发协议打包
一般需要把激励数据通过串口、USB、CAN等协议打包下发到下位机RAM指定区域(比如0x4000起始地址)。
典型步骤:
- 构造“写数据命令帧”:指定“起始地址/通道编号/数据长度/数据内容/CRC校验”。
- 按协议一帧帧分包发送(一般一帧不超过512或1024字节)。
【举例】构造数据包
假如你要把通道1的8192字节激励数据,下发到0x4000地址:
// 将short[]转换为byte[]
byte[] sendBuffer = new byte[sampleCount * 2];
Buffer.BlockCopy(exciteData, 0, sendBuffer, 0, sendBuffer.Length);// 构造协议帧(需参考你们实际下位机通信协议文档)
List<byte> frame = new List<byte>();
frame.Add(0x22); // 帧头
frame.Add(0x01); // 写激励数据命令
frame.Add(0x01); // 通道编号
frame.AddRange(BitConverter.GetBytes(0x4000)); // 写入起始地址
frame.AddRange(BitConverter.GetBytes(sampleCount * 2)); // 数据长度
frame.AddRange(sendBuffer); // 波形内容
frame.Add(0xXX); // CRC校验,最后一位,实际需补上// 通过USB/串口发送到下位机
yourSerialPort.Write(frame.ToArray(), 0, frame.Count);
3. 下位机接收后写入RAM
下位机解析命令帧,把激励数据写入指定 RAM 区域(比如0x4000~0x5FFF),待用。
- MCU可根据收到的命令,定时/定序“输出激励”到DA通道、PWM输出、数字IO等。
4. 激励使用与同步
一旦激励波形数据下发完成,可手动/自动下达“激励使能”指令,MCU就开始按照存储区的数据“输出激励”,上位机可以同步采集实际响应数据。
总结流程图(伪代码简图)
ps
- 激励数据类型要和下位机寄存器格式一致(如short/uint16/float),注意大小端。
- 一般“下发激励数据”建议分包传输,每包带有起始地址和数据长度,便于恢复。
- 激励数据建议配合CRC等校验,确保数据准确。
- 激励过程通常和“采集响应”同步进行,便于系统辨识/控制算法测试。
MCU/DSP怎样把激励波形“播”出来?
MCU/DSP“播激励”波形的核心原理与常用方式。
1. 原理:什么叫“把激励波形播出来”?
简单说:
- **“激励波形”**就是你提前准备好的一段离散采样值序列(比如正弦/方波/阶跃/自定义信号)。
- MCU/DSP要定时把这些数据输出到硬件端口(比如DAC、PWM、数字IO等),让外部被控对象感受到预期的信号变化。
2. 典型实现流程
以“单片机/数字信号处理器”定时输出激励波形到DAC为例:
步骤一:激励波形入RAM
上位机通过USB/串口把激励波形点(数组)下载到MCU的RAM,比如0x4000~0x9FFF。
步骤二:定时器定时“播放”
- 设置一个定时器中断,比如1ms一次(采样周期=1ms,采样率=1kHz)。
- 在每次中断时,从激励数组读取一个值,送到DAC(或PWM寄存器)。
步骤三:循环输出
- 输出一个点,激励指针+1。
- 播到最后一个点,可以停止/循环,或者等上位机下次下发新波形。
3. 伪代码示例
以C语言为例,说明MCU里如何“播激励”:
#define EXCITE_LEN 8192
uint16_t exciteBuffer[EXCITE_LEN]; // 激励数组
uint16_t exciteIndex = 0;
uint8_t isExciteOn = 0;// 伪代码: 定时中断服务函数(采样周期=Ts)
void TIMx_IRQHandler()
{if (isExciteOn && exciteIndex < EXCITE_LEN){DAC_Output(exciteBuffer[exciteIndex]); // 输出到DA口exciteIndex++;}else{// 输出结束,可选:循环或停止isExciteOn = 0;exciteIndex = 0;}
}
DAC_Output()
是将激励点输出到DAC外设(或者填到PWM寄存器)。isExciteOn
由上位机发送“激励使能”命令置位。exciteIndex
用来顺序读激励数组。
如果是多通道激励
可以定义多组buffer,每个定时中断分通道更新。
4. 输出通道方式
- DAC输出(最常见):模拟信号,直接驱动外部。
- PWM输出:对于不能用DAC的芯片,可用高分辨率PWM模拟模拟信号(再低通滤波)。
- 数字IO:输出方波等离散波形。
5. 关键注意点
- 定时器中断必须精准,否则输出波形会有抖动。
- 波形点数和采样周期决定了波形周期/频率。
- 数据精度要和外设匹配(8位/12位/16位DAC)。
- 下位机需要提供启动/停止激励的命令,通常不能随便播。
- 激励和采集可同步(比如激励和采集共用同一个时钟)。
流程图(简易)
小结
MCU/DSP“播激励”= 定时器触发+RAM波形点+外设输出(DAC/PWM/IO)
应用场景:
- 运动控制系统的跟踪性能测试
- 伺服系统辨识/参数辨识
- 信号发生器
- 硬件在环仿真
激励数据、采集数据、跟踪数据
这个问题非常好,也是自动化、运动控制、信号处理领域的常见疑惑。激励数据、采集数据、跟踪数据的区别如下:
1. 激励数据(Excitation/Stimulus Data)
定义:
激励数据是主动生成并下发给被测对象(比如电机、控制器、系统)的输入信号。它可以是正弦、方波、阶跃、白噪声、任意自定义序列等。
本质:
- 激励数据是“让系统动起来”的“输入”,一般通过DAC/PWM/IO由下位机“播放”出来,给硬件端用。
- 一般来源于上位机生成→下载到下位机RAM→定时输出。
- 用来“考验”或“辨识”系统,或测试跟踪能力。
例子:
- 给伺服驱动器下发一个正弦波速度指令,测试其跟踪响应。
- 控制系统辨识时下发一个PRBS随机信号,观测系统响应。
2. 采集数据(Acquisition/Measurement Data)
定义:
采集数据是从系统或被控对象获取的传感器测量值或反馈信号,比如编码器位置、电流、电压、速度、力矩等。
本质:
- 输出端的实际物理量数据,通过ADC、传感器等采集后,存到内存,再传给上位机。
- 反映了系统的真实运行状态。
例子:
- 电机位置环反馈的实际编码器值。
- 测速电机的电压信号经过ADC采样后的数据。
- 采集到的温度、电流等。
3. 跟踪数据(Tracking Data)
定义:
跟踪数据一般指用来“比较”或“评估系统跟踪性能”的一组数据,常指“参考输入”和“实际输出”的对应数据序列。
本质:
- 在测试“跟踪性能”时,记录下激励(目标/参考)和采集(实际)数据,方便对比误差。
- 跟踪数据=激励数据+采集数据的“配对”。
例子:
- 目标位置(激励/指令) vs 实际位置(采集反馈)。
- 速度指令(激励/参考轨迹) vs 实际速度(采集/反馈)。
- 界面上看到的“叠加两条曲线”,就是跟踪数据在发挥作用。
4. 三者关系对比图
激励数据 | 采集数据 | 跟踪数据 | |
---|---|---|---|
方向 | 主动下发(输入) | 被动获取(输出) | 对比、配对(分析) |
作用 | 让系统动起来 | 反映系统状态 | 评估跟踪效果/误差 |
生成方式 | 上位机/下位机产生 | 传感器/ADC采集 | 来自激励和采集的“组合” |
典型场景 | 轨迹跟踪、系统辨识 | 状态监测、数据分析 | 性能评估、误差分析 |
举例说明
假如你要测试一个伺服驱动器的位置控制:
- 激励数据:你提前准备一段正弦轨迹,通过下位机输出给电机的速度/位置指令。
- 采集数据:你实时采集电机的实际位置反馈信号。
- 跟踪数据:把“激励轨迹”(参考输入)和“实际反馈”(输出)一对一比对,画到同一图里,分析它们的误差,这部分就是“跟踪数据”。
图示
小结
- 激励数据=主动输入;采集数据=被动输出;跟踪数据=二者对比、误差评估。
- 三者协同,支撑系统辨识、跟踪性能测试、自动化测试等功能。