自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

孔丙火

不善言谈的我们,只能通过书本汲取营养,用笔表达思想。从单片机到PLC,以及嵌入式,愿我们相互交流,共同进步。不忘初心,方得始终。

  • 博客(34)
  • 收藏
  • 关注

原创 用keil进行debug时,如何让时间准确起来?

只要运用正确,在keil的debug模式,测得的运行时间比用示波器测得的要准确,并且使用方便。按照孔丙火(微信公众号:孔丙火)的测试与理解,keil在debug时,应该是对运行时间进行的计算,应该是比较准的。

2023-01-28 20:16:10 1996

原创 Modbus的通信参数存在flash中,如果改乱了,该怎么办--FreeModbus从站设计(12)

将Modbus的通信参数存储在单片机STM32F103C8T6的flash中,可以简化硬件电路设计,功能扩展也更加灵活。这种方法也有副作用,因为是用通信的方法修改参数,如果用户把上次修改的参数忘记了,岂不是无法建立串口连接了?要么一个一个参数地试,费时费力,要么重新刷单片机的程序,但这需要开发工程师的参与。公众号之前有一篇文章,是讲PLC的上电停止功能的,这里可以做一个借鉴,来解决这个问题。大体的意思,就是为用户保留一个数据命令,当单片机上电的时候,收到这个命令,就采用默认的通信参数运行。

2021-07-09 20:54:05 391 1

原创 如何把Modbus的通信参数存在单片机的flash中-FreeModbus从站设计(11)

作为从站,Modbus-RTU通信的参数主要包括从站地址和串口参数,串口参数又包括波特率、校验位、停止位等,把这些参数存储在单片机的flash里,孔丙火(微信公众号:孔丙火)认为,可以简化电路设计,应用更加灵活。通用串口参数中数据位,在Modbus-RTU通信中是不需要设置的,因为Modbus协议规范规定,Modbus-RTU的数据位必须为8位。介绍了STM32F103C8T6的flash的组织结构,进一步分析了通信参数在flash中的存储位置,阐述了基于HAL库写flash的方法和通信参数修改的基本流程。

2021-07-08 11:40:12 756 3

原创 单片机程序中,Modbus功能码的回调函数如何编写--FreeModbus从站设计(10)

FreeModbus从站设计(10)-Modbus功能码的回调函数如何编写关键词:FreeModbus CubeMX HAL库 串口 功能码此系列的前面几篇文章,主要是阐述了用HAL库生成keil工程、如何将FreeModbus的代码加入keil工程、协议栈的初始化、串口和定时器接口函数的修改等内容,并整理了FreeModbus协议栈调与HAL库函数的调用关系,通过以上这些工作,Modbus的通路(串口和定时器)已经通了,下面就是数据的处理部分了。数据处理部分主要是对各个功能码的回调函数的编写.

2021-06-19 22:05:02 1369 4

原创 为什么有的PLC需要上电停止功能,能防止PLC变砖,可编程控制器 上电停止 串口通信 梯形图

PLC(可编程控制器)在工业控制中使用非常广泛,型号很多,有一部分PLC有上电停止的功能,它们为什么需要这个功能呢?孔丙火(微信公众号:孔丙火)分析了上电停止的具体用途及实现路径,对于没有启停旋钮、没有专用编程口或编程电缆、通信口即作为编程口又作为通用口、通信口同时支持主站和从站设置的PLC,上电停止功能是需要的。同时,这种设计,对于单片机的串口通信设计,具有很好的借鉴意义。

2021-05-19 14:24:07 1354 1

原创 不要小瞧TVS管哦,否则要吃大亏

TVS管是常用的保护器件,但在平时正常环境的测试中,并不能明显地感觉到它的存在,好像有没有TVS管,都一个样。TVS管表示很委屈。TVS管本身就是为了在意外情况(比如瞬间高压串扰)保护电路的,既然是意外,就不会一直存在,平时当然就缺乏存在感了。但在实际应用,尤其是工业应用中,没有它是不行的,分享一个实际项目经历,感受一下TVS管的作用。

2021-05-06 22:48:41 2271 2

原创 当RS485隔离遇见Freemodbus,你碰到问题了吗?

基于RS485物理接口的Modbus总线在工业控制中广泛应用。Freemodbus是一个免费的实用的协议栈,孔丙火(微信公众号:孔丙火)用它实现了一个从站。串口收发信号和RS485芯片的收发使能信号采用光耦进行了隔离,在测试过程发现了偶尔出现TimeOut的问题,经过查找及分析,发现是光耦信号延时导致的,给出了解决方案,并对问题进行了详细分析。

2021-04-20 12:49:52 1797 2

原创 用两张图,详解FreeModbus在单片机串口上的数据收发过程-FreeModbus从站设计(9)

用两张图把FreeModbus在单片机串口上数据收发流程进行了梳理,脉络更加清晰。有了这样一个思路,可以更好地理解,移植FreeModbus的时候,为什么需要修改portserial.c和porttimer.c中的函数,和为什么需要修改串口中断的回调函数。从这篇文章中,也可以看出,采用HAL库是比较简单的,像是中断处理这些内容库函数都已经处理好了,很方便,可以提高开发效率。

2021-04-17 17:48:35 1476

原创 Modbus-RTU的字符时间是发送一个字节数据的时间吗

Modbus-RTU协议中有一个字符时间的概念。Modbus-RTU总线是通过时间间隔来判断一帧数据结束的,3.5个字符时间内没有收到新的数据,则认为这一帧数据结束。那这个字符时间到底是多少呢?确切地说,应该是在偶校验的情况下发送一个byte数据的时间。

2021-04-15 10:55:30 1529

原创 CAN总线和Modbus总线,该如何选择

CAN总线和Modbus总线是工控领域常用的两种现场总线,简单的说哪个好哪个不好是没有意义的,要根据不同的应用场景来做选择。CAN总线是无主结构,在通信方式上更加灵活,且是短帧发送,单帧数据消耗的总线带宽更少,但传输大量数据时效率会降低。Modbus总线是主从结构,只有主站能发起通信,但每帧数据的数据量比较大,在传输大量数据时有优势。实时性方面也不能单纯地说哪个高哪个低,还是要看用户的需求。系统集成怎么选、实时语音传输怎么选、传输故障停机信号怎么选,以3个小案例为基础,描述了该如何在CAN总线和Modbus

2021-04-12 13:10:51 7762

原创 CAN总线是一种基于“先来后到、无损仲裁”机制、多主(无主)结构、具有帧ID、应用数据最多8个字节、采用差分电平的国际标准现场总线

用一句话概括CAN总线的基本特征:CAN总线是一种基于“先来后到、无损仲裁”机制、多主(无主)结构、具有帧ID、应用数据最多8个字节、采用差分电平的国际标准现场总线。虽然没有面面俱到,但体现了CAN总线的重点特色,有利于对CAN总线有一个清晰的认识。

2021-04-08 14:47:40 1505

原创 其实ST的HAL库与FreeModbus移植很配哦--FreeModbus从站设计(8)

用HAL库函数理清Modbus的数据收发流程。阐述了HAL库与FreeModbus协议栈接口的基本框架。最初设想是能不能完全用HAL库的函数来实现的FreeModbus移植。基于HAL库实现vMBPortSerialEnable()这个函数。

2021-03-21 21:33:19 842 9

原创 FreeModbus从站设计(7)-如何让RTU的定时器正常工作起来

在CubeMX工程配置中,已经将定时器2(TIM2)的时钟周期(可以理解为心跳一下)设为50us,Counter Period(产生中断)暂时设为了35,也就是说50us×35=1750us产生一次中断,这个时间就是判断RTU中帧间隔的标准。但在Freemodbus协议栈(遵循Modbus国标)中,这个时间不是固定的,在波特率小于19200bps时,需要具体计算这个时间,当波特率大于或等于19200bps时,这个时间固定为1750us,如图1所示。因此,孔丙火(微信公众号:孔丙火)认为,把它设为固定值是不方

2021-03-20 11:38:01 1177

原创 STM32F103、FreeModbus从站设计(6)-让串口和Modbus初始化的参数同步起来

FreeModbus从站设计(6)-让串口和Modbus初始化的参数同步起来关键词:Modbus FreeModbus STM32F103C8T6 CubeMX 移植1.基本原理在这一篇文章中,孔丙火(微信公众号:孔丙火)主要介绍协议栈初始化,以及与串口相关的代码修改。串口的初始化函数是CubeMx自动生成的,其波特率等参数最好与freemodbus协议栈初始化参数保持一致,这样方便程序的维护和功能扩展,例如,当需要修改通信的波特率的时候,只需要修改一处就可以了,不用先修改串口的初始化参数.

2021-03-18 20:55:00 705 2

原创 STM32F103、FreeModbus从站设计(5)-如何将FreeModbus代码加入keil工程

STM32F103、FreeModbus从站设计(5)-如何将FreeModbus代码加入keil。详细阐述如何获取freemodbus代码,代码的大体结构,如何将freemodbus加入keil工程。讲解了注意事项,全实战演示,实际可用。

2020-12-26 13:44:46 644

原创 STM32F103C8T6、FreeModbus从站的设计与测试(4)——定时器、中断初始化(CubeMX配置)

关键词:Modbus FreeModbus STM32F103C8T6 CubeMX1.串口参数设置我们选择UART2来做RS485接口,UART1作为备用,用来做调试中的串口打印用。串口的参数配置比较简单,不再赘述。注意要启用串口中断,FreeModbus采用中断的方式接受和发送串口数据。2.定时器参数设置采用TIM2来作为FreeModbus的定时器,孔丙火(微信公众号:孔丙火)这里主要实现工业控制中常用的Modbus-RTU功能,RTU协议中是靠时间间隔来判断一个数据帧是否结束的,所以

2020-12-08 15:58:21 1468

原创 STM32F103C8T6、FreeModbus从站的设计与测试(3)——时钟、串口初始化(CubeMX配置)

关键词:Modbus FreeModbus STM32F103C8T6 CubeMX1.开发环境(1)STM32CubeMX,版本:4.27.0,截止写稿时,最新版本已到6,但孔丙火(微信公众号:孔丙火)实在是用不习惯版本5以后的界面,所以还继续用4版本的。图1(2)MDK(Keil),版本:5.17,有部分朋友用的还是4版本的,建议升级到5,在5下装一个兼容包,就可以用5打开4版本的程序。2.时钟及串口初始化(1)新建CubeMX工程孔丙火(微信公众号:孔丙火)认为,这一步

2020-11-09 12:44:58 944

原创 STM32F103C8T6、FreeModbus从站的设计与测试(2)——硬件设计

单片机采用STM32F103C8T6,从孔丙火(微信公众号:孔丙火)的认知来看,这款单片机是当前比较常用的型号之一。UART1用过ISP下载和串口打印,UART2用于RS485通信,整块板子采用DC5V供电,通过AMIS1117转换成3.3V给单片机供电,RS485采用隔离设计,隔离电源采用IB0505S-W75R3,隔离电压是1500VDC,485信号转换及隔离采用ADM2483BRWZ。

2020-11-07 08:56:13 1075

原创 STM32F103C8T6、FreeModbus从站的设计与测试(1)——引言

用FreeModbus协议栈实现一个基于串口通信的Modbus从站,采用什么单片机呢,这个可以随便选,只要有一个UART接口就可以,那就选一个常用的,意法半导体的STM32F103C8T6,Cortex-M3的内核,片上资源对于Modbus协议来说也足够。

2020-10-17 17:46:08 894

原创 关于freemodbus协议中eMBFuncReadHoldingRegister()函数的所谓错误

摘要:网上看到有好心的网友提示,freemodbus协议中的mbfuncholding.c 文件中eMBFuncReadHoldingRegister()函数,有一处错误,即:第185行的“usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] );”应为“usRegCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] );”,我认为这不能算是一个错误,且听我

2020-10-09 22:33:11 2806 1

原创 STM32F103C8T6-CubeMx串口收发程序详细设计与测试(2)——程序规划、代码编写及测试

STM32F103C8T6-CubeMx串口收发程序详细设计与测试。演示程序的功能:通过中断接收串口数据,在1750us时间内没有收到新的字节的话,将收到的数据原封不动地发送出去,以测试串口的完整收发流程。对使用到的函数进行了说明,阐述了各个函数的调用顺序和调用关系,在目标板上对代码进行了测试,结果表明,可以实现预期功能。

2020-10-07 16:44:30 3003

原创 STM32F103C8T6-CubeMx串口收发程序详细设计与测试(1)——CubeMx生成初始代码

STM32F103C8T6-CubeMx串口收发程序详细设计与测试(1)——CubeMx生成初始代码关键词:STM32F103C8T6 STM32CubeMX UART 详细程序设计

2020-08-19 22:09:11 3180

原创 AD(Altium Designer)PCB布线中的“格式刷”,助力快速布局布线

在AD(Altium Designer)进行电路板布线时,孔丙火(微信公众号:孔丙火)经常会碰到电路中有相同功能的模块,比如2路相同的RS485通信电路、多路相同继电器输出电路、多路相同的输入电路等,如果每1路都单独布局布线,费时间,且是重复劳动,有没有像word中那样的“格式刷”功能呢,1路布局布线完成后,其他相同的部分,刷一下就好了,孔丙火(微信公众号:孔丙火)在此篇文章可以帮你解释这个疑惑,提出可行的方法,达到相同功能模块快速布局布线的目的。

2020-08-17 22:59:36 3189 1

原创 CubeMx生成代码第一次下载后,SWD就找不到目标板了,就不能再次下载和调试了,原因查找,CubeMx,download,debug,HAL_MspInit()

用CubeMx建了一个过程,芯片为STM23F103C8T6,生成了代码,都没有问题,连接目标板,用孔丙火(微信公众号:孔丙火)新买的ST-link下载,没有问题,但第二次下载的时候,却显示找不到目标板了,于是怀疑新买的ST-link有问题,换了J-link,同样是找不到目标板,然后各种重新上电,还是没有解决,无意中发现按住reset按钮,让单片机处于复位状态,是可以下载的,于是又把以前正在使用的程序下载其中,没有发现类似的问题,然后开始怀疑是代码的问题。CubeMx,download,debug,HAL_

2019-06-17 15:48:26 2463 4

原创 Altium Designer(AD)中,keepout是一个层,也是一个关键字(参数)

Altium Designer(AD)是一个功能强大的软件,对于大部分初学者或者布简单板子的朋友来说,孔丙火(微信公众号:孔丙火)认为,主要接触到的就是顶层(Toplayer)、底层(Bottomlayer)、顶层丝印(Topoverlayer)、底层丝印(Bottomoverlay)和Keepoutlayer层,板子轮廓,对于小白来说,都是在Keepoutlayer上画的。但并不是所有画在Kee...

2019-06-14 14:43:14 23446 9

原创 简说Modbus-RTU与Modbus-ASCII

Modbus在串行总线通信中的协议有RTU和ASCII两种。两种协议的不同之处,孔丙火(微信公众号:孔丙火)认为,最简单的讲,就是:RTU是直接发送数据,二进制代码,其表示的物理意义,需要发送端和接收端进行约定;ASCII发送的数据是用于表示字符的二进制代码。

2019-06-12 16:01:55 6714 2

原创 41F继电器座的解剖与妙用

摘要:如果继电器不是焊在电路板上使用,就需要有个插座,这样方便接线,否则继电器的管脚是没法固定导线的。实际项目中使用了HF41F的继电器(宏发),在选择继电器座的时候,有一点感想,分享给大家。继电器是宏发的HF41F系列的继电器,具体型号:HF41F-24-ZS,继电器座型号:41F-1Z-C2-1。最近选了一款继电器,具体型号:HF41F-24-ZS,由于不是用在PCB上的,所以需要选一款座...

2018-08-15 15:28:56 5622 2

转载 精彩分享-CAN总线与485总线比较分析

文章转自:http://www.elecfans.com/pld/jiekou_zongxian_qudong/587211_2.html,关注微信公众号:孔丙火,查看更多精彩内容。CAN总线原理  CAN总线以广播的方式从一个节点向另一个节点发送数据,当一个节点发送数据时,该节点的CPU把将要发送的数据和标识符发送给本节点的CAN芯片,并使其进入准备状态;一旦该CAN芯片收到总线分配,就变为发送...

2018-06-21 17:18:22 763

转载 精彩文章-CAN总线设计要点概述

文章转自:https://www.cnblogs.com/spoorer/p/6649303.html,关注微信公众号:孔丙火,查看更多精彩内容。前言 CAN总线的应用在现在看来越来越广泛,我厂设备从最初的ARM9与ARM7平台、期间升级过度到CortexA8与Cortex M3平台,再到现在的Cortex M4平台,围绕CAN进行了一系列产品的开发,CAN总线的稳定性是毋庸置疑的。 CAN总...

2018-06-20 18:29:12 1470 1

原创 CAN总线波形中ACK位电平为什么会偏高?

如果CAN总线中有多个节点,在某一点测试CAN总线的波形(CANH和CANL之间)时,会发现在一帧数据的末尾ACK位的差分电平会偏高。网上有关于此问题的一些描述和解释,但孔丙火(微信公众号:孔丙火)认为欠妥,因此对这个问题重新分析,得出结论:凡是正确接收到数据的节点都会回复ACK位(显性电平),用示波器测试,展现出来的应该是驱动能力最强(电平最高)的节点的电平,因此,如果发送节点距离测试点较远,其测试出来的电平会相对较低,ACK位相对较高,就会形成ACK位差分电平偏高的现象。

2018-06-13 17:10:19 3764

原创 CAN总线的显性电平为什么能覆盖隐性电平?

在CAN总线中,显性电平是强驱动,隐性电平时弱驱动,因此当有的节点发送显性电平有的节点发送隐性电平时,总线上呈现的肯定是强驱动的状态,这就是CAN总线显性电平可以覆盖隐性电平的原因。

2018-05-29 18:21:12 7831 5

原创 CAN总线的显性电平与隐性电平

用示波器测量CANH和CANL上的差分波形,可以清晰的看到有高低电平,在短距离通信中,高电平在2-4V之间(实测),低电平为0V。那么,从波形上看,最显眼的肯定是高电平,不显眼的是低电平,那么高电平就是显性电平,低电平就是隐性电平。

2018-05-24 12:04:25 27506 1

原创 CAN总线、自然与人

根据孔丙火(微信公众号:孔丙火)的理解,CAN波形中的冲击是由于电平陡然变化,在传输双绞线上电波反射造成的,回波反射的原理应该是很复杂的,查阅了相关文献,理论公式一大堆,什么基尔霍夫定律等等,总之,对于我们这些搞应用研究的人来说,一句话,看不懂,但有没有其他方法可以简单理解这种现象呢,我想是有的,下面列举几种比较通俗的解释,有的用自然现象解释,有的用人性解释,反应了CAN总线作为自然界的一部分,就会遵循自然规律,有的“道法自然”意思。

2018-05-12 15:16:05 894

原创 AD(Altium Designer)软件中原理图自制模板(图框)的妙用

文章在微信公众号同步推出,微信公众号:孔丙火,关注欣赏更多文章。在实际生产中,如果用CAD出产品的原理图出现问题或效率低下时,试试本文的方法,可以提高效率,直接将AD(Altium Designer)软件中的原理图图框设计为自己需要的图框,可以直接打印或存档。当今世界的特点,尤其是当代中国,是一个快和一个大,速度快,慢了就会被淘汰,信息量大,各种信息爆炸。想要快,就要提高效率。在产品出图过程中,原...

2018-03-12 16:44:26 19740

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除