- 博客(80)
- 收藏
- 关注
原创 数据结构-什么是单向链表?
单向链表是一种线性表,实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。链表的知识点初学起来感觉很抽象,开始时可以先把链表的定义、查找、插入、删除这些基本操作用代码敲一下,然后,最好是实际应用一下,找一个例程把需要处理的数据通过链表存储起来,数据的查找、更新数据插入、删除旧的数据等这些操作都实践一下,只有用了,才能真正理解链表,只学习概念理论,没什么用。单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。3.然后修改指针,删除s所指向的结点;
2025-12-28 21:52:08
414
原创 BUCK/BOOST电路控制算法详细总结 21
这种属于BOOST充电,左半桥PWM1的占空比设置为100%,PWM2的占空比设置为0%,这两个值是固定的,BOOST充电时主要调试右半桥的PWM3和PWM4,假如充电功率为100W,软件可以设置充电功率范围在90~100W,当功率小于90W时,升高PWM的占空比,当功率大于100W时,降低PWM的占空比,使功率相对稳定在这个区间。适配器输入的电压是恒定的,电流随着功率的增加越来越大,当电流达到最大值时,如果继续抬高功率,则输入电压就无法恒定,会被强制拉低,此时如果是开关电源,则会提示过流报警。
2025-11-25 10:48:10
1029
原创 IP5385充电偶发没有电流问题深入分析 21
我们再来分析一下为什么CRC值上不来,通过和技术支持沟通,原来CRC值计算需要时间,读这个数据时需要加入时钟延展,一眼硬件IIC都是自带有时钟延展功能,但我们是软件模拟IIC,那么既然有延迟,我们在读最后一个数据时,直接延时100us,等待从机把数据准备好之后,再去一下看看。我们这里是一主两从通信,MCU作为主机,IP5385和电量计作为从机,在做IIC通信的时候,发现了一些数据异常读写的问题,这里做一下简单的总结,各位朋友有感兴趣的可以看看。经过验证测试,都正常了,此刻,天空是晴朗的,心情是美丽的。
2025-11-20 14:15:24
531
原创 杰理AW313A蓝牙通信调试总结 21
我们根据自己的功能需求,看做哪种通信,广播的话数据基本没有什么隐私,任何设备都可以接收到,一般像畜牧业牛耳标蓝牙产品就是做广播通信,然后通过中继器把数据上报到服务器,还有蓝牙耳机也是广播,任何手机都可以连接配对。杰理软件平台已经有广播的功能,我们打开手机端蓝牙助手APP,可以搜索到名称为AW31_N(BLE)的设备,就是杰理蓝牙广播出来的数据,但是我们需要对广播数据做一下自定义,直接在软件平台里面添加自己的广播数据即可。,广播数据内容自定义,名称可更改,通信方式是单向的;那么,蓝牙是如何上报数据的呢?
2025-11-20 10:08:43
187
原创 英集芯-IP5385 IIC通信异常原因深入分析及解决方案 21
这里的0xEA就是IP5385的写地址,这里都是读寄存器,正常来说写地址之后,就是寄存器地址,然后是读地址,读出来的寄存器数据,但是,IP5385的寄存器数据所有都是写地址之后,是寄存器地址,紧接着却是写进去数据了,而且还是ACK应答,奇怪吧,从业这么多年还是第一次遇到呢。IP5385寄存器读取打印OK,逻辑分析仪抓取异常,另一个从机打印数据OK,逻辑分析仪抓取OK,那么差异点在逻辑分析抓取数据这里,通过时序来看IP5385写寄存器地址之后,本来应该读的,直接开始写了,噢,为什么没有读呢?
2025-11-14 17:21:35
670
原创 杰理AW313A蓝牙芯片开发总结 21
杰理的蓝牙芯片开发流程也是一样的,平台集成了基本的外设接口,像GPIO、TIMER、ADC、UART等等这些都有,我们只需调用PAI函数即可,另外蓝牙收、发协议也已封装好,现成的可以直接使用,我们要做的是先对平台的代码逻辑和API接口熟悉起来,在DEMO板上跑一跑平台程序,测一测功能是否OK。首先,在DEMO板上验证好的平台基础功能的程序,烧录进去我们的板子,验证我们板子能否跑起来,如果程序烧录异常或者烧录进去程序跑不起来,需要先排查一遍硬件电路,保证LDO供电正常,再排查BLE部分硬件。
2025-11-11 09:57:40
727
原创 杰理蓝牙芯片开发平台API说明 21
简介 这里用的杰理低功耗蓝牙芯片是AW313A,针对这款BLE芯片开发有一个杰理的软件平台,平台不是直接拿来就能用的,很多的API函数没有功能描述,也没有相关的函数介绍文档说明,也没有例程参考。所以,需要对平台运行逻辑和各个调用的API外设接口熟悉一下,才能进行开发。 小可使用之后,对一些接口的API函数做一下简单的介绍,一来是做一下总结,二来有需要的朋友可以参考使用,少走一些弯路。一、BLE介绍 AW313A的是一款低功耗蓝牙芯片,具体特征如下:二、平台介绍
2025-10-23 14:24:06
680
原创 英集芯-IP5385开发调试总结 21
只有C1,C2可作为输入端,所以输入电流寄存器只需要读C1,C2端的就可以,但是规格书中只有VBUS端的输入电流寄存器,VBUS端也就是C1端,C2端的输入电流数据寄存器没有,这里只能读VSYS端的电流寄存器。当我们要获取每个端口的电压数据时,发现找不到此寄存器,最后找到一个VSYS电压寄存器,是的,这个就是电路中输入输出端总的电压,电路中具体位置,如下图所示。A1,C1,C2端口的输出电流,规格书中都有对应的寄存器可读取,分别是VOUT1输出电流寄存器、IVBUS输出电流寄存器、IVIN输出电流寄存器。
2025-10-17 09:40:59
1285
2
原创 充电宝电量灯如何实现及常见问题?21
当正在充电,刚充到3灯的时候,突然拔掉充电器,因为充电倍率是1C,浮充电压很高,此时突然断开充电器,电压会立即掉下来,程序进入放电状态机中,会跳到2灯状态,这就是充电-放电跳灯问题。把电压区间均匀的分到四个LED电量灯上,根据充电曲线和放电曲线的特性,充电灯显和放电灯显需要分开实现,因为根据充放电曲线可知,充电的时候3.7V以下充的时间短,快充满的时候,充的时间比较长,而放电特性恰恰相反,所以,如果按照同样的电压区间去控制电量灯显示,则只能保证放电或充电的时间均匀,无法同时满足。
2025-09-25 11:28:44
687
原创 188数码管如何显示?保姆级教程 21
数码管本质上是由很多断码组成,想要点亮一个断码只需要在断码的两端一端给高电平,另一端给低电平即可点亮,那么想要点亮很多断码怎么办?就需要一个一个点亮,把频率设置在50HZ以上,也就是不超过20ms扫描一次,人眼就看不出来闪烁,视觉上看起来是常亮。这里的应用场景是充电电量显示、放电电量显示、小电流模式、过温显示等等,显示电量时分为充、放电充状态显示。显示的状态,可以根据自己的需求去设计,比如:如果是充电状态,闪烁显示电量,如果是放电状态,则常亮显示电量。电路由5个I/O口连接数码管接口。
2025-09-10 17:31:42
451
原创 IIC通信一主多从,如何通信更好?
IC1,IC2的设备地址不同,因为对从机操作要求可读可写,那么,总线通信设计要考虑鲁棒性,这里我采用的就是状态机分时通信,同一时间只对一个从机进行读或者写操作,这样就避免了,通信时数据交叉干扰问题。每读取/写入一个寄存器数据,就进入下一个状态,间隔10ms之后,再操作下一个寄存器,IC1设备的读/写操作完成,再去操作IC2设备的寄存器。嵌入式一主多通信比较常见,数据交叉交互,一不小心主控就超时总线死锁,头疼的很,数据如何梳理,分享一下我的经验,欢迎交流。通信方式为1个主机,2个从机,主机对从机可读可写。
2025-08-22 10:54:35
153
原创 锂电池电量SOC算法 21
经典的SOC算法电流积分法,也称为安时积分法或库伦计时法,通过累计电池充放电过程中进出电池的电量来估算SOC,电流通过电流传感器(MT9823CT-10BF3)采集,或运放TP181A1-CR来采集。电流积分就是定时累计电池流入流出的电量来估算出电量的变化,通过电量初始值加、减去这个电量值,就是当前的SOC。电流积分只是累积电池的电流变化,没有考虑电流采样误差、温度、电池衰减等因素影响,会导致SOC产生误差。g_stuAdcCollect.m_u16BattSoc:得到的当前的SOC。
2025-07-08 15:23:11
508
原创 便携储能-PV/适配器自适应充电算法 21
光伏输入的特点是输入电压会随着电流变大,电压变小,当达到最大功率时,电压、电流相对稳定在这个小范围内;适配器输入的电压是恒定的,电流随着功率的增加越来越大,当电流达到最大值时,如果继续抬高功率,则输入电压就无法恒定,会被强制拉低,此时如果是开关电源,则会提示过流报警。应用于便携储能领域DC充电口(目前主流采用5521接口),DC充电口是光伏输入,兼容适配器充电模式。区分出来输入源之后,跳到对应的算法流程中,执行对应算法。基于以上原理,可以区分出来是PV,还是适配器模式。
2025-07-08 14:26:09
282
原创 MPPT/适配器自适应充电算法
如何判断输入Source?根据DC源和PV输入电压的特性,DC源的输入电压是恒定的,PV输入的电压会随着功率的增加输入电压变小,最终稳定在最大功率点,从而区分出不同的输入Source。MPPT算法:BUCK扰动法、BOOST扰动法、BOOST-BUCK扰动法。算法分三个部分:判断输入Source、适配器充电算法、MPPT算法。适配器充电:降压充电、升压充电、先降压再升压充电。
2025-07-04 15:37:52
224
原创 BUCK-BOOST调试常见问题总结
下一步,我们就用直流开关电源测试找到规律,直流源设置20V 3A,软件不限制电流直接把电流抬到5A,这时发现当过流时,开关电源会报警,而且电压会被拉低。首先,是预充阶段,进入DC Source充电流程之后,充电进入CC模式,当电压达到一定之后,进入CV模式,直到电流小于0.2C持续10S后,判断为充满。第二步:可以看出两者差异是充电时电压有区别,一个有变化,一个没变化,那么我们就可以以电压的变化为依据,判断Source是DC Source还是PV。1.PV升压充电,开始时会拉低电池电压,导致保护板保护?
2025-05-08 12:08:22
627
原创 DC-DC:100W充电算法
左半桥PWM_H的占空比设置为97%,PWM_L的占空比设置为3%,为互补PWM,这两个值是固定的,BOOST充电时主要调试右半桥的PWM,设置充电功率范围在90~100W,当功率小于90W时,升高PWM的占空比,当功率大于100W时,降低PWM的占空比,使功率相对稳定在这个区间。BUCK-BOOST算法的关键点在于临界点转化的时候,其他时间段和单独的BUCK,BOOST一样,当BUCK充电时的占空比调试到最大时,直接跳转到BOOST充电,充电功率需和BUCK充电的功率衔接上,转换时中间功率不能掉下来。
2025-05-08 12:06:52
534
原创 锂电池充电流程
恒压模式,当电压达到某个值时,通过电压环路锁定电池端电压在固定在这个值,一直持续到电流逐渐减小到0.2C且持续10S时,判断为进入充满状态,退出充电流程。锂电池充电时,电压电流会随着充电时间发生变化,电压会越来越高,电流会越来越小,开始充电是CC模式,当电压达到一定值时进入CV模式,最后充满。恒流模式,输入端电压恒定,假如充电功率100W,输入输出功率守恒,控制电池端电压*电流等于100W,这时输入端电流是恒定的。此时充电信号还在,如果电量小于95~98%则再次开启充电,进入充电流程。
2025-04-14 17:58:05
706
原创 充电宝灯显如何调试
因为聚合物锂离子电池充电时,1灯到2灯快,4灯到充满慢,而放电时4灯到3灯块,1灯到没电慢,充放电正好相反,导致电压法不能同时很好兼容充放电均匀。因为充放电电压区间不同,容易导致充-放、放-充时跳灯问题,为了解决这个问题,在充电时加入充电对应灯的锁,放电时加入对应放电的锁,强制锁灯来规避跳灯问题。电流积分法能很好的避免灯显跳灯问题,但需MCU有一定的空间资源,硬件采用运放采集电流,会增加成本。充电宝采用灯显显示电量,有充电灯显和放电灯显,计算电量常见有两种:电压法和电流积分法。
2025-04-14 17:34:12
509
原创 软构件16-3个I/O控制4个LED算法
在充电状态下,电压到LED2状态时,LED1常亮,LED2闪烁;(瑕疵:LED1亮度会变化)目前只做到充电到LED1时LED1闪烁,充电到LED2时LED1常亮,LED2闪烁。在充电状态下,电压到LED1状态时,LED1闪烁;充电至LED3、LED4时未实现。
2025-03-07 11:17:15
508
原创 STM32休眠STOP模式问题
因为STOP休眠模式用的是LSI,即32KHZ,主时钟为64MHZ,64分频之后为1MHZ,唤醒之后默认用的还是LSI,时间上差不多扩大了4倍,所以,定时时间为原来的4倍才进入定时。STOP休眠唤醒,每次时间都是定时的4倍才进入休眠?唤醒之后重新初始化系统时钟即可。休眠唤醒系统时钟问题。
2024-12-13 16:24:52
237
原创 嵌入式软件开发思想-20240215
整理需求,按照业务功能、故障策略等设计流程图,流程图根据软件架构思想来设计,调度-->各模块API-->模块实现流程,每个模块需要什么调用资源,整体需要的资源有一个清晰的认知。根据收集到的客户需求,知道要做一个什么样的产品,实现什么功能逻辑,有一个笼统的认知。根据设计好的架构流程图,逐步实现业务功能、故障策略等逻辑。做任何事情,一段时间之后要形成一个体系,一套规范。2) 形成软件规格书。
2024-12-11 13:46:58
219
原创 液晶屏驱动调试显示异常问题
3.3V驱动信号,5V供电可以正常显示,有时候调驱动程序时,延时怎么调都显示都没反应,这时候要看看供电电源是有问题,按照技术手册给的电压范围,测量一下实际供电电压,因为有些电源芯片实际输出电压有可能偏高,如果电压高于驱动芯片的供电范围有可能会导致显示异常,哪怕电压高0.1V,这时候用直流电源供电看一下,更能比较出问题。有时候软件无论怎么调都不行,要首先去检查电源电路供电是否有问题,用直流电源供电试试看看会不会就正常了,是,就说明电源供电有问题,很多时候就是电源供电的问题。
2024-11-08 13:39:57
456
原创 硬件调试-PCBA上电调试异常
举例:NB-IOT温湿度(668)MCU发数据没问题,模组不返回,这种情况我就跑偏了,排查思路不严谨,直接去找模组问题,当然就成玄学问题了;而后直接测试电源供电电压,发现电池出来3.6V没毛病,经过保险丝后变成了2.2V,显然就是保险丝有问题,阻抗太小导致不能激活模组工作,所以,其实问题很简单,就跑思路跑偏。1 不考虑软件问题,首先,硬件异常第一先想到的是电源供电,如果就一个电压就测一下是否正常;如果是有稳压芯片,要测一下稳压前后的电压是否正常,每级供电电路电源是否正常,一般很多问题都是供电出问题。
2024-10-29 09:56:42
487
原创 计量芯片CS5463A调试问题
正确的思路:产生校机失败,首先确定是软件还是硬件问题,软件通过例程判断没问题,然后示波器观察通信脚SPI是否有波形,以及晶振起振否,发现问题一上电CS5463A芯片的INT脚一直是高电平,配置为下拉输入也是高电平,正常工作是低电平,只有异常时才是高电平,由此判断是硬件电路问题。二是PCB板布线导致出问题(特殊情况才会考虑,比如同样的电路只是PCB板布线不同,一个板子没问题,一个板子有问题就有可能是布线)。具体分析:首先CS5463A芯片外围电路没问题,那就只能是电源+5V供电出的问题。
2024-10-22 15:25:27
441
原创 架构设计-分层思想(二)
嵌入式软件因为直接驱动硬件,设计架构时,无论多么复杂的产品,首先,第一步要做的就是剥离架构,解耦合,因为硬件都有可能会变化,把硬件完全剥离出去,才能最低限度的去修改软件。首先,站在架构的角度去设计,先画出来一个框架图,反复推敲,就像建筑设计师一样,先有一个抽象的大厦设计图,不断的优化,然后把按照图纸一步步实现,实现的过程无需太多的脑力。软件架构并非一层不变的,随着业务和需求的变化,架构也需要适当的调整,一个好的架构要不断的迭代、优化、重构。软件设计犹如作文,古人作文,讲究立意为先。5.功能分层,单向调度;
2024-09-04 12:46:28
330
原创 嵌入式怎么选行业?
国内2000~2010这十年处于经济飞速发展期,2010~2020年很多细分领域出现了龙头企业,越往后创新行业越来越少,所以,资本对政策是最敏感的,一旦资本全部涌入这个行业,必然会造成大量缺口,薪资也会跟着水涨船高。每个城市都是自己的发展规划,未来5年重点发展什么领域,通过关注一下城市的产业集群,选择这些行业自然发展就不会差到哪去,像深圳的“20+8”产业集群。看新闻联播,政策扶持哪些行业,大力发展哪些行业,那么,这些行业会迅速崛起,比如,近半年新闻联播提的最多的:人工智能、智能网联车、储能、
2024-08-28 20:39:28
394
原创 嵌入式学习路径
这个阶段需要一个大平台,做的产品要有架构设计,在一个稳定的架构下多人协作设计不同的模块和软件层次,如果能参与这样的项目,对于软件编程思想会有一个提升,更多的会运用面向对象的思想去设计,剥离硬件平台的依赖,能够以更低的时间成本切换到不同的硬件平台。开发的产品从一些简单的数据采集类,变成多数据采集,通信,控制逻辑的产品,单片机也51转到STM32,通过STM32开发一些裸机类的产品,这时候的项目难度增加,需要数据处理、通信协议解析及控制逻辑。
2024-08-28 20:37:28
331
原创 打羽毛球让我想通了一些技术问题
学习羽毛球的过程是一个动作一个动作学习,最后连贯起来,形成一套动作,比如杀球,先练好握拍,架拍,引拍,挥拍,下压,重心变换,每一步学会之后,杀球就基本学会了,这就相当于问题分析的过程,产品遇到问题,先拆分成一个一个小问题,针对每个小问题逐个解决,最后问题就迎刃而解了。工作中也是,每个行业都有优秀的,平庸的,垫底的,你遇到的同事都有可能,怎么去和他们打交道,就和打羽毛球配合一样,强强联手不一定能赢,强弱组合也不一定会输,要学会去兼容,才能得到一个好的结果。羽毛球也是一项技术运动,跟工作中很多问题都是相通的。
2024-08-21 12:08:37
253
原创 什么是产品开发思维?
见过有一些工程师老手遇到问题,总是看现象猜测是哪里的问题,这是完全错误的分析思路,现象只是表象,要透过现象看本质,一个问题可能会产生几种表象,要拿具体的数据来验证猜想,从现象一步步验证、确认问题,逆向推导找出问题点,再从问题点去发现问题的规律性,这就是分析问题的思维,把问题分析清楚了,基本上就解决50%了。这里借用2022年雷军演讲说过的一句话,在软件工程里学到的最重要的道理,可能会出错的地方,一定会出错,所以,每一个地方一定要去检查,只要你用这种认真的精神去做每一件小事,它就一定可以做好。
2024-08-21 12:07:47
324
原创 PID算法闭环控制-位置式
1) 应用领域PID控制器广泛应用于各种工业过程控制中,比如:温度控制、流量控制、压力控制、飞行器的姿态、汽车控制、机械臂的位置控制等多个领域。2) 概念PID控制器是一种广泛应用于过程控制的自动控制器,分别代表比例(proportional)、积分(integral)、微分(derivative),主要用于调节系统的输出,使反馈值与目标值更接近。Kp 是比例系数,用于放大偏差信号。Ki 是积分系数,用于消除稳态误差。Kd 是微分系数,用于预测偏差的变化趋势,提前进行控制。
2024-08-20 12:18:03
756
原创 嵌入式行业现状
公司在领域布局产业的时候,通常会选择那些市场大,有一定行业壁垒,没有被垄断的行业,那么我们个人在选择的时候也是一样,要学会赋能,比如:MCU+电机控制,MCU+逆变器,MCU+PID算法等等,这样就不一样了,在一个行业深耕几年积累到经验之后,就会有很多的选择机会,当然,如果个人能力在行业内70%以上水平,薪资待遇这一块都不会低的。这几个热门行业的细分产业有:机器人、低空经济、新能源汽车、充电桩、便携储能、储能换电等等,所以会有很大的市场,相对来说工作机会多一些,如果赶上风口行业,工资还会来一波增长。
2024-08-19 12:05:19
355
原创 嵌入式入门学习规划
STM32现在都是从HAL开始学,已经不需要手动初始化造轮子了,有一个对新手非常友好的图像化编程工具STM32CubeMX,把需要的外设配置好,时钟分频设置好,直接生成基础环境代码,通过调用封装好的API,回调函数,在这个上面实现自己的业务逻辑即可,效率大大提升。信号量、消息、邮箱、消息队列等这些怎么使用?做技术不单单是学习技术这么简单,做技术不是目的,要了解市场,学会做一个技术商人,让自己的技术产生价值,不要陷入打工人的陷阱,技术只是手段、工具,是为了实现更高的价值,要去打造自己的圈子,这才是终极目标。
2024-08-19 12:04:42
300
原创 STM32CubeMX一款好用的开发工具
1.基本概念STM32CubeMX采用简单易用的图形界面,可以帮助您快速配置硬件和软件,并生成适用于您的STM32平台的C代码项目。2.特点1) 缩短软件研发周期,提升软件开发效率;2) 设计灵活,自定义外设配置;3) 免费使用。3.市场现状STM32在全球MCU市场的占有率达到了五分之一,而在中国市场,其连续10年的复合年增长率(CAGR)高达27%,在国内占有50%以上的市场。单片机开发从业者,大部分都是从STM32开始学起,结合正点原子开发板,一步步入行。
2024-08-19 10:19:01
828
原创 软构件12-I/O电平滤波算法接口
在PCBA上有一些过大电流的地方,如果有I/O电平操作,这时就容易受干扰,可能会偶发出现一个毛刺,影响功能,为了设备稳定运行,通常会采用I/O口滤波处理,把偶发的毛刺给过滤掉。二、I/O电平滤波算法。
2024-08-16 14:52:33
404
原创 架构设计-分层思想
分层设计是为了剥离硬件环境的依赖,使软件系统更好复用,当更换硬件方案时,只需要修改底层函数的初始化,抽象层和服务层完全不需要改动,这样极大的减小时间成本,平台能够很快投入使用。框架搭建好之后,就是分支设计,分支依据单向调用原则,只能通过上层一层一层去调用到底层的函数,服务层--->抽象层--->HAL层,每一个服务层的业务功能都按照这样的规格去实现。抽象层:用来隔离底层硬件而设计的层,上层只能通过这个抽象层调用底层函数,底层不能反过来调用上层,只能是单向操作,这样逻辑会比较清晰。一、为什么要分层设计?
2024-08-15 18:30:53
510
1
原创 STM32G070休眠例程-STOP模式
主控是STM32G070,在低功耗休眠模式时采用Stop0模式,通过外部中断唤醒,唤醒之后,即可开启对应的功能输出,另外程序中设计有看门狗8S溢出,这个采用RTC定时6S周期唤醒去喂狗,RTC唤醒喂狗的过程中,设备现象上看不出来。1.进入休眠之前,I/O电平根据电路设置,以降低休眠时硬件功耗;2.进入休眠之前,所有计时及标志位清零;3.唤醒之后,重新初始化一次系统时钟;4.RTC唤醒时,不执行功能输出;2.RTC周期唤醒,外部中断唤醒。1.RTC周期唤醒配置。1.STOP0休眠模式。2.外部中断唤醒配置。
2024-06-24 10:58:23
1064
原创 STM32CubeMX配置-RTC周期唤醒
MCU为STM32G070,采用内部时钟32KHZ,配置为周期6s唤醒,调用回调函数,进行喂狗操作。初始时间、日期、周期唤醒时间配置。调用回调函数,进行喂狗操作。
2024-06-16 22:35:54
1066
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅