STM32开发项目:一些模拟电子开关的介绍与驱动

日期作者版本说明
2020.09.29TaoV1.0撰写了ADG408、DG467芯片的简介与驱动
2020.09.30TaoV1.1撰写了WAS3157B芯片的简介与驱动
2020.10.01TaoV1.2增加了ADG408与ADG409的驱动兼容性说明
2020.10.10TaoV1.3增加了ADG1408与ADG1409的介绍
2020.10.22TaoV1.4增加了ADG411与ADG1411的介绍

选型原则

如果采用了外部模拟切换开关,那么这个开关总是存在一些电阻的,必然引起一些误差。一般来说,如果是开关是做通道切换的,在后级加一个运放跟随提高驱动能力就可以了。如果是做量程切换,只能选择导通电阻很小的开关,同时注意开关的平坦度和温度漂移参数。如果系统精度要求很高,那还需要做软件校正或者选择可编程放大器如AD8250/1/3等。

ADG408/409与ADG1408/1409

芯片简介

ADG408是1P8T模拟电子开关,ADG409是2P4T模拟电子开关,关于他们的详细介绍请看官方数据手册。同样的,ADG1408是1P8T模拟电子开关,ADG1409是2P4T模拟电子开关,关于他们的详细介绍请看官方数据手册

这两个系列的模拟电子开关功能与控制方式相同,性能不同。ADG408/409的导通电阻有100Ω,而ADG1408/1409的导通电阻仅为4Ω

以下为摘自数据手册的关于ADG408/409的特性介绍:

ADG408是一款单芯片CMOS模拟多路复用器,内置8个单通道。它根据3位二进制地址线A0、A1和A2所确定的地址,将8路输入之一切换至公共输出。该器件提供EN输入,用来使能或禁用器件。禁用时,所有通道均关断。

ADG408采用增强型LC2MOS 工艺设计,具有低功耗、高开关速度和低导通电阻特性。接通时,各通道在两个方向的导电性能相同,输入信号范围可扩展至电源电压范围。在断开条件下,达到电源电压的信号电平被阻止。所有通道均采用先开后合式开关,防止开关通道时发生瞬时短路。设计本身具有低电荷注入特性,当切换数字输入时,可实现最小的瞬变。

如想获得防闩锁性能保证、8 kV HBM ESD额定值、更低导通电阻(13.5Ω)、更小封装及高达+/-22V、+40V的工作电压,可考虑使用ADG5408。

如想获得更低导通电阻(4.5Ω)、更小封装及高达+/-15V、+12V的工作电压,可考虑使用ADG1408。

以下为摘自数据手册的关于ADG1408/1409的特性介绍:

ADG1408/ADG1409均为单芯片iCMOS®模拟多路复用器,分别内置8个单通道和4个差分通道。ADG1408根据3位二进制地址线A0、A1和A2所确定的地址,将8路输入之一切换至公共输出。ADG1409根据2位二进制地址线A0和A1所确定的地址,将4路差分输入之一切换至公共差分输出。两款器件均提供EN输入,用来使能或禁用器件。禁用时,所有通道均关断。

工业CMOS (iCMOS)是一种模块式制造工艺,集高电压CMOS(互补金属氧化物半导体)与双极性技术于一体。利用这种工艺,可以开发工作电压达33 V的各种高性能模拟IC,并实现以往的高压器件所无法实现的尺寸。与采用传统CMOS工艺的模拟IC不同,iCMOS器件不但可以承受高电源电压,同时还能提升性能、大幅降低功耗并减小封装尺寸。

这些开关具有超低导通电阻和导通电阻平坦度,对于低失真性能至关重要的数据采集和增益切换应用堪称理想解决方案。iCMOS结构可确保功耗极低,因而这些器件非常适合便携式电池供电仪表。

下图是ADG408与ADG409的功能框图。
ADG408/409的功能框图
下图是ADG408与ADG409的引脚功能图。
ADG408与ADG409的引脚功能图
下图是ADG408与ADG409的真值表。
ADG408与ADG409的真值表

驱动源码

由于ADG409通道选择逻辑与ADG408一致,因此驱动可以兼容ADG409。ADG409少了A2管脚,因此在定义ADG409芯片时,注意将结构体变量的A2管脚初始化为空指针,同时在void ADG408_OpenChannel(ADG408_TypeDef* adg408, uint8_t channel)中只能打开前4个通道。

头文件

#ifndef __ADG408_H__
#define __ADG408_H__

#include "stm32f10x.h"
#include "stm32f10x_conf.h"

#ifdef ADG408

typedef struct
{
	uint32_t *En;
	uint32_t *A0;
	uint32_t *A1;
	uint32_t *A2;
} ADG408_TypeDef;

//位带对象
#define ADG408_1_A0										GPIOB_OUT(14)
#define ADG408_1_A1										GPIOB_OUT(15)
#define ADG408_1_A2										GPIOA_OUT(8)
#define ADG408_1_EN										GPIOB_OUT(13)

#define ADG408_2_A0										GPIOB_OUT(5)
#define ADG408_2_A1										GPIOB_OUT(9)
#define ADG408_2_A2										GPIOB_OUT(8)
#define ADG408_2_EN										GPIOB_OUT(4)

//位带地址
#define ADG408_1_A0_ADDR								GPIOB_OUT_ADDR(14)
#define ADG408_1_A1_ADDR								GPIOB_OUT_ADDR(15)
#define ADG408_1_A2_ADDR								GPIOA_OUT_ADDR(8)
#define ADG408_1_EN_ADDR								GPIOB_OUT_ADDR(13)

#define ADG408_2_A0_ADDR								GPIOB_OUT_ADDR(5)
#define ADG408_2_A1_ADDR								GPIOB_OUT_ADDR(9)
#define ADG408_2_A2_ADDR								GPIOB_OUT_ADDR(8)
#define ADG408_2_EN_ADDR								GPIOB_OUT_ADDR(4)

extern ADG408_TypeDef ADG408_type[];

void ADG408_SetStatus(ADG408_TypeDef* adg408,uint8_t status);
void ADG408_OpenChannel(ADG408_TypeDef* adg408, uint8_t channel);

#endif
#endif

源文件

#include "adg408.h"

#ifdef ADG408
/*0为通道1-8控制,1为通道9-16控制,2为量程控制*/

ADG408_TypeDef ADG408_type[] =
{
	{
		.En = ADG408_1_EN_ADDR,
		.A0 = ADG408_1_A0_ADDR,
		.A1 = ADG408_1_A1_ADDR,
		.A2 = ADG408_1_A2_ADDR,
	},

	{
		.En = ADG408_2_EN_ADDR,
		.A0 = ADG408_2_A0_ADDR,
		.A1 = ADG408_2_A1_ADDR,
		.A2 = ADG408_2_A2_ADDR,
	},
};


/**
 * @brief 设置ADG408的状态(使能或失能)
 * @param adg408:  定义ADG408的结构体变量指针
 * @param status: ADG408的状态
 * 		@arg 0: 失能
 * 		@arg 1: 使能
 */
void ADG408_SetStatus(ADG408_TypeDef* adg408,uint8_t status)
{
	if(status != 0)
	{
		*adg408->En = 1;
	}
	else
	{
		*adg408->En  = 0;
	}
}


/**
 * @brief 开启ADG408的通道
 * @param adg408: 定义ADG408的结构体变量指针
 * @param channel: ADG408的通道(0~7)
 */
void ADG408_OpenChannel(ADG408_TypeDef* adg408, uint8_t channel)
{
	*adg408->A0 = (channel&0x01)>>0;
	*adg408->A1 = (channel&0x02)>>1;

	//因为ADG409的A2为空指针,此处需要判断,避免给空指针直接赋值
	if(adg408->A2 != NULL)
	{
		*adg408->A2 = (channel&0x04)>>2;
	}
}

#endif

使用指南

  • 根据电路设计初始化单片机的GPIO端口
  • 宏定义GPIO电平操作(利用位带)
//位带地址
#define ADG408_1_A0_ADDR								GPIOB_OUT_ADDR(14)
#define ADG408_1_A1_ADDR								GPIOB_OUT_ADDR(15)
#define ADG408_1_A2_ADDR								GPIOA_OUT_ADDR(8)
#define ADG408_1_EN_ADDR								GPIOB_OUT_ADDR(13)

#define ADG408_2_A0_ADDR								GPIOB_OUT_ADDR(5)
#define ADG408_2_A1_ADDR								GPIOB_OUT_ADDR(9)
#define ADG408_2_A2_ADDR								GPIOB_OUT_ADDR(8)
#define ADG408_2_EN_ADDR								GPIOB_OUT_ADDR(4)
  • 定义与初始化ADG408结构数组
ADG408_TypeDef ADG408_type[] =
{
	{
		.En = ADG408_1_EN_ADDR,
		.A0 = ADG408_1_A0_ADDR,
		.A1 = ADG408_1_A1_ADDR,
		.A2 = ADG408_1_A2_ADDR,
	},

	{
		.En = ADG408_2_EN_ADDR,
		.A0 = ADG408_2_A0_ADDR,
		.A1 = ADG408_2_A1_ADDR,
		.A2 = ADG408_2_A2_ADDR,
	},
};
  • 在需要的地方,将ADG408结构体变量的指针传入相应的操作函数
	DG408_OpenChannel(&ADG408_type[0], 0);
	ADG408_SetStatus(&ADG408_type[0], 1);

ADG411/ADG1411

芯片简介

ADG411/ADG1411是4组独立SPST模拟电子开关。
ADG411/412/413系列的区别主要在于控制引脚的逻辑关系上。而ADG411系列与ADG1411系列的主要区别在于切换时间与导通电阻上。ADG411的导通电阻有35Ω,ADG1411的导通电阻只有1.5Ω。同时,它们的管脚功能也存在细微差别(ADG411的12脚为逻辑电源,而ADG1411的12脚为空)

ADG411/412/413的功能框图如下图所示:
ADG411/412/413的功能框图
ADG1411/1412/1413的功能框图如下图所示:
ADG1411/1412/1413的功能框图ADG411系列的管脚功能如下图所示:
在这里插入图片描述ADG1411系列的管脚功能如下图所示:
在这里插入图片描述

驱动源码

这些芯片的控制比较简单,因此这部分内容省略。

使用指南

根据真值表直接操作单片机的GPIO电平控制芯片即可。

DG467/468/469/470

芯片简介

DG467/468是SPST模拟电子开关,DG469/470是SPDT模拟电子开关,它们支持双电源供电,同时有着极低的导通电阻。详细的参数与介绍请参考官方数据手册DG467DG469

The DG467 and DG468 are dual supply single-pole/singlethrow (SPST) switches. On resistance is 10 ohm max. and flatness is 2 ohm max. over the specified analog signal range.These analog switches were designed to provide high speed, low error switching of precision analog signals. The primary application areas are in the routing and switching intelecommunications and test equipment. Combining low power, low leakages, low on-resistance and small physical size, the DG467/468 are also ideally suited for portable and battery powered industrial and military equipment.The DG467 has one normally closed switch, while the DG468 switch is normally open. They operate either from a single + 7 V to 36 V supply or from dual ± 4.5 V to ± 20 V supplies. They are offered in the very popular, small TSOP6 package.

The DG469, DG470 are high voltage SPDT switches, with a typical on resistance of 3.6 Ω and typical flatness of 0.4 Ω. The DG469, DG470 are identical, except the DG470 provides an enable input. When the enable input is activated, both sides of the switch are in a high impedance mode (Off), maintaining a “Safe State” at power up. This function can also be used as a quick “disconnect” in the event of a fault condition. For audio switching, the enable pin provides a mute function. These are high voltage switches that are fully specified with dual supplies at ± 4.5 V and ± 15 V and a single supply of 12 V over an operating temperature range from - 40 °C to + 125 °C. Fast switching speeds coupled with high signal bandwidth makes these parts suitable for video switching applications. All digital inputs have 0.8 V and 2.4 V logic thresholds ensuring low voltage TTL/CMOS compatibility. Each switch conducts equally well in both directions when on and can handle an input signal range that extends to the supply voltage rails. They exhibit break-before-make switching action to prevent momentary shorting when switching between channels. The DG469, DG470 are offered in a MSOP 8 and SOIC 8 package.

DG467/468的引脚功能图与真值表如下图所示。
在这里插入图片描述
DG467/468的引脚功能图与真值表如下图所示。
在这里插入图片描述

驱动源码

这些芯片的控制比较简单,因此这部分内容省略。

使用指南

根据真值表直接操作单片机的GPIO电平控制芯片即可。

WAS3157B

芯片简介

WAS3157B is 5.5Ω, 400MHz Bandwidth, SPDT Analog Switch. 详细参数请查看官方数据手册

The WAS3157B is a high performance, single pole double throw (SPDT) CMOS analog switch for bus switching or audio switching applications. It features high bandwidth up to 400MHz at -3dB and low on-resistance (5.5Ω Typ.).

The SEL pin has overvoltage protection that allows voltages above VCC, up to 7.0V to be present on the pin without damage or disruption of operation of the part, regardless of the operating voltage. The WAS3157B is also featured with smart circuitry to minimize VCC leakage current even when SEL control voltage is lower than VCC supply voltage. In other word, there is no need of additional device to shift SEL level to be the same as that of VCC in real application.

WAS3157B的管脚配置如下图所示。
WAS3157B的管脚配置WAS3157B的特征参数如下图所示。
WAS3157B的特征参数WAS3157B的SEL管脚功能如下图所示。
WAS3157B的SEL管脚功能

驱动源码

这些芯片的控制比较简单,因此这部分内容省略。

使用指南

根据真值表直接操作单片机的GPIO电平控制芯片即可。

  • 12
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
STM32是一款广泛应用于嵌入式系统开发的微控制器系列,项目选择与其相关的嵌入式开发是必做的。以下是我推荐的一些STM32嵌入式开发必做项目。 1. LED闪烁:这是入门级的项目,通过编程控制STM32开发板上的LED灯实现闪烁效果。这个项目帮助初学者熟悉STM32开发环境和调试工具。 2. 温度测量与显示:使用STM32的ADC模块和温度传感器,编程实现温度测量,并将测得的温度值显示在开发板上的LCD上。这个项目涉及到模拟信号采集、数据处理和LCD显示等多个方面。 3. 蓝牙通信控制LED:通过蓝牙与STM32进行通信,实现通过手机APP远程控制STM32开发板上的LED灯的开关和亮度调节。这个项目结合了蓝牙通信和外设控制。 4. 智能家居系统:建立一个简单的智能家居系统,利用STM32与各种传感器(如温湿度传感器、光照传感器)以及执行器(如电机、继电器)进行交互。通过编程,实现智能家居系统的控制与监测。 5. 网络连接与云服务:利用STM32与Wi-Fi模块(如ESP8266)实现网络连接,并通过云服务(如MQTT)进行数据传输和控制。这个项目涉及到网络通信、数据解析和云端应用开发。 这些项目可以逐渐升级难度,同时也覆盖了嵌入式开发的基本要素,如GPIO控制、模拟信号采集、通信协议和外设驱动。通过完成这些项目开发者能够逐步提升对STM32的理解和应用水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全能骑士涛锅锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值