- 博客(71)
- 收藏
- 关注
原创 使用USB转485转接器,从机不响应
3. 双击红色圆形“UTEK_2603...exe” 文件,按提示安装4. 查看端口号,设备管理器->端口(COM和LPT)->XR21B1411 USB UART,正确显示即安装完成(请确保串口线已插入)更改模式设备管理器中XR21B1411 USB UART右键属性——Port Settings中进行勾选对应模式。在调试485通信时,bms不响应主机,usb转485转换器接收指示灯常亮,现象如下,通过更新驱动程序解决。422 接 T/R+、T/R-, RXD+、RXD-485 接 T/R+ T/R-
2024-08-27 18:24:12
90
原创 modbus协议举例(06功能码)
在这个示例中,我们展示了如何通过Modbus RTU协议的功能码06向从设备写入一个寄存器的值。通过构建正确的请求帧并解析响应帧,可以实现与Modbus设备的通信。
2024-08-27 17:10:47
203
原创 modbus协议举例(03功能码)
在这个示例中,我们展示了如何通过Modbus RTU协议读取从设备的保持寄存器。通过正确构建请求帧并解析响应帧,可以实现与Modbus设备的通信。
2024-08-27 15:21:22
325
原创 单片机ADC常见的几种滤波方法
每次采新值时判断:若本次值与上次值之差A,本次无效,用上次值代替本次。适用有较大滞后时间常数和采样周期短的系统,对滞后时间常数小,采样周期长、变化慢的信号不能迅速反应其所受干扰。对递推平均滤波的改进,不同时刻的数据加以不同权重,通常越新的数据权重越大,这样灵敏度高,但平滑度低。克服波动干扰,对温度等变化缓慢的被测参数有良好的滤波效果,对速度等快速变化的参数不宜。若计数器溢出,则采样值替换当前有效值,计数器清0。克服脉冲干扰,无法抑制周期性干扰,平滑度差。
2024-07-19 16:57:40
281
原创 彻底搞定C指针系列
运行一下代码int main()int i = 39;return 0;运行结果:39618561996运行测试代码:int main()int i =30;int *pi;pi = &i;return 0;运行结果:-316014332-31601433230分析上述代码: int *pi;我们使用“int *pi”声明指针变量—— 其实是在 内存的某处声明一个一定宽度的内存空间,并把它命名为 pi。pi = &i。
2024-07-17 22:32:12
872
原创 结构体和联合体的区别
结构体的定义包含了结构体的名称和结构体成员的列表,每个成员都有一个名称和一个数据类型。联合体的定义使用关键字‘union’,后面紧跟联合体的名称和一对花括号,括号中定义了联合体的成员变量,每个成员变量有自己的名称和数据类型。// 注意:联合体的不同成员共享同一块内存空间,赋值一个成员会影响其他成员的值。
2024-07-17 18:46:37
885
原创 静态函数 (static)
关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。[extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……
2024-07-16 22:47:21
385
原创 BAV99W 器件的作用
www.alldatasheet.com一看,原来世界这么精彩,能承受75V电压以及100V冲击,此类封装mini,共有如下4中不同的类型,1位以及2位的所有组合,包括BAL99,BAW56,BAV80,BAV99,还是我们孰知的SOT23-3封装,基本满足了我们所有的设计,那么神奇。同样,当电压低于0V,另一个二级管导通,还是保护电路。最后比较崩溃,在搞一个LCD的电源驱动IC,传说中的MP1530。保护作用:这样信号端的电压如果大于电源,能够泄放到电源,如果小于地为负,泄放到地,使两端电压稳定。
2024-07-16 18:30:00
768
原创 寄存器位操作方法
或者 a &= (~(0x1ff<<15) | ~(0x07<<3));或者 a |= ((0x1ff<<15) | (0x07<<3));//这个宏分为2部分:(x & ~(~(0U)<<(m-n+1))<<(n-1)) >> (n-1)a |= (937<<7);a = a | (0b11111<<3) 或者 a |= (0x1f<<3);
2024-07-15 20:55:42
409
原创 功率继电器【HF46F】
当电源开关打开时,电源电压(PWR_5V)将通过电源开关连接到三极管Q1的基极,使三极管Q1导通。此时,三极管Q1的集电极电压降低,使得2N7002的栅极电压升高,从而使2N7002导通,继电器线圈得到供电,继电器K1吸合。当电源开关关闭时,电源电压(PWR_5V)不再通过电源开关连接到三极管Q1的基极,三极管Q1截止。此时,三极管Q1的集电极电压升高,使得2N7002的栅极电压降低,从而使2N7002截止,继电器线圈失去供电,继电器K1释放。原理图如下,原理图中使用的继电器为HF46F5H,
2024-07-15 19:03:28
317
原创 NMOS和NPN型三极管是不是同一个东西?
NPN型三极管是一种双极结型晶体管,它使用电流控制电流流动的方式工作。它的结构主要包括三个区域:发射极(Emitter)、基极(Base)和集电极(Collector)。其中,发射极和集电极之间形成通道,而基极则用来控制发射极和集电极之间的通道是否导通。N沟道MOSFET是一种场效应晶体管,它利用电压控制电流流动的方式工作。它的结构主要包括三个区域:源极(Source)、漏极(Drain)和栅极(Gate)。其中,源极和漏极之间形成通道,而栅极则用来控制源极和漏极之间的通道是否导通。
2024-07-15 18:34:52
462
原创 SN75176的引脚功能
芯片的主要作用:将串口信号转换成485信号,用于数据传输,撰写代码过程中,需要将2脚 /RE:接收器使能端,3脚 DE:驱动器使能端必须全部使能,相当于这两个引脚接到主控芯片的某个引脚上,这个引脚置1,才能够进行正常的通信。6、7脚 A、B:输入输出总线接口;A为非反相端、B为反相端。2脚 /RE:接收器使能端。3脚 DE:驱动器使能端。1脚 R:接收器输入端。4脚 D:驱动器输出端。8脚 VCC:5V电源。
2024-07-14 21:08:43
165
原创 嵌入式必读的10本书
在C语言领域,它的地位不言而喻,销量已达数百万册,可谓是经典中的经典。但是,如果你的项目越来越庞大,任务多了,要协同工作的事情也变得复杂了,这时候就像你写一封长篇小说,手写字已经hold不住了。读完C primer plus,你已经对C语言比较了解了,可以考虑进一步精进,C语言三剑客是广大C语言学习者必读经典,分别是《C和指针》、《C专家编程》、《C缺陷与陷阱》总的来说,这本书比较适合初学者,因为它的语言幽默风趣,常常用生动的例子来解释概念,相较于其他类似的书籍更具趣味性。
2024-07-11 18:20:05
263
原创 CAN通信波形【示波器抓取】
由此可以判断电路板上的CAN通信模块出现故障,需要重点检查CAN芯片是否烧掉,在电路板上电的情况下,发现电路板的CAN芯片发热,在更换CAN芯片的情况下,CAN通信恢复正常。在测试bms系统过程中,在上位机发现无法读取CAN通信,尝试使用示波器抓取CAN通信波形,,去确定CAN通信是否正常。1、将示波器的两个接口(接地和探头)分别接在can总线的两条线(CAN_H和CAN_L)上,上图为正常CAN通信的截图,如果CAN通信异常的情况下,就不会显示波形。做一想要从车上测出can总线上的数据还不太容易。
2024-07-02 21:50:34
501
原创 UART和USART的区别
此外,两端的地线需要连接在一起,以确保信号的参考电位相同。USART支持同步模式,因此USART 需要同步始终信号USART_CK,一般在单片机里面同步信号很少使用,所以USART和UART使用方式是一样的,都使用异步模式。在单片机或者嵌入式系统中,UART通常通过芯片上的引脚来连接,例如MCU的TX引脚连接到外部设备的RX引脚,MCU的RX引脚连接到外部设备的TX引脚。关闭和清理:在程序结束或者不再需要使用UART时,需要关闭UART模块,并进行相应的资源清理工作,以释放相关的资源和关闭相应的中断。
2024-06-27 21:00:19
864
原创 派能协议,逆变器测试问题记录
根据派能协议分析,标红的为最大充电电流,对应为03B6,转为十进制为950(精度为0.1A),对应95A,逆变器显示475A,变大了5倍。根据派能协议分析,标红的为最大充电电流,对应为04B0,转为十进制为1200(精度为0.1A),对应120A,逆变器显示120A。根据派能协议,报文标黄的对应充放电状态,30 30对应的数据为0 0,说明充放电状态全部置0,导致逆变器无法逆变。问题二:逆变器显示最大电流为上传报文的5倍,实际报文上传最大电流为95A,逆变器显示电流值为475A;
2024-06-13 20:00:00
810
2
原创 出现multiple definition of `TlM 20ms Flagmultiple definition of ‘TlM 500ms Flag多重定义,解决方法
主要目的:通过定时器100ms,实现LED灯翻转。主要涉及三个文件main.c,pit_lld_cfg.h,pit_lld_cfg.c。解决方法:不要在头文件中定义变量,去.c中定义,然后其他要用的文件把变量extern 进来。再将变量extern,就不会报错了。将这个工程运行,出现错误,多重定义。操作:将变量放在.c定义后,会报错。如下图所示,main.c。
2024-06-13 19:45:00
280
原创 工作总结1
通过不断学习和实践,我提高了焊接能力以及问题处理的能力,能够在产品出现问题时,学会考虑处理问题,例如在bms测试过程中,其中一块主控板的调试CAN出现连接不了上位机的问题,是CAN收发器烧掉造成的。在逆变器与bms通讯出现问题时,通过抓取逆变器与bms之间的报文,由于两者采用的派能协议,独立分析派能协议,其中一台bms测试过程中出现电流放大5倍的问题,例如发送的报文电流数据为95A,逆变器显示的电流值为475A,是由于重复发送报文导致;在未来的工作中,我将继续反思自己的不足,努力提升自己的处理问题的能力。
2024-06-12 23:00:00
559
原创 单片机常用C语言知识点
在右移运算中,数的二进制表示中的所有位向右移动指定的位数。具体来说,在使用 extern 关键字声明一个变量时,表示该变量并非在当前文件中定义,而是在其他文件中定义,当前文件中只是引用该变量。在左移运算中,数的二进制表示中的所有位向左移动指定的位数,并在右侧用零填充。将现有数据类型定义新的名称或别名的关键字,通过 typedef 关键字,我们可以为已有类型创建一个新的名称,使得代码更易读和易维护。或操作(|):将两个二进制数的对应位进行逻辑或操作,结果为1的位置置1,为0的位置留下。
2024-06-12 20:00:00
871
原创 conflicting types for 错误问题
函数:serialmsg_t sd_lld_write(SerialDriver *sdp, vuint8_t *buffer,vuint16_t len)在编译过程中,发现报错,可以发现serial.c和serial.h编写的函数存在不一致的问题,只需要修改成一致就不会报错了。怎样编译都会出现一个conflicting types for ’xxx‘的错误。头文件中声明 void Hanlder(const char * buf);出现这个错误的原因: 头文件声明和定义参数稍有不同。
2024-06-05 19:14:07
589
原创 低边驱动与高边驱动
低边驱动(LSD): 在电路的接地端加了一个可控开关,低边驱动就是通过闭合地线来控制这个开关的开关。容易实现(电路也比较简单,一般由MOS管加几个电阻、电容)、适用电路简化和成本控制的情况。高边驱动(HSD):在电路的电源端加了一个可控开关。高边驱动就是控制这个开关的开关。高边驱动器的设计比同等的低边复杂一些,一个原因是它通常使用(NMOSFET)作为功率元件。低边驱动通常用于与动力总成相关的负载,例如电机,加热器等;高边驱动经常用于燃油泵和车身相关功能,如座椅、照明、雨刷和风扇等。
2024-05-31 21:30:00
1021
原创 光耦的工作原理
光耦主要由发光二极管和光敏三极管组成,电信号进来之后,点亮发光二极管,转为光信号,光信号照在光敏三极管中,三极管又会导通,又把光信号转为电信号。电信号→光信号→电信号。主要有两方面的作用:1.隔离左侧电信号的干扰信号(仅限小的干扰信号,大的干扰信号仍然会通过)2.隔离右侧电信号的干扰信号(左侧为控制端,右侧为负载端,负载的干扰不会影响控制端,起到隔离作用)。
2024-05-29 21:30:00
831
原创 菊花链通信技术整理
首先简单的说一下菊花链以及菊花链的应用,在目前国内的BMS开发中,我们应用最广泛的目前还还是分布式,只是越来越集中而已,真正完全集中式的BMS其实比较少。BMS一般分为主板和从板(有些将电流采样、绝缘检测等功能单独拿出来做一个电流模块或者绝缘检测模块),在菊花链出来之前,主从板上都有MCU,从板采集单体电池电压和温度,通过CAN总线传给主板。而在目前成本日益严峻的今天,怎么实现降本就是各个主机厂以及芯片厂所重点关注的内容,所以菊花链出现了。在电子领域,菊花链是一种配线方案。
2024-05-28 17:01:04
3713
原创 电流采样(分流器与霍尔传感器)
霍尔效应霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子迁移率等重要参数。简单原理如图1所示,半导体薄片两端通以控制电流I,垂直方向施加磁感应强度为B的匀强磁场,d为半导体材料的厚度,k为霍尔常数,它与半导体材质有关,则在垂直于电流和磁场的方向上,将产生电势差为UH的霍尔电压,它们之间的关系为。霍尔元件。
2024-05-27 19:11:48
3845
2
原创 linux常用命令
首先看一下根目录/的文件,每个文件夹的作用。存储一些二进制可执行命令文件,/usr/bin也存放了一些基于用户的命令文件。存储了很多系统命令,/usr/sbin也存储了许多系统命令。超级用户root的根目录文件。普通用户默认目录,在该目录下,每个用户都有一个以本用户名命名的文件夹。存放Ubuntu系统内核和系统启动文件。/mnt通常包括系统引导后被挂载的文件系统的挂载点。存放设备文件,我们后面学习Linux驱动主要是跟这个文件夹打交道的。
2024-04-20 23:49:53
965
1
原创 MODBUS-RTU协议
一个Modbus通信总是由主机启动,没有收到从主节点请求从节点不会发送数据,从节点不会互相通信。BMS做从机,地址默认为1,支持0x03读、0x04读、0x06和0x10写功能码。BMS做从机默认地址为1,默认波特率19200、数据位8位、无奇偶校验、停止位1。系统最高单体电压簇内序号。0:待机1:充电3放电。1:复归,0:不动作。1:关断,0:未关断。1:互锁,0:未动作。1:消音,0:未动作。1:复位,0:未动作。1:急停,0:未动作。系统最高单体电压簇号。1:禁止,0:不禁止。1:使能,0:不使能。
2024-02-25 22:18:16
1083
原创 git使用方法(简易版)
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init。git add *.txt ----------------添加某种类型的文件到暂存盘。git add my.txt------------添加某个文件到暂存盘。git add ---------------------添加到暂存盘。git checkout xxx--------从暂存盘取回到工作区。git add . --------添加任意类型的文件到暂存盘。
2024-01-31 19:25:43
626
原创 SOC下一步测试内容与预期目标
在完成新SOC算法的程序下载后,需要对电池包的实际使用场景进行模拟,多数情况下,电池包充满之后,会静置一段时间,然后进行放电,放电过程中,放电电流会发生变化,当SOC降至30%左右,停止放电。电池包的容量也受到充电和放电倍率的影响,考虑在不同充电、放电倍率的SOC的数值变化情况,观察充电、放电倍率在0.1C、0.2C、0.3C、0.4C不同情况下的SOC情况,对比在不同充电倍率或者放电倍率下的SOC数值。3、电池包在放电状态下,SOC低于40%,修改放电电流的数值,SOC迅速降至0%;
2024-01-31 15:59:50
1224
原创 增加CO气体报警、氢气报警以及烟雾报警
标题:增加CO气体报警、氢气报警以及烟雾报警。内容:通过ADC采集通道,实现传感器电压的采集,通过对电压进行判断是否报警,(理论上应该可以计算出气体浓度,通过气体浓度来判断是否报警)。
2024-01-21 14:19:06
481
原创 温度采样【通道选通】S9KEAZ128的PTA2和PTA3引脚无法拉高
1、问题记录:由18串温度采样修改成32串温度采样,增加一路adc采样,通过cd4051控制通道选通,代码中增加了相应的代码,发现增加的最后8路温度不能够控制,以24串为例,给温度传感器增加温度,相应的采集的温度信息并没有发生变化。最后通过对比24串温度对应的通道选通的引脚的高低电平是否正常,发现引脚的高低电平与实际代码中设置的不一样,通过下述代码,对引脚进行强制拉高,发现PTD2能拉高,PTA2和PTA3无法拉高;通过查看网上资料,问题得以解决。主要是由开漏引脚造成的。
2024-01-20 19:45:03
487
原创 soc算法【周末总结】
在放电过程中,在开始阶段电压一直缓慢降至3.0V左右(中途两个迅速升高过程原因1.错误设置成充电模式,2.系统断电修改SOC数值),当放电过程中,电池包电压降至3.0V以下,电压迅速下降,下降至2.6V左右,科威尔设备停止放电。在静置状态下,电压一直停留在3.276V,在开始放电过程中,电压缓慢降至3V,在电压下降至3V以下,电压迅速下降至2.6V,科威尔设备停止放电,电压又迅速回升至2.9V附近。手动修改SOC数值,SOC从38%修改成70%,电压下降至2.6V,SOC停留在48%,不再下降。
2024-01-13 22:48:15
1178
原创 CAN通信(报文测试)
问题:对安全模块的程序进行修改,将18串采样温度改成32串采样温度,相应can通信的帧数存在一定的变化,利用广成科技CANtest上位机软件或者内部上位机观察报文发送和接收情况。
2024-01-07 15:04:40
797
原创 增加SOC优化函数过程中,出现程序跑飞现象
接下来就针对这个函数进行调试。在IAR调试过程中,发现跑到某个位置,数组变量不能赋值,只要给数组变量赋值,程序就跑飞,数组P_x[9]和P_x_half[9]不能赋值。分析原因:在SOC优化函数中,定义了大量float型的数组,同时这些数组又进行了大量的递归调用,就造成了栈溢出的问题。2.SOC需要手动校准问题,在出厂的时候,会对soc进行手动校准一次,用户在使用产品之后,就无法在对SOC进行校准。在源代码基础上,增加SOC优化函数,之前采用的安时积分进行SOC数值的计算,基于两个方面提出SOC优化函数。
2024-01-07 14:09:05
461
原创 C/C++使用过程中的溢出问题
内容:在C/C++程序里有一类非常典型的问题,那就是:溢出问题。现在分别来分析一下常见的数组溢出,整数溢出,缓冲区溢出,栈溢出和指针溢出等。
2024-01-07 12:53:27
1179
原创 bash-4.3$ 虚拟机终端窗口
首先需要解释一下的是之所以会出现[root@localhost ~]#的提示字符,是因为系统默认设置的变量中包含了命令提示字符即PS1的设置,而在login shell后会加载宿主目录下的.bashrc文件去读取变量设置。一般来说则有可能会出现误删的情况(新手可能会在root界面放置很多文件,而在删除时则很有可能将其宿主目录的文件全部删除,导致命令提示字符出现bash-4.3$)bash-4.2# cp /etc/skel/.bashrc /root //拷贝文件至宿主目录下。
2023-12-25 19:48:55
536
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人