找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC单片机IO引脚驱动不了光耦PC817的原因及解决(带PC817参数及驱...

[复制链接]
跳转到指定楼层
楼主
这是一个单片机通过光耦来信号隔离,驱动外部负载的电路。单片机为STC15系列,光耦为PC817,如图1,光耦的阳极输入端接到单片机的P20-P23引脚,光耦的输出DJ1-DJ4接到外部电路。
但是在改变P20的电平时却出现了问题,并不能改变DJ1的电平,怎么回事呢?

1、是限流电阻的问题吗?
先看看光耦的参数表。


由图2和图3可知,PC817输入侧的最大允许电流为50mA, 并且只需让输入侧电流大于3.2mA就能让光耦工作。
  由图 4可知,光耦输入侧光电二极管的压降为1.2V,接到5V单片机后,一般需加限流电阻,限流电阻最大值R1=(5V-1.2V)/3.2mA=1.18KΩ,限流电阻最小值R2=(5V-1.2V)/50mA=76Ω,那么图 1中选择的限流电阻为660Ω,是合适的。
那么,又是什么原因导致光耦不能被控制呢呢?再看看STC15单片机引脚的参数。
2、STC15单片机P2引脚的参数

看图5,原来,STC15单片机的P2引脚上电默认为准双向口模式,灌电流可达20mA,但是拉电流只有270uA, 那么当P2引脚输出1时,是不可能达到PC817需要的3.2mA的,那么在这个准双向口模式下,不能驱动光耦。
3、该怎么解决呢?
3.1 方法1:设置P20-P23引脚为推挽输出模式
将对应的P20-P23引脚设置为推挽输出模式,那么该引脚的输出电流最大可达20毫安,可满足驱动光耦的要求。
要改变P2引脚的模式只需设置寄存器P2M1, P2M0即可。
3.2 方法2:将光耦输入侧改为灌电流电路

如图 6,将光耦输入侧的阳极接电源正极,阴极接入单片机的引脚,形成灌电流的电路,那么在准双向口的模式下,STC15单片机也能驱动光耦。
当然,可能不止STC15单片机有这个问题,其他也许也有,具体需要查各个单片机的手册。如有单片机、PLC、电路板、控制器/箱、仪器仪表、机电设备或系统、自动化、工控、传感、数据采集、自控系统、控制系统,软件、APP开发设计定制需要,可联系 Q:2531二六3726
修改的原则就是,能动程序就不动电路,毕竟动电路要花钱。
补充说明:
在之前的文章《容易出错!C语言中的外部变量关键词extern可不能随便使用》里,说到的在KEIL中用extern读取变量出错是由于读取时没有分配内存地址这个说法似乎有误,虽然用方法1改变读写顺序也解决了问题,但是变量出错的原因也可能是由于编译器过度优化引起的。
可以试试降低编译器优化等级,或者在出错的变量前加volatile来避免。理论不重要,实践出真知。在此感谢提示。

评分

参与人数 1黑币 +30 收起 理由
wpppmlah + 30 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:654797 发表于 2023-3-31 22:46 | 只看该作者
我买了个STC8G的模块,有时间可以试试这个工能,
回复

使用道具 举报

板凳
ID:654797 发表于 2023-3-31 22:54 | 只看该作者
想用灌电流好像也不用推免呀!直接准双向IO口就行呀
回复

使用道具 举报

地板
ID:1042619 发表于 2023-4-1 17:19 | 只看该作者

回复

使用道具 举报

5#
ID:26723 发表于 2023-4-2 23:04 | 只看该作者
驱动光耦就是点亮LED, 点灯是基本知识。
回复

使用道具 举报

6#
ID:996773 发表于 2023-4-3 13:13 | 只看该作者
不就是拉低io口点个灯么?简单的事情怎么搞这么复杂
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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