本帖最后由 294479435 于 2016-2-17 20:30 编辑
增加触发显示漂亮波形
再次感谢论坛的这次活动,让我能有机会与大家一起分享我的小小作品(虽然时间已经过了,不过我会一直更新,希望大家支持)。 简易示波器功能描述(参考安富莱示波器例程): 1.测量直流信号、交流信号的电压幅度;2.测量交流信号的周期,并计算频率;3.显示交流信号波形;4.波形的放大和缩小;5.··········· 暂时就先实现以上几个简单的基本功能,STM32芯片是3.3V供电,AD采样也只有0-3.3V,前端没有做硬件电路,所以这些测量暂时都是0-3.3V; 目前实现功能:增加触发显示波形; 首先看一下效果: 1.首先证明这是实时显示: 2.不加触发显示效果: 3.增加触发后显示效果(灯闪说明程序在运行): 增加触发后波形显示很完美,很漂亮; 接下来说说实现过程: a.首先定义三个变量,一个是否触发标志位,一个触发值,一个触发后数据位置 uint8_t g_usTrigFlag = 1; uint16_t g_usTrigValue = 1024; uint16_t g_usTrigPosit = 0; b.在DMA中断处理中复制数据时判断触发位置: 因为采集的1024*6个数据中肯定有很多点满足触发条件,所以我们查找触发位置时只在前1024*4个数据中查找(这里其实可以在把位置设置在前一点); for(i = 0; i < 1024*5; i++) { if((uhADCxConvertedValue[i+512] > g_usTrigValue) && (uhADCxConvertedValue[i+513] < g_usTrigValue)&&(g_usTrigFlag == 1)&&(i < 1024*4)) { g_usTrigPosit = i; } y3 =400 - (80*3.3*uhADCxConvertedValue[i+512]/4095);
} 数据我们还是要复制1024*5个数据(i+512是因为采集的数据中前面512个数据舍弃,其实可以不用); c.显示时根据是否触发标志位判断复制显示数据的起始位置显示波形。
|