- 博客(128)
- 资源 (3)
- 收藏
- 关注
原创 CANopen协议的理解
CAN的报文可简单的被分为帧ID和数据部分,由于其灵活性,在CAN通讯刚出来时,各个厂家一般根据自己的喜好进行编写协议,这最终导致了很混乱的局面。因此诞生CANopen协议,CANopen是由CIA组织提出的CAN的应用层协议,包含CIA301、CIA401、CIA402…,其中CIA301是CANopen中最基础的协议,规定基于帧ID和报文的分类用法,相当于定义了一个CAN报文框架。CIA401、CIA402等则是基于CIA301基础协议,针对不同类型的设备,所制定的具体协议。
2024-09-13 10:08:51 1201
原创 传感器_雷达坐标系到转台坐标系的转换
雷达所获得目标的极坐标,未必是基于东北天三维坐标系的,比如是北(x)西(y)天(z)。看目标是否进入转台的图像视场当中, 如果没有进入,则进一步添加一定的偏置量,是目标进入转台的图像视场当中。3、根据第1步获得的目标在雷达-东北天-三维垂直坐标系的坐标,已经第2步通过实际测量获得的雷达坐标原点。4、根据第3步获得的目标在转台-东北天-三维垂直坐标系的坐标,可以计算目标在转台-极坐标系的坐标。1、根据已知条件,可以先求解获得目标在雷达-东北天-三维垂直坐标系的坐标。-东北天-三维垂直坐标系上的坐标。
2024-03-19 10:50:03 883
原创 控制学习_正弦波无刷直流力矩电机建模、控制带宽讨论与选择
无刷电机通过电子换向器实现定子的磁场旋转,后使用,是现在更流行的选择。三相无刷电机则是无刷电机中比较流行的一款。三相无刷电机的驱动方式有多种,最简单的被称为梯形波驱动、方波驱动或正弦波驱动。而技术可以最大程度地减小扭矩波动以及噪音和振动,因此得到广泛的应用。本文则是重点关注正弦波无刷直流力矩电机。
2024-03-15 11:26:30 1172
原创 基于VPN服务器+内网穿透的远程局域网搭建教程
搭建远程局域网可以实现局域网文件共享、远程桌面、游戏联机等功能,本文提供的是保姆级教程,零基础耐心浏览也可以轻松配置成功。
2024-03-12 10:47:10 5954 3
原创 控制学习_有刷直流力矩电机的建模、仿真、控制带宽的讨论、驱动方式与选择
以 河北宇捷电机科技有限公司 的DDSM79-03A电机拖动质量为120kg,半径为0.35m的负载为例进行Matlab建模分析,由于电机厂家并未提供电枢电阻和电枢电感。,上述计算的这个力矩则是选择电机时的峰值堵转力矩。关于电机其余参数的选择,则是在满足电学和结构要求的前提下,尽量选择连续堵转力矩较大的电机。指惯性力矩,J指转动惯量,a指角加速度(rad/s),不考虑空载力矩、负载力矩、风阻力矩 ,由式(6)可得电机系统模型框图如图2所示,由式(6)不难看出,电机输出角度取决于。
2024-03-12 10:30:10 1655
原创 QT学习_20_软件一机一码的加密与授权
为保护自己辛苦写出的程序不备白嫖,需要对可执行程序进行加密授权。破解版软件的网站都快要翻烂了,还是没有找到满足自己需求的软件。索性还是自己写这个加密授权软件。
2024-01-09 18:36:24 2755 1
原创 Qt学习_18_用QtMmlWidget实现界面中显示公式
QtMmlWidget是一个Qt类,可用于呈现用MathML 2.0编写的数学公式。一般MathML 2.0编写的数学公式都保存于一个单独的.xml文件当中,然后QtMmlWidget类去读取这个.xml的内容,就可以显示公式了。
2024-01-04 15:19:09 1497
原创 Qt学习_17_一些关于QTableWidget的记录
近日,项目中使用到QTableWidget,遇到一个问题,项目需要清空这个表格,但是无论调用clear(),clearContents(),程序都报:程序异常退出。而且项目程序还比较多,最开始还没办法一步定位到是调用QTableWidget的clear()函数导致的崩溃。原理很简单,如果的运行是正常的, 那么程序输出界面就会打印,反正,就是不正常的。我用这个方法定位到是调用了QTableWidget clear()函数导致的崩溃。
2024-01-04 14:13:39 994
原创 QT学习_16_制作qt开发程序的软件安装包
参考:这篇博客记录了,如何用window的脚本,一键生成一个可以免安装的软件压缩包,解压缩后,点击exe文件就可以直接运行。这一步你也可以手动去完成,反正就是你要得到一个,这文件夹里面有个exe,点击可以直接运行,文件夹里面还有这个exe运行所需要的所有的支持文件。现在我们来做一个更复杂的操作,就是把这文件夹,制作成一个标准的。
2023-11-30 12:52:13 981
原创 QT学习_15_线程间通信以及注意事项
本文是继上一篇QT学习_14_一种开线程来实现串口通信方法-CSDN博客来继续专门探讨线程之间通信的问题,以及一些注意事项的。Qt真🐂🍺,这个彩虹屁我先吹为敬。 为什么夸Qt🐂🍺呢,因为他们线程间的通信真的超级方便!超级简单,当然也有可能是我以前见识少了。废话不多说,我先把代码放上来吧主窗口类叫fugu,我自己取的名字,含义不必深究哈,下面是fugu的构造函数下面给出fugu.h 我先把自定义的 ESerialPort的代码也贴出来,然后一并讲吧QT线程间通信是用connect函数
2023-11-09 11:27:43 238
原创 QT学习_14_一种开线程来实现串口通信方法
基于QT的上位机软件,和下位机一般都存在通信。但如果是在主窗体类里面实现通信,往往会和主线程争抢CPU,导致通信非常容易出现异常。,而主窗体类(主线程)则主要专注于用户的交互逻辑。本文将以串口通信为例,来讲解一下如何单独为串口通信开一个线程。
2023-11-09 10:23:56 504
原创 DSP_TMS320F28335_优秀的串口通信框架
在文章这篇文章中,我提到了用“”的方式去处理与上位机的通信程序,最小的队列,就是一个节点只存储一个字节。用串口和上位机通信的方式是非常普遍的,本文讲描述一种串口通信的“”框架。本框架其实核心的思想就是将串口的接收中断配置成1个字节就触发一次,中断处理程序只做一件事,就是把接收到的1个字节push到当中,然后在主程序 while(1)中去处理接收到的数据,对数据进行帧解析,为了让这个框架更普适,我们通过帧头和帧尾来截取一帧完整的数据,这样就能普适不定长的通信协议。
2023-11-07 16:38:11 1099 1
原创 DSP_TMS320F28335_用数组的方式来实现队列和栈
说起队列和栈,链表+动态内存分配的方式,是比较常见的方式,最近项目下需要在dsp上面使用队列和栈两种数据结构,所有就使用链表+动态内存分配的方式实现了一下,但是调试的过程中发现运行的时候总是在动态内存分配的位置出bug,动态内存分配malloc总是分配失败,返回空指针,尝试修改cmd的配置后,也仍然没有解决问题。思来想去还是用数组的方式来实现队列和栈,结果性能出奇的稳定,所以本博客记录一下用数组实现队列和栈的代码。
2023-11-07 10:32:37 317 3
原创 DSP_控制程序框架与优化
控制程序框架分为两个部分:对实时性要求高的程序,建议采用中断处理程序实现。对实时性要求低的程序,建议写在主程序的while(1),用队列的方式实现。对于程序的优化建议有三条:1、中断程序的优化加速是必要的;2、避免CPU资源浪费也很关键;3、上位机通信小技巧 - “高频小队列”
2023-10-26 18:15:07 769
原创 Qt学习_13_设置Qt可执行程序的文件图标
用第一步下载的图片,在线生成一个.ico文件。放在你的项目文件夹,重命名为logo.ico。前面三步完成之后,编译,生成的exe文件就带图标了。在项目文件.pro中,添加一行代码。去选一个你喜欢的图标,下载下来。
2023-09-27 16:22:52 1441
原创 Qt学习_12_<一键生成可独立运行的Qt可执行程序软件包>的Windows Shell脚本程序
本文提供一种基于Windows Shell脚本的 一键生成Qt可执行程序独立运行软件包的脚本程序。最终能够达到的效果是,点击运行这个Windows shell脚本,可以自动生成一个包含Qt可执行程序(exe)的文件夹。这个文件夹可以拷贝到任意同位数(32/64)电脑,点击文件夹里面的可执行程序(exe),即可直接运行。因为文件夹里面已包含了可执行程序(exe)的运行环境(.dll文件等)。
2023-09-25 18:32:52 280
原创 DSP_TMS320F28377D_算法加速方法4_代码本身的优化
前面3篇的优化思路是从硬件本身和函数库这些方向去加速, 本文则仅从去考虑加速的方法,下面提供7种代码本身的优化思路,并验证其是否有效。
2023-09-04 11:50:13 1408
原创 DSP_TMS320F28377D_算法加速方法3_使用TMU库加速
继上两篇方法之后,本文继续讨论第三种DSP算法加速的方法——。该方法的加速能力比方法2还强。但是也有一个范围:我们简称为FPU,本文的方法(方法3)我们简称为TMU速。FPU加速和TMU加速是两种的方法,就是你用了某一种,就不能用另一种了。所以。
2023-09-01 11:23:00 1754 5
原创 DSP_TMS320F28377D_算法加速方法2_添加浮点运算快速补充库rts2800_fpu32_fast_supplement.lib
1 工程师的关注点下面稍微解释一下一些可能有疑问的点1 电机控制中经常对同一个角度求sin和cos,我的测试程序结果是:1、sin和cos分开算,加速前(不添加这个库) 695.25us;2、加速后590us;3、sincos一起算410us。2 atan2是什么意思返回浮点参数X/Y的四象限反正切3 isqrt是什么意思返回 1.0L/sqrt(X).4 关于division(除法),我实测试了,“/”,以后还是直接用“/”符号。另外,这个库是没有的。5 亲测了。
2023-08-30 21:05:42 1384 1
原创 DSP_TMS320F28377D_算法加速方法1_拷贝程序到RAM运行
TI C2000系列的DSP芯片算力有限,用于来控制有时候常会出现控制程序无法实现实时运行的情况,因此从本文开始,将陆续推出几篇DSP算法加速的方法此方法只需要添加一行代码和一个预定义,即可达到算法整体加速的目的。先声明本文是讲的是TMS320F28377D,其他C2000系列芯片应该差不多,去看看CMD文件就知道了。
2023-08-29 18:51:43 1353 1
原创 FPGA_学习_17_IP核_ROM(无延迟-立即输出)
由于项目中关于厂商提供的温度-偏压曲线数据已经被同事放在ROM表了,我这边可用直接调用。今天在仿真的时候,发现他的ROM表用的IP核是及时输出的,就是你地址给进去,对应地址的ROM数据就立马输出,没有延迟。我打开他的IP核配置一看,他用的是。我以前用的是Block Memory Generator。所以,我立马进行了的测试。
2023-08-19 11:32:54 1099 1
原创 FPGA_学习_16_IP核_ROM(延迟一拍输出)
在寻找APD最合适的偏压的过程中,一般会用到厂商提供一条曲线,横坐标是温度的变化,纵坐标表示击穿偏压的变化,但每个产品真正的击穿偏压是有差异的。为了能够快速的找到当前温度下真实的击穿偏压,我们可以这样做,我先根据温度,得到厂商提供的击穿偏压。然后再用厂商提供的击穿偏压,减去几伏。我们以此作为寻找真实击穿偏压的起点。以一个固定的步长提升APD的偏压,直到满足我们设定的击穿判断条件。但是呢,在整个这个流程中,我们需要解决一个问题,就如何在FPGA程序中实时的去获取当前温度下对应的击穿偏压。
2023-08-17 14:21:59 871
原创 FPGA_学习_15_IP核_VIO
前一篇博客我们提到在线调试的时候, 可执行文件只要烧进板子,程序它就会自己跑起来,不会等你点这个按钮,它才开始跑。我们测试的模块中,里面可能有几个我们关心的信号,它会在程序刚运行很短的时间内发生状态跳变。当我们打算去捕获它的状态变化的时候,这个时候程序已经跑过了,这导致我们无法抓取到。那这个时候我们应该怎么办呢?引入VIO这个工具,用VIO的输出信号作为我们测试模块的使能信号,这样我们就能控制待测试的模块什么时候运行。VIO是个特别简单的IP核,丝毫不用有畏难情绪。
2023-08-16 16:55:05 3714 1
原创 FPGA_学习_14_第一个自写模块的感悟和ila在线调试教程与技巧(寻找APD的击穿偏压)
前一篇博客我们提到了,如果要使用算法找到Vbr,通过寻找APD采集信号的噪声方差的点去寻找Vbr是一个不错的方式。此功能的第一步是在FPGA中实现方差的计算,这个我们已经在上一篇博客中实现了。继上一篇博客之后,感觉过了很久了,原因是最近陷入的FPGA在线调试的无线循环。万事开头难,自决定自学FPGA以来已3月有余。刚开始我以为的万事开头难是如何从零开始在板子上跑个程序。而。而就在刚才,我经历了千辛万苦,终于算是把我第一个模块调通了。
2023-08-16 13:57:40 862
原创 FPGA_学习_13_方差计算小模块
测距器件APD的性能与器件本身的温度、施加在APD的偏置电压息息相关。在不同的温度下,APD的偏压对测距性能的影响非常大。要确定一个合适的APD的偏压Vopt,首先你要知道当前温度下,APD的击穿电压Vbr,一般来讲,Vopt = Vbr – ΔV,ΔV基本是个固定的值。如果要使用算法找到Vbr,通过寻找APD采集信号的噪声方差的剧变点去寻找Vbr是一个不错的方式。如下图所示,当方差从10以下,突然剧变到45.31,信号噪声方差剧变4倍不止。我们就可以定义此处偏压43.8V为击穿电压Vbr。
2023-07-22 15:31:07 1478 3
原创 FPGA_学习_12_IP核_FIFO
FIFO(Frist Input Frist Output),即先入先出,也是一种存储器,一般做数据缓冲。FIFO和 RAM的在于都能存储数据、都有控制写和读的信号;在于 FIFO 没有地址,所以不能任意指定读取某一个数据,数据只能按照数据输入的顺序输出,即先入先出,并且读写可以同时进行。如果数据把 FIFO 的深度写满了,数据将不能再进去,也不会覆盖原有的数据;
2023-06-21 17:59:31 1702 1
原创 FPGA_学习_11_IP核_RAM_乒乓操作
本篇博客学习另一个IP核,RAM。用RAM实现什么功能呢?实现乒乓操作。乒乓操作是什么呢?以下是本人理解:乒乓操作可以实现低速模块处理高速数据,这种处理方式可以实现数据的串并转换,就是数据位宽之间的转换,是面积与速度互换原则的体现。例如:数据位宽的转换,要将8位的数据转换为16位,按照传统方法,每两个时钟周期完成一次转换,输出数据的变化与时钟信号不是同步的。使用乒乓操作,数据写入数据缓冲模块的时候使用50M的时钟,读出时使用25M的时钟,每次读出16。
2023-06-21 11:00:11 1926
原创 FPGA_学习_10_IP核_PLL
片上资源的使用,或者说IP核的使用,是FPGA编程要学习的分量很重的一部分内容。其中最常见的就要属PLL了,时钟是一切程序的基础。PLL的时钟倍频功能是用户自己手撕代码无法实现的,但使用PLL IP核,几步图形界面的简单操作就能轻松实现。本文的内容就是配置一个PLL IP核,并在我们的FPGA代码中调用。
2023-06-20 11:15:28 1191
原创 FPGA_学习_09_PWM呼吸灯
PWM在三相电机控制中,有着非常重要的地位。如果你需要用FPGA去实现三相电机的控制, PWM这一关是绕不过的。好在PWM的基本原理是比较简单的。所以原理部分本文就略过,本文基于PWM实现呼吸灯。
2023-06-19 11:48:24 298
原创 FPGA_学习_08_有限状态机
开发板上有两个按钮,两个led灯。一个按钮做复位按钮。另一个按钮作为控制两个LED灯的输入。按钮每按下一次,LED的值加一, 00 01 10 11 00 如此循环。按钮按下释放的过程,有5个状态, 空闲(复位状态)→按钮未按下 → 按下的抖动 → 按钮已按下 → 释放抖动 → 按钮未按下。在开关按下或者释放的时候,都会发生抖动,比如按钮按下的时候,我们可以对按键处于低电平做一个累加计数。比如当我一直处于低电平累计计数20ms了,那我认为你已经按键按下了,稳定了。
2023-06-15 18:01:33 853 2
原创 FPGA_学习_07_按键消抖
机械按键是常用的器件,但在机械按键使用的过程中,总伴随着抖动,在本次实验中,我们将完成,并且通过按键控制LED亮灭。理想情况下,按键按下过后,按键处为低电平,当按键释放过后恢复为高电平,但在实际情况下,由于按键采用的机械结构,当按键按下过后,电平不能立即保持为低,会有一段时间的跳变后才稳定,保持为低。同理,当按键释放的时候,电平不能立即保持为高,也有一段时间的不稳定状态。在本次实验中,通过按键输入电平保持为低的达到20ms后认为按键已经稳定,通过计数器对按键输入为低电平时间进行计数,消除按键抖动。
2023-05-25 18:09:39 336
原创 FPGA_学习_06_按键控制LED
本文的实验主要用于按键驱动LED灯的亮灭,重心主要是对于按键亚稳态的处理上,什么是亚稳态?亚稳态是指触发器在某个规定时间段内一个。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。若不对异步信号进行处理的话,直接将异步数据扇出到其他寄存器中,可能会导致其他寄存器对同一个信号的采样值不一样,这在数字电路中是很可怕的一件事情。
2023-05-23 16:12:05 226
原创 FPGA_学习_05_管脚约束
就初学管脚约束相关知识而言,内容还不足以构成饱满的文章。但管脚约束是一个独立的内容,它是值得有一篇单独的博客的。若后续学习了管脚约束新的知识,则进一步扩充本篇博客内容。
2023-05-19 10:51:07 4492 3
原创 DSP_TMS320F28377D_一键烧写多核程序
以前在开发和调试TMS320F28377D的双核程序的时候,总是在烧写CPU1程序时,自动把CPU2的程序也烧写了,但往CPU2里面烧写的是CPU1的程序,烧写完进入在线仿真模式的时候,还需要手动重新选择CPU2要烧写的程序,重新烧写一遍,这个过程其实是的。两个核还好,要是8个核呢?一个一个烧,那不得把人气死!因此本文主要记录如何配置正确。
2023-05-18 17:20:43 2869 7
原创 FPGA_学习_03_第一个FPGA程序流水灯
本人购买的开发板接在PL端的只有2个LED灯,刚好达到流水灯的最低要求。根据原理图可知1 这两个PL端的LED分别接在FPGA的P15脚和U12脚,另外,要点亮LED灯,FPGA应该输出低电平。2 我们以开发板上的一个按钮作为系统的复位按钮,端口P16,取名rst_n。(reset negative的缩写,即低电平复位的意思)3 系统的输入时钟是50MHz,即时钟周期为1s/50_000_000 = 20ns。N18。
2023-05-16 14:27:05 620
适合于单片机的CANopen开源库CANfestival,已根据移植需求进行阉割,可直接使用
2024-09-20
qt显示数学公式的函数库
2024-01-04
STM32 ST-LINK Utility v3.8.0.exe
2022-07-25
FlashHC32F072_128K.FLM
2022-07-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人