打印
[应用相关]

STM32构建了爆震控制单元的硬件系统

[复制链接]
楼主: 東南博士
手机看帖
扫描二维码
随时随地手机跟帖
21
東南博士|  楼主 | 2019-10-14 14:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
東南博士|  楼主 | 2019-10-14 14:33 | 只看该作者

使用特权

评论回复
23
東南博士|  楼主 | 2019-10-14 14:34 | 只看该作者

使用特权

评论回复
24
東南博士|  楼主 | 2019-10-14 14:35 | 只看该作者

使用特权

评论回复
25
東南博士|  楼主 | 2019-10-14 14:35 | 只看该作者

使用特权

评论回复
26
東南博士|  楼主 | 2019-10-14 14:36 | 只看该作者

使用特权

评论回复
27
東南博士|  楼主 | 2019-10-14 14:37 | 只看该作者

使用特权

评论回复
28
東南博士|  楼主 | 2019-10-14 14:37 | 只看该作者

使用特权

评论回复
29
東南博士|  楼主 | 2019-10-14 14:37 | 只看该作者
    Simulink模型生成的代码主要由应用程序和辅助程序两部分组成,其中应用
程序是根据simulink模块库搭建的模型生成的代码,用户编写的S-function以及
内联tlc文件生成的代码和在外部代码中可见并可被外部代码所访问的模型参
数,此部分代码完全由一组系统目标文件控制生成。辅助程序是用户开发的用
于特定硬件平台和软件开发环境的代码,这部分代码主要包括以下三个部分[[46]
用户自定义的主程序,用于执行模型代码的定时器中断服务程序以及用于和目
标硬件通信的设备驱动程序。主程序的作用是对模型中的模块进行初始化,设
置中断服务程序和执行后台任务或循环,若设计的主程序运行时间是有限的,
主程序还要负责在程序终止前进行清除操作,例如释放内存分配空间和屏蔽定
时器中断等。定时器中断服务程序通常需要调用RTW提供的函数rt-Onestep o
定时器的周期由模型中设置的基本步长决定,定时器中断服务程序负责控制必
须在单个时钟步长周期内完成的操作,例如计算当前输出。设备驱动程序则用
于接收外部数据和执行控制操作。

使用特权

评论回复
30
東南博士|  楼主 | 2019-10-14 14:38 | 只看该作者
    本文中爆震控制策略属于应用模型,代码完全由RTW控制生成;时钟,
AD-DMA模块和CAN通信模块采用手工代码编写的方式实现,同时编写主程序
tlc文件并在其中调用其初始化程序。本文采用手写代码与自动生成代码相结合
的方式实现爆震控制软件的开发,两部分代码并非相互独立,而是存在信息交
互,需要读取或者向对方写入所需的变量才能完成计算和控制。同时,在模型
中添加临界代码以保证数据的正确读取和写入。在 simulink中提供了数据存储
接口DataStoreMemory CDSM)、数据读取接口DataStoreRead CDSR)、数据写
入接口DataStoreWrite CDSW)以及系统输出模块SystemOutputs。本文中模型
通过数据读取接口访问AD-DMA模块采集得到的数据,并通过数据写入接口将
爆震分析的运算结果写入存储区供驱动模块访问。
    本文在搭建爆震信号采集模型以及输入点火控制信号模型时通过
Environment Controlle:模块连接仿真数据入口模型和可生成代码的数据采集模
型。在进行模型仿真验证时,Environment Controlle:模块自动选择sim入口的数
据输入;而在编译生成代码时,则选择Code:入口的模型,如图4-23所示。在
编译生成代码时访问或者写入手写代码中变量,首先使用数据存储模块(DSM)
定义变量名,在模块配置窗口设置变量的数据存储类型(StoreClass)为来自外
部文件(ImportFromFile ),并添加变量在外部文件的头文件。访问变量时使用数
据存储读取模块(DSR)将手写代码中对应变量名的数据从存储区拷贝到模型输
出;写入变量时使用数据写入模块(DSW)将应用模型中计算得到的数据写入
到存储区,如图4-24所示。由于一个变量可能占用多个字节,为保证变量读取
时不受中断函数影响,使用SystemOutputs模块添加临界代码,在数据读取前后
通过关闭中断(DisableInterrupts)和打开中断(EnableInterrupts)的方式对数据
进行保护。

使用特权

评论回复
31
東南博士|  楼主 | 2019-10-14 14:38 | 只看该作者

使用特权

评论回复
32
東南博士|  楼主 | 2019-10-14 14:38 | 只看该作者
    完成模型设计后,在配置环境中对系统目标文件,生成目标语言,硬件平
台等进行配置便可以生成stm32的嵌入式代码。生成的代码包含了与模型相关的
数据类型文件,模型配置文件以及相关的.h文件和.c文件。然后在Keil环境下
创建stm32f103单片机的基本工程文件,并将生成的.c和.h文件添加到工程中,
用生成的主程序文件替换模板工程中的主程序文件便完成了整个爆震控制系统
软件的设计,生成的代码编译后可直接下载到单片机运行。

使用特权

评论回复
33
東南博士|  楼主 | 2019-10-14 14:39 | 只看该作者
    本文通过实验分别测得使用不含硬件乘法器,总线时钟最高64MHz的飞思
卡尔MC9S 12XDP512单片机和使用带有硬件乘法器,总线时钟最高72MHz的
stm32f103的部分实时性数据进行对比:一次AD采样的数据用于完整的计算(包
括小波滤波,爆震判定,触发点火提前角运算等步骤),飞思卡尔单片机需要近
580us,而STM32单片机只需要47us,采用怠速工况下800r/min(发动机正常
运转启动后的最慢转速)计算时,一个凸轮轴周期(活塞走完完整的四个冲程)
为150ms,一个点火周期为37.Sms} AD转换采样率为80KHz,则一个点火周期
的计算时间为141ms,小于一个完整的凸轮轴周期;采用最快转速6000 r/min(通
常发动机正常工作转速不会超过6000r/min)计算时,一个凸轮轴周期为20ms
一个点火周期为Sms} AD转换采样率为80KHz,则一个点火周期的计算时间为
18.8ms,小于一个完整的凸轮轴周期,因此,使用STM32单片机四冲程进行一
次爆震计算能够满足实时性要求。而使用飞思卡尔单片机采用怠速工况下
800r/min时,一个点火周期的运算时间达到了1.74s,无法满足实时性要求。

使用特权

评论回复
34
東南博士|  楼主 | 2019-10-14 14:40 | 只看该作者

使用特权

评论回复
35
東南博士|  楼主 | 2019-10-14 14:40 | 只看该作者

使用特权

评论回复
36
東南博士|  楼主 | 2019-10-14 14:40 | 只看该作者

使用特权

评论回复
37
東南博士|  楼主 | 2019-10-14 14:40 | 只看该作者
    在做爆震控制实验之前需要对发动机基本点火提前角进行开环状态下的在
线标定,以便在此基础上进行点火提前角修正。基本点火提前角的标定即在发
动机正常工作情况下,通过试验获取能使发动机输出最大转矩而且无爆震发生
  (临界爆震点)的点火提前角,标定过程如下。
    1、让发动机充分暖机并保证发动机工作在开环条件下;
    2、调整发动机工作到固定的工况点,改变发动机的点火提前角,同时监听
发动机爆震情况,记录点火角、相应转矩及爆震程度。标定时注意点火提前角
随转速升高而增大,随负荷增大而减小。点火提前角标定范围一般为100-500,
标定原则是使发动机输出扭矩最大,但不能超过比爆震界限小3。的安全界限;
    3、在标定工况点若无爆震发生,则选取MBT(最大转矩最小点火角)点作
为基本点火提前角,否则选取KBL(爆震极限点火角)点作为基本点火提前角,
完成所有工况点的主点火角表((IGN Table )标定,并记录试验数据,如图5-4
所示。

使用特权

评论回复
38
東南博士|  楼主 | 2019-10-14 14:40 | 只看该作者

使用特权

评论回复
39
東南博士|  楼主 | 2019-10-14 14:41 | 只看该作者

使用特权

评论回复
40
東南博士|  楼主 | 2019-10-14 14:41 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则