逻辑分析仪的使用-以STM32C8T6控制SG90舵机为例
1.逻辑分析仪作用
逻辑分析仪在嵌入式开发中的作用非常重要,它是开发、调试和排错过程中的一个不可或缺的工具。具体来说,逻辑分析仪的作用包括以下几个方面:
1.信号捕获和分析: 逻辑分析仪能够实时捕获多个数字信号,并对其进行详细分析。对于嵌入式系统,尤其是硬件和软件交互复杂时,能够监控微处理器的I/O引脚、外设的工作状态及总线通信(如SPI、I2C、UART等),从而帮助开发人员快速诊断系统的问题。
2.时序分析: 在嵌入式开发中,时序问题是非常常见的,尤其是涉及到多任务并发执行或者高频信号的处理时。逻辑分析仪可以精确地捕捉信号的时序关系,帮助开发者验证硬件和软件是否按预期工作,特别是时钟信号、数据传输的时序等。
3.协议分析: 对于串行通信协议(如I2C、SPI、CAN等),逻辑分析仪可以解析和显示协议中的数据内容,帮助开发人员检查协议是否正确实现,数据是否传输正确。这对于嵌入式系统开发中的调试非常有帮助,避免了人工手动分析数据包的繁琐。
4.故障排查: 在嵌入式系统开发过程中,硬件或软件的故障往往难以直接判断。使用逻辑分析仪可以捕捉到异常信号或状态,帮助开发人员定位问题的根源。例如,电路中的短路、干扰、数据丢失等问题,逻辑分析仪都能提供重要线索。
5.性能优化: 对嵌入式系统进行性能优化时,逻辑分析仪可以帮助开发人员检查信号传输的速度和延迟,发现瓶颈并优化电路设计或代码逻辑。特别是在处理实时数据时,时延问题可以通过逻辑分析仪进行详细监控和优化。
6.硬件和软件调试结合: 逻辑分析仪可以与软件调试器配合使用,进行硬件和软件的联合调试。比如,在嵌入式系统中,软件在控制硬件时可能会遇到一些不可预见的情况,逻辑分析仪能够在硬件层面捕获到数据,提供给软件开发人员更详细的信息。
2.逻辑分析仪选型
选型逻辑分析仪时,需要根据具体的嵌入式开发需求、项目的复杂程度以及预算等因素来综合考虑。以下是选型时需要关注的几个关键指标:
1.通道数
通道数决定了逻辑分析仪能够同时监控多少个信号。对于大多数嵌入式系统,至少需要8个通道,复杂的系统可能需要更多通道(如16、32甚至64通道)。选择时应考虑系统中的信号数量,尤其是高并发和多总线的情况。
2. 采样率(Sample Rate)
采样率就是一秒钟能采样多少个点,决定了分析仪捕捉信号变化的精度,。高采样率可以更精确地捕捉高频信号。低速应用:一般来说,1-2 GS/s(十亿次/秒)就足够;高速应用:对于需要更高精度的应用,特别是调试高速信号时,可能需要更高的采样率(如10 GS/s以上)。
3. 采样深度(Memory Depth)
采样深度就是一次采样最多能存储多少个点,决定了逻辑分析仪能捕捉到的数据量,也即它能够存储多长时间的信号数据。较大的采样深度有助于分析长时间的信号波形,而不容易丢失信息。如果涉及到长时间的数据采集和复杂信号分析,选择采样深度大的模型是很有必要的。
4. 信号电压范围
逻辑分析仪需要与待测设备的信号电压范围匹配。常见的信号电压标准包括 3.3V、5V、TTL、CMOS等。如果你的嵌入式系统使用的是特定的电压级别,需要确保选择的逻辑分析仪支持这些电压范围。还需注意是否需要支持差分信号(如LVDS、RS-485等),这些信号可能需要额外的探头或特定的硬件支持。
3.以Kingst LA1010型号逻辑分析仪为例分析
3.1 逻辑分析仪的连接
购买了逻辑分析仪后,商家会给你发一份资料,主要包括逻辑分析仪驱动程序和使用指南,成功安装好逻辑分析仪的驱动后,将逻辑分析仪的USB端接入电脑,在此电脑->设备->设备管理器->通用串行总线控制器里可以看到逻辑分析仪的驱动,如下图所示。
然后打开逻辑分析仪客户端,会自动识别逻辑分析仪,并且此时左下角显示设备未连接
设备连接成功后,客户端的左上角和左下角会同时显示设备已连接,并且显示设备型号。
3.2 单片机控制SG90舵机的原理
我们本次是以STM32C8T6控制SG90舵机为例分析逻辑分析仪的使用,SG90舵机的控制逻辑就是单片机发出PWM波,控制舵机的转动。通俗的说就是一个PWM波的周期是20ms,舵机在0度的时候对应的是高电平0.5ms,低电平19.5ms;45度的时候对应的是高电平1.0ms,低电平19ms;90度的时候对应的是高电平1.5ms,低电平18.5ms;135度的时候对应的是高电平2.0ms,低电平18ms;180度的时候对应的是高电平2.5ms,低电平17.5ms。
3.3 硬件电路接线
与单片机的接线
STM32C8T6单片机 PA1 | 黄线PWM |
STM32C8T6单片机 5V | 红线5V |
STM32C8T6单片机 GND | 棕线GND |
STM32C8T6单片机 5V | 0.96寸OLED屏幕VCC |
STM32C8T6单片机 GND | 0.96寸OLED屏幕GND |
STM32C8T6单片机 PB6 | 0.96寸OLED屏幕SCL |
STM32C8T6单片机 PB7 | 0.96寸OLED屏幕SDA |
3.3 源代码讲解
代码详解请看B站上传的源码讲解视频:
3.4 逻辑分析仪看分析PWM波形
因为我们这次只是抓单片机PA1产生的PWM波形去驱动SG90舵机,所以将PA1引脚焊接处一根信号线接到逻辑分析仪的任意一个通道上,我选择接到通道0上,任何被测信号都要接GND,所以从单片机上的GND引脚焊接处一根线接到逻辑分析仪的GND通道。
接好后打开客户端,重点看通道0,根据奈奎斯特采样定理,采样需要必须要是被测信号的2倍以上才可以正确采样到信号,但是工程中一般采用5倍或者10倍,我们的舵机PWM波信号周期是20ms,那么频率是周期的倒数,就是1/20ms=50Hz,所以10倍以上就是500Hz,我们的逻辑分析仪最低采样频率是200KHz,所以我们选择20KHz就可以满足要求,那么采样时间是采样深度/采样频率,所以采样深度选择20KSa,采样时间就是20K/20K=1S,1秒钟足够了,因为我们的周期是20ms,一秒钟就有50个20ms。然后就是选择触发方式,我们选择下降沿触发,因为在定时器初始化里是默认高电平,那么PWM开始由高电平到低电平才是下降沿开始。
然后点击上面的绿色三角号开始采样,采样完毕后屏幕上就会出现波形,看通道0的波形,我们通过右边的时间标尺A1和A2量出一个周期确实是20ms
此时我们的舵机角度是0度。
根据舵机的控制原理,0度的时候高电平在一个周期内是0.5ms,也就是500us,我们再次通过时间标尺也测量出一个周期内的高电平占的时间就是500us。
我们通过按键改变舵机控制角度为90度,此时屏幕上显示90度,舵机也实际转动到了90度。
根据舵机的控制原理,90度的时候高电平在一个周期内是1.5ms,也就是1500us,我们再次通过时间标尺也测量出一个周期内的高电平占的时间就是1.5ms。
除此之外,我们还可以通过逻辑分析仪支持的常见通信协议直接配置,并且能导出测量的波形数据,常见的通信协议支持如下图
选择客户端右边的解析器+号,然后选择PWM协议,选择通道0,选择高电平计数。
然后通过解析器旁边的小齿轮设置,把数据导出CSV格式,用excel打开
打开后可以看到在1S时间内采集了49个数据,舵机的PWM周期是20ms,所以1秒内就能采集到50个数据,实际是采集到了49个数据,误差可以接受 。
4.源代码获取方式
源代码链接如下: