找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 915|回复: 16
收起左侧

请教大佬,stc单片机io口怎么输出几毫安的电流

  [复制链接]
ID:1076567 发表于 2024-7-16 09:02 | 显示全部楼层 |阅读模式
用的是stc8g1k08—sop16,想让16、15、13脚输出几毫安的电流,刚开始我把它们设置成推挽模式,没加上拉电阻,它的电流有56ma,我们总工说太耗电了,然后我把它设置成准双向口,加了上拉电阻,它的电流只有ua,电流太小了不太灵敏,有时候会直接判断成低电平,如果把它设置成开漏输出,然后加个上拉电阻,变成跟准双向口一样的,但是数据手册没写有多少电流,还有没有其它方法呀 stc8g1k08a-sop16.png
05b6894309bc9edb272b1a898f3a161.png #include "stc8g.h"


sbit KeyA = P3^3;         //按键A连接引脚12
sbit KeyB = P3^2;         //按键B连接引脚11
sbit button1 = P3^6;      //相位开关F连接引脚15
sbit button2 = P3^7;      //相位开关E连接引脚16
sbit BI = P1^1;           //电机后退输入D连接引脚2
sbit FI = P1^0;           //电机前进输入C连接引脚1
sbit FAN = P5^4;          //风扇G连接引脚引脚5
sbit lock = P3^5;         //锁扣I连接引脚14
sbit S1 = P3^4;           //锁扣开关S1连接引脚13

bit KeyAFlag = 0;         //按键A标志位
bit KeyBFlag = 0;         //按键B标志位
bit openFlag = 1;
bit button1Flag = 0;
bit button2Flag = 0;

#define MAIN_Fosc                22118400L        //定义主时钟


void delay_ms(unsigned char ms)    //延时函数
{
        unsigned int i;
        do{
                i = MAIN_Fosc / 10000;
                while(--i);
        }while(--ms);
}

void main()
{
            P1M0 = 0x03; P1M1 = 0x00;//1 2为推挽输出
      P3M0 = 0xd0; P3M1 = 0xdc; //11脚和12脚为高阻输入,16 15 13为开漏输出,其余为准双向口
      P5M0 = 0x10; P5M1 = 0x00;    //5为推挽输出
          if(openFlag==1)
                {
                        openFlag = 0;
            BI = 0;
                        FI = 0;
                        FAN = 0;
                        lock = 0;
                        KeyA = 0;
                        KeyB = 0;
                        KeyAFlag = 1;
                        KeyBFlag = 1;
                }
        
                while(1)
                {
                        if(KeyA==1)
                        {
                                KeyBFlag = 1;
                                if(KeyAFlag==1)
                                {                                                                        
                                        button1Flag =1;
                                        KeyAFlag = 0;
                                        lock = 1;
                                        FI = 1;
                                        BI = 0;
                                        FAN = 0;
                                }
                        }
                        
                        if(KeyB==1)
                        {
                                KeyAFlag = 1;                                
                                if(KeyBFlag==1)
                                {
                                        button2Flag = 1;
                                        KeyBFlag = 0;
                                        FAN = 0;
                                        FI = 0;
                                        BI = 1;
                                }
                        }        

        if(button1==0)
        {               
                if(button1Flag==1)
                {
                        button1Flag = 0;
                        FI = 0;
                        BI = 0;
                        FAN = 1;
                }
        }
        
        if(button2==0)                                    
        {
                if(button2Flag==1)
                {
                        button2Flag = 0;
                        FI = 0;
                        BI = 0;
                        FAN = 0;
                }
        }
        
                if(S1==0)
                {
                        delay_ms(10);
                        if(S1==0)
                        {
                                lock = 0;
                        }
                }
                }
}




回复

使用道具 举报

ID:277550 发表于 2024-7-16 13:09 | 显示全部楼层
单片机是数字信号,,,,用三极管呗
回复

使用道具 举报

ID:136485 发表于 2024-7-16 14:42 | 显示全部楼层
加个限流电阻不就行了
回复

使用道具 举报

ID:1076567 发表于 2024-7-16 16:32 | 显示全部楼层
devcang 发表于 2024-7-16 13:09
单片机是数字信号,,,,用三极管呗

准双向口模式的时候用三极管放大电流吗,但是我们总工说ua太小了,抗干扰能力差,手一碰它就会自己启动,有没有什么能直接让单片机输出ma嘞
回复

使用道具 举报

ID:227818 发表于 2024-7-16 16:46 | 显示全部楼层
对硬件不熟悉,但我还是本能的想到了,IO口设为推挽输出,然后加限流电阻如何?
回复

使用道具 举报

ID:1109793 发表于 2024-7-16 18:21 | 显示全部楼层
newlined 发表于 2024-7-16 16:46
对硬件不熟悉,但我还是本能的想到了,IO口设为推挽输出,然后加限流电阻如何?

对啊,推挽,加个电阻,想要多少都行。
回复

使用道具 举报

ID:106977 发表于 2024-7-16 22:07 | 显示全部楼层
你们的总工太水了!
回复

使用道具 举报

ID:1128898 发表于 2024-7-17 05:36 | 显示全部楼层
买个模拟输出芯片,io是数字量
回复

使用道具 举报

ID:857072 发表于 2024-7-17 07:44 来自手机 | 显示全部楼层
不是应该调整上拉电阻的阻值 限制电流大小吗
回复

使用道具 举报

ID:1076567 发表于 2024-7-17 09:08 | 显示全部楼层
a185980800 发表于 2024-7-17 07:44
不是应该调整上拉电阻的阻值 限制电流大小吗

他当时调过上拉电阻的阻值,没什么变化,而且串了一个1k的电阻,电压才变了零点几,后面并了一个电容和一个电阻才可以
回复

使用道具 举报

ID:1076567 发表于 2024-7-17 09:09 | 显示全部楼层
xiaobendan001 发表于 2024-7-16 18:21
对啊,推挽,加个电阻,想要多少都行。

加过电阻,但是没什么变化,后面并了电容和一个电阻才行
回复

使用道具 举报

ID:1076567 发表于 2024-7-17 09:13 | 显示全部楼层
lgwd 发表于 2024-7-16 22:07
你们的总工太水了!

没有,我们总工没学过单片机和代码,当时加了限流电阻但是调不了,说是脉冲电流,后面并了一个电容和电阻
回复

使用道具 举报

ID:401564 发表于 2024-7-17 10:00 | 显示全部楼层
STC单片机目前是没有能调节IO电流的,要调节电流大小,就只能通过加限流电阻来调节
回复

使用道具 举报

ID:276663 发表于 2024-7-17 10:15 | 显示全部楼层
推挽模式加限流电阻,另外处理器不太建议做输出,手册上说了整个MCU灌电流支持几十mA
回复

使用道具 举报

ID:1076567 发表于 2024-7-17 10:27 | 显示全部楼层
Y_G_G 发表于 2024-7-17 10:00
STC单片机目前是没有能调节IO电流的,要调节电流大小,就只能通过加限流电阻来调节

嗷嗷好的 感谢
回复

使用道具 举报

ID:1034262 发表于 2024-7-20 11:37 | 显示全部楼层
推挽输出+串联一个电阻
回复

使用道具 举报

ID:965189 发表于 2024-7-21 07:48 来自手机 | 显示全部楼层
要输出mA级的电流,推挽输出就可以了。至少我是这样用的。外行当领导,你又没有说服力。难办。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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