找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

  [复制链接]
跳转到指定楼层
楼主
用的是stc8g1k08—sop16,想让16、15、13脚输出几毫安的电流,刚开始我把它们设置成推挽模式,没加上拉电阻,它的电流有56ma,我们总工说太耗电了,然后我把它设置成准双向口,加了上拉电阻,它的电流只有ua,电流太小了不太灵敏,有时候会直接判断成低电平,如果把它设置成开漏输出,然后加个上拉电阻,变成跟准双向口一样的,但是数据手册没写有多少电流,还有没有其它方法呀
#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;
                        }
                }
                }
}




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

使用道具 举报

沙发
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嘞
回复

使用道具 举报

5#
ID:227818 发表于 2024-7-16 16:46 | 只看该作者
对硬件不熟悉,但我还是本能的想到了,IO口设为推挽输出,然后加限流电阻如何?
回复

使用道具 举报

6#
ID:1109793 发表于 2024-7-16 18:21 | 只看该作者
newlined 发表于 2024-7-16 16:46
对硬件不熟悉,但我还是本能的想到了,IO口设为推挽输出,然后加限流电阻如何?

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

使用道具 举报

7#
ID:106977 发表于 2024-7-16 22:07 | 只看该作者
你们的总工太水了!
回复

使用道具 举报

8#
ID:1128898 发表于 2024-7-17 05:36 | 只看该作者
买个模拟输出芯片,io是数字量
回复

使用道具 举报

9#
ID:857072 发表于 2024-7-17 07:44 来自手机 | 只看该作者
不是应该调整上拉电阻的阻值 限制电流大小吗
回复

使用道具 举报

10#
ID:1076567 发表于 2024-7-17 09:08 | 只看该作者
a185980800 发表于 2024-7-17 07:44
不是应该调整上拉电阻的阻值 限制电流大小吗

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

使用道具 举报

11#
ID:1076567 发表于 2024-7-17 09:09 | 只看该作者
xiaobendan001 发表于 2024-7-16 18:21
对啊,推挽,加个电阻,想要多少都行。

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

使用道具 举报

12#
ID:1076567 发表于 2024-7-17 09:13 | 只看该作者
lgwd 发表于 2024-7-16 22:07
你们的总工太水了!

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

使用道具 举报

13#
ID:401564 发表于 2024-7-17 10:00 | 只看该作者
STC单片机目前是没有能调节IO电流的,要调节电流大小,就只能通过加限流电阻来调节
回复

使用道具 举报

14#
ID:276663 发表于 2024-7-17 10:15 | 只看该作者
推挽模式加限流电阻,另外处理器不太建议做输出,手册上说了整个MCU灌电流支持几十mA
回复

使用道具 举报

15#
ID:1076567 发表于 2024-7-17 10:27 | 只看该作者
Y_G_G 发表于 2024-7-17 10:00
STC单片机目前是没有能调节IO电流的,要调节电流大小,就只能通过加限流电阻来调节

嗷嗷好的 感谢
回复

使用道具 举报

16#
ID:1034262 发表于 2024-7-20 11:37 | 只看该作者
推挽输出+串联一个电阻
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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