首页 > 评测 > 成功众筹11万美金的开源LA——DSLogic逻辑分析仪评测

成功众筹11万美金的开源LA——DSLogic逻辑分析仪评测

  • 作者:netlhx
  • 来源:21ic
  • [导读]
  • 在电子世界特别是MCU的世界里,不管你是硬件工程师还是软件工程师,逻辑分析仪(LOGIC ANALYZER,下文简称LA)都是必备工具之一。

测试

漂亮的外观已给我们留下了深刻的印象,然而DSLOGIC的真正魅力来自它强大的逻辑分析功能。

让我们请出本次测评的另一主角,STM32F4-DISCO,让它来见证奇迹的时刻。

秀外慧中12843.png

为了展示DSLOGIC强大的功能,我们设计了几段代码,让STM32F4-DISCO产生若干数字信号,通过检测捕获到的信号,与原始设计的理想信号进行比较,来展示DSLOGIC的强大功能。

测试的信号主要包括如下几个方面:

  • · 电平翻转信号,包含状态及时序信息
  • · PWM信号,包含状态及时序信息
  • · 通信协议,包含状态、时序、编码信息

STM32F4-DISCO评估板是ST官方推出的供快速开发及建立原型的一块开发板,使用STM32F407VGT6 MCU,最高可以工作于168MHZ频率。板载8M外部晶振,能提供比较准确的外部时钟信号。

关于本次测试中用到的测试代码,后面附录提供了完整的工程信息,具体运行环境及函数库请参考文档内的说明。当然,如果你并不熟悉STM32 MCU程序设计,这些代码看起来也许并没有很大的意义,请遵循见名知义的原则进行理解。

DSLOGIC与STM32F4-DISCO的连接

秀外慧中13242.png

测评序列一 电平翻转信号测试

本测试中用到了STM32F4-DISCO上的定时器TIM2,系统时钟设置如下,HCLK为168MHZ,TIM2挂在APB1总线上,APB1的时钟总线为42MHZ,为HCLK的4分频,所以TIM2的工作频率为84MHZ。

TIM2初始化代码如下:

htim2.Instance = TIM2;

htim2.Init.Prescaler = 83;

htim2.Init.CounterMode = TIM_COUNTERMODE_UP;

htim2.Init.Period = 9;

htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

HAL_TIM_Base_Init(&htim2);

这段代码的作用是产生周期为10US的精确定时,然后产生中断,在ISR例程里翻转电平信号。

DSVIEW设置及捕获的结果如下图,可以看到,捕获的结果非常精确。

秀外慧中13670.png

测试序列二 PWM信号捕获测试

PWM信号在实现无级调光、电机驱动方面有很广泛的应用。

使用STM32F4-DISCO评估板上TIM1来产生2路互补PWM信号,即TIM1的CH1、CH1N,CH2、CH2N共计4路信号,没有插入死区时间。

TIM1挂在APB2总线上面,所以TIM1的时钟信号频率为168MHZ。

CH1的占空比设定为30%,CH2的占空比设定为60%,PWM频率均为1KHZ。下面是部分设定代码

htim1.Instance = TIM1;

htim1.Init.Prescaler = 167;

htim1.Init.CounterMode = TIM_COUNTERMODE_UP;

htim1.Init.Period = 999;

htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

htim1.Init.RepetitionCounter = 0;

HAL_TIM_Base_Init(&htim1);

sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig);

HAL_TIM_PWM_Init(&htim1);

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);

sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;

sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;

sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;

sBreakDeadTimeConfig.DeadTime = 0;

sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;

sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;

sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;

HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig);

sConfigOC.OCMode = TIM_OCMODE_PWM1;

sConfigOC.Pulse = 300;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;

sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;

HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);

sConfigOC.OCMode = TIM_OCMODE_PWM2;

sConfigOC.Pulse = 400;

HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2);

将代码下载到开发板上,运行程序。

LA捕获得到的结果如下

秀外慧中15446.png

TIM1定时器CH1与CH1N的逻辑信号,看到占空比为精确的30%。

秀外慧中15485.png

TIM1定时器CH2与CH2N的PWM输出信号,使用的是PWM MOD2,占空比为精确的60%。

  • 本文系21ic原创,未经许可禁止转载!

网友评论