【面试笔记】单片机软件工程师,工业控制方向(储能)

news2024/11/15 13:46:32

在这里插入图片描述

文章目录

  • 1. 基础知识
    • 1.1 C语言笔试题
      • 1.1.1 用宏定义得到一个数组所含的元素个数
      • 1.1.2 定义函数指针从程序固定地址(0)开始执行
      • 1.1.3 volatile的含义及作用
      • 1.1.4 32位系统,整数7和-7,分别以大端和小端存储,请示意说明
    • 1.2 嵌入式基础
      • 1.2.1 简述单片机的启动过程
      • 1.2.2 简述I2C、SPI、UART、CAN这个几种通讯方式的异同
      • 1.2.3 RS485
      • 1.2.4 Modbus
  • 2. MISRA2012标准
  • 3. FreeRTOS
  • 4. BMS开发概述
    • 4.1 法规解读
    • 4.2 模块介绍
      • 4.2.1 从控模块
      • 4.2.2 主控模块
      • 4.2.3 总控模块
  • 5. Microchip单片机


1. 基础知识

1.1 C语言笔试题

1.1.1 用宏定义得到一个数组所含的元素个数

char array[30];
#define ARRAY_SIZE(a) (sizeof((a))/sizeof((a[0])))

参考:预处理、const、static与sizeof-使用宏定义得到一个数组所含的元素个数


1.1.2 定义函数指针从程序固定地址(0)开始执行

int main(void)
{
	void (* func)(void);
	func = (void (*)()) (0x0000);
	func();
}

参考:C语言中将绝对地址转换为函数指针以及跳转到内存指定位置处执行的技巧


1.1.3 volatile的含义及作用

直接存取原始内存地址

  1. 易变的。并不是直接指示该变量可以任意改变。而是告诉编译器,该变量(绑定内存中的值)时可能随时改变的,要注意随时更新,更新的办法是直接从内存读取该值。
  2. 线程中变量的同步:在本次线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值。

如果变量为未声明为volatile的变量,对于线程中共享的变量,将导致第一个线程改变了该变量的值,并保存在内存地址中(即该段内存的值被改变,程序却继续从寄存器中读取改变之前的值),其他的线程使用的仍然是改变之前的变量值。

volatile的使用:共享内存时,该内存单元可能随时修改,如状态寄存器,中断访问的非自动变量(全局变量)多线程条件变量;

参考:C语言中volatile关键字的作用


1.1.4 32位系统,整数7和-7,分别以大端和小端存储,请示意说明

// 地址:| 低 ---------------------> 高 |
// 大端: 7>  00  00  00  07
//       -7>  FF  FF  FF  F9
// 小端: 7>  07  00  00  00
//       -7>  F9  FF  FF  FF


1.2 嵌入式基础

1.2.1 简述单片机的启动过程

  1. 上电复位,硬件设置(初始化)堆栈指针 SP=_initial_sp、计数指针 PC= Reset_Handler的值;
  2. 找到了 Reset_Handler 的地址后,CPU 就从这里开始取指令运行程序,初始化中断向量表;
  3. 调用 SystemInit 函数,设置系统时钟;
  4. 调用 __main 函数,软件对 SP 寄存器赋值,完成数据段的重定位、清除 bss 段,初始化栈空间等工作;
  5. 最终 __main 函数会调用用户的 main 函数,进入到用户程序。

参考:STM32启动过程分析
参考:STM32第二章-启动过程详解


1.2.2 简述I2C、SPI、UART、CAN这个几种通讯方式的异同

参考:I2C总线和通信协议详解
参考:SPI原理超详细讲解—值得一看
参考:【车辆CAN通讯系列】1 CAN通讯基础——物理层概述
参考:【车辆CAN通讯系列】2 CAN通讯基础——数据链路层概述


1.2.3 RS485

  • 半双工,多机通信
  • 两线制,双绞线
  • 低电压,压差 ±(2~6)V
  • 理论距离3000m

参考:终于讲透了,史上最详细的RS485串口通讯!


1.2.4 Modbus

  • ModBus网络只有一个主机,所有通信都由他发出。
  • Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。
  • Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。

帧结构:
初始结构 = ≥4字节的时间
地址码 = 1 字节
功能码 = 1 字节
数据区 = N 字节
错误校检 = 16位CRC码
结束结构 = ≥4字节的时间


2. MISRA2012标准

TBD.


3. FreeRTOS

  • FreeRTOS中的任务永远处于这几个状态中的某一个:运行态、就绪态、阻塞态和挂起态;
  • “队列”是用来完成任务与任务、任务与中断之间的消息传递的;
  • 清楚二值信号量、计数型信号量、优先级翻转、互斥信号量等概念;
  • 抢占式调度:中断任务、高优先级任务、低优先级任务、空闲任务;

参考:安富莱_STM32-V6开发板_FreeRTOS教程(V1.1).pdf

国产单片机移植FreeRTOS
参考:freertos学习01-移植到gd32


4. BMS开发概述

4.1 法规解读

国标要求:
6.1.1 电池管理系统应具有数据采集、通信、报警和保护、控制、状态估算、参数设置、数据存储、计算和统计等功能,宜具有显示功能,锂离子电池、钠离子电池和铅酸(炭)电池管理系统还应具有均衡和绝缘电阻检测功能。

6.1.2 电池管理系统应具有通用性、兼容性、可维护性和可扩展性,宜实现即插即用。

6.1.3 电池管理系统各功能应在逻辑上相互独立,控制策略、执行周期相互匹配。

6.1.4 电池管理系统应设置接地端子,接地电阻不应大于0.1Ω,连接接地线的螺钉和接地点不应用作任何其他机械紧固用途。

6.1.5 电池管理系统线束应采用阻燃材料,电气接口宜采用防呆设计。

6.2.1 锂离子电池、钠离子电池和铅酸(炭)电池管理系统应采集电池单体电压、电池单体温度、电池模
块正负极端子温度、电池簇电压、电池簇电流等参数。


通信
6.3.1 电池管理系统应具有与监控系统、储能变流器、其他管理层级电池管理系统等设备进行信息交互的功能,并宜具有与消防系统、供暖通风与空气调节系统等设备进行信息交互的功能。

6.3.2 电池管理系统与监控系统可采用以太网通信接口,支持Modbus、DI/T634.5104、DL/T860(所有部分)通信协议,宜采用双网冗余通信。

6.3.3 电池管理系统与储能变流器可采用控制器局域网(CAN)、RS485、以太网等通信接口,支持CAN2.0B、Modbus、DL/T860(所有部分)通信协议,且具有一个输出硬接点接口。

6.3.4 不同管理层级电池管理系统之间可采用CAN、RS485、以太网等通信接口,支持CAN2.0B、Modbus等通信协议。

6.3.5 电池管理系统和消防系统、供暖通风与空气调节系统可采用RS485、以太网等通信接口,支持Modbus通信协议。

扩展:一文弄懂电力系统101、103、104、modbus和61850规约


报警分级和处理
6.4.1.1 电池管理系统报警信息应根据严重程度分为一级、二级和三级。其中:

  • 一级报警信息为需要立即停机或停电处理的报警信息;
  • 二级报警信息为需要立即采取应急处理措施的报警信息;
  • 三级报警信息为需要加强监视及一、二级报警复归的报警信息。

6.4.1.2 电池管理系统应在设备状态异常或故障时发出报警信息并上传,报警信息见附录A。

6.4.1.3 在发生一级和二级报警时,电池管理系统应对报警信息前后各10s的模拟量和状态量进行记录。

6.4.2 报警内容
6.4.2.1 锂离子电池、钠离子电池和铅酸(炭)电池管理系统的报警内容应包含:电压越限、电压极差越限、簇电流越限、温度越限、簇内电池单体温度极差越限、绝缘电阻越限、电压采集线异常、温度采集线异常、电池簇充放电回路异常、通信异常等。对于两簇以上电池直流端并联的锂离子电池、钠离子电池和铅酸(炭)电池管理系统还应具有电池簇间环流越限报警。


保护
6.4.3.1 电池管理系统应在一级报警发出后300ms内发出停机指令,并在5s内断开电池簇或电池列充放电回路。
6.4.3.2电池管理系统应在二级报警发出后300ms内发出降低电池运行功率指令。


控制
6.5.1 锂离子电池、钠离子电池和铅酸(炭)电池管理系统应控制电池簇和电池阵列投入和退出。
6.5.2 电池管理系统宜具有通过冷却或加热系统调节电池温度的能力。
6.5.3 液流电池管理系统应控制电解液循环泵的泵速和阀门通断。


能量状态估算
6.6.1 电池管理系统应实时估算电池能量状态(SOE)。
6.6.2 电池管理系统能量状态估算最大允许误差应为土5%。


均衡
锂离子电池、钠离子电池和铅酸(炭)电池管理系统应具有均衡功能,均衡方式可采用主动均衡方式和被动均衡方式中的一种或两种。


绝缘电阻检测

参数设置
6.9.1 电池管理系统应具有对电池系统配置参数、电池正常运行截止参数、异常状态的报警阈值和保护阈值等参数进行设置功能。
6.9.2 电池管理系统应具有参数设置权限功能。
6.9.3 电池管理系统应具有就地参数设置功能,并宜具有远程参数设置功能。

数据存储
6.10.1 电池管理系统应实时存储电池运行状态信息、运行参数信息、报警信息、保护动作信息等数据信息。
6.10.2 电池管理系统应在本地存储不少于120d的数据信息,宜采用队列存储方式。

计算和统计
6.11.1 电池管理系统应具有电池模块电压计算功能。
6.11.2 电池管理系统应具有对累计充放电量、单次充放电量等电量数据统计功能。
6.11.3 电池管理系统应具有电压越限次数、温度越限次数、故障保护事件次数等数据统计功能。

显示
电池管理系统宜具有对电池运行状态、电池运行参数、事件记录等基本信息的显示功能。


4.2 模块介绍

4.2.1 从控模块

从控模块是储能系统电池包的控制和管理核心,支持对电池包进行管理,
采集电池包内单体电池电压、单体温度,对电池运行状态进行分析,单体均衡控制,热管理风扇控制风扇故障检测等
从控模块全部信息通过非隔离 CAN 与主控模块通信,数据上报、指令接受、参数更改、故障上报等
主要功能:

  1. 支持 24 路单体电压采集,采集范围为 0-5V;
  2. 支持 24 路单体温度采集,采集范围 -40~+125°C,
  3. 具备 24 路被动均衡功能,
  4. 支持 1 路干接点控制:
  5. 支持 2 路 485 接口,配合主控模块实现对全部从控模块的自动地址编码;
  6. 支持 1 路非隔离CAN通信(通信频率250kbs),支持CAN2.0协议,符合1SO11898-22016标准和主控模块通信;
  7. 支持硬件看门狗功能;
  8. 支持系统运行数据的本地存储;
  9. 支持在线程序升级;
  10. 具备本地数据分析能力。
  11. 产品状态可视化

硬件框图
在这里插入图片描述

扩展:AFE芯片做什么用的?AFE(Analog Front End) 模拟前端


软件框图
在这里插入图片描述


4.2.2 主控模块

主控模块是储能系统电池簇的控制和管理核心,支持对从控模块管理,包括通信、供电、自动地址编码,获取电池簇内全部单体电压、单体温度值,单体均衡管理,热管理风扇故障检测等。
主控模块内部电路检测电池簇组电压,组对地绝缘电阻,组充/放电电流,内置多维度算法对电池的状态(SOC、SOH等)进行计第和监测;当电池簇内出现告警时,主控模块通过内部电路控制断路器、继电器切断保护,并可通过D1、温度检测电路判断断路器、继电器粘连状态和温度,实现对高压箱内开关预警和保护。
主控模块全部信息通过隔离CAN和总控模块通信,进行数据上报、指令接受、参数更改、故障上报等。

主要功能:

  1. 支持 2 路总电压(总压和预充电压)采集,采集范围为 0~1500V;
  2. 支持双量程霍尔传感器采集或 CAN 通讯电流传感器两种电流采集方案,采集范围由霍尔传感器量程决定;
  3. 支持绝缘采集,检测总正、总负对 PE(机箱或大地)的绝缘值,采集范围为 0~65MΩ;
  4. 支持 4 路温度采集,其中 1 路箱体温度、3 路继电器温度,采集范围为 -40+125°C;
  5. 支持 4 路高边驱动输出、4 路低边驱动输出、2 路干接点输出;
  6. 支持 8 路数字信号输入检测( 4 路高电平、3 路低电平、1 路无源)
  7. 支持 1 路非隔离 CAN通信(通信频率 250kbs), 支持 CAN2.0协议,符合 IS011898 - 22016标准,和多个从控模块级联通信;
  8. 支持 1 路隔离 CAN通信(通信频率 250kbs),支持 CAN2.0协议,符合IS011898-22016标准,和总控模块通信;
  9. 支持 2 路隔离 RS485通信(通信频率9600bps),支持M0DBUS/RTU协议,1路和辅助模块通信,1路进行自动编址;
  10. 支持板载时钟电源RTC,保存运行时间;
  11. 支持系统运行数据的本地存储;
  12. 具备电池(单体、模组、簇)过压、欠压、压差、过流、欠流、过温、低温、温差、短路、绝缘、继电器诊断等告警及保护;
  13. 内置S0C/S0H多维度算法模型,有效追踪电池真实状态;
  14. 具备本地数据分析能力、本地告警功能:
  15. 支持在线程序升级;
  16. 1个主控模块最大可管理32个从控模块。
  17. 支持1路RJ45标准网口,预留和总控模块通信

软件框图
在这里插入图片描述


在这里插入图片描述


4.2.3 总控模块

总控模块是储能系统电池堆的控制和管理核心,对电池堆中所有电池簇的电池信息(电压、温度、电流等参数)收集、分析、判断
存储可快速对电池堆数据进行分析、转换,同时可通过RS485、RS232、DO、DI接口对动环环境(空调、消防、水浸等)数据进行
监控和分析。

主要功能:

  1. 支持 3 路隔离LAN通信(通信频率10M/100M),支持MODBUS/TCP、DL/860等协议,和EMS系统通信;
  2. 支持 3 路隔离CAN通信(通信频率250kbs),支持CAN2.0协议,符合1SO11898-22016标准。其中2路和主控模块通信,1路(预留)
    和PCS设备通信;
  3. 支持 4 路隔离RS485通信(通信频率9600bps),和环境监测/控制模块通信;
  4. 支持 1 路隔离RS232通信(通信频率9600bps),和UPS电源通信;
  5. 支持 4 路隔离干接点,其中1路和PCS设备联动,其中3路控制指示灯;
  6. 支持 4 路DO高边Relay输出,其中3路控制电操(断路器)合闸、分闸、分离脱扣其中1路预留;
  7. 支持 8 路D电平检测,检测环境设备和传感器信号,电操控制状态;
  8. 支持 1 路TF卡外扩存储介质接入,
  9. 支持 1 路USB接口,支持程序读取升级与数据导出;
  10. 支持系统运行数据的本地存储:
  11. 具备电池(单体、模组、簇、堆)过压、欠压、压差、过流、欠流、过温、低温、温差、短路、绝缘、继电器诊断等告警及保护;
  12. 内置 SOC/SOH 多维度算法模型,有效追踪电池真实状态,
  13. 具备本地数据分析能力、本地声光告警功能;
  14. 支持在线程序升级或U盘升级;
  15. 1 个总控模块最大可管理 30 个主控模块。

5. Microchip单片机

突破性的创新功能和解决方案
• 超低功耗:工作模式下小于35 µA/MHz;休眠模式下小于200 nA
• 高性能:最高600 DMIPS性能(支持双精度硬件浮点)以及最大2 MB双分区闪存和512 KB SRAM
• 外设触摸控制器(PTC):专用硬件外设,提供稳健的电容式触摸解决方案,具备高耐湿性和抗噪性
• 梦游(SleepWalking)技术:外设具有在CPU处于休眠状态时执行预期任务的功能
• 事件系统:支持外设间通信并高效卸载CPU
• 低成本无控制器图形(LCCG)解决方案
• 紧凑型封装选项:芯片级封装,尺寸小至1.9 x 2.4 mm
• 高级模拟和连接外设
• microMIPS™指令集架构(ISA),提高了代码密度
• 双分区闪存选项,支持在线更新

参考:32位单片机系列,业界最广泛且最具创新的32位MCU产品线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1789134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知识图谱应用---智慧金融

文章目录 智慧金融典型应用 智慧金融 智慧金融作为一个有机整体,知识图谱提供了金融领域知识提取、融合、分析、推断、决策等功能,如下图所示。在场景方面,智慧金融涵盖智慧支付、智慧财富管理、智慧银行、智慧证券、智慧保险、智慧风控等诸多…

【教程】使用 Tailchat 搭建团队内部聊天平台,Slack 的下一个替代品!

前言 多人协作,私有聊天一直是团队协作的关键点,现在有很多专注于团队协作的应用和平台,比如飞书、企业微信和Slack等。这期教程将带你手把手的搭建一个在线的团队协作向聊天室,希望对你有所帮助! 本期聊天室使用TailChat作为服务…

Rust 第三方库创建和导入(cargo --lib)

前言 日常开发过程中,难免会有一些工具方法,多个项目之间可能会重复使用。 所以将这些方法集成到一个第三方包中方便后期维护和管理, 比如工具函数如果需要修改,多个项目可能每个都需要改代码, 抽离到单独的包中只需要…

esp32-c6所有配套教程

1.介绍 本文是esp32-c6所有资料的介绍 如果需要详细代码的话请访问下面这个链接 esp32-c6使用教程wifi(espidf修改成arduino)附带代码websocket,舵机,点灯【2024年】-CSDN博客 配置环境 视频教程 0-2设置开发环境_哔哩哔哩_bi…

【python】成功解决“ImportError: cannot import name ‘triu’ from ‘scipy.linalg’”错误的全面指南

成功解决“ImportError: cannot import name ‘triu’ from ‘scipy.linalg’”错误的全面指南 在Python编程中,尤其是在使用scipy这个科学计算库时,可能会遇到ImportError错误,提示无法从scipy.linalg模块中导入名为triu的函数。这个错误通…

Linux入门教程笔记(一文带你了解Linux并精通)

文章目录 一、Linux概述二、Linux目录结构(重点)2.1 Linux文件系统的类型2.2 Linux文件系统的结构2.3 具体的目录结构2.3.1 Linux 根目录2.3.2 Linux /usr目录2.3.3 Linux /var 目录2.3.4 tar包存放目录:crossed_swords: 三、vi和vim编辑器四、Lnux开机&…

SpringMVC接收数据

SpringMVC接收数据 SpringMVC处理请求流程 SpringMVC涉及组件理解: DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ]HandlerMappi…

16个常用的思维模型

01.机会成本 02.沉没成本 03.直觉思维 04.决策树 05.非SR模型 06.确认性偏差 07.易得性偏差 08.逆向思维 09.六顶思考帽 10.101010旁观思维 11.升级思维 11.笛卡尔模型 13.第一性原理 14.奥卡姆剃刀理论 15.马斯洛需求层次理论 16.反脆弱思维 来源:16个常用的思维模…

基于最大重叠离散小波变换的PPG信号降噪(MATLAB 2018)

光电容积脉搏波PPG信号结合相关算法可以用于人体生理参数检测,如血压、血氧饱和度等,但采集过程中极易受到噪声干扰,对于血压、血氧饱和度测量的准确性造成影响。随着当今社会医疗保健技术的发展,可穿戴监测设备对于PPG信号的质量…

WSDM 2023 推荐系统相关论文整理(三)

WSDM 2023的论文录用结果已出,推荐系统相关的论文方向包含序列推荐,点击率估计等领域,涵盖图学习,对比学习,因果推断,知识蒸馏等技术,累计包含近四十篇论文,下文列举了部分论文的标题…

Source Insight 4.0安装和使用

文章目录 一、前言二、新建工程2.1 新建工程2.2 同步工程 3 Source Insight怎么生成函数调用关系图?3.1 打开关系窗口3.2 打开关系函数3.3 修改关系属性3.4设置 Relation Window Options3.5 设置Levels3.6 修改显示模式 4 下载地址 一、前言 Source Insight 4.0 是每…

Blog项目切换Markdown编辑器———LayUI弹出层弹出写在页面的内容导致的各种bug

【2024.5.24回顾】 1 问题描述(描述完自己解决了…) 正常情况 点击添加文章按钮后,弹出文章编辑界面,如果用富文本功能编辑,则一切正常。可以多次打开、关闭 Markdown 如果在弹出层中点击了切换编辑器按钮,会成功切换为markd…

Android RelativeLayout Rtl布局下的bug:paddingStart会同时作用于左右内边距

问题现象 如上图,只是设置了paddingStart,在RTL布局下,左右都产生了10dp的间距。其他布局如LinearLayout,FrameLayout则没有这个问题。 private void positionAtEdge(View child, LayoutParams params, int myWidth) {if (isLayou…

simCSE句子向量表示(1)-使用transformers API

SimCSE SimCSE: Simple Contrastive Learning of Sentence Embeddings. Gao, T., Yao, X., & Chen, D. (2021). SimCSE: Simple Contrastive Learning of Sentence Embeddings. arXiv preprint arXiv:2104.08821. 1、huggingface官网下载模型 官网手动下载:pri…

【Python数据分析--Numpy库】Python数据分析Numpy库学习笔记,Python数据分析教程,Python数据分析学习笔记(小白入门)

一,Numpy教程 给大家推荐一个很不错的笔记,个人长期学习过程中整理的 Python超详细的学习笔记共21W字点我获取 1-1 安装 1-1-1 使用已有的发行版本 对于许多用户,尤其是在 Windows 上,最简单的方法是下载以下的 Python 发行版…

史上最全,呕心沥血总结oracle推进SCN方法(三)

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享。前面介…

实现k8s网络互通

前言 不管是docker还是k8s都会在物理机组件虚拟局域网,只不过是它们实现的目标不同。 docker:针对同一个物理机(宿主机) k8s:针对的是多台物理机(宿主机) Docker 虚拟局域网 K8S虚拟局域网 …

腾讯云centos上安装docker

下面的操作是在root用户下操作的,如果非root用户在命令行前加上sudo 1. 系统及内核查看 操作系统:64位的CentOS 7或更新版本。内核版本:最低要求是3.10,推荐使用3.10或更高版本。 #查看内核版本 (base) [klfwjfweaVM-0-6-centos ~]$ uname…

专业开放式耳机什么牌子更好?六大技巧教你不踩坑!

相信很多入坑的朋友再最开始挑选耳机的时候都会矛盾,现在市面上这么多耳机,我该怎么选择?其实对于开放式耳机,大家都没有一个明确的概念,可能会为了音质的一小点提升而耗费大量的资金,毕竟这是一个无底洞。…

OpenAI的Sam Altman搞核聚变了?!究竟是创新还是疯狂?|TodayAI

据《华尔街日报》报道,西雅图地区的核聚变公司Helion Energy正在与人工智能公司OpenAI洽谈一项重要交易,OpenAI计划“购买大量电力为数据中心提供动力”。这一消息引起了广泛关注。 OpenAI的首席执行官兼联合创始人Sam Altman已向Helion投资了3.75亿美元…