本帖最后由 Kxuan163 于 2021-5-15 20:15 编辑
我的实践:STM32F103C8音频ADC->限幅滤波->MCP4725DAC(完整代码工程文件及Proteus仿真)
单片机源程序如下:
- #include "stm32f10x.h"
- #include "delay.h"
- #include "sys.h"
- #include "adc.h"
- #include "MCP4725.h"
- #include "myiic.h"
- #include <stdio.h>
- #define A 800 //前后两次采样值的偏离上限
- u16 data; //前次ADC采样值
- u16 dataNew; //本次ADC采样值
- u16 filter1() //限幅滤波函数
- {
- dataNew = ADC_GetConversionValue(ADC1); //本次ADC采样
- if ((dataNew -data <A) && (data -dataNew <A)) //本次ADC值与前次ADC值比较
- {
- data= dataNew; //若偏离值<A,则本次ADC值采纳,否则舍弃
- }
- return data;
- }
- int main()
- {
- delay_init();
- ADC1_GPIO_Config();
-
- ADC_Config();
- MCP4725_Init();
-
- data=ADC_GetConversionValue(ADC1); //初次ADC采样值
- //if (data >4095) data=4095; // Vref =5V
- if (data >1638) data=1638; // Vref =2V
-
- while(1)
- {
- filter1(); //调用限幅滤波函数
-
- // PC13->LED 监视ADC实时值是否有变化:
- if (data >=1000) PCout(13) = 0; //PC13->LED亮
- else PCout(13) = 1; //PC13->LED灭
-
- MCP4725_WriteData_Digital(data); //将采ADC样值滤波后再作DA变换
-
- }
- }
复制代码
所有资料51hei提供下载:
C8-ADC-4725-DAC.zip
(579.13 KB, 下载次数: 146)
|