找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3693|回复: 0
收起左侧

STM32F103C8音频ADC->限幅滤波->MCP4725DAC(完整程序工程及Proteus仿真)

[复制链接]
ID:858964 发表于 2021-5-15 14:41 | 显示全部楼层 |阅读模式
本帖最后由 Kxuan163 于 2021-5-15 20:15 编辑

我的实践:STM32F103C8音频ADC->限幅滤波->MCP4725DAC(完整代码工程文件及Proteus仿真)
Proteus仿真运行截图.jpg


输入输出波形.jpg


工作流程图.jpg

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "adc.h"
  5. #include "MCP4725.h"
  6. #include "myiic.h"
  7. #include <stdio.h>

  8. #define  A 800  //前后两次采样值的偏离上限
  9. u16 data;      //前次ADC采样值
  10. u16 dataNew;   //本次ADC采样值

  11. u16 filter1()  //限幅滤波函数
  12. {
  13.    dataNew = ADC_GetConversionValue(ADC1);       //本次ADC采样
  14.    if ((dataNew -data <A) && (data -dataNew <A)) //本次ADC值与前次ADC值比较
  15.      {        
  16.       data= dataNew; //若偏离值<A,则本次ADC值采纳,否则舍弃
  17.      }
  18.    return data;
  19. }


  20. int main()
  21. {
  22.   delay_init();         

  23.   ADC1_GPIO_Config();
  24.         
  25.   ADC_Config();  

  26.   MCP4725_Init();                     
  27.         
  28.   data=ADC_GetConversionValue(ADC1); //初次ADC采样值
  29.   //if (data >4095) data=4095; // Vref =5V   
  30.   if (data >1638) data=1638;   // Vref =2V
  31.   
  32. while(1)
  33.    {
  34.      filter1(); //调用限幅滤波函数
  35.             
  36.    // PC13->LED 监视ADC实时值是否有变化:
  37.    if (data >=1000) PCout(13) = 0;  //PC13->LED亮        
  38.    else PCout(13) = 1;                    //PC13->LED灭        
  39.                         
  40.    MCP4725_WriteData_Digital(data); //将采ADC样值滤波后再作DA变换        
  41.             
  42.    }
  43. }
复制代码
51hei.png
工程组件结构.jpg
所有资料51hei提供下载:
C8-ADC-4725-DAC.zip (579.13 KB, 下载次数: 146)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表