本帖最后由 mxkw0514 于 2021-3-29 22:20 编辑
引言
在查看AVR128DB48系列芯片的数据手册【1】中,发现该芯片有一大亮点:该芯片含有两个独特的外设——OPAMP外设和Multi-Voltage I/O (MVIO), 可以独立于VDD供电,这个功能是显著的,可以通过内部OPAMP外设和MVIO外设的配合使用,能够解决一些外部通信设备与AVR128DB48的供电电压不一致的问题,这样可以在产品开发过程中节省一些元器件成本。如今申请到的AVR128DB48开发板已经收到,开始完成对AVR128DB48芯片的内部OPAMP外设和MVIO外设进行测试。该篇测评内容包括:
一、开箱展示
二、项目开发:
1、环境搭建
2、实验:对单片机的OPAMP外设和Multi-Voltage I/O (MVIO)外设进行测评
3、测评结果
三、心得
一、开箱展示
AVR128DB48开发板一如既往地包含两部分:排针和主板。排针可以焊到半孔上去,也可以插到直接歪斜排列的孔中—方便没有焊接工具的用户。PCB打样对半孔的收费还挺高的,不知道是什么原因。AVR128DB48开发板的正反面图如图1-1和图1-2所示。
图1-1 AVR128DB48开发板正面图
图1-2 AVR128DB48开发板反面图
二、项目开发
1、开发环境
本次使用MPLAB X编译器完成本次的测评。当让也可以使用Atmel studio,这要根据个人喜好进行选择了。打开MPLAB X编译器,然后将AVR128DB48开发板通过USB线与电脑进行连接,MPLAB X就能识别出该开发板。编译器的界面如图2-1所示:
图2-1 MPLAB界面
2、OPAMP外设和MVIO测评
在进行OPAMP外设和MVIO外设的测评前,首先介绍一下AVR128DB48开发板上的这几个外设功能。
2.1 OPAMP外设
AVR128DB48的OPAMP外设使用非常灵活,运算放大器既可以用来放大信号,又可以做成比较器来使用,还可以用来做成跟随器。在OPAMP外设与MVIO外设的配合使用的情况下,一般将OPAMP外设做成跟随器,如图2-2所示:
图2-2 跟随器示意图
2.1 MVIO外设
AVR128DB48具有Multi-Voltage I/O (MVIO),该外设的供电与主电源VDD是独立的,具有极大的灵活性。AVR128DB48的MVIO外设框图如图2-3所示,在PC[7:0]引脚,改组引脚的供电端为VDDIO2,它既可以与VDD相连,又可以外加其它电压(可以是内部OP外设提供,也可以由外部电源通过分压电阻提供),在AVR128DB48开发板上则要进行一定的处理【2】,如图2-4所示,需要去除R204的0欧电阻(如果不用VDD电源)。
图2-3 MVIO框图
图2-4 MVIO接线图2.2 程序编写
关于OPAMP外设和MVIO外设的测评程序是在基于Github上的例程上进行修改的【3】,利用AVR128DB48内部分压电阻为OPAMP提供基准,形成跟随器,跟随器输出电压(PD5或者PD2引脚)成为MVIO外设的供电电源(VDDIO2引脚),MVIO外设的IO引脚的高电平就是跟随器的输出电压。原理框图如图2-5所示:
图2-5 OPAMP外设和MVIO外设组合框图
程序如下所示,该程序是利用MPLAB X开发环境的MCC模块生成的,所以程序的可读性不是很强,在重要的地方加了标示。在已有的MCC程序上进行了部分的修改,使得MVIO外设在OPAMP外设的供电下产生脉冲波形,通过脉冲波形的电平大小来进行测评。
#define F_CPU 4000000ul
#define CLK_PER 4000000ul
#define OPAMP_MAX_SETTLE_TIME 0x7F
#include <avr/io.h>
#include <math.h>
uint16_t adc_sample();
void adc_init();
void op_amp_init();
void op_amp_setup_int_resistors(uint8_t MUXWIP_gc);
int main(void)
{
adc_init();
op_amp_init();
op_amp_setup_int_resistors( OPAMP_OP1RESMUX_MUXWIP_WIP1_gc ); //R1 = 14R, R2 = 2R, 跟随器的输出电压为R1/(R2+R3)*VDD=2.88V
do { PORTC_DIRSET = 0x8; } while(0); //设置PC3为输出
while (1)
{
uint16_t OP_out = adc_sample();// OP_out为ADC采样值
while (OP_out>1000)
{
do { PORTC_OUTSET = 0x8; } while(0); //PC3为高
do { PORTC_OUTCLR = 0x8; } while(0); //PC3为低
}
}
}
uint16_t adc_sample()
{
uint16_t res;
ADC0.COMMAND = ADC_STCONV_bm;
while(!(ADC0.INTFLAGS & ADC_RESRDY_bm));
res=ADC0.RES>>4;
return res;
}
void adc_init()
{
VREF.ADC0REF = VREF_REFSEL_VDD_gc ; //ADC参考电压为VDD
ADC0.MUXPOS = ADC_MUXPOS_AIN2_gc;
ADC0.CTRLB= ADC_SAMPNUM_ACC16_gc;
ADC0.CTRLA= ADC_ENABLE_bm;
}
void op_amp_init()
{
PORTD.PIN5CTRL = PORT_ISC_INPUT_DISABLE_gc; //OPAMP的输出在OP1中为PD5引脚,在OP0中为PD2引脚
OPAMP.CTRLA = OPAMP_ENABLE_bm;
OPAMP.TIMEBASE = (uint8_t) ceil(CLK_PER*0.000001)-1;
OPAMP.OP1CTRLA = OPAMP_RUNSTBY_bm | OPAMP_ALWAYSON_bm | OPAMP_OP1CTRLA_OUTMODE_NORMAL_gc;
OPAMP.OP1SETTLE = OPAMP_MAX_SETTLE_TIME;
}
void op_amp_setup_int_resistors(OPAMP_OP1RESMUX_MUXWIP_t MUXWIP_gc)
{
OPAMP.OP1INMUX = OPAMP_OP1INMUX_MUXNEG_OUT_gc | OPAMP_OP1INMUX_MUXPOS_WIP_gc;
OPAMP.OP1RESMUX = OPAMP_OP1RESMUX_MUXTOP_VDD_gc|OPAMP_OP1RESMUX_MUXBOT_GND_gc|MUXWIP_gc;
}
三、实验结果
本次实验的测试图如图3-1所示,去除了开发板上的R204电阻,将在OPAMP外设的输出引脚PD5与MVIO外设的电源引脚相连,用示波器的探头夹住MVIO的PC3引脚,观察产生的脉冲波形,波形图如图3-2所示。由图3-2可以看出,脉冲的频率为980KHz,高电平为2.884V(内部分压电阻比较精准),正如数据手册中所说的,MVIO外设的电源与VDD是独立的。所以它可以解决在外部通信设备与单片机VDD电源不一致的情况下,实现通信电平一致。
图3-1 实验测试框图
图3-2 脉冲波形图
四、实验心得
AVR128DB48的OPAMP外设和MVIO外设的实用性很强,在PCB面积受限或者成本受限的情况下具有一定的应用场景。
参考文献
【1】Microchip Technology Inc.AVR128DB28-32-48-64-DataSheet-DS40002247A[DB/OL].(2020)[2021-03-29].https://ww1.microchip.com/downloads/en/DeviceDoc/AVR128DB28-32-48-64-DataSheet-DS40002247A.pdf.
【2】Microchip Technology Inc.Using the Internal OPAMP as Regulated Power Supply forMVIO[DB/OL].(2020)[2021-03-29].https://ww1.microchip.com/downloads/en/Appnotes/Using-Int-OPAMP-Regulated-PowerSup-MVIO-DS00003636A.pdf.
【3】GitHub Inc.avr128db48-opamp-as-regulated-power-supply-mplab-mcc[DB/OL].(2021-03)[2021-03-29].https://github.com/microchip-pic-avr-examples/avr128db48-opamp-as-regulated-power-supply-mplab-mcc.
|