示波器设计—自动触发和普通触发

发布者:谁与争锋1最新更新时间:2021-07-08 来源: eefocus关键字:示波器  自动触发 手机看文章 扫描二维码
随时随地手机看文章

自带触发和普通触发是示波器设计中比较重要的两个功能,本章节为大家讲解二代示波器中自动触发和普通触发的实现。


9.1    自动触发


9.2    普通触发


9.3     总结


9.1  自动触发

由于示波器模拟前端模块稍有些问题,所以自动触发功能是用软件实现的。软件实现自动触发比较容易实现,具体的实现代码如下:


/*  通过软件检测实现上升沿触发,并保留最后600的数据不做检测,用于直接显示 2048-600 = 1448; */


j = 0;


for(i = 0; i < 1448; i++)


{


     j++;


     if((g_DSO1->usWaveBufTemp[i] > g_TrigVol->usTrigValue) &&


        (g_DSO1->usWaveBufTemp[i+1] < g_TrigVol->usTrigValue))


     {   


         break;


     }


}


g_DSO1->usWaveBufTemp是2048个ADC数据的缓冲区,g_TrigVol->usTrigValue是上升沿触发值。for循环的作用就是从1448个数据中找到满足触发值的位置,判断方法也比较简单,大于前一个值小于后一个值即可。


保留600个数据是因为这个大小是波形显示区一次可以显示的波形个数。如果从前2048-600 = 1448个数据中检索不到满足要求的数据将不再检索,直接显示末尾的600个数据,如果检测到将直接从for循环里面退出。


这个方法在实际测试中比较好用,另外上升沿阀值的判断还不够严谨,大家有兴趣可以继续完善下。


9.2   普通触发

普通触发的实现是基于ADC的模拟看门狗功能,通过设置不同看门狗阀值实现不同的触发电压。由于使能了看门狗中断,检测到外部触发电压后会进入ADC模拟看门狗中断。在中断里面判断是否是上升沿触发,如果是的话,会关闭模拟看门狗中断并开启一个定时器计数功能,目的是为了采集这个触发电压前后各1024个ADC数据,基本的实现思路就是这个样子的。


下面把实际的实现为大家做个说明:


第1步:将ADC3配置使能模拟看门狗功能。



/*ADC3的配置*****************************************************************/


ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;


ADC_InitStructure.ADC_ScanConvMode = DISABLE;


ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;


ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;


ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC3;


ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;


ADC_InitStructure.ADC_NbrOfConversion = 1;


 


/* ADC3 规则通道配置 */


ADC_Init(ADC3, &ADC_InitStructure);


ADC_RegularChannelConfig(ADC3, ADC_Channel_10, 1, ADC_SampleTime_3Cycles);


 


/* 使能 ADC3 DMA */


ADC_DMACmd(ADC3, ENABLE);


 


/* 配置模拟看门狗的阀值 注意别配置反了,要不一直进入中断 */


ADC_AnalogWatchdogThresholdsConfig(ADC3, 4095, 0);


 


/* 配置模拟看门狗监测ADC3的通道10 */


ADC_AnalogWatchdogSingleChannelConfig(ADC3, ADC_Channel_10);


 


/* 使能一个规则通道的看门狗 */


ADC_AnalogWatchdogCmd(ADC3, ADC_AnalogWatchdog_SingleRegEnable);


 


/* 使能模拟看门狗中断 */


ADC_ITConfig(ADC3, ADC_IT_AWD, ENABLE);


 


/* 使能DMA请求 -------------------------------------------------------------*/


ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);


 


/* Enable ADC3 --------------------------------------------------------------*/


ADC_Cmd(ADC3, ENABLE);


特别注意函数ADC_AnalogWatchdogThresholdsConfig的设置,因为是12位分辨率的ADC,最大值就是2^12 – 1 = 4095,这里设置为4095表示超过4095才会触发模拟看门狗中断,由于已经是最大值了,所以不会触发模拟看门狗中断。



第2步:模拟看门狗中断。


达到设置的模拟看门狗触发值会进入到这个中断里面。



/*


*********************************************************************************************************


*    函 数 名: ADC_IRQHandler


*    功能说明: 模拟看门狗中断服务程序。


*    形    参: 无


*    返 回 值: 无


*********************************************************************************************************


*/


void ADC_IRQHandler()


{


     /* 读取DMA剩余要传输的数目 */


     g_usTrigCount = DMA2_Stream1->NDTR;


 


     /* 确认是否是ADC3的看门狗中断 */


     if((ADC3->SR)&0x01)                                                                                                   


    {


         /* 取触发值的前一个点,查看是否是在阀值范围内,从而判断是上升沿还是下降沿 */


         if(g_usTrigCount == 10240)


         {


              /* 剩余10240表示触发值是ADC3ConvertedValue[10239]是触发值,那么上一个点就是10238 */


              g_usTrigTempFlag = ADC3ConvertedValue[10238];


         }


         else if(g_usTrigCount == 10239)


         {


              /* 剩余10239表示触发值是ADC3ConvertedValue[0]是触发值,那么上一个点就是10239 */


              g_usTrigTempFlag = ADC3ConvertedValue[10239];


         }


         else


         {


              /* 剩余10239表示触发值是ADC3ConvertedValue[0]是触发值,那么上一个点就是10239 */


              g_usTrigTempFlag = ADC3ConvertedValue[10238 - g_usTrigCount];


         }


        


         /* 判断是否是上升沿,是的话开启定时器记录ADC数据 */


         if(g_usTrigTempFlag <= g_TrigVol->usTrigValue)


         {


              /* 关闭ADC3的看门狗中断 */


              ADC3->CR1 &= 0xffffffbf;


              TriggerFlag = 1;


             


              /* 启动定时器计数 */


              TIM8->CR1 |= 0x01;


         }


        /* 清除挂起标志 */


         ADC3->SR &= 0xfe;


    }


}


进入到这个中断后,主要做了一件事,判断是否是上升沿,如果是上升沿的话,将关闭模拟看门狗并开启定时器测量功能。也就是下面第3步要讲解的。



第3步:初始化一个定时器做时间测量,表示检测到触发值后记录一段时间的波形。


/*


*********************************************************************************************************


*    函 数 名: TIM8_MeasureTrigConfig


*    功能说明: 使用TIM8为普通触发模式下数据采集计时,定时采集触发值前后的1024个ADC数据


*    形    参:无


*    返 回 值: 无              


*********************************************************************************************************


*/


/*


     每次捕获采集触发值前后的1024个ADC数据(单通道)。


*/


const uint32_t g_TrigFreqTable[][2] =


{


     {60,   1024},    //2.8Msps  168000000/2800000 = 60  => 60 * 1024


     {84,   1024},    //2Msps    168000000/2000000 = 84  => 84 * 1024


     {168,  1024},    //1Msps    168000000/1000000 = 168 => 168 * 1024


     {336,  1024},    //500Ksps  168000000/500000  = 336 => 336 * 1024


     {840,  1024},    //200Ksps  168000000/200000  = 840 => 840 * 1024


    


     {1680,  1024},   //100Ksps 168000000/100000  = 1680  => 1680 * 1024


     {3360,  1024},   //50Ksps  168000000/50000   = 3360  => 3360 * 1024


     {8400,  1024},   //20Ksps  168000000/20000   = 8400  => 8400 * 1024


     {16800, 1024},   //10Ksps  168000000/10000   = 16800 => 16800 * 1024


     {33600, 1024},   //5Ksps   168000000/5000    = 33600 => 33600 * 1024


 


     /* 下面5种采样频率下刷新较慢,因为采集前后1024个ADC的时间较长 */


     {42000,    2048},    //2Ksps 168000000/2000  = 84000 => 84000 * 1024


     {42000,    4096},    //1Ksps 168000000/1000  = 168000 => 168000 * 1024


     {42000,    8192},    //500sps 168000000/500  = 336000 => 336000 * 1024


     {42000,    20480},   //200sps 168000000/200  = 840000 => 840000 * 1024


     {42000,    40960},   //100sps 168000000/100  = 1680000 => 1680000 * 1024


    


     /* 下面这几种采样率不做触发支持 */


     {42000,    40960},   //50sps


     {42000,    40960},   //20sps


     {42000,    40960},   //10sps


     {42000,    40960},   //5sps


     {42000,    40960},   //2sps


     {42000,    40960},   //1sps     


};



void TIM8_MeasureTrigConfig(void)


{


     TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;


     NVIC_InitTypeDef NVIC_InitStructure;


    


     /* 开启时钟 */


     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);


    


     /* 加上第一次进入中断的标志,进入中断后将其置1 */


     g_usFirstTimeIRQFlag = 0;


 


     /* 使能定时器8中断  */


     NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn;


     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;


     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;


     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


     NVIC_Init(&NVIC_InitStructure);


 


     /* 定时器配置 */


     TimeBaseId = 1;        /* 开机后按照ADC单通道1Msps进行配置 */


     TIM_DeInit(TIM8); 


     TIM_BaseInitStructure.TIM_Period = g_TrigFreqTable[TimeBaseId][0] - 1;


     TIM_BaseInitStructure.TIM_Prescaler = g_TrigFreqTable[TimeBaseId][1] - 1;


     TIM_BaseInitStructure.TIM_ClockDivision = 0;


     TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;


     TIM_TimeBaseInit(TIM8, &TIM_BaseInitStructure);


     TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);


     TIM_Cmd(TIM8, DISABLE);


}


 


/*


*********************************************************************************************************


*    函 数 名: Time8Recorder


*    功能说明: 使用TIM8为普通触发模式下数据采集计时,定时采集触发值前后的1024个ADC数据


*    形    参:无


*    返 回 值: 无              


*********************************************************************************************************

[1] [2]
关键字:示波器  自动触发 引用地址:示波器设计—自动触发和普通触发

上一篇:示波器设计—双通道ADC驱动
下一篇:示波器设计—测量功能

推荐阅读最新更新时间:2024-11-06 22:46

解析示波器的auto/signal/normal这三种触发方式有什么不同
在示波器当中,存在auto、signal、normal三种触发方式,示波器的“触发”就是使得示波器的扫描与被观测信号同步,从而显示稳定的波形。为满足不同的观测需要,需要不同的“触发模式”。示波器的基本触发模式有三种: AUTO,行业术语“自动触发”,解释为:没有满足触发条件的信号的时候,示波器会显示波形,但是是不稳定的,对于数字模拟示波器都是这样了,或者没有输入信号的时候,对于模拟数字示波器都会显示一条水平的扫描线了。这在其中就是属于一种自动模式在这种模式下,当触发没有发生时,示波器的扫描系统会根据设定的扫描速率自动进行扫描;而当有触发发生时,扫描系统会尽量按信号的频率进行扫描,所以在这种模式下不论触发条件是否满足,示波器都
[测试测量]
解析<font color='red'>示波器</font>的auto/signal/normal这三种<font color='red'>触发</font>方式有什么不同
示波器实操特辑之8:一键滚动
  说到滚动模式,你可能感觉很陌生,我们先来了解下滚动模式到底是怎么回事。   图1 滚动模式下的屏幕显示   在滚动模式下,示波器不间断地对波形采样,没有死区时间。波形自屏幕右侧向左侧缓慢移动显示,屏幕上的固定参考点在屏幕的右边沿,指示当前时间。已经出现的波形滚动至参考点的左边,最新采集波形始终出现在屏幕的右侧。   图2 一键滚动(Roll)按键集成在了操作面板上   滚动模式可以一键开启,您只需要按下操作面板上的【Roll】按键,就能马上开启滚动模式。   图3 在滚动模式下测量低频信号   测量低频信号时,在滚动模式下可以实时地观察采集到的波形,在112Mpts的存储深度下,在滚动模式下会显示与带状图记
[测试测量]
<font color='red'>示波器</font>实操特辑之8:一键滚动
示波器应用 测发射接收延时方法
示波器测发射接收延时方法 1、示波器设置单次触发方式 2、因为接收延时于发射,所以在接收的波形产生点设置触发点信号源给出波形,并在发射端输入波形,在接收端输出波形 3、要将发射和接收的波形错开,避免发射有波形时示波器因为捕获到而触发
[测试测量]
泰克示波器都有哪些功能呢?
示波器是一种用途十分广泛的电子测量仪器。它能把肉眼看不见的电信号变换成看得见的图像,便于人们研究各种电现象的变化过程。示波器利用狭窄的、由高速电子组成的电子束,打在涂有荧光物质的屏面上,就可产生细小的光点(这是传统的模拟示波器的工作原理)。在被测信号的作用下,电子束就好像一支笔的笔尖,可以在屏面上描绘出被测信号的瞬时值的变化曲线。利用示波器能观察各种不同信号幅度随时间变化的波形曲线,还可以用它测试各种不同的电量,如电压、电流、频率、相位差、调幅度等等。其中,泰克拥有全面的数字示波器系列、基础示波器、混合域示波器和高性能示波器。那么泰克的示波器都有哪些功能呢? 一、堆叠显示查看功能 1、可同时显示多个信号的实时波形和关键读数,
[测试测量]
泰克<font color='red'>示波器</font>都有哪些功能呢?
关于1000X示波器的性能分析和介绍
4通道 1000X 示波器 2019年1月8号,是德科技宣布推出4通道1000X系列示波器,最高带宽200MHz,标配网络接口,该产品的发布进一步完善了1000X产品系列,为个人爱好者、高校实验室、初创企业等提供了更合适的选择。 1000X系列示波器是是德科技入门级示波器,带宽涵盖50-200MHz,起步价仅¥2860(参考Keysight京东和天猫旗舰店)。 虽然定位为入门级,但功能丰富,其具备最高2GSa/s采样率和最高200MHz带宽,50000个波形每秒的捕获率,具体高端示波器同样先进的分析工具,如频率响应分析、模板测试、FFT和分段存储,让您能够利用有限的预算实现高性能和大品牌的结合。 这些高大上的功能可以
[测试测量]
关于1000X<font color='red'>示波器</font>的性能分析和介绍
示波器探头使用的注意事项
别看一个示波器探头很简单,其实还是很有讲究的。以下是网上搜到示波器探头的一点小经验,供大家使用时参考一下。   首先是带宽,这个通常会在探头上写明,多少MHz。如果探头的带宽不够,示波器的带宽再高也是无用,瓶颈效应。   另外就是探头的阻抗匹配。探头在使用之前应该先对其阻抗匹配部分进行调节。通常在探头的靠近示波器一端有一个可调电容,有一些探头在靠近探针一端也具有可调电容。它们是用来调节示波器探头的阻抗匹配的。如果阻抗不匹配的话,测量到的波形将会变形。调节示波器探头阻抗匹配的方法如下:首先将示波器的输入选择打在GND上,然后调节Y轴位移旋钮使扫描线出现在示波器的中间。检查这时的扫描线是否水平(即是否跟示波器的水平中线重合),如果
[测试测量]
示波器两个重要参数 - 带宽、采样率
一、示波器带宽 def:能够还原波形的最大频率范围 由前端采集电路器件的材料、工艺决定的硬件带宽 解释: 在示波器设计中 根据采样率所能计算出的是理论上的带宽(采样定理) 理论上的带宽必须比 硬件带宽大 也就是说示波器设计配套的AD采样率要保证全通道工作时每一路通道带宽均可以达到标识的硬件带宽 在实际示波器选购中 需要按信号频率的十倍以上来考虑带宽的选型 这点主要是考虑到谐波对信号波形的影响 因为实际波形一般都不是正弦 定义参考:How do I determine what bandwidth of scope I require for my application? - Siglent 另解释参考
[测试测量]
<font color='red'>示波器</font>两个重要参数 - 带宽、采样率
荧光示波器调试和验证电路的技术问答
  Q1:对于百兆以太网信号和千兆比特以太网 要想测试出信号质量 怎样才能简单易行呢?用台式设备推荐几种?用便携设备推荐几种?   A1:以太网物理层信号质量的测试可以使用泰克公司提供的业界广泛使用的解决方案。   Q2:如何进行电源测试?   A2:泰克提供全套的电源测试方案,包括各种电流探头、电压探头、分析软件。可测试电流幅度从1mA到20KA、带宽从直流到2GHz;可测试的电压,幅度从1mV到40KV,带宽直流到1GHz(低压可以到16GHz),这些范围是业界最广泛的。可以测试项目包括:开关器件的开关损耗、安全工作区域;磁性元件的电感、磁性损耗、BH曲线、导通率等;电源的纹波、功率因数、电流谐波分析等。其中多个测试项,
[测试测量]
小广播
最新测试测量文章
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved