爱板网论坛

查看: 61|回复: 0

[教程] 31..STM32F469I----简易示波器 波形显示

[复制链接]

408

主题

92

好友

5666

积分

状元

Rank: 6Rank: 6

  • TA的每日心情
    郁闷
    22 小时前
  • 签到天数: 502 天

    连续签到: 84 天

    [LV.9]以坛为家II

    发表于 2018-1-12 20:20:45 |显示全部楼层
    【STM32F469I试用】+简易示波器【转】

    (三)方波简单显示

    暂时就先实现以上几个简单的基本功能,STM32芯片是3.3V供电,AD采样也只有0-3.3V,前端没有做硬件电路,所以这些测量暂时都是0-3.3V;

    目前实习功能:方波简单显示;
    首先看一下显示效果:

    1.jpg


    连接方式:

    2.jpg


    实现过程:
    1.用STM32F411NUCLEO开发板做信号源,输出100us的方波(这个简单,就是I/O引脚的翻转);
              //led=1;
              GPIO_ResetBits(GPIOA,GPIO_Pin_1);
              delay_us(100);
              GPIO_SetBits(GPIOA,GPIO_Pin_1);
             // led=0;
              delay_us(100);
    2.在前一贴【STM32F469I试用】+简易示波器(二)AD采样+画图http://bbs.21ic.com/icview-1263602-1-1.html基础上增加DAM中断处理
    大致过程就是:a.ADC采样1000个数据后进入DMA中断;
    b.取出1000个数据的中间500个数据;
    c.GUI刷新画出函数图线;
    存在的问题:
    1.标准方波显示出来并不标准,因为我用的是1路ADC采样,采样频率不高,后面学习安富莱示波器的教程,使用3路ADC采样;
    2.刻度和显示效果差,因为时间比较紧,这些基本的还未修改,另外我也是刚接触emWIN这个GUI,很多还不会,画图基本上使用最繁琐、最
    复杂的函数画图,所以显示效果不佳,后续在改进。

    =========================
    (四)任意波形动态显示

    暂时就先实现以上几个简单的基本功能,STM32芯片是3.3V供电,AD采样也只有0-3.3V,前端没有做硬件电路,所以这些测量暂时都是0-3.3V;

    目前实现功能:任意波形显示;
    首先看一下效果:
    1.采集IO引脚翻转:

    3---.gif


    2.采集DAC模拟输出锯齿波:

    4-----.gif


    3.采集DAC模拟输出方波:

    5-----.gif


    大致实现过程:
    首先在之前贴基础上更改:【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数据进行显示;

    =========================

    (五)增加触发显示漂亮波形

    目前实现功能:增加触发显示波形;
    首先看一下效果:
    1.首先证明这是实时显示:

    11---------.gif


    2.不加触发显示效果:

    12------.gif


    3.增加触发后显示效果(灯闪说明程序在运行):

    13----.gif


    增加触发后波形显示很完美,很漂亮;
    接下来说说实现过程:
    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.显示时根据是否触发标志位判断复制显示数据的起始位置显示波形。

    示波器.rar (1.92 MB, 下载次数: 0, 售价: 1 铜板)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2018-2-22 23:00 , Processed in 0.316308 second(s), 13 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部