5v 3.3v电平转换电路_5V转3.3V的方法合集

本文详细介绍了5V电源向3.3V系统供电的不同方法,包括LDO稳压器、齐纳二极管、整流二极管和开关稳压器。每种方法都有其优缺点,适用于不同的应用场景。同时,文章还探讨了直接连接、MOSFET转换器、二极管补偿、电压比较器等多种电平转换技巧,以确保不同电压系统间的兼容性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

技巧一:使用LDO稳压器,从5V电源向3.3V系统供电

标准三端线性稳压器的压差通常是 2.0-3.0V。要把 5V 可靠地转换为  3.3V,就不能使用它们。

压差为几百个毫伏的低压降 (Low Dropout, LDO)稳压器,是此类应用的理想选择。图 1-1 是基本LDO  系统的框图,标注了相应的电流。从图中可以看出, LDO 由四个主要部分组成:

1. 导通晶体管

2. 带隙参考源

3. 运算放大器

4. 反馈电阻分压器

在选择 LDO 时,重要的是要知道如何区分各种LDO。器件的静态电流、封装大小和型号是重要的器件参数。根据具体应用来确定各种参数,将会得到最优的设计。

3957932f8f0eeea252f3ab65cc31d796.png

LDO的静态电流IQ是器件空载工作时器件的接地电流 IGND。IGND 是 LDO 用来进行稳压的电流。当IOUT>>IQ 时, LDO 的效率可用输出电压除以输入电压来近似地得到。然而,轻载时,必须将  IQ 计入效率计算中。

具有较低 IQ 的 LDO 其轻载效率较高。轻载效率的提高对于 LDO 性能有负面影响。静态电流较高的 LDO  对于线路和负载的突然变化有更快的响应。

技巧二:采用齐纳二极管的低成本供电系统

这里详细说明了一个采用齐纳二极管的低成本稳压器方案。

6d0a07f865673cb2f08751f21f5c77d1.png

可以用齐纳二极管和电阻做成简单的低成本 3.3V稳压器,如图 2-1  所示。在很多应用中,该电路可以替代 LDO 稳压器并具成本效益。但是,这种稳压器对负载敏感的程度要高于 LDO 稳压器。

另外,它的能效较低,因为 R1 和 D1 始终有功耗。R1 限制流入D1 和 PICmicro® MCU的电流,从而使VDD  保持在允许范围内。由于流经齐纳二极管的电流变化时,二极管的反向电压也将发生改变,所以需要仔细考虑 R1 的值。

R1 的选择依据是:在最大负载时——通常是在PICmicro MCU  运行且驱动其输出为高电平时——R1上的电压降要足够低从而使PICmicro MCU有足以维持工作所需的电压。同时,在最小负载时——通常是  PICmicro MCU 复位时——VDD 不超过齐纳二极管的额定功率,也不超过 PICmicro MCU的最大 VDD。

技巧三:采用3个整流二极管的更低成本供电系统

2d587ee52e60e27376a5e32aff090cb3.png

图 3-1 详细说明了一个采用 3 个整流二极管的更低成本稳压器方案。

我们也可以把几个常规开关二极管串联起来,用其正向压降来降低进入的 PICmicro MCU 的电压。这甚至比齐纳二极管稳压器的成本还要低。这种设计的电流消耗通常要比使用齐纳二极管的电路低。

所需二极管的数量根据所选用二极管的正向电压而变化。二极管 D1-D3  的电压降是流经这些二极管的电流的函数。连接 R1 是为了避免在负载最小时——通常是 PICmicro MCU  处于复位或休眠状态时——PICmicro MCU VDD 引脚上的电压超过PICmicro MCU 的最大 VDD 值。

根据其他连接至VDD  的电路,可以提高R1 的阻值,甚至也可能完全不需要 R1。二极管 D1-D3 的选择依据是:在最大负载时——通常是 PICmicro MCU  运行且驱动其输出为高电平时——D1-D3 上的电压降要足够低从而能够满足 PICmicro MCU 的最低 VDD 要求。

技巧四:使用开关稳压器,从5V电源向3.3V系统供电

如图 4-1  所示,降压开关稳压器是一种基于电感的转换器,用来把输入电压源降低至幅值较低的输出电压。输出稳压是通过控制 MOSFET Q1  的导通(ON)时间来实现的。

由于 MOSFET 要么处于低阻状态,要么处于高阻状态(分别为 ON  和OFF),因此高输入源电压能够高效率地转换成较低的输出电压。

当 Q1 在这两种状态期间时,通过平衡电感的电压- 时间,可以建立输入和输出电压之间的关系。

fd1440a61042a2132dc703009292a89a.png

对于 MOSFET Q1,有下式:

5d6f030716b1479feea4cf4cfbb71499.png

在选择电感的值时,使电感的最大峰 - 峰纹波电流等于最大负载电流的百分之十的电感值,是个很好的初始选择。

2ccf110f5f814e9267e3f9b22f9183fb.png

在选择输出电容值时,好的初值是:使 LC 滤波器特性阻抗等于负载电阻。这样在满载工作期间如果突然卸掉负载,电压过冲能处于可接受范围之内。

b3540b3a858096c19d11e0d2d00a7b3d.png

在选择二极管 D1 时,应选择额定电流足够大的元件,使之能够承受脉冲周期 (IL)放电期间的电感电流。

<think>好的,用户的问题是关于STM32F103C6在Keil MDK v5.39和Proteus 8.6 SP3环境下,计算delay函数的延时时间以及对LED闪烁频率的影响。系统时钟是8MHz,VDDA和VDD供电配置。我需要分步骤来解决这个问题。 首先,用户提供的代码中有一个delay函数,里面是一个for循环,循环次数是500,000次,每次执行一个__NOP(),也就是空操作指令。需要计算这个循环的总时间,进而得到延时时间。 系统时钟是8MHz,所以每个时钟周期的时间是1/8MHz=0.125微秒。接下来要看每条指令需要多少个时钟周期。__NOP()在Cortex-M3中通常是一个时钟周期。但循环中的其他操作,比如i的递增、比较,以及循环本身的结构,也会消耗时钟周期。 不过,用户提供的代码中,循环体只有__NOP(),但for循环的结构会有额外的指令。比如,i的初始化,每次循环i的自增,以及条件判断。这些指令的执行时间需要考虑进去。不过,在Keil编译器的优化选项下,可能会对循环进行优化,比如将i存储在寄存器中,减少内存访问时间。但如果没有优化,可能每次循环会有更多的指令。 假设用户没有开启编译器优化,那么for循环的每次迭代可能需要多个周期。例如,i的加载、比较、自增,以及跳指令。但具体需要查看反汇编代码才能确定。不过,用户可能没有这方面的信息,所以可能需要做一个估算。 另一种方法是实际测量延时时间。比如,在Proteus中运行仿真,观察LED的闪烁周期,从而计算出延时时间。或者使用Keil的调试功能,通过断点或性能分析工具来测量delay函数执行的时间。 另外,系统时钟配置是否正确也很重要。用户提到系统时钟是8MHz,但STM32F103默认内部RC振荡器是8MHz,但启动时可能使用HSI分频后的时钟,需要确认系统时钟是否确实配置为8MHz。如果系统时钟配置错误,计算的时间也会不准确。 供电配置VDDA和VDD是否影响时钟?一般来说,VDDA是模拟部分的供电,比如ADC,而系统时钟由内部或外部晶振提供,只要电压在正常范围内(2.0-3.6V),不会影响时钟频率。因此供电配置可能不影响计算,除非电压过低导致系统不稳定,但用户的问题中没有提到异常情况,所以可以暂时忽略。 接下来,计算delay函数的延时时间。假设每次循环需要多个周期。例如,假设每次循环的指令包括: - 比较i < 500000:可能需要1-2周期 - i++:1周期 - __NOP():1周期 - 跳指令:1周期 这可能每个循环大约4个周期。但实际可能因编译器的优化而不同。如果优化开启,编译器可能会将循环次数减少,或者展开循环,减少循环开销。但用户可能没有开启优化,或者使用的是默认设置。 假设每个循环迭代需要4个周期,那么总周期数是500,000 * 4 = 2,000,000周期。系统时钟周期时间是0.125微秒,所以总延时时间是2,000,000 * 0.125e-6 = 0.25秒,即250毫秒。这样,每个delay()函数延时250ms,LED的周期是500ms(亮250ms,灭250ms),频率是2Hz。 不过,这个估计可能有误,因为实际的循环次数和指令周期数可能不同。例如,如果编译器将循环优化为更少的周期,或者循环变量i的类型是int,但STM32是32位处理器,操作int可能较快。 另一个方法是使用Keil的调试模式,查看delay函数执行时的周期计数器。或者使用示波器在Proteus中测量LED引脚的高低电平时间,直接得到实际延时。 此外,用户提到的STM32F103C6的时钟树配置是否正确?如果系统时钟是8MHz,那么APB总线时钟可能也是8MHz,除非有分频设置。需要确认代码中是否有配置时钟树的代码,比如是否调用了SystemInit()函数,或者是否有RCC的配置。用户提供的代码中,初始化部分只是使能了GPIOC的时钟,没有其他时钟配置,因此可能默认使用内部HSI 8MHz时钟,分频后作为系统时钟。 综上,需要分步骤计算delay函数的延时,考虑编译器优化、指令周期数,以及可能的实际测量方法。同时,指出如何调整延时时间,比如修改循环次数或使用定时器,以提高精度。</think>### 分步计算延时时间及频率影响 #### 步骤1:确定系统时钟配置 STM32F103C6默认使用内部高速时钟(HSI)8MHz作为系统时钟源[^2]。在代码未显式配置时钟时,系统时钟频率为: $$f_{sys} = 8\ \text{MHz} \Rightarrow T_{sys} = 1/8\ \mu\text{s} = 0.125\ \mu\text{s}$$ #### 步骤2:分析延时函数代码 ```c void delay() { for (int i = 0; i < 500000; i++) { __NOP(); } } ``` 该延时函数包含: 1. 循环变量初始化(`i=0`) 2. 循环条件判断(`i < 500000`) 3. `__NOP()`指令(单周期空操作) 4. 循环变量自增(`i++`) #### 步骤3:估算指令周期数 在Cortex-M3架构中(STM32F103系列): - `__NOP()`:1时钟周期 - 循环条件判断:约2周期(加载+比较) - 变量自增:1周期 - 跳指令:1周期 **单次循环总周期数**: $$T_{loop} = (条件判断) + (自增) + (跳) + (NOP) = 2+1+1+1 = 5\ \text{周期}$$ **总周期数**: $$N_{total} = 500000 \times 5 = 2,500,000\ \text{周期}$$ #### 步骤4:计算延时时间 $$t_{delay} = N_{total} \times T_{sys} = 2.5 \times 10^6 \times 0.125\ \mu\text{s} = 312.5\ \text{ms}$$ #### 步骤5:确定LED闪烁频率 完整周期包含两次延时: $$T_{blink} = 2 \times t_{delay} = 625\ \text{ms} \Rightarrow f_{blink} = 1/T_{blink} \approx 1.6\ \text{Hz}$$ #### 步骤6:验证优化影响 实际执行时间受以下因素影响: 1. 编译器优化等级(Keil MDK默认可能开启-O0不优化) 2. 指令流水线效应 3. 内存访问延迟 建议使用以下方法验证: ```c // 使用SysTick定时器精确测量(需添加代码) SysTick->LOAD = 0xFFFFFF; // 24位最大值 SysTick->VAL = 0; SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; delay(); uint32_t cycles = 0xFFFFFF - SysTick->VAL; ``` ### 硬件配置注意事项 1. **VDDA/VDD供电**:需保持3.3V±10%以确保时钟稳定性[^1] 2. **Proteus仿真误差**:软件仿真与实际硬件存在时序差异(建议±20%误差容限) 3. **时钟树配置**:确认未启用PLL或其他分频器(保持8MHz直接使用) ### 延时优化建议 1. 调整循环次数:`500000`改为`250000`可将频率提升至3.2Hz 2. 使用定时器中断实现精确控制: ```c // 配置TIM2定时器(示例) RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->PSC = 8000-1; // 8MHz/8000=1KHz TIM2->ARR = 500-1; // 500ms中断 TIM2->CR1 |= TIM_CR1_CEN; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值