产品概述

单片机 模拟开关 STM32F103 单片机控制模拟开关矩阵 CH446Q

小编 2024-11-24 产品概述 23 0

STM32F103 单片机控制模拟开关矩阵 CH446Q

视频加载中...

一、前言

  昨天测试了模拟开关矩阵 CH446Q,CH446Q的工作电压为 5V,前面测试使用了 STC32 这款5V工作电源单片机。那么 CH446Q是否可以被3.3V 工作的单片机控制呢?下面使用这款 STM32F103 单片机,它的 IO口的电压为 3.3V。测试它是否可以对 CH446Q 直接进行操作。

▲ 图1.1.1 测试CH446Q的 STM32F103单片机测试版

二、测试方案

  设计 STM32F103 的实验电路板,利用它的四个 IO 端口, 输出控制 CH446Q 的 串行控制端口。利用一分钟制版方法,快速得到测试电路板。其中包括一个跳线,使用 0 欧姆电阻进行飞线。一分钟后获得测试电路板,焊接之后用于后面的测试。

▲ 图1.2.1 测试STM32F103电路板原理图

▲ 图1.2.2 测试STM32F103电路板PCB版图

AD\Test\2023\TestCH446QSTM103.SchDoc D:\zhuoqing\window\ARM\IAR\STM32\Application\Test\2023\TestCH446STM32F103\Core\Src\main.c

▲ 图1.2.3 测试STM32F103单片机实验电路板

  为了便于实验,将 CH446Q单独制作一个测试电路板。这样就便于更换外部的控制器,测试它的不同特性了。一分钟快速制版之后,便焊接得到测试电路了。

▲ 图1.2.4 CH446Q的测试版原理图

▲ 图1.2.5 CH446Q的测试版PCB 版图

AD\Test\2023\TestCH446QOnly.SchDoc

▲ 图1.2.6 测试电路板

三、测试结果

  配置STM32F103的输出端口,利用 GPIOB 的这四个IO口,输出CH446Q的串行控制信号。使用 5芯的扁平电缆将 STM32的实验小板 与 CH446Q的实验板连接在一起。输出控制信号,将 CH446Q 的 X2,Y1连接在一起。可以测量它们之间的电阻变成了 100欧姆左右,这与昨天测试是相同的。由此可以看到使用 3.3V 的单片机,控制CH446Q是没有问题的。串行控制软件也是从 STC32 单片机上直接移植过来的,下面测试一下对应的延时时间是否可以缩短。

D:\zhuoqing\window\ARM\IAR\STM32\Application\Test\2023\TestCH446STM32F103\Core\Src\main.c

  在主程序中,周期将 X0与Y0相连,延时 1ms 之后,再与Y1相连。Y0,Y1 分别连接 0V 和 5V。这样便可以在 X0 处接收到一个时间宽度为 1ms 的低电平脉冲。这说明 CH446Q 被正确的操作。对控制函数中的延时函数,都改成空函数。减少延迟。经过测试,CH446Q依然能够被正确的控制。

▲ 图1.3.1 X0对应的1ms的脉冲信号

※总  结 ※

  本文测试了 CH446Q是否可以被 3.3V 单片机正常操作。通过STM32F103单片机,可以正常操作 CH446Q 模拟开关矩阵。

参考资料

[1]

模拟开关矩阵的开关电阻之间的差异性 : https://zhuoqing.blog.csdn.net/article/details/134650429

[2]

模拟开关矩阵工作电压与导通电阻 : CH446Q : https://zhuoqing.blog.csdn.net/article/details/134645173

[3]

CH446Q 模拟开关矩阵导通功能测量 : https://blog.csdn.net/zhuoqingjoking97298/article/details/134638168

[4]

CH446Q 模拟开关矩阵芯片 : https://blog.csdn.net/zhuoqingjoking97298/article/details/134624565?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134624565%22%2C%22source%22%3A%22zhuoqingjoking97298%22%7D

stm32单片机,RAM,MCUXpresso,模拟开关以及Buck芯片技术文章分享

stm32单片机编程用库函数好还是寄存器好?

今天偷个懒,将以前在别的平台发表的回答给贴出来,相信对你们也会有些收获的。回答字数较多,所以分开更新。

先贴出第一部分回答。

问题:stm32单片机编程用库函数好还是寄存器好?

我学单片机已经四年了,用的一直是标准库函数。

库函数和寄存操作到底哪个好,这个不好说,只能说根据个人情况和应用场合吧。比如说我,虽然说我一直用的是标准库函数,但是我也不只是用标准库,偶尔在需要的时候会用寄存器操作,因为寄存器操作的效率更高。

库函数和寄存器操作的区别可能和 C 语言与汇编语言的区别差不多吧,都是跟效率有关,但有时候效率并不是唯一指标。

我们都知道 C 语言的效率要比汇编低,但是现在绝大多数嵌入式开发人员用的还是 C 语言!为什么,因为它简单易学,容易跨平台,移植性好,这是很大的优势,而汇编就不同了,它针对的是某一款内核进行开发,比如51汇编语言、ARM汇编语言,一旦内核变了,如果你的代码采用纯汇编写的代码,那几乎所有的代码都不适用了。但是使用 C 语言编写代码就不同,你在 51 单片机写的代码也能在 STM32 单片机中使用,你要做的工作就是把涉及到底层硬件的代码稍微修改一下就可以了,这种工作量很少,你的代码写得足够好的话,是很容易的,这称之为移植。那为什么 C 语言可以做到跨平台呢?

我们知道单片机最终还是要通过汇编语言执行的,所有的C 语言其实都会通过编译器进行转化的,也就是说你写的 C 语言程序会经过一种称为编译器的东西转为对应的汇编语言,比如说你的 C 语言程序要运行在 51 单片机上,你就要用对应的编译器编译,如果要运行在 STM32 上,你也要用另一个对应的编译器才行,这就是 C 语言能跨平台的秘密!跨平台的工作是交给了编译器,而不是说 C 语言真的能直接在各种单片机上运行!

但是真正的单片机程序并不是只有 C语言的,在进入 C 的世界之前,其实是有一段代码的,这称之为启动代码,但是这段代码很少!

库函数和寄存器的区别也是如此,库函数类似于 C 语言,而寄存器就类似于汇编。

使用库函数的好处就是你不用深入每一个寄存器操作的细节,而是把工作重心放在功能实现上。所有的寄存器细节都由封装好的函数去实现,你要做的就是合理的调用它。但也正因为细节进行了封装,所以在编写库函数的时候会考虑更多,这就会导致库函数的代码比较臃肿,效率比较低下,但是它的好处就是方便移植、修改,就是说即使库函数代码真出现了问题,你也只是找对应的函数进行修改就可以了,其他的函数基本可以不用动……

查看原文:https://www.dianyuan.com/eestar/article-7894.html

RAM 目标与多工程空间

RAM 目标

我们都知道,FLASH 下载次数是有限制的,虽然对一个项目来说,一个芯片下载次数完全够项目的开发使用,但有的开发板会进行很多项目的测试功能,比如我就有一个开发板,将所有的 I/O 引脚都引出来了,很多功能我都可以通过杜邦线连接来进行测试,非常方便。但也正因为如此,所以几年下来可能会在这个开发板上烧写不知多少次,很可能某一天就把 FLASH 给烧坏了,这样一来芯片就没用了。你可能会说,不怕,我的焊工好,焊一个芯片分分钟的事情,但是你考虑焊盘的感受吗?焊盘经不起你多少次焊接可能就废了,而且也不是随时随地都有芯片和焊接工具给你焊接啊。所以最好的办法就是使用 RAM 下载功能。

RAM 下载最大的好处就是下载次数无限,所以你可以使劲尝试各种可能,直到成功为止,根本不必考虑烧写次数问题,但是也有缺点。

我们知道 STM32 分为 FLASH 和 RAM 两部分空间,本来 RAM 专门用来存放数据的,FLASH 用来放代码和不变的数据,现在好了,所有的代码和数据都放在 RAM 中,而 RAM 的空间一般来说不是很大,所以一些大的项目是无法使用 RAM 的方法存储的,只能对一些小项目或者功能进行测试。而且原来分了两条总线对 FLASH 和 RAM 进行分别访问(哈佛结构),效率高,现在只能通过一条总线(应该是一条总线吧,也可能还是有两条总线同时访问)访问一个目标 RAM,效率可能下降。但这些缺点不是很明显,毕竟下载次数无限的诱惑力还是相当大的。所以有必要新增一个专门用来功能测试的目标,这样你就可以尽情的测试了!

和建立 FLASH 目标一样,不过不同的是现在以 FLASH 作为模板创建新的 RAM 目标,这是因为 FLASH 目标已经具有下载功能了。

具体如何建立 RAM 目标可以参考 RAM 下载这一小节内容。除了多了几个目标之外,其他设置都是类似的。但是因为这个笔记是很久之前写的(也可能是哪里摘抄的,不记得了),感觉写的不是很好,所以后期我会根据这个内容再重新整理,如果等不及的话的可以自行尝试。

需要注意一点的就是,因为所有的代码都是下载在 RAM 中的,所以不能使用复位按钮,因为一旦进行复位,那么程序就会跳转到FLASH 区进行执行,导致无法再执行到 RAM 中的程序里面,所以暂时不能使用复位按钮。但是这个问题是可以解决的,后期我会在整理的 RAM 下载小节中介绍这个方法。

所以有了前面的基础,再建立一个 RAM 目标是很简单的事情。感兴趣的可以自行尝试,实在不行就等着我的笔记出炉吧。

多工程

多目标解决了同一个芯片下不同功能代码的问题,现在还有一个问题就是如何管理不同芯片下的代码呢?比如 STM32F1 和 STM32F4 单片机是两个不同工程,他们的关系不再是多目标的关系,而是不同工程的关系,又该如何呢?这个时候就需要使用多工程的功能进行管理了。

怎么做呢?

首先建立一个多工程空间:

然后在不同工程文件夹下建立多工程空间:

然后将你需要的工程加入到这个空间当中进行管理……

查看原文:https://www.dianyuan.com/eestar/article-7895.html

超级下载算法在MCUXpresso IDE下的使用

痞子衡主导的"学术"项目 《RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计》 v1.0 版发布近 6 个月了,部分客户已经在实际项目开发调试中用上了这个超级下载算法,目前反馈还可以,但这个超级下载算法远未到成熟状态,痞子衡正在策划 v2.0 版本。

RT-UFL v1.0下载地址:https://github.com/JayHeng/RT-UFL/archive/refs/tags/v1.0.zip

超级下载算法 RT-UFL v1.0 版本主要针对 Segger J-Link 调试器,开发测试也都是在 J-Link Commander 和 J-Flash 软件下进行的,但其实它也适用各大常用 IDE,今天我们就来聊聊它在 MCUXpresso IDE 下的使用:

一、准备测试环境

首先需要准备好测试环境,包含必要的软件和硬件,痞子衡的环境如下:

集成开发环境:MCUXpresso IDE v11.4.0_6224,点此下载

软件开发包:SDK_2.10.0_EVKB-IMXRT1050(Toolchain需包含MCUXpresso IDE),点此下载

软件驱动:J-Link driver v6.86f,点此下载

硬件工具:J-Link Plus调试器

硬件开发板:MIMXRT1050-EVKB (Rev.A1)

二、在MCUXpresso IDE下使用步骤

2.1 将超级下载算法包打进J-Link驱动

第一步其实跟 MCUXpresso IDE 无关,因为是基于 J-Link 的超级下载算法,所以要给 J-Link 软件驱动先打个更新包,具体参照 《超级下载算法RT-UFL v1.0发布,附J-Link下安装教程》 一文。

Note: MCUXpresso IDE 安装过程中会顺便在 C:\Program Files (x86)\SEGGER\JLink 路径下安装一个默认的 J-Link 驱动(版本不可控,应该是跟 MCUXpresso IDE 匹配的),但为了避免不可预见的问题发生,最好自己手动安装一个明确的 J-Link 驱动版本来使用(痞子衡安装在了 C:\tools_mcu\SEGGER\JLink_V686f)。

2.2 使用MCUXpresso IDE导入一个SDK工程

然后我们需要一个 MCUXpresso IDE 工程,参照 《MCUXpresso IDE下SDK工程导入与workspace管理机制》 一文,这里我们导入了 \SDK_2.10.0_EVKB-IMXRT1050\boards\evkbimxrt1050\demo_apps\led_blinky 工程。

2.3 在SDK工程设置里指定包含超级下载算法的J-Link驱动

前面讲了,在安装 MCUXpresso IDE 时会同时安装一个默认 J-Link 驱动,MCUXpresso IDE 会默认调用这个驱动,我们需要在 MCUXpresso IDE 里重设 J-Link Server 路径,指向打了超级下载算法的 J-Link 驱动。

2.4 确保板卡处于Flash启动模式且SDK工程能够XIP

现在可以将板卡供上电,确保板卡处于 NOR Flash 启动模式(Boot Mode 以及 Boot Cfg 要设置正确),然后再检查一下 MCUXpresso IDE 工程里的 Flash 启动头是否与板卡上的实际 Flash 型号相匹配……

查看原文:https://www.dianyuan.com/eestar/article-7810.html

模拟开关控制运算放大器增益

今天在合宙的公众号上看到了一个基于Air的手持示波器,然后我就顺道看了一下,在里面看到了一个模拟开关控制运算放大器增益的应用 ,分享给各位同好,供各位同好参考。这个还是比较常见的,在一些动态调整量程 或者什么的应用都会用得到。这种动态调整运算放大器增益的方法在一些书里也有写,例如下图:

那么首先还是看一下负压供电 部分,这个和之前的7912负压LDO不一样,这个用的是圣邦微的SGM3204电荷泵电源芯片 ,输入电压范围1.4~5.5V,输出电压范围-1.4~-5.5V,最大输出电流200mA ,供各位同好对比参考。

然后就是今天要重点介绍的动态控制运算放大器增益的一个思路:用模拟开关去控制反馈电阻, 电路图如下:

电路原理: 用单片机的管脚去控制Z输出端-INA和哪个Y输入端连接。下图是74HC4051的真值表 ,还是很好理解的,当单片机控制S2,S1,S1 都为低电平 000 的时候,Y0和Z导通 ;当单片机控制S2,S1,S0都为001 的时候,Y1和Z导通 ;以此类推(有点像三八译码器哈哈)。

那么就看一下S2,S1,S0为000的情况 吧,在这种情况下,Y0和Z相通 ,运算放大器部分就变为了下图,运算放大器变为2倍的同相比例放大器

再看一下S2,S1,S0为001的情况 ,此时Y1和Z导通,此时在模拟开关的控制下,运算放大器等效为下图,此时放大倍数为4倍

剩下的几种情况就不赘述了,相信各位同好可以自己计算出来。然后再看一下这个运算放大器的电源部分串联了一个小电阻 ,构成了一个RC低通滤波器 ,这个也可以更好的抑制电源里的,或者是来自外部的高频噪声

然后第一级的两个二极管是为了做钳位,防止过压输入损坏运算放大器……

查看原文:https://www.dianyuan.com/eestar/article-7914.html

【注意事项】Buck芯片改buck-boost产生负压

在工作中,有时会用到负压,例如运算放大器有时为了让其能更好的轨到轨输出(例如之前举的例子就算是轨到轨运放,也不能完全输出0V,会有几mV),会为运算放大器提供负压供电,让他能真正的输出0V(点击图片可跳转) 。或者就是一些LCD驱动也会用到负压,等等等等。

那么产生负压的方式也有很多,例如前几天写的示波器的负压,有用负压LDO(7912)的,也有用电荷泵芯片的,也有二极管和电容搭的比比皆是。那么今天就给大家提供另一个思路,就是Buck芯片改Buck-boost提供负压

在实际电路设计当中,开关电源 DC-DC 的应用非常广泛,其中以降压 Buck 电路最为常见,以 12V转5V为例,其典型拓扑结构如下图所示。其输入电压 VIN,输出电压 VOUT 和占空比之间的关系为

VOUT=D*VIN

那么只要稍稍改变,就可以将Buck拓扑改为Buck-boost ,输出电压和占空比之间的关系为

VOUT=-VIN*D/(1-D)

TI 也有专门的正压转负压电源芯片可以直接使用,如 TPS63710LMR70503 等,其应用电路更为简单,方便使用。因为Buck改Buck-boost的话,一些管脚,例如EN或者是PG管脚的控制/输出需要特殊处理 ,如下图。

Buck做Buck-boost注意事项 :1.输入端电容接GND,尽量不要接Vout。 如果接到Vout,则需要外接肖特基二极管做输入电源回流(图中的D1)。

2.注意芯片的电压输入范围会变小 。由于芯片的参考变为了负压输出,所以芯片的输入电压范围需要减去Vout。

3.注意最大输出电流,达不到Buck的最大输出电流……

查看原文:https://www.dianyuan.com/eestar/article-7915.html

更多精彩内容,尽在电子星球 APP(https://www.eestar.com/)

六篇技术文章,让你秒懂电容的脾气秉性

七篇DIY技术文章献给你,让你脑洞全开

五篇文章帮你开启DSP的学习思路

汇总篇:关于PID知识,重点在此

相关问答

单片机 程序:用一个 开关 按钮控制一个灯,按钮在上面灯恒亮(高...

sbitKEY=P1^0;//假设开关接IO1.0sbitLED=P1^1;//假设led接IO1.1voiddel...直接把电源接给单片机不太好,建议稍微改下电路那个可以用~~~...

单片机 可以控制的 开关 都有那些?

分无触点开关和有触点开关两种。无触点开关有三极管,MOS管等,有触点开关有继电器,接触器等。使用三极管或MOS管时,要根据负载的种类,电压电流等级选择合适...

单片机 电源 开关 怎么接?

一般单片机的外接按键有三种接法:1、每个I/O端口接一个按键:按键接另回一端通常是答接地,I/O口通常还应该接一个上拉电阻,有些单片机的I/O口可以配置成内部...

单片机 的按键 开关 抖动的产生原因,抖动的特点和如何消除抖动 ...

抖械固有的物理特的回弹,造成2-8毫秒内信号不稳定。解决办法:软件延时去抖(其实是一种忽略)和硬件去抖软件判断:开关闭合——延时——是否还是闭合?...

单片机 并行AD实验思考题如何实现多路 模拟 信号采集?

普通单片机实现多路模拟量的数据采集、显示需要:外部连接一个多通道输入的ADC芯片,单片机按照一定的周期驱动模拟开关切换到不同的模拟通道,设计模数转换控制...

用一个轻触 开关 实现 单片机 短按开机,长按关机?

这个主要是电路的设计,你做一个电子开关,按键按下时开关可以打开(短按是对人而言的,实际上时间也有几十几百毫秒,对单片机来说时间很长了),即系统有电,单...

51 单片机开关 叫什么?

答51单片机开关也可以叫元器件名称蜂鸣器。一般型104无极电容30p无极电容10uF有极电容1uF有极电容发光二极管USB接口串口下载公头单排针单排座...

单片机 的按键 开关 抖动的产生原因,抖动的特点和如何消除抖动 ...

抖械固有的物理特的回弹,造成2-8毫秒内信号不稳定。解决办法:软件延时去抖(其实是一种忽略)和硬件去抖软件判断:开关闭合——延时——是否还是闭合?...

单片机开关 电源原理?

单片机开关电源是一种基于电磁感应原理的高效率电源,通过改变感应电动势实现电源输出电压的调节和稳定。它主要由交流输入端、整流电路、滤波电路、开关电路、...

单片机 四脚按键 开关 怎么当两脚按键 开关 用?

4脚开关相当于2个双脚开关,可以用其中的任何一个,也可以两个幷联一起用,不过用之前,应该用万用表量一下,哪2个脚组成一个开关。4脚开关相当于2个双脚开关,可...

猜你喜欢