深圳做网站de外包公司是干嘛的
深圳做网站de,外包公司是干嘛的,温州网站设计案例,莲花网站基于瑞萨R7FA2E1A72DFL的智能时钟DIY全解析#xff1a;从电路设计到代码实现
大家好#xff0c;我是小胡。最近我基于瑞萨的R7FA2E1A72DFL单片机#xff0c;做了一个功能挺全的智能时钟#xff0c;我把它叫做“小胡时钟”。这个项目从画电路板、焊接调试到写代码#xff0…基于瑞萨R7FA2E1A72DFL的智能时钟DIY全解析从电路设计到代码实现大家好我是小胡。最近我基于瑞萨的R7FA2E1A72DFL单片机做了一个功能挺全的智能时钟我把它叫做“小胡时钟”。这个项目从画电路板、焊接调试到写代码完整地走了一遍感觉收获特别大。今天我就把这个项目的所有细节包括硬件怎么选型、电路怎么设计、软件怎么实现都毫无保留地分享给大家。无论你是想参加电子设计竞赛的学生还是刚入门嵌入式想做个完整项目的爱好者相信这篇教程都能给你带来实实在在的帮助。1. 项目功能与硬件选型思路咱们先来看看这个小胡时钟都能干些啥。它的核心功能是一个电子时钟但不止于此。我给它加上了温湿度监测、触摸控制、闹钟提醒还预留了丰富的扩展接口。下面这张功能清单就是整个项目的设计蓝图主控芯片采用瑞萨电子的R7FA2E1A72DFL作为大脑。这是一颗基于ARM Cortex-M23内核的32位单片机性能足够功耗也低非常适合做这种需要长时间运行的时钟类设备。时间显示使用一个四位、0.56英寸的共阴极数码管来显示时间。数码管亮度高显示效果直观是时钟类项目的经典选择。环境感知通过DHT11温湿度传感器实时采集周围的温度和湿度数据让时钟不只是看时间还能了解环境。人机交互四个实体按键用于设置时间、调整闹钟等操作。一路触摸按键瑞萨这款芯片自带触摸感应功能我专门引出了一个触摸引脚可以实现触摸切换显示模式等功能增加点科技感。调试与扩展引出了标准的SWD下载接口方便用调试器下载程序和在线调试。引出了串口UART电路可以和电脑通信打印调试信息。单独做了一个复位按键调试时重启芯片很方便。最关键的是我把芯片几乎所有没用的引脚都通过排针引出来了相当于做了一个迷你核心板以后想加个蓝牙、Wi-Fi模块或者驱动其他外设直接插上就能用。声音提示用了一个无源蜂鸣器。当闹钟时间到或者按键有操作反馈时它会发出“滴滴”声提醒你。电源系统这是保证时钟稳定运行的关键。我设计了两套供电方案方案一分立元件用AO3401APMOS管和1N5819肖特基二极管搭了一个电源自动切换电路。当插上USB供电时系统用USB的电同时给电池充电拔掉USB就自动切换到电池供电实现不间断运行。方案二简化版也可以直接用市面上常见的锂电池充放电保护小板更省事但要注意尺寸能不能放进你的外壳里。电池充电使用TP4056充电管理芯片给锂电池充电。这颗芯片非常经典外围电路简单充电电流可调还带充电状态指示。2. 核心电路设计详解有了功能规划接下来就是把这些想法变成具体的电路图。我在立创EDA上完成了所有设计下面咱们分模块来看。2.1 主控与扩展接口电路因为是第一次用瑞萨的MCU为了后续学习和扩展方便我决定把它做成一个“核心板”的形式。我把芯片的引脚除了必须连接特定功能的外设如数码管、传感器的其余大部分都通过2.54mm间距的排针引出来了。图1主控及扩展接口PCB布局这样做的好处非常明显学习友好你可以像使用开发板一样用杜邦线连接各种模块进行实验。扩展性强未来想增加新功能比如连接OLED屏幕、RFID模块等直接插在排针上就行不用重新画板。调试方便可以用逻辑分析仪或示波器方便地测量任何引脚的信号。在原理图里我给这些扩展引脚直接标的是引脚号比如P101 P102这是我个人的习惯一目了然。为了让你更清楚每个引脚在芯片上的位置和默认功能我把官方训练营资料里的主控引脚功能图也放在这里供你参考。图2R7FA2E1A72DFL引脚功能示意图2.2 功能模块电路这部分电路集成了时钟的所有核心功能。图3电源、传感器、显示等模块原理图USB供电与充电Type-C接口输入5V电源。TP4056负责给锂电池充电其PROG引脚通过一个1.2K电阻图中R10为3K需根据充电电流调整设定充电电流。CHRG和STDBY引脚接LED用于指示充电状态。电源路径管理这是保证不断电的关键。AO3401A是一个P沟道MOS管。当USB有5V输入时VUSB为高MOS管关闭系统由USB供电VCC_USB同时TP4056给电池充电。当USB拔掉时VUSB变低MOS管导通电池电压BAT通过MOS管和二极管D3供给系统VCC_BAT。二极管D31N5819的作用是防止电池电流倒灌回USB口。数码管驱动四位共阴极数码管我采用了最直接的MCU引脚驱动方式。段选a, b, c, d, e, f, g, dp接MCU的8个IO口位选COM1-COM4通过一个S8050NPN三极管来驱动因为MCU单个引脚驱动电流有限直接驱动四位数码管所有LED可能会过载。三极管在这里当开关用MCU给高电平三极管导通对应的数码管位才能亮。DHT11温湿度传感器这是一个单总线数字传感器只需要一根数据线接上拉电阻与MCU通信即可非常节省IO口。蜂鸣器驱动无源蜂鸣器需要脉冲信号才能发声。同样用一个S8050三极管来驱动MCU的IO口输出不同频率的PWM波蜂鸣器就能发出不同音调的声音。触摸按键瑞萨MCU的特定引脚如P103支持电容触摸感应功能。我直接将该引脚连接到一个大面积的焊盘或铜箔上作为触摸感应盘。软件上需要配置相应的触摸感应外设TSN。提示如果你觉得分立元件做电源管理比较麻烦完全可以采用“方案二”。我在PCB板上专门预留了一个区域用来焊接这种集成的锂电池充放电保护小板。图4锂电池充放电保护小板图5PCB上预留的小板安装位置2.3 调试接口电路调试和下载电路是开发过程中必不可少的“生命线”。图6SWD、串口、复位、BOOT选择电路SWD接口这是ARM Cortex-M内核标准的调试接口只需要SWDIO、SWDCLK、GND和VCC四根线。我用一个4Pin排针引出配合J-Link、DAP-Link等调试器使用。串口UART接口串口是打印调试信息、与上位机通信的利器。我使用了CH340N这款USB转串口芯片它将MCU的TXD、RXD信号转换成USB信号插上电脑就能识别成COM口。复位与BOOT选择这里我耍了个“小聪明”没有用按键而是用了跳线帽。因为复位和切换启动模式BOOT在正常使用时几乎用不到只在第一次下载程序或芯片锁死时才需要。用跳线帽短接一下就能实现功能既省了物料成本又节省了PCB空间。图7使用跳线帽代替按键3. 软件设计与编程思路硬件是躯体软件才是灵魂。小胡时钟的软件部分主要围绕以下几个核心任务展开数码管动态扫描显示这是最基础也是最关键的部分。因为四个数码管共用段选线所以必须采用动态扫描的方式即快速轮流点亮每一位。在每一位点亮的极短时间内设置好该位要显示的数字对应的段码。只要扫描速度够快通常1ms-5ms切换一位由于人眼的视觉暂留效应看起来就像是四位数字同时稳定显示。这里需要两个数组一个segCode[]存放0-9数字对应的段码共阴极一个digitSelect[]存放位选信号。时间管理与RTC时钟的核心是走时要准。瑞萨R7FA2E1A72DFL内部没有独立的硬件RTC实时时钟模块所以我们需要用一个定时器如GPT来模拟。设置一个定时器每1ms中断一次在中断服务函数里对一个计数器累加累计到1000就是1秒。然后再处理秒、分、时的进位。虽然精度不如硬件RTC但对于日常使用完全足够。如果对精度要求高可以考虑外接DS1302等专用RTC芯片。DHT11数据读取DHT11的通信时序要求比较严格。它采用单总线协议主机MCU先发起一个起始信号拉低总线至少18ms后拉高然后等待传感器响应。传感器会拉低总线80us作为应答然后开始输出40位数据16位湿度16位温度8位校验和。每一位数据都以一个50us的低电平开始随后的高电平长度决定数据是026-28us还是170us。编程时需要精确控制IO口的输入输出切换和延时最好用微秒级延时函数。按键与触摸扫描四个实体按键采用普通的GPIO输入加上软件消抖即可。触摸按键则需要初始化瑞萨的触摸感应单元TSN并定期读取其计数值。当手指触摸时电容发生变化计数值会显著改变通过设定一个阈值就可以判断触摸事件。蜂鸣器驱动想让无源蜂鸣器响就需要产生特定频率的方波。比如要发出中音Do523Hz就需要产生周期约为1.9ms1/523的PWM信号。可以用一个定时器产生这个频率的PWM输出到蜂鸣器控制引脚。闹钟触发时让PWM输出一段时间即可。软件的整体框架可以是一个主循环while(1)里面不断扫描按键、触摸、读取传感器然后根据系统状态正常显示、设置时间等更新数码管显示内容。定时器中断负责维护精准的毫秒计时为动态扫描和RTC提供时间基准。4. 物料清单BOM与制作要点所有用到的元器件都在下面的表格里了。你可以在立创商城根据Name和Footprint封装信息直接搜索购买。Name名称Footprint封装Quantity数量Designator位号2700Hz 蜂鸣器BUZ-TH_BD9.0-P4.00-D0.6-FD1BUZZER1100nF 电容C06035C1, C2, C4, C5, C74.7uF 电容C06033C3, C8, C922pF 电容C06031C61N4007 二极管SMA_1N40071D1SS34 肖特基二极管SMA_L4.3-W2.5-LS5.0-RD1D312Pin 排针HDR-TH_12P-P2.54-V-M4H1, H2, H3, H44Pin 排针HDR-TH_4P-P2.54-V-M2H5, H6跳线帽HDR-TH_2P-P2.54-V-M-12H8, H92Pin 排针HDR-TH_2P-P2.54-V-M1H100603 LEDLED_06031LED1四位共阴数码管LED-SEG-TH_12P-L50.3-W19.0-P2.54-S15.24-BL1LED3S8050 三极管S8050_SOT-231Q1AO3401A MOS管SOT-23_L2.9-W1.3-P1.90-LS2.4-BR1Q2560Ω 电阻R06031R210KΩ 电阻R06036R3, R5, R7, R8, R9, R111KΩ 电阻R06031R4100KΩ 电阻R06031R63KΩ 电阻R06031R105.1KΩ 电阻R06032R12, R13四脚按键SW-TH_4P-L6.0-W6.0-P4.50-LS6.54SW1, SW2, SW3, SW4R7FA2E1A72DFL MCULQFP-48_L7.0-W7.0-P0.50-LS9.0-BL1U1DHT11 传感器SENSOR-TH_DHT111U2F6-6-4-0.4Z 端子TH_F6-6-4-0.4Z1U3TP4056 充电ICESOP-8_L4.9-W3.9-P1.27-LS6.0-BL-EP1U4Type-C 接口TYPE-C-SMD_TYPE-C-6P-21USB1制作与调试小贴士焊接顺序建议先焊接贴片元件电阻电容、芯片等再焊接插接件排针、Type-C口、按键。焊接主控MCULQFP48封装时检查好方向可以先对齐固定一个脚然后拖焊。先供电后上电焊接完成后先别急着插电池或USB。用万用表二极管档或电阻档仔细检查VCC和GND之间是否短路。确认无误后再通电。分模块调试不要想着一次就让所有功能都跑起来。可以先不焊主控MCU只测试电源部分看TP4056充电是否正常USB和电池切换是否顺利。然后焊上MCU用调试器连接SWD口尝试下载一个最简单的点灯程序确认最小系统工作正常。之后再逐个添加数码管、传感器、按键等功能。善用串口调试在代码里多使用串口打印信息比如“系统启动”、“DHT11读取成功温度xx.xC”等这对于排查问题非常有帮助。这个项目从构思到实现让我对嵌入式系统的硬件设计和软件编程有了更整体的认识。最大的心得就是不要怕复杂把大系统拆解成一个个小模块逐个击破。希望“小胡时钟”的设计思路和实现细节能给你带来启发。如果你也动手做了一个欢迎一起交流遇到的问题和有趣的改进想法项目的完整演示视频可以在B站查看。