找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 623|回复: 11
打印 上一主题 下一主题
收起左侧

单片机如何搭建电路实现高阻态输入?

[复制链接]
跳转到指定楼层
楼主
ID:1108479 发表于 2024-7-15 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在有一个芯片A有一个输入引脚,该引脚接收外部的输入信号,实现不同的功能。当输入为高电平时,芯片A产生100Hz脉冲,当输入为低电平时,芯片A产生1KHZ波形,当该引脚悬空(既不输入高电平也不输入低电平,相当于高阻态,类似断开)时,芯片A什么也不做。

我用单片机的GPIO输出电平给芯片A的这个输入引脚,单片机输出高低电平很简单,但是断开功能如何实现?用三极管和MOS管应该能实现,但是不知道电路如何搭出来,希望大神能指点下思路。

感谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1109793 发表于 2024-7-15 13:24 | 只看该作者
用AD功能可以不
回复

使用道具 举报

板凳
ID:624769 发表于 2024-7-15 13:27 | 只看该作者
目前大多数 单片机的 IO口 会有个模式  叫  高阻态模式, 既不输出高电平,也不输出低电平。
回复

使用道具 举报

地板
ID:1108479 发表于 2024-7-15 13:58 | 只看该作者
188610329 发表于 2024-7-15 13:27
目前大多数 单片机的 IO口 会有个模式  叫  高阻态模式, 既不输出高电平,也不输出低电平。

我用的是STM32, STM32是把GPIO设置为输入才会有读高电平,低电平,以及悬空输入的功能。但我这个是要STM32 GPIO输出给芯片A
回复

使用道具 举报

5#
ID:1012735 发表于 2024-7-15 14:06 | 只看该作者
接个继电器行不行,其它引脚控制这个继电器开合
回复

使用道具 举报

6#
ID:344848 发表于 2024-7-15 14:28 | 只看该作者
74LS373
回复

使用道具 举报

7#
ID:624769 发表于 2024-7-15 14:31 | 只看该作者
coolaiMCU 发表于 2024-7-15 13:58
我用的是STM32, STM32是把GPIO设置为输入才会有读高电平,低电平,以及悬空输入的功能。但我这个是要STM3 ...

你单片机 设置为了输出,对于芯片A来说, 是不是就是“高阻态”?是不是就是相当于“悬空”?
回复

使用道具 举报

8#
ID:1129021 发表于 2024-7-15 16:41 | 只看该作者
GPIO引脚实现“断开”的功能,可以将该引脚配置为高阻态,或输入模式。在高阻态时,GPIO引脚既不会输出高电平也不会输出低电平,等效于断开状态。
回复

使用道具 举报

9#
ID:1129021 发表于 2024-7-15 16:43 | 只看该作者
GPIO引脚实现“断开”的功能,可以将该引脚配置为高阻态或输入模式。在高阻态时,GPIO引脚既不会输出高电平也不会输出低电平,等效于断开状态。
回复

使用道具 举报

10#
ID:1129021 发表于 2024-7-15 16:43 | 只看该作者
#include "stm32f4xx.h"  // 根据使用的单片机型号选择相应的头文件

void setup() {
    // GPIO引脚初始化
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;  // 使能GPIOA时钟
    GPIOA->MODER &= ~GPIO_MODER_MODER5;   // 先清除配置(假设使用PA5)
}

void setHigh() {
    GPIOA->MODER |= GPIO_MODER_MODER5_0;  // 设置为输出模式
    GPIOA->ODR |= GPIO_ODR_ODR_5;         // 输出高电平
}

void setLow() {
    GPIOA->MODER |= GPIO_MODER_MODER5_0;  // 设置为输出模式
    GPIOA->ODR &= ~GPIO_ODR_ODR_5;        // 输出低电平
}

void setHighZ() {
    GPIOA->MODER &= ~GPIO_MODER_MODER5;   // 设置为输入模式(高阻态)
}

int main() {
    setup();

    while(1) {
        setHigh();    // 输出高电平
        // 延时...
        setLow();     // 输出低电平
        // 延时...
        setHighZ();   // 进入高阻态
        // 延时...
    }
}
回复

使用道具 举报

11#
ID:1109793 发表于 2024-7-15 17:47 | 只看该作者
楼主的意思是要识别三种输入状态,高,低,悬空。那么悬空读进来的大概率是不确定的信号了。你看这样行不行,把电路中的交流信号比如变压器前边的信号用一个例如1MΩ的电阻接到这个脚上面。这样读到持续20MS的1就是高,读到20MS的0就是低,两种都没有就是悬空的。
回复

使用道具 举报

12#
ID:341045 发表于 2024-7-15 20:58 | 只看该作者
有高阻态的单片机直接一个脚连A即可(输出高低置管脚推挽输出然后输出1或0即可, 要输出高阻,置管脚高阻输入即可), 如果没高阻态单片机, 要用2个IO脚才能实现,  一个IO脚控制上臂PNP三极管(或P沟场效应管), IO输出0时导通输出高, 另一个IO脚控制下臂NPN三极管(或N沟场效应管), IO输出1时导通到地. 2个管子的C极(或D极)连在一起作输出. 00输出高, 11输出低, 01(二个管子都不导通高阻), 10(二个管子都导通短路)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表