本帖最后由 294479435 于 2016-1-16 19:03 编辑
任意波形动态显示
再次感谢论坛的这次活动,让我能有机会与大家一起分享我的小小作品。
简易示波器功能描述:
1.测量直流信号、交流信号的电压幅度;
2.测量交流信号的周期,并计算频率;
3.显示交流信号波形;
4.波形的放大和缩小;
5.···········
暂时就先实现以上几个简单的基本功能,STM32芯片是3.3V供电,AD采样也只有0-3.3V,前端没有做硬件电路,所以这些测量暂时都是0-3.3V;
目前实现功能:任意波形显示; 首先看一下效果: 1.采集IO引脚翻转: 2.采集DAC模拟输出锯齿波: 3.采集DAC模拟输出方波: 大致实现过程: 首先在之前贴基础上更改:【STM32F469I试用】+简易示波器(三)方波简单显示 a.ADC连续采集1024*6个数据并使能DMA存储在uhADCxConvertedValue数组中; HAL_ADC_Stop(&AdcHandle); for(i = 0; i < 1024*5; i++) { y3 =400 - (80*3.3*uhADCxConvertedValue[i+512]/4095); } HAL_ADC_Start(&AdcHandle); flag = 1; b.DMA完成后进入中断,关闭ADC采样并将数据复制到显示缓冲区的数组中,设定标志位置1,开启ADC继续采集(如果不暂停ADC,新采集的值会打乱完整的1024*6个数据,所以复制过程中暂停采集); if(temp == 0) { for(i = 0; i<500;i++) { aPointsRe.y = y3; //aPointsRe.x = x; } } else if(temp < 10) { for(i = 0; i<500;i++) { aPointsRe.y = y3[i+temp*500]; //aPointsRe.x = x; } } GUI_SetColor(GUI_GREEN); GUI_DrawPolyLine(aPointsRe, /* Ö¸ÏòÒªÏÔʾµÄÕÛÏß */ GUI_COUNTOF(aPointsRe), /* µãÁбíÖÐÖ¸¶¨µÄµãÊýÁ¿ */ 50, /* ÔµãµÄXλÖà */ 40); temp++; if(temp == 10) { temp = 0; flag = 0; } GUI_Delay(100); c.回到主函数进行数据处理,由于每次显示的是500个数据,所以显示10次后在此读取ADC数据进行显示;
|