阡陌 发布的文章

阡陌

CoAP 通信协议

CoAP(Constrained Application Protocol,受限应用协议)是一种计算机协议,专门用于资源受限的物联网设备,具有轻量级、可靠传输和高效数据交换的特点,适用于资源受限的环境。 由于物联网设备的内存和计算能力有限,传统的 HTTP 协议在这些设备上显得过于庞大和复杂。因此,IETF 的 CoRE 工作组提出了基于 REST 架构的 CoAP 协议( RFC 7252)。 CoAP 协议有两个不同的层:消息负载和请求/响应层。消息层处理 UDP 和异步消息,而请求/响应层基于请求/响应消息来管理请求/响应交互。CoAP 消息模型是 CoAP 的最低层,处理端点之间的 UDP 交换消息。每个 CoAP 消息都有一个唯一的 ID,这有助于检测消息重复。CoAP 协议使用两种消息:确认消息和不可确认的消息。确认消息是可靠消息,客户端可以使用这种消息确保消息将到达服务器。而不可确认的消息则不需要服务器确认。 协议特点 CoAP 协议网络传输层由 TCP 改为 UDP,以适应资源受限设备的需要。 它基于 REST 架构,这意味着服务器上的资源地址与互联网中的 URL 格式类似。客户端可以使用类似于 HTTP 的 POST、GET、PUT 和 DELETE 方法来访问服务器,这使得对 HTTP 的请求进行了简化。 CoAP 采用二进制格式,相比之下,HTTP 是文本格式,因此 CoAP 更加紧凑,可以减少传输的数据量。 CoAP 协议轻量化,最小长度仅为 4B,相比之下,一个 HTTP 头部可能达到几十个字节。 CoAP 支持可靠传输、数据重传和块传输,确保数据可靠到达。 CoAP 还支持 IP 多播,这意味着可以同时向多个设备发送请求。 CoAP 采用非长连接通信,适用于低功耗物联网场景。这与 TCP 的机制类似,对方必须确认收到消息,以实现可靠的消息传输。 消息类型 CoAP 协议有 4 种消息类型:CON、NON、ACK、RST CON:需要被确认的请求,如果 CON 请求被发送,那么对方必须做出响应。 NON:不需要被确认的请求,如果 NON 请求被发送,那么对方不必做出回应。这适用于消息会重复频繁的发送,丢包不影响正常操作。 ACK:应答消息,对应的是 CON 消息的应答。 RST:复位消息,可靠传输时候接收的消息不认识或错误时,不能回 ACK 消息,必须回 RST 消息。 消息格式 消息头 必备,固定 4 个 byte。 Ver:2 bit,版本信息,当前为 0x01。 T: 2 bit, 消息类型,包括 CON, NON, ACK, RST 这 4 种。 TKL:4 bit,token 长度, 当前支持 0 ~ 8 B 长度,其他长度保留将来扩展用。 Code:8 bit,分成前 3 bit(0 ~ 7)和后 5 bit(0 ~ 31),前 3 bit 代表类型。 0.00 Indicates an Empty message 0.01-0.31 Indicates a request 1.00-1.31 Reserved 2.00-5.31 Indicates a response. 6.00-7.31 Reserved Message ID:16 bit, 代表消息 MID,每个消息都有一个 ID ,重发的消息 MID 不变。在一次会话中 ID 总是保持不变。但在这个会话之后该 ID 会被回收利用。 token 可选,用于将响应与请求匹配。 token 值为 0 到 8 字节的序列。每个请求都带有一个客户端生成的 token, 服务器在任何结果响应中都必须对其进行回应。token 类似消息 ID,用以标记消息的唯一性。token 还是消息安全性的一个设置,使用全 8 字节的随机数,使伪造的报文无法获得验证通过。标记是 ID 的另一种表现。 option 可选,0 个或者多个。请求消息与回应消息都可以有零到多个 options。 主要用于描述请求或者响应对应的各个属性,类似参数或者特征描述,比如是否用到代理服务器,目的主机的端口等。CoAP 选项类似于 HTTP 请求头,它包括 CoAP 消息本身,例如 CoAP 端口号,CoAP 主机和 CoAP 查询字符串等。 payload 可选。实际携带数据内容, 若有, 前面加 payload 标识符 “0xFF”,如果没有 payload 标识符,那么就代表这是一个 0 长度的 payload。如果存在 payload 标识符但其后跟随的是 0 长度的 payload,那么必须当作消息格式错误处理。 请求方法(requests) 0.01 GET 方法——用于获得某资源 0.02 POST 方法——用于创建某资源 0.03 PUT 方法——用于更新某资源 0.04 DELETE 方法——用于删除某资源 URI 一个 CoAP 资源可以被一个 URI(Uniform Resource Identifier,统一资源标识符)所描述,例如一个设备可以测量温度,那么这个温度传感器的 URI 被描述为:coap://machine.address/sensors/temperature CoAP 的 URL 和 HTTP 的有很相似的地方,开头是 “coap” 对应 “http” 或者 “coaps” 对应 “https”。coap 默认端口 UDP 5683,coaps 默认端口是 UDP 5684。默认端口号可以省略。 规则与 http 的 URL 是一样的,比如不区分大小写等。 注:URL(Uniform Resource Locator,统一资源定位器)是一种特定的 URI,这种 URI 还含有如何获取资源的信息(例如 http、coap 等)。 安全性 CoAP 的安全性是用 DTLS 加密实现的。DTLS 的实现需要的资源和带宽较多,如果是资源非常少的终端和极有限的带宽下可能会跑不起来。DTLS 仅仅在单播情况下适用。 通信过程 上面以 GET 流程为例子,有没有发现,其实跟 HTTP 相类似。 Client 发起请求,类型是 CON,0.01 代表 GET 请求,MID 是请求消息 ID,URI-Path:temperature 代表请求温度。例如: coap://example.com:5683/~sensors/temperature Server 收到请求后,就会返回应答 2.05, MID 保持不变,并且返回具体参数 payload 温度 22.3 C 双向收发 基于消息的双向通信(M2M),CoAP Client 与 CoAP Server 双方都可以独立向对方发送请求。双方可当 client 或者 server 角色。传统的 HTTP 协议是主机与 web 服务器之间是单向通信的(用 websocket 除外)。而 CoAP 系统中 CoAP Client 与CoAP Server 是可以双向通信,双方都可以主动向对方发送请求。这也是 CoAP 协议解决物联网场景问题的关键所在。 订阅与发布 MQTT 协议是基于订阅与发布模型的,CoAP 通过扩展协议方式也简单的实现了订阅与发布模型。 当一个客户端需要定期去查询服务器端某个资源的最新状态时,订阅与发布模型就非常有用,不用这个模型,客户端就要周期的不断发送请求到服务器端。 模型框架: 关键概念: 主题 Subject: 代表 CoAP 的某个资源 观察者 Observer:代表对某个 CoAP 资源感兴趣的客户端 登记 Registration: 观察者需要向服务器登记感兴趣的主题 通知 Notification:当观察者感兴趣的主题发生内容变化时,服务器主动通知到观察者 观察协议在 CoAP 基础协议上增加了 1 个 Observe option, 其值为整数,通过该 options 来实现订阅与发布模型管理 在 GET 请求消息里面: oberser value 为 0: 代表向服务器端订阅一个主题。 oberser value 为 1: 代表向服务器端移除一个已订阅主题。 在 notification 消息里面: oberser value 代表 主题发生变化时,检测到顺序,以便客户端可以知道状态变化的先后。 客户端向服务器端登记感兴趣的主题 /temperature 当 temperature 发生状态改变时,服务器端主动通知到客户端。 客户端根据 token,就可以与之前订阅主题关联起来,以此确定是哪个主题订阅的。 一个 CoAP Client 可以分次向 CoAP Server 订阅多个资源主题。 一个 CoAP Server 上的主题可以被多个观察者(CoAP Client)订阅。 这样就通过了 CoAP Server 实现了 CoAP Client 之间直接数据转发通信。 可以通过灵活设计服务器上的资源链接,来实现对某个主题的条件订阅(类似触发器或者阀值等)。 比如订阅主题是: coap://server/temperature/critical?above=42 当温度超过 42,CoAP Server 需要发送通...

GitHub Markdown 提示框样式(Note/Tip/Warning)写法

在 GitHub 的 Markdown(GFM)中,实现提示、警告等醒目提示框非常简单,它基于块引用(Blockquote)语法进行了扩展。你只需要掌握一个固定的格式即可。 基本语法格式 核心格式是在块引用的第一行使用特殊标记 [!TYPE],后续内容正常以 >开头: > [!TYPE] > 这里放你的提示内容,支持**加粗**、*斜体*、`代码`、列表等大部分 Markdown 语法。 注意:[!TYPE] 中的类型关键字(如 NOTE, WARNING)必须大写。 支持的 5 种类型 GitHub 目前官方支持以下 5 种提示类型,它们在渲染时会带有不同的颜色、图标和标题: [!NOTE](蓝色) 用途:补充说明,用户快速浏览时也应注意的有用信息。 [!TIP](绿色) 用途:建议或小贴士,帮助用户更轻松或更好地完成操作。 [!IMPORTANT](紫) 用途:用户达成目标必须知晓的关键信息。 [!WARNING](黄色/橙色) 用途:急需用户注意的内容,避免潜在问题或风险。 [!CAUTION](红色) 用途:强烈警告,提示某些动作可能导致负面后果(如数据丢失)。 代码示例: > [!NOTE] > 这是一条补充信息。 > [!TIP] > 这是一个小技巧。 > [!IMPORTANT] > 这是关键信息。 > [!WARNING] > 警告,存在潜在风险。 > [!CAUTION] > 危险操作,请极其小心。 解析效果(取决于解释器): Note 这是一条补充信息。 Tip 这是一个小技巧。 Important 这是关键信息。 Warning 警告,存在潜在风险。 Caution 危险操作,请极其小心。 使用注意事项 适用范围:支持在 README.md、.md文件、Issues、Pull Requests、Discussions、Gists 中渲染。 内容支持:提示框内部支持完整的 Markdown 语法,包括段落、列表、代码块、图片等。 使用建议:官方建议仅在对用户成功至关重要时才使用,且尽量限制每篇文章 1 - 2 个,避免连续堆叠使用,防止读者视觉疲劳。 兼容性:这是 GitHub 的扩展语法。在不支持该特性的其他 Markdown 渲染器(如某些旧版编辑器)中,它会降级显示为普通的块引用,不会破坏文档结构...

告别 UUID?试试这个更优雅的分布式 ID 方案:ULID

在分布式系统和数据库设计中,“如何生成一个唯一的ID” 一直是个经典话题。我们最熟悉的可能是 UUID,但它也有不少槽点:无法排序、存储占用大、可读性差。今天给大家介绍一个非常有潜力的替代品 —— ULID(Universally Unique Lexicographically Sortable Identifier)。 什么是 ULID? ULID 的全称是 通用唯一词典分类标识符。简单来说,它是一种既能保证全局唯一,又天然支持按时间排序 的标识符。 它的设计目标很明确: 全局唯一:不怕分布式环境下的冲突 时间有序:生成顺序 = 时间顺序 紧凑可读:比 UUID 更短、更友好 ULID 长什么样? 一个标准的 ULID 看起来是这样的: 01H4Z7X8J7F9VYMQK7Z9G9Z9Z9 它是基于 Crockford's Base32 编码的(包含 0–9和 A–Z,去除了 I、L、O、U 以避免混淆),生成的字符串通常统一显示为大写,解码时大小写不敏感。 ULID 的结构 ULID 一共 128 位(16 字节),分为两部分: 部分 长度 作用 时间戳 48 位 Unix 毫秒时间(1970–2088) 随机数 80 位 保证唯一性 ┌─────────────── Timestamp (48 bits) ───────────────┐ ┌───────────────────────────────────────────────────┐ │ Time │ Randomness │ └───────────────────────────────────────────────────┘ 为什么要选 ULID? 1、全局唯一性 ULID 结合了时间 + 随机数,即使在高并发的分布式环境中,碰撞概率也极低。 2、天生支持排序 因为时间戳在最前面,ULID 天然按时间递增。你可以直观地看到,随着时间推移,前面的字符会变大: 01H4Z...(较早) 01H5A...(较晚) 这意味着: 数据库按主键排序 ≈ 按时间排序 不需要额外的时间字段 查询更快,索引更高效 Tip 不要试图在 Windows 11 的资源管理器里按文件名排序来验证 ULID 文件名的时间排序,因为该资源管理器目前只支持自然排序。可以尝试换其他资源管理器或在命令行中列出文件。 3、比 UUID 更紧凑 类型 长度 示例 UUID 36 字符 550e8400-e29b-41d4-a716-446655440000 ULID 26 字符 01H4Z7X8J7F9VYMQK7Z9G9Z9Z9 更短 不含 - 更适合 URL / 文件名 4、高性能 & 去中心化 ULID 的生成: 不需要中心服务器 不需要锁 本地即可生成,非常适合微服务、消息队列、日志系统 5、跨平台支持 主流语言几乎都有成熟实现:Java / Go / Python / Rust / JavaScript。 什么时候不该用 ULID? 虽然 ULID 很香,但并不是万能药。以下场景请慎重考虑: ❌ 需要完全随机且无规律的 ID 如果你的业务要求 ID 不能泄露任何时间信息(例如用于订单号防止被爬虫推测销量),ULID 的前缀时间戳可能会暴露生成频率和时间。这种情况下,UUIDv4 这种完全随机的方案更安全。 ❌ 需要绝对连续且无空洞的 ID ULID 是“趋势递增”,不是“绝对连续”。由于随机部分的存在,它会有空洞。如果你的系统要求 ID 必须严格连续(1, 2, 3...),ULID 不适合。 ❌ 存储空间极度敏感 虽然比 UUID 短,但如果是海量数据且不需要排序,单纯的整型自增 ID(Int/Long)仍然是最省空间的。 ULID 适合用在哪些场景? 日志系统 按时间生成、天然有序,非常适合做日志追踪 ID。 分布式系统 不依赖数据库自增 ID,避免单点瓶颈。 数据库主键 B+Tree 索引友好,写入性能更好。 消息队列 消息 ID 自带时间顺序,消费端更容易处理。 总结 ULID 是一个兼顾“唯一性、时间排序、紧凑性”的现代分布式 ID 方案。如果你正在寻找一个比 UUID 更优雅、比雪花算法更简单的方案,不妨试试 ULI...

《趣味纸电路》系列制作视频

可在下列视频平台观看: 1、抖音号 50553954982 或者直接复制下列网址在浏览器中观看: 01 交通红绿灯 抖音:https://v.douyin.com/PZHu_R08PdQ/ 02 洗衣机 抖音:https://v.douyin.com/JMdPZedAT7U/ 03 魔法城堡 抖音:https://v.douyin.com/nuf31ZfTZOA/ 04 警车 抖音:https://v.douyin.com/0_ceZVxJBDk/ 05 纸风车 抖音:https://v.douyin.com/Nj_tFuX6rPw/ 06 酷科学 抖音:https://v.douyin.com/2z5n_4rm1ww/ 08 小台灯 抖音:https://v.douyin.com/XEpjgyaSyFU/ 10 神奇灯泡 抖音:https://v.douyin.com/LVyLJvuZ1r...

色环电阻色码对照表

插件电阻(轴向封装电阻)使用色环表达电阻的阻值,常见的有4色环电阻(例如一些常见的碳膜电阻)和5色环电阻(例如相对于碳膜电阻精度更高的金属膜电阻)。 不同颜色的环用于表达有效数字、倍率、误差等信息。 色环方向识别方法 方法1:通过色环间距判断 通常最后一环(误差色环)与前一环的间距应该比其他色环的间距大一些,但一些厂商制造的电阻的这一特征可能不是很明显(尤其是色环多封装小的情况下),这时就要使用其他方法来分辨哪个环是第一环。 方法2:找误差环法,快速找出误差环 误差环是末尾环(最右边的色环)。常用的误差环色:棕色、金色、银色。特别是金色、银色、底色,不会用于第一环和第二环,所以只要有金色、银色、底色环,就基本认定末尾环的位置。 方法3:读标称值法,读值是否为标称阻值 仅靠色环间距无法判定方向,可尝试读值,与标称阻值进行对比,与标称值不相符的为错误方向。例如:色序:棕、黑、黑、黄、棕,其值为:100 × 10000 Ω = 1 MΩ 误差为 1%,属于正常标称值,若反色序:棕、黄、黑、黑、棕,其值为 140 × 1 Ω = 140 Ω,误差为 1%,属于非正常标称值。 常用电阻阻值表 电阻标准由 IEC(国际电工委员会)制定,标准文件为 IEC60063 和 EN60115-2。电子元器件厂商为了便于元件规格的管理和选用,同时也为了使电阻的规格不至太多,采用了统一的标准组成的元件的数值。电阻的标称阻值分为 E6、E12、E24、E48、E96、E192 六大系列,分别使用于允许偏差为 ±20、± 10%、±5%、±2%、±1%、±0.5% 的电阻器。其中以 E24 和 E96 两个系列为最常用。这里的 “E” 表示“指数间距”(Exponential Spacing),它指明了电阻的基准值(有效数字),计算公式如下: $$ R=\left(\sqrt[n]{10}\right)^m $$ 指数 n 的值是 E24,E96 等标准中的数值 24 和 96,m 的取值范围为 0 ~ (n - 1)。所以,E24 有 24 个基准值,E96 有 96 个基准值。有了这些基准值,再乘以 10 的 x 次方,就可以得到各种各样的电阻值了。 这里列出 E24 系列标称阻值...

让耳机线“打两份工”

我们可以将天线想象成麦克斯韦方程所定义的自由空间中的电磁能与限制在导体或波导中的射频电压和电流之间的双向换能器。但工程师们总是在尝试获得某个单一路径或互联方式,以服务于另一种不相干的功能。典型例子如,将非屏蔽耳机导线重复用作 FM 天线。 最早的便携式 AM/FM 收音机使用两根天线:一根是缠绕在铁氧体磁芯上的内置长导线,用于较低频率的 AM 波段(550-1600 千赫 (kHz));一根是长约一到两米的“鞭状”天线,用于 FM 波段(88 至 108 MHz)。随着无线电变得越来越小、越便携,有些厂家假定用户使用耳机或有线耳塞,则完全取消了内置扬声器。 这样做也实现了一个简单取消 FM 鞭状天线的技术,即简单地重复利用无线电上的耳机插孔来实现天线功能。当时这种方法也扩展到了 MP3 播放器上,因为 MP3 也带 FM 无线电功能(图 1)。这项技术目前仍为许多带 FM 无线电功能的电子设备的设计师所采用。 图 1:SanDisk Clip Jam MP3 播放器的尺寸仅为 55 mm × 35 mm × 10 mm,一次充电可工作 20 小时;其内置的 FM 无线电使用必备的耳机线作为天线。 基本非屏蔽耳机电缆包含三根导线。左右声道由耳机放大器驱动,将信号传递到左右音频线上,而公用音频线则用作音频的返回路径。同样的导线也可以起到 FM 天线的作用,使用一根导线阻止射频信号接地,同时仍让音频信号有一个接地回路。图 2 中所示的电路是围绕 Skyworks Solutions Si47xx AM/FM 接收器而构建的。 图 2:这一基本布置能够让耳机电线起到 FM 天线作用,只需少数几个附加无源元件即可实现。 用一个小电容器就可以让天线射频传递到接收器前端,同时阻断天线输入的音频信号。铁氧体磁珠在耳机放大器和耳机之间提供一个低阻抗的音频路径和一个高阻抗的射频路径。 实际电路要复杂一些,需要一些额外的元件来进行保护和放电,并确保信号只传到其应该去的地方。图 3 中的设计使用了专门为这个功能配置的 Texas Instruments LM4910 耳机功率放大器,同时附带任何需要的天线信号连接/隔离电路。 图 3:这个 LM4910 耳机放大器通过配备一些外加无源元件,可将耳机引线用作 FM 天线。 三线、左/右音频耳机插孔接收来自 LM4910 的放大音频信号,而由耳机屏蔽层/地线拾取的分离 FM 信号则通过一个 100 皮法拉 (pF) 电容器输送到接收器前端。只要任何静电放电 (ESD) 超出耳机放大器和接收器的额定值,二极管 D1、D2 和 D3 就会提供保护。 这项技术看起来不应该只限于 FM 波段的广播信号(88 至 108 MHz),应该对 AM 无线电(550 于 1550 kHz)也有效。理论上,只要耳机线长度合适,对 AM 波段也有用。它之所以适用于 FM 频段,是因为长度在一米到一点五米之间的耳机线大约是广播频段 FM 信号波长的一半,因此可以在该频段产生效果和作用。对于 AM 波段,耳机线需要长到 100 米才有用,显然这是不切实际的。 结语 工程师们一直在寻求利用像电线这样可作多用途使用的资源。将耳机线用作 FM 天线就是一个绝佳实例。综上所述,只要配置一个合适的功率放大器、少数几个控制信号路径的无源元件和以及用于保护的二极管即可实现这种功能。 参考文献 Skyworks Solutions,AN383,“Si47XX 天线、原理图、布局和设计指...

GitLab 备份与恢复

备份 执行备份命令: sudo gitlab-backup create #如果是使用Docker部署的: sudo docker exec -t <container name> gitlab-backup create 备份完成后会生成备份文件:<backup-id>_gitlab_backup.tar,其中的 <backup-id> 包含了备份时间、GitLab 版本等信息,例如: 1493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar 默认情况下备份的存储位置是:/var/opt/gitlab/backups 此外还应单独备份以下文件: /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json /etc/gitlab/ssl /etc/gitlab/trusted-certs 自动删除旧备份 如果想在备份时自动删除旧备份文件,可以修改备份文件的生存期,编辑 /etc/gitlab/gitlab.rb: ## Limit backup lifetime to 7 days - 604800 seconds gitlab_rails['backup_keep_time'] = 604800 修改配置文件后需执行重新配置命令才能生效: sudo gitlab-ctl reconfigure 恢复 从备份文件恢复 GitLab 需要一个可运行的实例,可以重新安装一个全新的程序,但要选用与备份文件一致的版本。恢复时原有数据会被清除! 首先应该手动恢复: /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json /etc/gitlab/ssl /etc/gitlab/trusted-certs 重新配置,执行: sudo gitlab-ctl reconfigure 将要恢复的备份文件拷贝至: /var/opt/gitlab/backups/(如果没改备份存储路径的话) 停止连接到数据库的进程: sudo gitlab-ctl stop puma sudo gitlab-ctl stop sidekiq sudo gitlab-ctl status #再次确认他们已被关闭 执行恢复命令: sudo gitlab-backup restore BACKUP=<backup-id> 例如: sudo gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce 恢复完成后重新启动并检查 GitLab: sudo gitlab-ctl restart sudo gitlab-rake gitlab:check SANITIZE=true 验证数据库的值是否可以被解密,尤其是在还原了/etc/gitlab/gitlab-secrets.json或更换了服务器: sudo gitlab-rake gitlab:doctor:secrets 为了确保恢复的可靠,还可以对上传文件做完整性检验: sudo gitlab-rake gitlab:artifacts:check sudo gitlab-rake gitlab:lfs:check sudo gitlab-rake gitlab:uploads:chec...

忘记 GitLab 管理员密码后如何修改密码

1、如果 GitLab 是用 Docker 安装的,先进入容器: docker exec -it gitlab bash 2、进入 Rails 控制台: gitlab-rails console 输出: -------------------------------------------------------------------------------- Ruby: ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux] GitLab: 15.2.2-ee (4420a6308aa) EE GitLab Shell: 14.9.0 PostgreSQL: 13.6 -----------------------------------------------------------[ booted in 10s ] Loading production environment (Rails 6.1.4.7) irb(main):001:0> 3、查找到管理员对象,以 root 为例: user = User.find_by(username: 'root') pp user.attributes #打印对象的信息,确认一下 4、修改密码: user.password = 'new password' user.save quit 接下来就可以用新密码登录...

晶体三极管的三种工作状态

晶体三极管的工作状态主要有三种:截止状态、放大状态和饱和状态。我们通常用截止和饱和状态实现开关控制,用放大状态来放大微弱信号(如音频信号)。 1、截止状态 三极管发射结(基极与发射极间的 PN 结)所加正向偏置电压小于导通电压 $U_{on}$(硅管0.7V,锗管0.3V)或是加反向偏置电压: NPN:$U_{be} < U_{on}$ PNP:$U_{be} > -U_{on}$ 此时,$I_b = 0$,$I_c = 0$,CE 间的阻值无穷大,相当于开关断路。 2、放大状态 三极管发射结正向偏置电压大于或等于导通电压 $U_{on}$(硅管 0.7V,锗管 0.3V),并且集电结(基极与集电极间的 PN 结)反偏。 NPN:$U_{be} ≥ U_{on}$,$U_{cb} > 0$ PNP:$U_{be} ≤ -U_{on}$,$U_{cb} < 0$ $I_c$ 不随 $U_{ce}$ 的变化而改变,在 $I_b$ 一定时,$I_c$ 保持恒定,此时可等效为恒流源。 3、饱和状态 三极管发射结正向偏置电压大于或等于导通电压 $U_{on}$(硅管 0.7V,锗管 0.3V),并且集电结正偏。 NPN:$U_{be} ≥ U_{on}$,$U_{cb} ≤ 0$ PNP:$U_{be} ≤ -U_{on}$,$U_{cb} ≥ 0$ $I_c$ 随 $U_{ce}$ 的增大而增大,不受 $I_b$ 的控制。在饱和状态有一个明显的特征:$I_c < β * I_b$。 饱和状态时的 $U_{ce}$ 叫饱和压降 $U_{ces}$,晶体管手册上一般列出在某个条件下的饱和压降 $U_{ces}$,如 3DG130C 在 $I_c$ = 300mA 时, $U_{ces}$ ≤ 0.8V。一般 NPN 型小功率硅管的 $U_{ces}$ 取 0.3V,PNP 锗管取 -0.1V,大功率硅管在大电流工作时, $U_{ces}$ 将大于 1V。 此时 CE 间的压降较小,相当于开关闭合。 值得注意的是,NPN 三极管 与 PNP 三极管的输入输出特性曲线分别在第一和第三象限,也就是说 PNP 三极管的电压条件反向后与 NPN 三极管是一致...

PN 结正向偏置和反向偏置的原理

正向偏置: 当外加直流电压使 PN 结 P 型半导体的一端电位高于 N 型半导体一端的电位时,称为正偏。此时,外加电场的方向与 PN 结产生的内电场方向相反,削弱了内电场,使 PN 结变薄,有利于两区多数载流子向对方扩散,形成正向电流。 正向偏置使 PN 结的电阻降低,呈现出低阻、导通状态。 反向偏置: 当外加直流电压使 PN 结 N 型半导体的一端电位高于 P 型半导体一端的电位时,称为反偏。此时,外加电场的方向与 PN 结产生的内电场方向一致,因而加强了内电场,使 PN 结加宽,阻碍了多子的扩散运动。 反向偏置使 PN 结的电阻增加,呈现出高阻、截止状态。由于少子浓度主要与温度相关,因此反向电流与反向电压几乎无关。...