自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 直流有刷电机的简单高性能控制方法

在一文中推导了直流有刷电机的数学模型,在不考虑电流环的情况下,可做降阶处理,视同一个一阶系统,通过简单的PIi控制使得电机有着不错的响应,但仍然存在两个问题,一是参数整定依托数学模型,较为繁琐,二是没有电流环,系统性能欠佳。例如:某电机输入电压Uv与转速nnmin之间的传递函数为我们期望系统响应快,超调小,令t0.4sξ0.9,在前文计算PI控制器参数的基础上为消除闭环零点的影响做略微调整,得控制器如下:假设系统中存在干扰,整体框图如下:干扰d在0.9−1.2。

2024-01-04 19:41:37 1037

原创 系统辨识——最小二乘法

最小二乘法是通过输入数据与输出数据来拟合已知结构的函数关系,也就是说已知二者的函数关系,通过最小二乘法估计函数的相关参数。假设xy存在以下函数关系:但是在实际中,测量数据时存在测量误差或者噪声影响,故而实际的函数关系为v表示测量误差,这是一个小范围内的随机值。将所有测量误差相加我们以测量误差的平方和最小代表测量总误差最小,即用求极值的方法使J对ab求一阶导并等于0解方程组得。

2023-05-05 22:44:29 2702 2

原创 控制系统的扰动补偿

所谓被控对象的名义模型,就是说,实际被控对象无论是通过系统建模还是系统辨识,都无法获得十分精确的参数,名义模型就是与实际系统模型相近的模型,可近似二者相同,即则。

2023-05-04 16:13:12 1778

原创 开环零点与闭环零点对系统的影响

在中,得到了小电机的传递函数以这个电机为例展开开环零点与闭环零点对电机响应的影响。系统中极点是影响系统动态性能以及稳定性的主要因素,这里不做赘述。

2022-11-08 17:57:46 8286

原创 51单片机——交通灯

用51单片机实现的交通灯,可设置红绿灯时长,还有紧急控制功能,在文末附有网盘链接可下载工程文件

2022-06-09 13:12:17 22235 41

原创 几种简单电路知识汇总

  这篇文章用于记录平时设计电路或者在书中遇到的一些电路方面的知识,会不定期更新。就先从运算放大器开始,对此做个简单的介绍。运算放大器  说到运算放大器就不得不说两个概念,虚短与虚断。虚短: 在理想情况下,运算放大器的两个输入端的电位相等,就好像两个输入端短接在一起,但事实上并没有短接。虚断: 在理想情况下,流入集成运算放大器输入端电流为零。注:V+V+V+ 表示运算放大器同相输入端输入电压,V−V-V− 表示运算放大器反相输入端输入电压,ViViVi表示信号输入电压,VoVoVo表示信号输出电压

2022-04-10 01:24:45 6209 3

原创 改进的PID算法

位置式PID控制算法  位置式PIDPIDPID算法是一种比较直观的的PIDPIDPID算法,如系统框图中所示,ininin表示设定值,errorerrorerror表示差值,uuu表示控制器输出值,outoutout表示被控量。算法表达式如下:增量式PID控制算法  增量式PIDPIDPID算法不比位置式更直观,当执行机构需要控制量的增量时,适合采用增量式PIDPIDPID算法,比如步进电机控制。算法表达式如下:积分分离PID控制算法  PIDPIDPID算法中,积分可消除稳态误差,提高

2021-12-14 19:33:02 13845 2

原创 卡尔曼滤波器推导

注:受控制领域大牛CAN博士启发,受益匪浅,作此文以为笔记。简介  设  卡尔曼滤波器估计的核心思想我理解的是围绕测量值Zk的平均数来展开的。开始推导:由上式可知  也就是说随着kkk的增大,测量结果Zk不在重要,因为已经获得了足够多的测量值,此时的估计值已经很贴近了实际值了。我们令Kk=1/k1/k1/k,即可知,Kk在[0,1][0,1][0,1]之间,当Kk =0=0=0时,估计值等于上一次计算的估计值,当Kk =1=1=1时,估计值等于本次测量值,这时引入两个参数eEST,eME

2021-11-17 01:58:43 1057

原创 为什么是PID控制

  在进入正式话题之前需要引入三个概念:稳态误差、终值定理和系统稳定的充要条件。  稳态误差:系统达到稳定状态后,系统的实际输出量与系统希望的输出量之间的偏差。  终值定理:设有连续函数f(t),当t趋于无穷时,f(t)的极限存在,则有其中。F(s)是f(t)经过拉普拉斯变换后的函数,即  系统稳定的充要条件:闭环传递函数的极点位于s的左半平面。对于某个系统的传递函数的极点为 p1 和 p2 ,它们都在实轴上,即 p1 = -a , p2 = -b (a 、b均为常数),于是有当 p1 &l

2021-10-06 14:55:09 1019

原创 STM32——直流电机PI调速

所需元件  STM32开发板、L298N一个、带编码器的直流电机一个(如下图所示,淘宝上有很多)系统框图  通过系统框图,我们需要做两件事,一是要测速,二是要调节。测速目前流行的就是通过编码器测速,调节器我采用的时PI调节,PI调节器调节的参数少,而且能够消除静差,当然用PID调节器也行。编码器  编码器的结构简化如下图:  在电机转轴上安装了一个磁环,在磁环的下方有一个霍尔传感器,在磁环转动过程中就在霍尔传感器的附近产生了变化的磁场,于是霍尔传感器就输出了脉冲信号。我所用的这个直流电机是

2021-10-03 21:33:36 9027 16

原创 简易花式流水灯

先看看效果具体思路  实现流水灯的效果其实就是控制相应的I/O口,以P2为例,通过有规律的改变P2各I/O口的状态就可实现相应规律的流水灯效果,这其中需要用到与、或、异或、左移、右移等操作。  流水灯向左闪烁点亮就是将P2最低位的1不断左移,每次左移其最低位都补0且延时一段时间,所以在初始时P2可赋值0x01。  流水灯向右闪烁点亮就是将P2最高位的1不断右移,每次右移其最高位都补0且延时一段时间,所以在初始时P2可赋值0x80。  流水灯逐个向左点亮是说在初始时,P2赋值为0x01,并将P2整

2021-06-22 11:40:40 3330

原创 安卓手机使用linux(含图形界面)——Aid Learning

以前再安卓手机上使用linux系统都是使用Termux,安装上很麻烦,而且还是黑乎乎的窗口,没有图形界面,对于初学linux者来说并不友好,而Aid Learning就更人性化了,不仅安装十分简易,操作起来也很顺手,有图形界面,还支持电脑连接,获取屏幕进行操控。安装首先保证手机有足够的剩余空间,大于7G即可,接着进入Aid Learning官网,http://www.aidlearning.net/,在主页底选择阿里云下载,(建议使用电脑进入官网下载,在将下载的apk文件传输到手机进行安装,因为我之前用

2021-02-23 15:21:53 7642 1

原创 简易的遍历文件加密解密

功能描述将生成的可执行程序放在指定的文件夹内,双击后将该目录下所有文件包括子文件夹内文件全部加密,再次双击运行后将进行解密。加密解密实现主要运用了异或与取反操作,异或:两个值不同为1,相同为0。取反就是将该数的二进制按位变为与原相反的数,即1变为0,0变为1。例如:程序:#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>#include <queue>#include

2021-02-16 12:28:06 273

原创 STM32——PID恒温控制

元件stm32f1核心板、L298M模块、led一个、三极管一个、蜂鸣器一个、DHT11一个、LCD1602一个、电阻10欧10K欧、可调电阻10K、加热丝功能描述用DHT11检测当前环境温湿度,并将数据显示在LCD1602上,在用设定温度与当前温度相减,通过PID算法计算出当前输出脉宽,并将其加在L298N模块中,使加热丝发热,形成一个闭环,经过一段时间温度稳定在设定值。由于我的初衷是做一个恒温箱孵蛋,所以加了湿度报警。电路图DHT11时序图总体时序图初始化信号“0”信号“1”

2021-01-24 14:51:27 55013 260

原创 51单片机中断系统

概念中断源:指引起CPU中断的事件,即中断请求信号的来源。51单片机有5个中断源,分别是外部中断0,定时/计数器T0中断,外部中断1,定时/计数器T1中断,串行口中断,对应地址如下表:中断源中断矢量地址外部中断00003H定时/计数器T0中断000BH外部中断10013H定时/计数器T1中断001BH串行口中断0023H定时/计数器控制寄存器TCON位编号TCON.7TCON.6TCON.5TCON.4TCON.3TCON

2021-01-14 19:23:10 4546

原创 51单片机汇编指令

注: Rn与Ri中n=0 ~ 7,i=0 ~ 1内部数据传送指令助记符作用寻址方式机器周期字节数MOV A,Rn将Rn的内容传送给A寄存器11MOV A,directdirect是一个地址单元,将该地址的内容传送给A直接12MOV A @RiRi中存储了一个地址,将该地址的内容传送给A寄存器间接11MOV A #data将data传送到A立即数12...

2021-01-11 21:41:31 11568 4

原创 液晶显示温度(DS18B20)

DS18B20测温范围-55——125度,在-10——85度之间精度为0.5度,其测温精度还是较高的,DS18B20常见封装为3个引脚,VCC(电源正),DQ(信号线),GND(点怨负),如图:DS18B20相关指令,如下表:指令功能33H读ROM,即DS18B20传感器中ROM的编码55H匹配ROM,为下一步读或写做准备F0H搜索ROM,确定挂接在同一总线上DS18B20的个数CCH跳过ROM,直接向DS18B20发温度转换命令,适用于只有一个DS18B

2021-01-10 14:26:38 2040 2

原创 舵机驱动

舵机的驱动是以PWM信号的占空比来控制的,该PWM信号的周期位20ms,宽度在0.5ms——2.5ms之间,驱使舵机转动角在0——180度之间,一些常用角度对应脉宽如下表:舵机转动角脉宽00.5 ms451 ms901.5 ms1352 ms1802.5 ms在实际应用过程中,肯定会用到其他的一些非特殊角,就是上面表中没有的角度,便会用到脉宽与角度转换公式:脉宽=转动角 / 90 + 0.5。在用单片机驱动舵机时,可以用定时器产生PWM信号,也可

2021-01-10 12:01:46 5053

原创 调用百度人脸识别API进行人脸对比 C语言

百度人脸识别api使用是免费的,有人脸对比、人脸搜索、人脸检测与属性分析三的功能,本文写的是人脸对比。这里给出百度人脸对比api的技术文档,请点击网址https://cloud.baidu.com/doc/FACE/s/Lk37c1tpf另外需要注册百度智能云,获取API Key和Secret Key,并用此获取accesss_token,方法是:将上述两个值填在相应的位置上,然后将这个网址输在浏览器中https://aip.baidubce.com/oauth/2.0/token?grant_type=

2020-11-13 00:08:35 975 4

原创 安卓安装kali linux之Termux

本文讲述如何在手机上安装kali linux,我本想安装其他版本的linux,但不知是什么原因安装到一半就卡住,最终安装kali成功了,但也只是安装了kali的壳子,在inux上的操作都可以·实现,只是工具并没有安装,后期可以自主安装工具。一、开始安装:1、确保手机已联网,安装Termux软件,这个软件很小,可在以下链接下载。(链接:https://pan.baidu.com/s/1lqrgEymo3rXx_rOBdjaVYQ 提取码:qxjh )2、打开软件后,是一个黑糊糊的窗口,类似Linux的

2020-09-15 19:21:23 8512 16

原创 linux——常用指令

指令功能ls列出当前目录下所有子目录和文件pwd显示当前目录的路径cd 目录名进入该目录cd …返回上一级目录touch 文件名创建一个文件mkdir 文件夹名创建一个文件夹rmdir 文件名与mkdir相对,删除一个文件夹,但必须拥有对当前目录进行操作的权限rm -r删除目录下所有文件夹及其下所有文件rm...

2020-04-22 00:34:17 147

原创 Linux——线程使用及互斥量

线程的基本操作概念线程是程序中的一个执行路线。每个程序当中至少有一个线程。程序在执行的过程中是逐条执行的,按照代码的逻辑一次向下执行,所以无法同时完成两条指令,故而引进了线程,举个很简单的例子,如果同时进行两个死循环,用单线程的话只能进行一个死循环,另一个死循环永远也不会执行,故而用多线程就可以解决这个问题。在学习网络cs模型时更能体现线程的作用,因为你需要在发送数据的同时接收数据。创建线...

2020-04-21 16:20:59 219

原创 带头节点循环链表实现队列

队列的特征就是“先入先出”,入队时在链表的尾部插入数据,出队时删除掉头节点后面的节点,需要一个尾指针,始终指向链表的尾部(新加进来的节点)。具体请看原理图:代码实现#include <stdio.h>#include <stdlib.h>typedef struct List{ int data; //数据域 struct List *next; //...

2020-04-15 00:19:41 1572

原创 linux——进程间通信(共享内存)

概念通俗的说就是两个进程同享一段公共的内存空间,这段空间就叫共享内存,共享内存的数据两个进程都可以访问,可对其写数据,也可对其读数据。共享内存是两个单独进程之间的通信,两个进程之间可以没有任何关系。图解内存共享函数int shmget(key_t key, size_t size, int shmflg);参数 key:这个共享内存段名字 size:共享内存大小 shmflg:由...

2020-04-07 18:11:36 242

原创 linux——进程间通信(管道)

概念进程间通信是指子进程与父进程间的通信,一般用作父进程对子进程的控制或者子进程将其动向告诉父进程,由于进程是一个程序执行的实例,进程之间本身是无法进行通信的,故而运用一种管道将二者联系起来。当然管道并不只限于在父子进程之间通信,如果在子进程中在创建一个进程,我把它称为孙进程,那么子进程的父进程也就是爷进程,他与孙进程之间同样可以用管道进行通信。创建一个管道int pipe(int fd[2...

2020-04-06 20:18:58 169

原创 linux——进程(创建、终止、等待、替换)

概念程序运行的一个实例,其占有一定的空间。查询某一进程当前情况ps aux | grep 进程名终止进程kill -9 pid; //pid指需要终止的进程pid创建pid_t fork();该函数有两个返回值,对于子进程其返回的是0,对于父进程,其返回的是子进程的pid。fork函数一般在使用时都要用if语句进行分流,示例如下:pid_t pid=fork...

2020-04-05 20:50:05 141

原创 远程拍照并获取图片

主要功能肉鸡程序启动后可打开摄像头迅速拍摄一张照片,通过服务器发送到主机,发送完成后删除肉鸡本地保存的图片相关技术socket网络编程文件操作opencv代码肉鸡#define _WINSOCKAPI_ #define _CRT_SECURE_NO_WARNINGS#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <W...

2020-04-02 17:23:17 2159

原创 单词助手(可联网)

基本功能1. 可实现对本地词库添加、删除单词功能2. 可实现查词功能,根据英文查释义,优先从本地词库查询,如果本地词库没有就自动网上查询,并将其添加至本地词库3. 可实现学习功能,每天50词,可分批次学习,并有根据单词选择释义和根据释义写单词两种学习方式4. 可实现错误回顾功能,在学习过程中出错的词都保存在文件中,用于下次回顾5. 可实现服务器多并发涉及技术1. C/C++2. 文...

2020-04-01 19:53:34 266

原创 51单片机常用功能及相关内容

一、引脚:图1.1这里只介绍常用及主要的引脚。I/O口引脚:P0、P1、P2、P3P0口:39脚~32脚,双向8位三态I/O口,每个口可独立控制,但内部无上拉电阻,为高阻态,故不能正常输出高低电平,使用该口时通常连接10K的上拉电阻。P1口:1脚到8脚,准双向8位I/O口,每个口可独立控制,内带上拉电阻,该口在作为输入使用前需先写入1,此时单片机才可正确读出外部信号,故而称准双向口。...

2020-03-22 12:13:36 19996

原创 数据结构——队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的性质入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头创建队列typedef struct QueueNode { struct QueueNode* next; int data; }QueueNode;typedef struct Queue { Queu...

2020-03-19 18:13:36 159

原创 二叉树的前序、中序、后续、层序遍历(包含递归与非递归)

递归形式递归形式遍历比较简单,不做详细论述。前序遍历void Preorder(treenode* root) //前序{ if (root != NULL) { printf("%c", root->data); Preorder(root->left); Preorder(root->right); }中序遍历}void Inorde...

2020-03-18 23:58:33 156

原创 获取u盘文件

功能:开机自启动,无dos窗口弹出,复制速度较快缺点:面对杀软很无奈#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )//屏蔽dos窗口#include <stdio.h>#include <stdlib.h>#include <windows.h>#includ...

2020-03-04 22:44:53 239 2

原创 网络编程C/S模型怎样才能实现真正的聊天功能

学完socket编成后,就迫不及待地写一个简单的聊天程序,好在同学面前装装逼,毕竟外行看热闹。然而在自己的电脑上运行是毫无差错,发送接收都没有问题,然而将客户端的exe文件打包后发送给其他电脑上运行时程序死在了connect函数上,始终无法连接到服务器,相信小白都有过这样的经历,为之气愤不已,我也很气愤。为什么连接不上呢?电脑的网络是通过连在路由器上实现上网的,一个路由器的覆盖范围小,也就是说一...

2020-02-16 15:32:13 557

原创 linux——客户端服务器文件传输

实现文件传输并不难,只需用fopen、fread、fwrite、fclose这几个函数对文件操作即可。文本文件就不说了,我们就已下图为例。我们先来看看这个图片文件里装的是什么,我们以notpad++打开这个图片,结果如下,是一堆乱码。我们在已二进制方式打开,方式如下:首先打开vs的一个项目选择一张图片这张图片添加到源文件后,右键这张图片,选择打开方式选择二进制编辑器结果如...

2020-02-16 14:24:28 2365 2

原创 linux——两个客户端之间实现聊天(TCP、单线程)

两个客户端实现聊天功能,那么服务器作转发信息的作用,客户端A先将信息发送到服务器,在由服务器将信息发送到客户端B,客户端B也是一样。客户端与服务器都应该有两个执行流,服务器的一个执行流不断的接收客户端A的信息并将其发送给客户端B,另一个执行流不断地接收客户端B的信息并将其发送给客户端A,而客户端的两个执行流分别做读信息操作和写信息操作。这是我们的常规思维,如果用单线程的方法有该如何做呢?sock...

2020-02-15 17:14:13 3009 2

原创 linux——服务器与客户端实现聊天功能

先联想一下聊天的场景,假设甲和乙在聊天,他们每个人都能够发送给对方一句话甚至多句话,也能接收到对方发来的一句或多句话,也就是说,甲在发送一句话给乙的时候,同时也能接收到乙发来的信息,而且甲还能连续发多条信息,对于乙来说也是一样。这也就是说程序当中必须要有两个执行流,一个用于发信息,一个用于接受信息。服务器#include <stdio.h>#include <string...

2020-02-15 13:17:50 1153

原创 Linux——回射服务器多并发(多线程)

多线程与多进程的做法区别不大,思路一样,都是执行两个死循环,一个循环等待客户端连接,一个循环与服务器通信。服务器#include <sys/socket.h>#include <pthread.h>#include <unistd.h>#include <arpa/inet.h>#include <stdio.h>#incl...

2020-02-14 21:55:49 144

原创 linux——回射服务器多并发(多进程)

多并发原理如图,多个客户端连接一个服务器,无论哪个客户端发送数据给服务器,服务器都能把数据准确的返回给这个客户端。在socket编程中,socket这种文件描述符被默认设置为阻塞,故而read函数和accept函数时阻塞函数,read函数只有从缓冲区读到数据了才返回,否则一直等待,程序一直卡在这个位置;accept函数只要有客户端连接到服务器就返回,否则一直等待,程序一直卡在这个位置。就很容易...

2020-02-14 18:28:30 260

原创 linux——回射服务器

回射服务器即客户端发送一段数据给服务器,服务器再将这段数据原封不动的发送给客户端,原理很简单,原理图如下:以TCP协议为例,客户端、服务器代码如下:**服务器:**#include <stdio.h>#include <time.h>#include <string.h>#include <unistd.h>#include &l...

2020-02-13 18:51:07 517

原创 自定义设置一个屏保程序

用C语言写一个简单的窗口程序,目的是生成一个可视化的图形窗口,需要用到EasyX库,可在文章末尾的网盘链接中下载。该程序退出需左击鼠标,否则无法退出。#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>#include<graphics.h&gt...

2019-11-21 20:38:01 1722

空空如也

空空如也

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

TA关注的人

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