OPAMP - Operational Amplifier

Description

Operational Amplifier (OPAMP) peripheral API.

This module contains functions to:

All OPAMP functions assume that the DAC clock is running. If DAC is not used, the clock can be turned off when OPAMPs are configured.

If the available gain values don't suit the application at hand, the resistor ladders can be disabled and external gain programming resistors used.

A number of predefined OPAMP setup macros are available for configuration of the most common OPAMP topologies (see figures below).

Note
The terms POSPAD and NEGPAD in the figures are used to indicate that these pads should be connected to a suitable signal ground.


Unity gain voltage follower.
Use predefined macros OPA_INIT_UNITY_GAIN and OPA_INIT_UNITY_GAIN_OPA2 .

                    |\
         ___________|+\
                    |  \_______
                 ___|_ /    |
                |   | /     |
                |   |/      |
                |___________|


Non-inverting amplifier.
Use predefined macros OPA_INIT_NON_INVERTING and OPA_INIT_NON_INVERTING_OPA2 .

                    |\
         ___________|+\
                    |  \_______
                 ___|_ /    |
                |   | /     |
                |   |/      |
                |_____R2____|
                |
                R1
                |
              NEGPAD 


Inverting amplifier.
Use predefined macros OPA_INIT_INVERTING and OPA_INIT_INVERTING_OPA2 .

                 _____R2____
                |           |
                |   |\      |
         ____R1_|___|_\     |
                    |  \____|___
                 ___|  /
                |   |+/
                |   |/
                |
              POSPAD 


Cascaded non-inverting amplifiers.
Use predefined macros OPA_INIT_CASCADED_NON_INVERTING_OPA0 , OPA_INIT_CASCADED_NON_INVERTING_OPA1 and OPA_INIT_CASCADED_NON_INVERTING_OPA2 .

                    |\                       |\                       |\
         ___________|+\ OPA0      ___________|+\ OPA1      ___________|+\ OPA2
                    |  \_________|           |  \_________|           |  \_______
                 ___|_ /    |             ___|_ /    |             ___|_ /    |
                |   | /     |            |   | /     |            |   | /     |
                |   |/      |            |   |/      |            |   |/      |
                |_____R2____|            |_____R2____|            |_____R2____|
                |                        |                        |
                R1                       R1                       R1
                |                        |                        |
              NEGPAD                   NEGPAD                   NEGPAD 


Cascaded inverting amplifiers.
Use predefined macros OPA_INIT_CASCADED_INVERTING_OPA0 , OPA_INIT_CASCADED_INVERTING_OPA1 and OPA_INIT_CASCADED_INVERTING_OPA2 .

                 _____R2____              _____R2____              _____R2____
                |           |            |           |            |           |
                |   |\      |            |   |\      |            |   |\      |
         ____R1_|___|_\     |     ____R1_|___|_\     |     ____R1_|___|_\     |
                    |  \____|____|           |  \____|___|            |  \____|__
                 ___|  /                  ___|  /                  ___|  /
                |   |+/ OPA0             |   |+/ OPA1             |   |+/ OPA2
                |   |/                   |   |/                   |   |/
                |                        |                        |
              POSPAD                   POSPAD                   POSPAD 


Differential driver with two opamp's.
Use predefined macros OPA_INIT_DIFF_DRIVER_OPA0 and OPA_INIT_DIFF_DRIVER_OPA1 .

                                  __________________________
                                 |                          +
                                 |        _____R2____
                    |\           |       |           |
         ___________|+\ OPA0     |       |   |\ OPA1 |
                    |  \_________|____R1_|___|_\     |      _
                 ___|_ /         |           |  \____|______
                |   | /          |        ___|  /
                |   |/           |       |   |+/
                |________________|       |   |/
                                         |
                                       POSPAD 


Differential receiver with three opamp's.
Use predefined macros OPA_INIT_DIFF_RECEIVER_OPA0 , OPA_INIT_DIFF_RECEIVER_OPA1 and OPA_INIT_DIFF_RECEIVER_OPA2 .

                    |\
          __________|+\ OPA1
         _          |  \_________
                 ___|_ /    |    |        _____R2____
                |   | /     |    |       |           |
                |   |/      |    |       |   |\      |
                |___________|    |____R1_|___|_\     |
                                             |  \____|___
                    |\            ____R1_ ___|  /
         +__________|+\ OPA0     |       |   |+/ OPA2
                    |  \_________|       |   |/
                 ___|_ /    |            R2
                |   | /     |            |
                |   |/      |          NEGPAD OPA0
                |___________|

Data Structures

struct OPAMP_Init_TypeDef
OPAMP init structure.

Functions

void OPAMP_Disable (DAC_TypeDef *dac, OPAMP_TypeDef opa)
Disable an Operational Amplifier.
void OPAMP_Enable (DAC_TypeDef *dac, OPAMP_TypeDef opa, const OPAMP_Init_TypeDef *init)
Configure and enable an Operational Amplifier.

Macros

#define OPA_INIT_UNITY_GAIN
Configuration of OPA0/1 in unity gain voltage follower mode.
#define OPA_INIT_UNITY_GAIN_OPA2
Configuration of OPA2 in unity gain voltage follower mode.
#define OPA_INIT_NON_INVERTING
Configuration of OPA0/1 in non-inverting amplifier mode.
#define OPA_INIT_NON_INVERTING_OPA2
Configuration of OPA2 in non-inverting amplifier mode.
#define OPA_INIT_INVERTING
Configuration of OPA0/1 in inverting amplifier mode.
#define OPA_INIT_INVERTING_OPA2
Configuration of OPA2 in inverting amplifier mode.
#define OPA_INIT_CASCADED_NON_INVERTING_OPA0
Configuration of OPA0 in cascaded non-inverting amplifier mode.
#define OPA_INIT_CASCADED_NON_INVERTING_OPA1
Configuration of OPA1 in cascaded non-inverting amplifier mode.
#define OPA_INIT_CASCADED_NON_INVERTING_OPA2
Configuration of OPA2 in cascaded non-inverting amplifier mode.
#define OPA_INIT_CASCADED_INVERTING_OPA0
Configuration of OPA0 in cascaded inverting amplifier mode.
#define OPA_INIT_CASCADED_INVERTING_OPA1
Configuration of OPA1 in cascaded inverting amplifier mode.
#define OPA_INIT_CASCADED_INVERTING_OPA2
Configuration of OPA2 in cascaded inverting amplifier mode.
#define OPA_INIT_DIFF_DRIVER_OPA0
Configuration of OPA0 in two-opamp differential driver mode.
#define OPA_INIT_DIFF_DRIVER_OPA1
Configuration of OPA1 in two-opamp differential driver mode.
#define OPA_INIT_DIFF_RECEIVER_OPA0
Configuration of OPA0 in three-opamp differential receiver mode.
#define OPA_INIT_DIFF_RECEIVER_OPA1
Configuration of OPA1 in three-opamp differential receiver mode.
#define OPA_INIT_DIFF_RECEIVER_OPA2
Configuration of OPA2 in three-opamp differential receiver mode.

Enumerations

enum OPAMP_TypeDef {
OPA0 = 0,
OPA1 = 1,
OPA2 = 2
}
OPAMP selector values.
enum OPAMP_NegSel_TypeDef {
opaNegSelDisable = DAC_OPA0MUX_NEGSEL_DISABLE,
opaNegSelUnityGain = DAC_OPA0MUX_NEGSEL_UG,
opaNegSelResTap = DAC_OPA0MUX_NEGSEL_OPATAP,
opaNegSelNegPad = DAC_OPA0MUX_NEGSEL_NEGPAD
}
OPAMP negative terminal input selection values.
enum OPAMP_PosSel_TypeDef {
opaPosSelDisable = DAC_OPA0MUX_POSSEL_DISABLE,
opaPosSelDac = DAC_OPA0MUX_POSSEL_DAC,
opaPosSelPosPad = DAC_OPA0MUX_POSSEL_POSPAD,
opaPosSelOpaIn = DAC_OPA0MUX_POSSEL_OPA0INP,
opaPosSelResTapOpa0 = DAC_OPA0MUX_POSSEL_OPATAP
}
OPAMP positive terminal input selection values.
enum OPAMP_OutMode_TypeDef {
opaOutModeDisable = DAC_OPA0MUX_OUTMODE_DISABLE,
opaOutModeMain = DAC_OPA0MUX_OUTMODE_MAIN,
opaOutModeAlt = DAC_OPA0MUX_OUTMODE_ALT,
opaOutModeAll = DAC_OPA0MUX_OUTMODE_ALL
}
OPAMP output terminal selection values.
enum OPAMP_ResSel_TypeDef {
opaResSelDefault = DAC_OPA0MUX_RESSEL_DEFAULT,
opaResSelR2eq0_33R1 = DAC_OPA0MUX_RESSEL_RES0,
opaResSelR2eqR1 = DAC_OPA0MUX_RESSEL_RES1,
opaResSelR1eq1_67R1 = DAC_OPA0MUX_RESSEL_RES2,
opaResSelR2eq2R1 = DAC_OPA0MUX_RESSEL_RES3,
opaResSelR2eq3R1 = DAC_OPA0MUX_RESSEL_RES4,
opaResSelR2eq4_33R1 = DAC_OPA0MUX_RESSEL_RES5,
opaResSelR2eq7R1 = DAC_OPA0MUX_RESSEL_RES6,
opaResSelR2eq15R1 = DAC_OPA0MUX_RESSEL_RES7
}
OPAMP gain values.
enum OPAMP_ResInMux_TypeDef {
opaResInMuxDisable = DAC_OPA0MUX_RESINMUX_DISABLE,
opaResInMuxOpaIn = DAC_OPA0MUX_RESINMUX_OPA0INP,
opaResInMuxNegPad = DAC_OPA0MUX_RESINMUX_NEGPAD,
opaResInMuxPosPad = DAC_OPA0MUX_RESINMUX_POSPAD,
opaResInMuxVss = DAC_OPA0MUX_RESINMUX_VSS
}
OPAMP resistor ladder input selector values.

Function Documentation

OPAMP_Disable()

void OPAMP_Disable ( DAC_TypeDef * dac,
OPAMP_TypeDef opa
)

Disable an Operational Amplifier.

Parameters
[in] dac A pointer to the DAC peripheral register block.
[in] opa Selects an OPA, valid values are OPA0, OPA1, and OPA2.

OPAMP_Enable()

void OPAMP_Enable ( DAC_TypeDef * dac,
OPAMP_TypeDef opa,
const OPAMP_Init_TypeDef * init
)

Configure and enable an Operational Amplifier.

Note
The value of the alternate output enable bit mask in the OPAMP_Init_TypeDef structure should consist of one or more of the DAC_OPA[opa#]MUX_OUTPEN_OUT[output#] flags (defined in <part_name>_dac.h) OR'ed together.

For OPA0:
  • DAC_OPA0MUX_OUTPEN_OUT0
  • DAC_OPA0MUX_OUTPEN_OUT1
  • DAC_OPA0MUX_OUTPEN_OUT2
  • DAC_OPA0MUX_OUTPEN_OUT3
  • DAC_OPA0MUX_OUTPEN_OUT4
For OPA1:
  • DAC_OPA1MUX_OUTPEN_OUT0
  • DAC_OPA1MUX_OUTPEN_OUT1
  • DAC_OPA1MUX_OUTPEN_OUT2
  • DAC_OPA1MUX_OUTPEN_OUT3
  • DAC_OPA1MUX_OUTPEN_OUT4
For OPA2:
  • DAC_OPA2MUX_OUTPEN_OUT0
  • DAC_OPA2MUX_OUTPEN_OUT1
E.g:
init.outPen = DAC_OPA0MUX_OUTPEN_OUT0 | DAC_OPA0MUX_OUTPEN_OUT4;
Parameters
[in] dac A pointer to the DAC peripheral register block.
[in] opa Selects an OPA, valid values are OPA0, OPA1, and OPA2.
[in] init A pointer to a structure containing OPAMP initialization information.

Macro Definition Documentation

OPA_INIT_UNITY_GAIN

#define OPA_INIT_UNITY_GAIN
Value:
{ \
opaNegSelUnityGain, /* Unity gain. */ \
opaPosSelPosPad, /* Positive input from pad. */ \
opaOutModeMain, /* Main output enabled. */ \
opaResSelDefault, /* Resistor ladder is not used. */ \
opaResInMuxDisable, /* Resistor ladder disabled. */ \
0, /* No alternate outputs enabled. */ \
_DAC_BIASPROG_BIASPROG_DEFAULT, /* Default bias setting. */ \
_DAC_BIASPROG_HALFBIAS_DEFAULT, /* Default half-bias setting. */ \
false, /* No low pass filter on positive pad. */ \
false, /* No low pass filter on negative pad. */ \
false, /* No nextout output enabled. */ \
false, /* Negative pad disabled. */ \
true, /* Positive pad enabled, used as signal input. */ \
false, /* No shorting of inputs. */ \
false, /* Rail-to-rail input enabled. */ \
true, /* Use factory calibrated opamp offset. */ \
0 /* Opamp offset value (not used). */ \
}

Configuration of OPA0/1 in unity gain voltage follower mode.

OPA_INIT_UNITY_GAIN_OPA2

#define OPA_INIT_UNITY_GAIN_OPA2
Value:
{ \
opaNegSelUnityGain, /* Unity gain. */ \
opaPosSelPosPad, /* Positive input from pad. */ \
opaOutModeMain, /* Main output enabled. */ \
opaResSelDefault, /* Resistor ladder is not used. */ \
opaResInMuxDisable, /* Resistor ladder disabled. */ \
DAC_OPA0MUX_OUTPEN_OUT0, /* Alternate output 0 enabled. */ \
_DAC_BIASPROG_BIASPROG_DEFAULT, /* Default bias setting. */ \
_DAC_BIASPROG_HALFBIAS_DEFAULT, /* Default half-bias setting. */ \
false, /* No low pass filter on positive pad. */ \
false, /* No low pass filter on negative pad. */ \
false, /* No nextout output enabled. */ \
false, /* Negative pad disabled. */ \
true, /* Positive pad enabled, used as signal input. */ \
false, /* No shorting of inputs. */ \
false, /* Rail-to-rail input enabled. */ \
true, /* Use factory calibrated opamp offset. */ \
0 /* Opamp offset value (not used). */ \
}

Configuration of OPA2 in unity gain voltage follower mode.

OPA_INIT_NON_INVERTING

#define OPA_INIT_NON_INVERTING
Value:
{ \
opaNegSelResTap, /* Negative input from resistor ladder tap. */ \
opaPosSelPosPad, /* Positive input from pad. */ \
opaOutModeMain, /* Main output enabled. */ \
opaResSelR2eq0_33R1, /* R2 = 1/3 R1 */ \
opaResInMuxNegPad, /* Resistor ladder input from negative pad. */ \
0, /* No alternate outputs enabled. */ \
_DAC_BIASPROG_BIASPROG_DEFAULT, /* Default bias setting. */ \
_DAC_BIASPROG_HALFBIAS_DEFAULT, /* Default half-bias setting. */ \
false, /* No low pass filter on positive pad. */ \
false, /* No low pass filter on negative pad. */ \
false, /* No nextout output enabled. */ \
true, /* Negative pad enabled, used as signal ground. */ \
true, /* Positive pad enabled, used as signal input. */ \
false, /* No shorting of inputs. */ \
false, /* Rail-to-rail input enabled. */ \
true, /* Use factory calibrated opamp offset. */ \
0 /* Opamp offset value (not used). */ \
}

Configuration of OPA0/1 in non-inverting amplifier mode.


OPA_INIT_NON_INVERTING_OPA2

#define OPA_INIT_NON_INVERTING_OPA2
Value:
{ \
opaNegSelResTap, /* Negative input from resistor ladder tap. */ \
opaPosSelPosPad, /* Positive input from pad. */ \
opaOutModeMain, /* Main output enabled. */ \
opaResSelR2eq0_33R1, /* R2 = 1/3 R1 */ \
opaResInMuxNegPad, /* Resistor ladder input from negative pad. */ \
DAC_OPA0MUX_OUTPEN_OUT0, /* Alternate output 0 enabled. */ \
_DAC_BIASPROG_BIASPROG_DEFAULT, /* Default bias setting. */ \
_DAC_BIASPROG_HALFBIAS_DEFAULT, /* Default half-bias setting. */ \
false, /* No low pass filter on positive pad. */ \
false, /* No low pass filter on negative pad. */ \
false, /* No nextout output enabled. */ \
true, /* Negative pad enabled, used as signal ground. */ \
true, /* Positive pad enabled, used as signal input. */ \