自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Terrys0518的专栏

一只特立独行的猪

  • 博客(58)
  • 资源 (1)
  • 收藏
  • 关注

原创 EtherCAT偏移时间的理解

在使用TwinCAT测试伺服时,有一个参数引起我的重视。上图为TwinCAT上设置的偏移时间的接口从站侧观察,在EtherCAT的DC模式下(同步模式),从站先使用PDI中断接收主站发来的数据(帧解析由ESC完成),然后在DC中断(一般sync0中断)处理数据,比如开关一个IO 或者写入指令到设备的控制环等等。这里的PDI和Sync0中断的间隔时间,就是所谓的偏移时间。上图横轴为时间,纵轴为设备报文的位置结合主站看(上图),主站定时发送数据帧,从站接收数据帧,距离越远的从站,接收

2022-01-12 15:36:24 3732 2

原创 二次插值

运动控制时,设备实际接收到的指令为周期性不连续信号,为了进一步提高设备的响应和增强效果,我们可以通过插值的方式“预判”新到来的位置,一般可以通过一次插值的方式完成,但实际使用中总有小的“毛刺”现象,现扩展为二次插值,实际使用效果更好。已知系统等时收到数据(x1,y1),(x2,y2),(x3,y3),在下一个数据?(x4,y4)到来之前,需要插入中间的数据。方案一:一次插值法使用前一次的斜率K,结合时间估计后面的数值K=y3-y2x3-x2yx=K*t- x3+ y3 (t为当前时间).

2021-03-02 10:10:58 11501 2

原创 C语言技巧一 全局变量定义

假设文件A.c 定义了一个全局变量 int g_var1; 在文件B.c 中引用的话,需要先声明一下外部引用 extern int g_var1;如果全局变量很多的话,或者多个文件都使用了该全局变量时,一个个声明外部引用很麻烦和显得臃肿不堪。一般水平的用法定义一个头文件,在头文件中声明extern int g_var1;对于程序文件定义该变量 int g_var1;在其他文件中使用该变量时,只需包含该头文件即可。新奇的用法变量直接声明在头文件中,使用宏来控制头文件 A...

2021-02-26 15:52:17 6856

原创 EtherCAT ESI文件中Imagedata16X14图像的编辑

使用Altova XMLSpy 打开EtherCAT从站设备的Xml文件,里面有个厂商和设备的Logo小图片,如何看到图片内容和编辑图片呢1. 根据首位的两个字节,424D对于Ascii码为“BM”,表示这是个bmp格式的文件。2. 使用HexEdit工具,新建一个空白的文件,这里使用了软件Hex Editor Neo工具,将图像数据粘贴到hex文件中。3. 文件另存为logo.bmp,即bmp格式的文件4. 用画图板打开logo.bmp,就可以看到图片内容,修改后保存,反向操作可...

2021-02-25 16:56:36 2198 2

翻译 VS2012下配置WinPcap环境,运行SOEM

1. 下载并安装WinPcap运行库http://www.winpcap.org/install/default.htm2. 下载WinPcap开发包3 新建VisualC++的Win32控制台应用程序,设置为空项目4打开项目属性,C/C++ --> Preprocessor --> Preprocessor Definitions 添加WPCAP和HAVE_REMOTE这两个宏定义5 打开项目属性,Linker --> Input --> Addi...

2020-12-23 15:35:00 681

翻译 变频器VF模式和矢量模式的区别

变频器主要支持四种模式:无PG的V/F模式,有PG的V/F模式,无PG的矢量控制模式,有PG的矢量模式。 PG 是指旋转编码器。这四种控制模式主要的技术指标如下表所示。控制模式 无PG VF控制 有PG VF控制 无 PG 矢量控制 有 PG矢量控制 调速范围 1 : 40 1 : 40 1 : 100 1 : 1000 速度控制精度 ±2~3% ±0.03% ±0.2% ±0.02% 起动转矩 3.

2020-12-09 10:31:49 14497

原创 Field Memory Management Unit(FMMU)

一. FMMU把从站分散的数据内容映射到主站连续的内存,减少子报文数量,便于主站应用层的编写。FMMU由主站配置,主站包含一个2^32大小的逻辑地址空间,每一个从站的FMMU分别映射对应的地址空间。二. 主站从站连接方式如上图第从站1001 的FMMU0配置所示,将从站ESC内存地址起始 0x1800映射到FMMU地址10000,长度2字节,属性为写,即主站只需操作对逻辑地址10000写入两个字节,实际是对从站的内存0x1800地址写入两个字节。同理,从站1001的FMMU1配.

2020-12-04 11:17:40 1870

翻译 C语言状态机编程进阶

状态机的一般实现一般的状态机实现如下,定义几个不同的状态,通过switch...case...语句实现不同状态的执行。一般小型状态机使用上述方式实现,该方法的缺点,一是如果系统稍微复杂一些,将需要定义很多状态,同时增加case的数量。二是swich...case...将变得很复杂臃肿。状态机的高级实现一个新的实现方法是使用函数本身作为执行的状态和保存当前的状态到函数指针。使用函数名作为状态,这种方式的循环调用函数 state_machine_run(void * p...

2020-10-21 21:57:06 1015 3

原创 EtherCAT从站 SII结构说明

EtherCAT从站简称ESC,ESC在上电过程中,会自动加载EEPROM中前7个字(1word = 2 byte)到ESC寄存器。ESC寄存器总是可以被EtherCAT主站通过EtherCAT总线访问,无论PDI接口寄存器配置什么值。EEPROM存储器(SII信息)中的前7个字,将决定ESC的工作模式。下图为SII信息,已经其前7个字对应ESC寄存器的映射关系。ESC寄存器信息参考文档ethercat_esc_registers.pdf如PDI等等因此SII信息的前7.

2020-09-21 10:20:22 2750

原创 关于数组元素地址的计算

最近发现一个奇怪的现象,关于数组地址的计算,这是什么原因呢?

2020-07-31 08:47:49 854 2

原创 EtherCAT SDO分段下载/上传说明

ETherCAT COE (CANOpen)的 SDO 属于应用层通讯协议,基于同步管理器(SM)的邮箱实现的,主站可以通过SDO实现一下功能。对应邮箱消息数据格式如下其中分段下载和分段上传请求和响应较为特殊,ETG1000-4手册上对整个通讯过程讲解不够清晰,下面是我个人的理解。 分段下载的过程①. 客户端发送“常规下载请求”,包含数据(写满SM设定缓存区)给服务器 --> 服务器接收到数据后,判断 Complete Size > Si...

2020-06-10 20:03:35 2626 3

转载 C++ 静态成员

在类中,static 除了可以声明静态成员变量,还可以声明静态成员函数。普通成员函数可以访问所有成员(包括成员变量和成员函数),静态成员函数只能访问静态成员。编译器在编译一个普通成员函数时,会隐式地增加一个形参 this,并把当前对象的地址赋值给 this,所以普通成员函数只能在创建对象后通过对象来调用,因为它需要当前对象的地址。而静态成员函数可以通过类来直接调用,编译器不会为它增加形参 this,它不需要当前对象的地址,所以不管有没有创建对象,都可以调用静态成员函数。普通成员变量占用对象的内存,静态成

2020-06-03 20:50:16 179

原创 EtherCAT 之邮箱

EtherCAT特点由于工作需要, 最近在学习EtherCAT总线,对于主站和从站的通信,发表一下我个人的理解。1. EtherCAT为保证低延迟高响应,不可能像MODBUS一样用软件解析数据包再转发的模式,而是采用“高速火车”不停车上下车的方式,不停车指的是底层转发完全靠硬件实现流处理,自动加载和提取数据,上层需配置相应的寄存器即可。2. 通信兼容,最大化兼容以太网现有的设备,配置好上位机软件,可以直接使用电脑控制(需要一些实时性优化)。从站协议状态机(硬件)底层由硬件状态机处理,

2020-05-25 15:16:52 9051 1

原创 EtherCAT分布式时钟同步过程的理解

分布式时钟(Distributed Clock,DC)可以使所有EtherCAT设备使用相同的系统时间,从而控制各个设备任务的同步执行。从站可以根据同步的系统时间产生同步信号,用于中断控制或触发数字量输入/输出。支持分布式时钟的从站称为DC从站。时钟术语的描述Local system time 即本地系统时间,每个DC从站的本地时钟经过补偿和同步之后,都产生本地系统时间,分布时钟同步机制就是使各个从站的本地系统时间保持一致。参考时钟与本地系统时钟对应。 参考时钟和从时钟 EtherCAT...

2020-05-24 11:56:46 12436 3

转载 Qt qmake 构建 运行的区别

qmake:根据实际环境创建项目文件.pro 并且运行qmake生成适当的Makefile 构建:构建是增量编译,只编译有变化部分 重新构建:是把所有部分都重新编译 运行: 有改动则根据已有的Makefile进行编译,执行构建和重新构建时如果没有Makefile,会根据.pro文件等生成Makefile后再编译所以一般运行顺序应该是:qmake-构建-运行如果有配置发生改变 运行顺序应该是...

2020-05-08 07:22:32 425

原创 Qt(C++)静态成员函数

在类的定义中,还有一种方便程序设计的特殊成员,静态成员。它实现了一个类的不同对象之间数据和函数的共享。静态数据成员包括静态数据成员和静态函数成员。Static Public Members ofQTime Class QTime currentTime() QTime fromMSecsSinceStartOfDay(...

2020-05-07 20:59:05 1687

转载 QT 信号和信号槽

信号和信号槽机制(signal/slot)是Qt的编程基础,是用来在QObject类或其子类间通讯的方法。作为一种通用的处理机制,信号与信号槽非常灵活,可以携带任意数量的参数,参数的类型也由用户自定。同时其本身也是类型安全的,任何一个从QObject或其子类继承的用户类都可以使用信号与信号槽。信号的作用如同Windows系统中的消息。在Qt中,对于发出信号的对象来说,它并不知道是谁接收了这个信...

2020-05-07 16:13:29 246

原创 插入排序&堆排序&快速排序实现

为什么要排序1. 有时应用本身就需要对信息进行排序。例如对财务报表进行排序2. 很多算法通常把排序作为关键子程序,关键技术也体现在排序算法中算法 最坏情况运行时间 平均情况/期望运行时间 插入排序 O(n^2) O(n^2) 堆排序 O(n lgn) -- 快速排序 O(n^2) O(n lgn) 1. 插入排序/*...

2020-04-24 22:34:18 335

翻译 晶闸管阻容吸收电路

在实际晶闸管电路中,常在其两端并联RC串联网络,该网络常称为RC阻容吸收电路。我们知道,晶闸管有一个重要的特性参数-- 断态电压临界上升率dv/dt。表明晶闸管在额定结温和门极断路条件下,使晶闸管从断态转入通态的最低电压上升率。若电压上升率过大,超过晶闸管的电压上升率的值,则会在无门极信号的情况下开通。即使此时加于晶闸管的正向电压低于其阳极的峰值电压,也可能是会发生导通情况。因为晶闸管可以看成...

2020-04-09 14:10:33 5425 1

原创 FLASH模拟EEPROM的方法

工业中经常使用EEPROM(电可擦除可编程存储器)来存储更新数据,为降低成本,可以使用FLASH代替。EEPROM 仿真可以通过多种方式实现,但要注意 Flash 限制和产品要求。下面详述的方法要求为非易失性数据分配至少两个相同大小的 Flash 扇区:一个在开始时擦除,支持逐字编程;另一个在需要对前一扇区执行垃圾回收时接管工作。占用每扇区前半个字(16 位)的头字段指示扇区的状态。在本...

2020-04-08 22:28:25 8742 5

原创 马尔可夫过程实验(随机游动思想)

使用Jupyter Notebook实验一个简单的马尔可夫链模型,一是学习一下概率论,二是熟悉一下python语法import numpy as npimport matplotlib.pyplot as plt#模拟一维随机游动#假设一醉汉在横坐标{1,2,3,4,5}上做随机游动,且仅在整数秒等时刻发生游动#如果醉汉在i点,则下一秒又1/3概率在原点,1/3概率向左,1/3向...

2020-03-29 21:35:21 1433 2

转载 AT指令表(中文详解)

一 . 一 般 命 令1.AT+CGMI 给出模块厂商的标识。2.AT+CGMM 获得模块标识。这个命令用来得到支持的频带(GSM 900,DCS 1800 或PCS 1900)。当模块有多频带时,回应可能是不同频带的结合。3.AT+CGMR 获得模块的软件版本。4.AT+CGSN 获得 GSM 模块的 IMEI(国际移动设备标识)序列号。5.AT+...

2020-02-21 13:45:46 4365

原创 STM32系列单片机USB下载程序(ISP编程)

一. 准备 1. FlyMcu 软件,选择DTR高电平复位,RTS低电平进入BootLoader 2. 原理图增加USB转串口芯片(CH340G)二.说明 STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)主闪存存储器= 芯片内置的Flash。2)系统存储器= 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Boo...

2020-02-07 23:51:32 5051

原创 快速哈特莱变换(FHT)介绍和C语言实现

过年整理资料的时候,发现了之前导师介绍的,一个号称专门针对离散实序列的变换,经分析总运算量为普通FFT的几乎一半(O(nLog(n)),而且完全没有复数。这么强的吗?之前也是一知半解,于是花了一个上午,重新验证了以下,顺便在这里把这个东西稍微普及一下,不知大家是否能用得上...预备知识1. DFT的意义2. FFT实现3. C语言编程原理部分可以参考西电的《数字信号处理》,或者...

2020-01-30 14:05:37 6095 1

原创 FFT原理详解

摘要FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。虽然很多人都知道FFT是什么,可以用来做什么,怎么去做,但是却不知道FFT之后的结果是什意思、如何决定要使用多少点来做FFT。一...

2020-01-30 11:00:14 8332

原创 卡尔曼滤波C语言实现

卡尔曼5条基本公式,参考https://wenku.baidu.com/view/8523cb6eaf1ffc4ffe47ac24.html#include "stdio.h"#include "stdlib.h"#include "math.h"#define kal_Q 0.001 /*过程噪声协方差,Q增大,动态响应变快,收敛稳定性变坏*/#define kal_R 0....

2020-01-17 11:03:21 3189 1

原创 二阶线性微分器的实现

二阶线性微分器的实现1. 经典微分器 y = (v(t)- v(t - T))/T在间隔时间 T很小时,对噪声有放大作用,实际无法应用到任务中。2. 二阶线性微分器3. C程序验证#include <stdio.h>#include <stdlib.h>#include "math.h"#include "stdlib.h"#de...

2020-01-17 09:42:25 2417 1

转载 使用Github创建私有仓库实现联合开发

本文主要讲解使用Github创建私有仓库实现联合开发的详细过程。

2020-01-15 13:45:27 695

原创 一种基于STM32F1 MCU的增量型编码器测速的方法

遇到的问题1. 编码器信号,用来计量长度,如果需要同时测量当前实时速度,在不增加接口的情况下,实现较为准确实时的测速2. 简单的M法速度,对于低速信号,测量精度较差,实时性也不高。测速方法之前的文章提到,测速的三种方法:(1)在规定时间内测量所产生的脉冲个数来获得被测速度,称为M法测速;(2)测量相邻两个脉冲的时间来测量速度,称为T法测速;(3)同时测量检测时间和在此时...

2019-11-12 09:38:04 4913 9

转载 SBUS使用

第一次接触S-BUS协议,踩了好多坑,在此记录一下。本人用的是stm32F429 + 普通航模遥控器(某宝上一大堆),用来遥控继电器,管脚自定义。S-BUS协议S-BUS其实是一种串口通信协议,采用100000的波特率,数据位点8bits,停止位点2bits,偶效验,即8E2的串口通信。但是S-BUS采用的是反向电平传输,也就是说,在S-BUS的发送端高低电平是反向的,协议中的所有高电平都...

2019-09-25 15:30:07 6367 3

原创 STM32 输入捕获测量脉冲周期/频率

STM32捕获模式连续测量脉冲周期/频率,使用类似中断的方式,使用STM32内部的硬件滤波器,脉冲周期量程很大(固定时间脉冲计数的方式,量程有限)。硬件: STM32F103R8T6 TIM2 CH1通道程序配置如下:/*TIM2初始化*/void MX_TIM2_Init(void){ TIM_MasterConfigTypeDef sMasterConfig ...

2019-08-19 11:16:53 12152

原创 Simulink S-函数的应用

前言:在实际应用中,通常会发现有些过程用普通的Simulink模块不容易搭建,而Matlab 是函数模块又只能描述静态的非线性函数,即只能描述 y = f(u)形式的非线性环节,不能描述动态的,即含有状态变量的系统模型,这时就需要S-函数格式来描述,可以像标准Simulink模块直接调用,非常灵活。不过S-函数有其固定的格式,且只能在Simulink环境下使用,下面就来探讨如何构建...

2019-05-19 11:22:15 6736 5

翻译 FFT和功率谱估计

根据帕塞瓦尔定理: 对能量有限的信号,时域内曲线所覆盖的面积等于频域内覆盖的面积,且等于在原点的自相关函数值R(0)。 信号的能量 E = 即功率谱 (能量普密度,能谱)1. 用Fourier变换求取信号的功率谱---周期图法clf;Fs=1000;N=256;Nfft=256;%数据的长度和FFT所用的数据长度n=0:N-1;t=n...

2019-05-18 10:20:49 3926

翻译 M/T测速实现

实际应用中,单片机根据脉冲计数来测量转速的方法有以下三种:(1)在规定时间内测量所产生的脉冲个数来获得被测速度,称为M法测速;(2)测量相邻两个脉冲的时间来测量速度,称为T法测速;(3)同时测量检测时间和在此时间内脉冲发生器发出的脉冲个数来测量速度,称为M/T法测速。以上三中测速方法中,M法适合于测量较高的速度,能获得较高分辨率(最容易想到);T法适合于测量较低的...

2019-05-07 23:56:46 9157 4

原创 pahoMQTT+SIM800C+STM32 移植和使用

1. 介绍随着物联网的全面普及,作为终端的单片机也需要联网,本文讲述的是一种低成本的物联网方案,硬件使用GPRS模块和STM32单片机,网络基于MQTT报文协议,相比于WIFI局域网,GPRS(最新LTE)具有更大的适用性。同时MQTT协议具有使用方便,资源消耗少和成本低的优点,非常适合物联网设备使用。硬件:STM32F103RBT6 SIM800C软件:stm32_hal Ke...

2019-04-10 20:45:23 12368 55

原创 S-函数的简单测试

前言实际应用中,发现有些过程用普通的Simulink模块不容易搭建,而MATLAB函数模块和嵌入式MATLAB函数模块又只能描述静态的非线性函数,即y = f(u)形式的非线性环节,不能描述动态的,即含有状态变量的系统模型,这时需要S-函数格式来描述。S-函数可以由MATLAB语言或者C语言编写,构成S-函数模块,这样就可以像标准的Simulink模块那样调用。构造的S-函数,只能基于...

2019-04-08 16:31:22 1387 1

原创 单片机开发者的虚幻和现实

从事单片机应用的开发四年了,工作主要面向工业控制,自动化方向,自己不是自动化专业出身。年底了,感觉一些迷茫,一是感觉与身边的同事朋友的差距越来越大,二是工作上难于出成果,也有些浮躁。掌声属于别人这个行业,我们都是工具的使用者。像各种集成开发环境(SDK),烧录软件(DownLoader),甚至代码框架自动生成软件,这些工具使用越来越顺手,对于底层和实现的原理,我们变得漠不关心,“拿来主义”...

2019-01-27 11:13:26 309

原创 2018感想

2018个人感想和不足大学毕业做单片机开发整整四年半了,一些做软件,网络,大数据的同学我感觉望尘莫及,我指的是薪资,又到年底了,感觉遇到了瓶颈,也思虑着公司的发展以及个人的发展。PLA归来,一直呆在靠家这边的小公司里,中途换过一家,一直做单片机应用的开发,从51到目前的STM32。补充一下,这是一个不折不扣的四五线小县城,长江三角圈外围,不然也找不到这方面的工作。曾经年轻气盛过,感觉自...

2019-01-25 16:35:51 561 1

翻译 Matlab下 IIR 滤波器实现(Simulink仿真和C语言实现)

 经典滤波器和现代滤波器一般滤波器可以分为经典滤波器和现代滤波器。经典滤波器:假定输入信号中的有用成分和希望去除的成分各自占有不同的频带。如果信号和噪声的频谱相互重迭,经典滤波器无能为力。比如 FIR 和 IIR 滤波器等。   现代滤波器:从含有噪声的时间序列中估计出信号的某些特征或信号本身。现代滤波器将信号和噪声都视为随机信号。包括 Wiener Filter、Kalman Fi...

2019-01-15 11:31:25 21000 4

原创 FDATool设计FIR低通滤波器

  (一) 设计一个低通滤波器           采样频率 Fs = 50Hz   Fpass = 10Hz   Fstop = 20Hz打开matlab,键入fdatool后,会弹出该工具的对话框。然后按照下图设置相关参数,参数列表中的Fs应该是采样频率,Fc是截止频率,即幅频特性曲线-3dB对应的频率。点击“Design Filter”后,幅频特性曲线会被更新。Targe...

2018-12-26 12:40:43 7752

PID Controllers - Theory Design and Tuning.pdf

国外的控制系统的经典教材,关于系统的PID控制原理,以及PID参数自动整定原理的详细介绍说明,内容深入浅出,相比于国内教材的公式化,该教材更容易理解和学习

2019-05-23

空空如也

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

TA关注的人

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