Simple Nano Circuit 开发日记(32)

这个软件截至昨天,应该当是一个小的阶段完成——可以初步实现直流电源、电阻构成的电路中各个网络节点的电压求解。起初觉得神秘,做过一遍发现背后的数学原理十分简单,只需要根据电路创建线性方程组,然后求解即可。

下一阶段知识难度估计会大幅度提升,为了迎接下一阶段的挑战,我想还是应该先把当前的工作重新整理、封装,确保现在的代码稳固。因而今天开始做代码的收敛工作。

首先是将之前遗留的若干问题要逐一解决掉,其中既有bug,也有功能的缺失。今天主要完成了以下工作:

1、线性方程组构建中存在一个缺陷,引发了在开路时的电压计算错误,这是方程组中的节点方程构建时,没有考虑到悬空引脚导致的;

2、对代码中若干冗余的方法进行清理;

3、对代码中若干传值的地方进行调整,改成传递引用;

除此之外,还有一些功能上的缺失也要在接下来几天逐一完成:

1、对已放置的IC进行删除、移动等操作;

2、对已放置的IC进行选取,通过弹窗对它们的属性值进行调整。

如上工作全部完成之后,便可以将“交流电源”引入进来,从而产生“时间”的概念,为后续增加非线性元件打下初步基础。

Update 2024.12.28 Day: 33 SLOC: 5012

下午到了家乐福,晚上吃的牛肉面。吃牛肉面之前的一段时间:

1、完成了弹窗修改 电阻 和 直流电源电压 的功能;

2、完成了这个弹窗机制的通用化,也就是说所有的IC,都从基类定义是否可以弹窗,如果可以弹窗,就在IC自己的类内实现弹窗风格和窗口内容设置;

然后下楼吃牛肉面,去的路上想明白了线路中的电流是怎么计算的,没有偷懒的途径,必须对线段进行分割,才能实现电流的分段计算。所以吃完牛肉面回来,开始着手进行线路分割操作。

分割线路的整体思想很简单:落PIN时,判断落PIN是否压中了线段,如果压中线段则对已压中的线段按PIN进行切割;画线时,则是判断线段是否穿越了PINs,如果穿越了PINs,就一次找到每一个PIN同样以PIN为分割点、对线段进行分割。

完成这个功能之后,又进行了一下“清理电路中冗余线段”的功能实现。

1、如果某线段两端有任意段悬空,则将这条线段标记为冗余线段,完成一次检测之后,将所有检测到的冗余线段删除掉(注意此时还要删除连带的可能的冗余网络节点、冗余网络节点存储器等)。

2、冗余线段的删除不是一次遍历就能全部删除干净的,要反复删除。一次删除之后,上一次不是冗余的线段可能成为新的冗余线段,所以经过反复删除,直至找不到冗余线段时,才认为删除干净,完成删除操作。

额外的,上面提到的“删除冗余线段要连带着删除可能的空网络、空网络管理器”,这时可能出现内存泄漏,为了观察方便,又调整了一下“调试输出窗口”内的信息,将分配内存块更明细的显示出来,方便观察是否有内存没有被释放或成为野指针,确保删除不多、不少。

今天代码写的快,其中可能存在诸多需要再夯实的地方,周末两天,用来收敛今天完成的代码吧。

每天学习一些新的知识,尽可能保持自己的学习动力。

Related Posts

备忘

当前使用的差异 物料号 我用 正确建议 规格差异 备忘 Q2 BSC340N08NS3G BSC320N20NS3G 80V23A vs 200V32A Q1 BSC028N06LS3G BSC028N06LS3 或 BSC028N06NS 60V100A 一、关于Q2物料: 1、我的选择应该是有危险的,实际上也是出现问题了的——被击穿了; 二、关于Q1物料: 1、我选择的就是官方推荐的,用的是 BSC028N06LS3 ,我选择的只是多了一个尾缀“G”,这个尾缀可能是对IC的环保封装进行了标注,具体回头再看一下; 2、官方推荐的实际上有两个,分别是 BSC028N06LS3 和…

树莓派(6)基于LT3748的设计过程

原文地址:https://www.farnell.com/datasheets/1332863.pdf

树莓派(5)四个PoE PD方案的初期备忘

最近粗略的看了三个PoE PD方案,分别是: 核心芯片 品牌 拓扑结构 说明 BD9G341AEFJ ROHM Buck 非隔离、无变压器单元。外围电路简单。需前端PD模块。 LT3748 LINEAR Flyback 隔离、反激、主边反馈。需前端PD模块。 Si3404-A-GM SKYWORKS Flyback 隔离、反激、副边反馈。内置PD模块。 DPA425R 从电路的复杂程度上而言,BD9G341AEFJ看上去是最简单的。它没有用到变压器结构、也没有隔离机制,因而用到的IC既少、又容易获得。所以我想先尝试以BD9G341AEFJ为目标,自己试着实现一个DCDC模块。 在Mouser上能够看到这个芯片共有两款料号,分别是BD9G341AEFJ-E2和BD9G341AEFJ-LBE2。其中后者尾椎中多出来的“LB”是long time support in Industrial market的含义。也就是说如果面向工业化设计时,BD9G341AEFJ-LBE2这款芯片更适合采用。 此外在Mouser上还有一款BD9G341AEFJ-EVK-101评估板,它的BD9G341AEFJ-EVK-101…

补录一个之前遇到的问题

在2025年4月21日的《通过MT3608进行升压问题不大》文章中,提到了一句“关于上面的第4点,要再花时间额外写一篇博客”。当初遇到的是什么问题呢? 我从电源板上得到“电能”之后,会将电能分成5V和11.4V两路,传递给蜂鸣板,以令蜂鸣板上的两部分模块同时开始工作。然而在这个电力传输通道上,却出现了一些莫名其妙的情况:通过中间的四根导线将电能传递到蜂鸣板之后,蜂鸣器发出来的声音十分浑浊、沙哑。 我现在已经记不清之前写文章时听到的声音状态了,而现在听到的声音状态一定和之前的不一样、有了些许好转,但依然不是饱满、洪亮的声音。 这个问题,还要再花时间研究一下。 其实我也不用纠结之前听到的声音有多么恶劣,毕竟最近一段时间对电路进行了很大幅度的调整,可能已经解决了不少问题。只需要在此刻听到的声音的基础上,继续完善、优化电路就可以了。

电源芯片基本完成

如前文提到的,上一版电路板无法正常工作,原因就是IP5407芯片停止工作了。然而与前文猜测的也许不同,并不一定是我猜测的PCB布线过窄引起的。还有可能是外部线缆(从电池到PCB、从开关电源到PCB)的线径太小;还有一种可能就是上一版电路中,我在输出位置使用的3颗22uF电容用的是X5R导致的。 无论哪一种可能性,本质上都是IP5407看到的电池电压出现了错误、虚低,导致芯片停止工作。 因为没有精力逐项排查,所以我今天新做出来的电路,就索性将上面的怀疑问题,全都改良了一遍。结果,问题得到解决,现在电路可以正常工作了。因而也就不再仔细推敲上一版中究竟是哪里出现的问题了。 现在接下来的工作开始变得有些尴尬:接下来做什么呢? 想着应该是先将整体功能全部实现出来,所以下一个工作,就是完成前面板PCB的设计与制作。 经过测试,这个电路还是存在问题的 现在怀疑是C7这颗电容是多余的,但是在反复测试过程中,将电路板烧毁了。还要再找时间重新做一块电路板,好辛苦。我为什么会怀疑是C7电容导致的问题呢? 现在IP5407上电之后,明显会出现一个1秒的延迟,看它的技术手册提到1s停摆是因为出现了过流保护、会间断1秒重新上电。当我将电路导通时,整个电路中C7这个电容是饿着的、并且这个电容容量还不小,所以它很可能会在上电瞬间吃电吃到过流,引起IP5407停摆。一秒之后,C7已经被其他电容充上电、也被上一次停摆之前充上电,所以整个电路就是稳定的,所以只要经历一次停摆,就能恢复正常工作。 如此想来,C7现在就是重点怀疑对象。

简单电路的想法及尝试(2)

之前想到一个简单的电路,然后画了画、今天动手试了一下,感觉没有问题、可以实现。但是比较郁闷的是其中要使用单刀双掷开关、或者更方便一些就是使用双刀双掷开关。虽然使用更高级的开关可以让电路简化,但是这些高级的开关并不好找,即便真的有、手感上和形式上也很难满足我的需求。 所以我觉得还是退而求其次,用比较简单的单刀单掷开关来实现吧。以下是第一部分电路的重新规划——完全改用单刀单掷开关来实现。电路看上去应该是可以运行的,不知道实际效果怎么样,还要再花时间搭建真实的电路来验证一下: 我设想的电路整体分成三个部分,上面是第一部分。现在觉得第一部分的电路无论怎么实现,都是可以搞定的,毕竟它的功能最简单;难的是第二部分的电路,没有想好怎么才能只通过一个单刀单掷开关实现。 另外,上面的第一部分电路现在也只是核心功能,如果考虑到更复杂的情况,例如将LED增加进去,也会让问题变得复杂。 看来这个“小功能”也不是一朝一夕能够搞定的,我索性也就不着急、慢慢学习、慢慢尝试了。 想了想,第二部分电路的结构大概清晰了,并且有对第一部分电路进行了微小调整,至此的基本思路如下: