本帖最后由 CW32生态社区 于 2023-10-10 16:08 编辑
1.MAX4466是一款低噪声、高增益的放大器模块。该模块采用了集成放大器芯片,能够在低电压下提供高增益。它的输入阻抗较高,能够与多种信号源(例如麦克风、传感器)实现良好的匹配。同时,MAX4466还具备很低的噪声水平,能够有效地提取和放大微弱的信号,提高系统的灵敏度。MAX4466模块的应用场景包括但不限于以下几个方面:
音频处理:可以作为音频信号的前置放大器,将低电平的音频信号放大到适合后续处理的水平,如音乐播放、语音识别、语音通信等。
声音检测与分析:结合麦克风等音频传感器,可以实现声音的检测、分析和识别,如声音传感器、语音识别设备等。
无线通信:可以用于接收无线通信模块的输入信号,对其进行放大,以提高通信距离和信号质量。
2.本实验使用到了CW32f030c8小蓝板、MAX4466模块、LED交通信号灯模块、0.96寸OLED显示屏、Keil5开发环境及VOFA+上位机软件。
CW32f030c8小蓝板
|
MAX4466模块
|
实物(俯视) |
实物(正视)
| 【单片机与MAX4466连线】:3.3V--VCC
GND---GND
PA0---OUT
【单片机与OLED屏连线】: GND---GND
3.3V--VDD
PB8--SCK
PB9--SDA
【单片机与LED灯连线】: GND--GND
PC15--R
PC14--Y
PC13--G
3.核心代码:ADC.c
#include "ADC.h"
#include "main.h"
#include "delay.h"
void ADC_Configuration(void)
{
ADC_SingleChTypeDef ADC_SingleInitStruct;
__RCC_ADC_CLK_ENABLE(); // ADC时钟使能
__RCC_GPIOA_CLK_ENABLE(); //GPIOA使能
PA00_ANALOG_ENABLE();
ADC_SingleInitStruct.ADC_Chmux = ADC_ExInputCH0; //PA00 通道0
ADC_SingleInitStruct.ADC_InitStruct.ADC_AccEn = ADC_AccDisable; //转换结果累加不使能
ADC_SingleInitStruct.ADC_InitStruct.ADC_Align = ADC_AlignRight; //ADC转换结果右对齐
ADC_SingleInitStruct.ADC_InitStruct.ADC_ClkDiv = ADC_Clk_Div16; //PCLK
ADC_SingleInitStruct.ADC_InitStruct.ADC_DMAEn = ADC_DmaDisable; //关闭DMA传输
ADC_SingleInitStruct.ADC_InitStruct.ADC_InBufEn = ADC_BufEnable; //开启跟随器
ADC_SingleInitStruct.ADC_InitStruct.ADC_OpMode = ADC_SingleChOneMode;//单通道单次转换模式
ADC_SingleInitStruct.ADC_InitStruct.ADC_SampleTime = ADC_SampTime10Clk; //10个ADC时钟周期
ADC_SingleInitStruct.ADC_InitStruct.ADC_TsEn = ADC_TsDisable; //内置温度传感器禁用
ADC_SingleInitStruct.ADC_InitStruct.ADC_VrefSel = ADC_Vref_VDDA; //VDDA参考电压
ADC_SingleChOneModeCfg(&ADC_SingleInitStruct); //开始转换
ADC_Enable(); // 使能ADC
ADC_SoftwareStartConvCmd(ENABLE); //转换使能
}
uint16_t Get_Data(void) //ADC数据采集
{
unsigned int temp_dat_adc = 0;
ADC_SoftwareStartConvCmd(ENABLE); //开始转换
while(ADC_GetITStatus(ADC_IT_EOC))
{
ADC_ClearITPendingBit(ADC_IT_EOC); //清除标志位
temp_dat_adc=ADC_GetConversionValue();//电压采集
}
return temp_dat_adc;
}
uint16_t Cal_Average_Data(void)
{
float dat;
uint8_t i=0;
for(i=0;i< 50;i++) //连续采集50次ADC的值
{
dat+=Get_Data(); //累加
Delay_ms(1);
}
return dat/50; //返回平均值
}
main.c
int main()
{
uint16_t temp;
LED_Init(); //LED灯初始化
OLED_Init(); //OELD屏初始化
UART_Init(); //串口初始化
ADC_Configuration(); //ADC配置
OLED_ShowString(1,1,"present:"); //提示字符串
OLED_ShowString(2,1,"record_max:");
while(1)
{
temp=Cal_Average_Data(); //获取ADC数值累加后的平均值
printf("%dn",temp); //通过串口借助VOFA+软件打印波形图
LED_Indicator(temp); //LED灯指示
Delay_ms(100);
}
}
4.VOFA+软件简易使用说明
①配置协议与连接:数据引擎选择”FireWater”,(注意:在程序中使用printf函数时,必须在%d后面加上\n才能在FireWater模式下被上位机正确识别),数据接口选择”串口”,正确选择端口号和配置波特率;
②在控件中找到波形图,拖拽到主窗口中,选择整窗口填充;
③右击窗口选择Y轴中的All打开Y轴数据显示;
④在图形种类中(默认)选择波形图;
⑤点击左上角灰黑色圆圈打开串口进行通信,看到圆圈变蓝并且闪烁代表通信正常,之后可以像调节示波器显示一样通过鼠标滚轮手动将波形调整到合适的显示范围,也可以点击Auto一键调整波形显示范围。
软件官网下载地址: HYPERLINK "https://www.vofa.plus/downloads/"
效果演示
正常音量
|
正常音量波形图
|
较大音量
|
较大音量波形图
|
过大音量
|
过大音量波形图
|
|