[经验分享] 【Follow me第二季第2期】4.基础任务之 DAC/OPAM/ADC

我的学号   2024-9-7 20:33 楼主

本次的基础任务为 “使用DAC 产生正弦波,经过 OPAM 的放大,再用 ADC 采集并打印曲线到串口或其他上位机上”

分析题意,该任务需要 DAC、OPAM、ADC 和串口 四种模块的参与

 

下边对各个模块功能的完成进行记录

 

1.DAC:参考IDE 自带的 DAC 例程,生成正弦波波形需要添加:

对应头文件

image.png  

定义DAC 对象,指定管脚输出

image.png  

指定波形频率

image.png  

在setup 函数里指定波形为正弦波、频率为定义参数

image.png  

 

编译无误后烧写程序,通过示波器观察

image.png  

此外,还可以通过 Wave.saw() 函数生成锯齿波、通过 Wave.square() 函数生成方波

 

2.OPAM 模块的使用,参考官方教程进行:Arduino UNO R4 WiFi 运算放大器 |Arduino 文档

由原理图可知,UNO R4 内置的运放模块,A1 对应同相输入端,A2 对应反向输入端,A3 对应运放输出

上一步生成的 DAC 波形幅值为 0~4.5V;板载没有反向电源,因此无法使用反向放大的接法

如果使用同相放大,对应关系是 Vout =(1+Rf/R), 理论上输出最高电压在 4.5V 之上,超过器件的输出最大值,也不合适;

因此为使后续 OPAM  和 ADC 模块都能正常使用,先用分压电阻缩小输入电压,再开启运放模块放大输出电压

(后边发现原来 Arduino 可以通过Amplitude 函数更改输出电压幅值)

电路原理如下所示:

image.png  

 

用万用板搭建简单电路

image.png  

使用 UNO R4 的OPAM, 同样需要添加头文件

image.png  

然后在 setup 函数里进行模块初始化

image.png  

使用示波器同时观察 OPAMP 的输入信号和输出信号

image.png  

 通道三为输入信号,DAC 生成的0~4.5V 正弦波经电阻分压幅值改变为 0~1V 左右

输入信号经运放大(1+2/1) =3 倍后,得到 0~3V 正弦波

 

3.ADC 采集信号,并在串口绘图

启用ADC 模块,先在 setup 函数里定义 ADC 的采样精度

image.png  

然后定义数据,将ADC 对应 PIN 的数值进行赋值即可

image.png   

 

题意要求将ADC 数字上传到串口绘图,考虑波特率传输等问题,DAC 信号频率不宜太高,修改为 10Hz

ADC读取数据后传输到串口,延时 1ms 时间

 

在菜单栏可以找到串口绘图,打开可见波形

image.png  

 

横纵轴数值无法调节,这个工具还是有待改进的

image.png  

 

整个工程程序如下所示:

// //头文件定义
#include "analogWave.h"
#include "OPAMP.h"

// //模块对象定义
analogWave Wave(DAC);     //定义对象 Wave,关联引脚为 DAC(A0)

//全局变量定义

int WaveFre =10;        //波形频率,单位 Hz

int i16AdcReadResult =0;

//初始化任务,上电或复位后只运行一次
void setup()
{
  pinMode(LED_BUILTIN,OUTPUT);       //定义LED 对应的GPIO 为输出
  Serial.begin(115200);             //定义串口通信波特率

  Wave.sine(WaveFre);              //以WaveFre 为初始频率的正弦波
  Wave.start();

  OPAMP.begin(OPAMP_SPEED_HIGHSPEED);

  analogReadResolution(14);       //ADC 读取精度为 14bit
}

//循环运行函数

void loop()
{
  i16AdcReadResult =analogRead(A4);         //指定ADC 读取PIN
  Serial.print("ADC Result is:");           //数据上传提示
  Serial.print(String(i16AdcReadResult));   //转换为字符类型
  Serial.print("\n");                       //数据换行

  delay(1);                                 //延时等待1ms
}

 

本帖最后由 我的学号 于 2024-10-7 18:32 编辑
君应有语,渺万里层云,千山暮雪,知向谁边?

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复