微网协调控制器
微网协调控制器一、微电网1、微电网的定义
微电网是由分布式发电(Distributed Generation,DG)、用电负荷、监控、保护和自动化装置等组成(必要时含储能装置),是一个能够实现内部电力电量基本平衡的小型供用电系统
分布式发电:光伏,风力和生物质能等发电
母线:微电网内部组件的连接线
可控发电机:分为柴油发电机及VSG模式储能变流器(PCS),微电网的黑启动微电源
储能系统:核心是储能电池,储能电池的充放电是通过电池管理系统(BMS)和储能变流器(PCS)进行调整和控制的
2、微电网和大电网关系
微电网运行时一般需要大电网提供功率和备用支撑,保证用户安全可靠供电
微电网通过源网荷储一体化控制能够平抑分布式新能源的随机波动,作为独立主体与大电网进行交易与结算。
3、微电网种类
按运行方式:微电网分为并网型和离网型两类
分类方式
类别
按运行方式分类
并网型;离网型
按电流类型分类
交流微电网;直流微电网;混合微电网
按电网等级分类
低压(400V-1KV);中压(1-35KV);高压(35KV以上)
按电网规模分类
小型(<500K ...
STM32-简介
STM32-简介一、STM32简介STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器
二、ARMARM既指ARM公司,也指ARM处理器内核
三、STM32F103C8T6
系列:主流系列STM32F1
内核:ARM Cortex-M3
主频:72MHz
RAM:20K(SRAM)
ROM:64K(Flash)
供电:2.0~3.6V(标准3.3V)
封装:LQFP48(48个引脚)
四、片上资源/外设1、NVIC:管理中断
2、SysTick:为操作系统提供定时服务的,比如delay功能
3、RCC:外设时钟控制(降低功耗,用那个开那个)
4、AFIO:复用端口
5、TIM:定时产生中断
6、DMA:搬运大量数据
7、USART:一般异步串口通信较多
8、RTC:实时时钟,计时功能,掉电也能运行
9、
英文缩写
名称
英文缩写
名称
NVIC
嵌套向量中断控制器
CAN
CAN通信
SysTick
系统滴答定时器
USB
USB通信
RCC
复位和时钟控制
RTC
实时时钟
GPIO
通用IO口
CRC
CRC校验
AFIO
复用IO ...
Linux网络编程
Linux网络编程一、网络编程的分层模型
二、相关基础概念1、GNU:Linux下的编译器的集成工具
2、gcc:Linux下c语言的编译工具
3、**g++**:Linux下c++语言的编译工具
4、make:用于处理C和C++的编译工作(项目构建工具),管理哪个文件需要更新以及如何更新的。=⇒生成可执行文件
5、makefile:就是一个规则文件,主要解决了多文件编译的问题。它制定了文件编译的顺序和哪些文件需要编译。
6、交叉编译:交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序(就是在一个平台上生成另一个平台上的可执行代码)
7、在Linux中,一切皆文件
三、进程1、进程指的是一段程序的执行过程。
2、进程间的通信进程之间的内存是隔离的,如果多个进程之间需要进行信息交换,常用的方法有:
管道(mkfifo):有名管道(mkfifo)和无名管道(pipe)
消息队列(message queue):进程在消息队列中添加消息,其他进程从中取。其就是个消息容器,我们将消息队列称之为中间件
共享内存(shar ...
Linux内核模块驱动加载与调试
Linux内核模块驱动加载与调试1、理论基础1.1、KO文件:是kernel object文件,也就是linux kernel下的模块加载文件
1.2、ko文件的作用:一般情况下,内核中会有许多已经加载进去的模块,而有些驱动模块并不需要一直加载到内核中,为了减少内核的压力,就将这些模块写好,当需要的时候再加载带内核中去
1.3、模块机制:(Linux提供的模块机制)
1.3.1、模块自身不被编译到内核映像中,从而不影响内核映像的大小
1.3.2、一旦模块被加载,模块和内核中的其他部分的功能完全一样
1.4、编译ko的方法
1.4.1、整编内核:以整个内核去编译该文件
1.4.2、单编ko:内核源码为基础编译一个外部模块(推荐,速度快)
理论参考:如何编译linux驱动ko - 知乎 (zhihu.com)
2、内核模块模型说明1、驱动和一般应用程序的执行方式很大不同
一般应用由main函数开始执行,流程基本由程序自身控制
驱动程序没有main函数,由回调方式驱动运行
2、回调方式
先向内核注册函数,然后应用程序触发这些函数的执行(例如:驱动程序在初始化时,向内核注册处理某个设备写操 ...
嵌入式经典通信总线协议
嵌入式经典通信总线协议一、串口通信1、串口通信串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式,如SPI通信、USART通信、EEPROM通信和CAN通信等。简单讲,串口通信实现了上位机(PC)与下位机(如STM32)之间的信息交互
2、串口通信的分类处理器与外部设备通信有两种方式:
2.1、串行通信:数据按位顺序依次传输(只有一根数据线进行传输),如8个数据位依次传输,速度慢,但占用引脚资源少
按照数据传送方向,又分为:
单工:数据传输只支持数据在一个方向上传输(只收不发或者只发不收,模式固定)
单双工(半双工):允许数据在两个方向上传输,但是在某一时刻,只允许数据在一个方向上传输(能发能收,但不能同时进行)
全双工:允许数据同时在两个方向上传输。(能发能收,且能同时进行)
2.2、并行通信:数据各个位同时传输(利用多根数据线进行数据传输),如8个数据位同时传输,占用引脚资源多,但速度快,一般会加一根时钟线,用于同步传输
3、串行通信的分类串行通信按通信的方式可分为:
同步通信:带时钟同步信号传输,如SPI、IIC通信等 ...
IRIG-B码对时
IRIG-B码对时1、理论知识1.1、IRIG-B:IRIG所定义的六种时间信息码(A、B、D、E、G和H码),均采用串行输出格式(串行输出码),用于与时间信号输入、输出的精确同步
1.2、B码对时的定义:是IRIG时间编码序列的一种,是将时间同步信号和秒、分、时、天等时间码信息加载到频率为1kHz的信号载体中。GPS系统接受卫星时间信号,输出IRIG- B时间码序列,变电站智能设备可以挂在统一的对时总线上进行时间同步。变电站的智能设备采用 B 码对时, 就不再需要进行基于现场总线的通信报文对时, 同时也不需要 GPS 输出大量脉冲对时信号。
格式
时帧周期
码元速率
二-十进制信息位数
表示时间的信息
IRIG-D
1小时
1个/分
16
天、时
IRIG-H
1分
1个/秒
23
天、时、分
IRIG-E
10秒
10个/秒
26
天、时、分、10秒
IRIG-B
1秒
100个/秒
30
天、时、分、秒
IRIG-A
0.1秒
1000个/秒
34
天、时、分、秒、0.1秒
IRIG-G
0.01秒
10,000个/秒
38
天、时、分、秒、0.1 ...
高精度定时器
在linux驱动模块中使用高精度定时器1、理论基础1、高精度定时器:hrtimer(high resolution timer),内核为高精度定时器重新设计了一套软件架构,它可以为我们提供纳秒级的定时精度,以满足对精确时间有迫切需求的应用程序或内核驱动,例如多媒体应用,音频设备的驱动程序等等
2、高精度定时器的储存位置:随着系统的运行,hrtimer不停地被创建和销毁,新的hrtimer按顺序被插入到红黑树中,树的最左边的节点就是最快到期的定时器
3、高精度定时器的表示
12345678struct hrtimer { struct timerqueue_node node; //红黑树节点位置 ktime_t _softexpires; //定时器的运行时间 enum hrtimer_restart (*function)(struct hrtimer *); // struct hrtimer_clock_base *base; unsigned long state; ......};
3.1、**_softexpires**:记录了定时 ...
C++补充知识汇总
C++补充知识汇总一、字符数组1、定义:C语言中利用字符数组表示C++中的字符串
1234567char 变量名[] = "字符串值" (包含’\0‘)(推荐) char 变量名1[] = {'字','符','串','值'} (不包含‘\0’)char* 变量名2= "字符串值" (包含’\0‘) printf("%s\n",变量名)
注意:C风格的字符串要用双引号括起来
C++风格字符串:
1string 变量名 = "字符串值"
2、常用考题:利用sizeof和strlen计算字符数组的大小
2.1、sizeof关键字:计算一个数据类型的大小,不过sizeof不是一个函数,它是一个运算符,所以它不需要包含任何头文件
2.2、strlen函数:计算一个指定字符串的长度,函数原型是size_t strlen(const char *s),它的返回值是size_t类型,也就是unsigned int类型,返回的是字符串的长度,需要包含头文件#inlude <string.h>,参数s是字符串首地址。
2.3、区别:
2.3.1、sizeof会将空字符\0计 ...
C++提高编程
C++提高编程
本阶段主要针对C++==泛型编程==和==STL==技术做详细讲解,探讨C++更深层的使用
1 模板1.1 模板的概念模板就是建立通用的模具,大大提高复用性
模板的意义:对类型也可以参数化了
例如生活中的模板
一寸照片模板:
PPT模板:
模板的特点:
模板不可以直接使用,它只是一个框架
模板的通用并不是万能的
1.2 函数模板
C++另一种编程思想称为 ==泛型编程== ,主要利用的技术就是模板
C++提供两种模板机制:函数模板和类模板
1.2.1 函数模板语法函数模板作用:
建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
语法:
12template<typename T>函数声明或定义
解释:
template — 声明创建模板
typename — 表面其后面的符号是一种数据类型,可以用class代替
T — 通用的数据类型,名称可以替换,通常为大写字母
示例:
123456789101112131415161718192021222324252627282930313233 ...
C++核心编程
C++核心编程本阶段主要针对C++==面向对象==编程技术做详细讲解,探讨C++中的核心和精髓。
1 内存分区模型C++程序在执行时,将内存大方向划分为4个区域
代码区(.text段):存放函数体的二进制代码,由操作系统进行管理的
全局区:存放全局变量和静态变量以及常量
1、.data段:存储已被初始化的全局变量、常量
2、.bss段:存储未被初始化的全局变量(且初始化后为0)
栈区(.heap段):由编译器自动分配释放, 存放函数的参数值,局部变量等
堆区(.stack段):由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
在STM32中,RAM( 随机存储器,可读可写)和ROM(只读存储器,只能读)分区如下
内存四区意义:
不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程
1.1 程序运行前 在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域
代码区:
存放 CPU 执行的机器指令
代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
代码区是只读的,使其只读的原因是防 ...