打印
[STM32F4]

STM32与FPGA的PLC

[复制链接]
3383|77
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
首先,这是一个劲爆的主题!
实现了很多人想做的事情!

使用特权

评论回复
沙发
東南博士|  楼主 | 2019-12-17 12:29 | 只看该作者

使用特权

评论回复
板凳
東南博士|  楼主 | 2019-12-17 12:30 | 只看该作者
    PLC系统主机控制器选用STM32F407IGT6,它采用Cortex-M4内核,主频
高达168MHz。存储器部分包括1MB大小的Flash和192+4KB的SRAM,其中
4KB SRAM用于保存掉电不丢失的数据。在本课题设计的PLC系统中SRAM用
于存储缓存数据和软元件地址,Flash用于存储PLC系统程序、PLC源程序及源
程序解码结果。数据通信传输部分包括2个DMA控制器、2个CAN总线接口
和一个FSMC总线控制器。上位机通过DMA控制器下载PLC源程序到STM32,
CAN总线接口用于和人接界面、手持式编程器连接,方便观察PLC系统运行状
态和现场编程调试,FSMC总线则用于STM32与FPGA之间的数据通信。

使用特权

评论回复
地板
東南博士|  楼主 | 2019-12-17 12:31 | 只看该作者
    PLC系统主机处理器选用Alter公司生产的EP4CElOF17C8N,该型号的
FPGA具备较低功耗、较多资源和使用方便等优点。采用BGA形式封装256个
引脚,这种密集式封装使得在芯片在面积较小的情况下能为用户提供较多的I/O
引脚。PLC系统运行过程中FPGA作为“逻辑器件”角色,负责实时并行处理
输入输出信息。PLC系统在完成PLC源程序的解码后进行指令的动态处理,将
解码后需要FPGA执行的指令以“操作码+逻辑位”的形式告知FPGA,并由FPGA
完成相关指令的操作。同时,对于指令处理结果、定时器计数器状态也需要通过
FPGA发送到双口RAM供STM32进行数据信息交换使用。

使用特权

评论回复
5
東南博士|  楼主 | 2019-12-17 12:31 | 只看该作者
    上位机软件、STM32控制器、FPGA处理器、PLC用户界面、PLC手持编程
器以及上述PLC系统组成部分之间的通信系统和外围设备共同构成了PLC系统
。上位机软件按照指令编码格式将PLC源程序转换为32位二进制码,然后通过
串口采用DMA方式【38-39]下载到STM32的SRAM中,待下载完成后将其写入到
STM32的PLC源程序存储区(地址范围在FLASH上规划)。STM32利用中断
定时器轮询机制检测 PLC源程序存储区是否接收到经上位机转换的PLC源程
序,然后对其进行解码操作,并将解码后的指令保存至PLC源程序解码结果存
储区。PLC系统运行过程中,STM32与FPGA之间通过FPGA内部构建的双口
}M[40-41]进行数据信息交换。解码后的源程序保存在解码函数结构体中,PLC
系统动态运行时逐条执行,通过FSMC利用STM32与FPGA之间的指令规则告
知FPGA需要执行的具体指令,同时读取FPGA执行结果以及定时器计数器的
状态到双口RAM,实现PLC系统实时有效运行。

使用特权

评论回复
6
東南博士|  楼主 | 2019-12-17 12:31 | 只看该作者

使用特权

评论回复
7
東南博士|  楼主 | 2019-12-17 12:32 | 只看该作者

使用特权

评论回复
8
東南博士|  楼主 | 2019-12-17 12:32 | 只看该作者

使用特权

评论回复
9
東南博士|  楼主 | 2019-12-17 12:32 | 只看该作者
    为操作系统数据存储区分配地址范围0x1000 0000一0x1000 FFFF,大小64KB
的存储空间;PLC系统运行缓存区将动态存储PLC系统运行过程中的变量以及
上位机、手持编程设备与PLC的通信数据,为其分配地址范围0x2000 0000-
Ox20013FFF,大小80KB的存储空间;PLC软元件地址配置区为PLC软元件设
定固定的存储单元以便获取固定地址的数据,为其分配地址范围0x2001 4000-
0x2001 BFFF,大小32KB的存储空间;为PLC源程序解码结果缓存区分配地址范
围0x2001 C000一0x2001 FFFF,大小16KB的存储空间。

使用特权

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

使用特权

评论回复
11
東南博士|  楼主 | 2019-12-17 12:33 | 只看该作者

使用特权

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

使用特权

评论回复
13
東南博士|  楼主 | 2019-12-17 12:33 | 只看该作者

使用特权

评论回复
14
東南博士|  楼主 | 2019-12-17 12:36 | 只看该作者
该分配方案中使用了FLASH模块的11个扇区,共计580KB大小的存储空间。
其中,为PLC系统程序存储区分配256KB大小空间,但未对实际PLC系统程序
大小进行测试说明,本论文通过测试分析将其大小改为64KB;同时为PLC系统
运行状态和配置均分配了32KB大小空间,在实际PLC系统运行过程中它们只
是作为状态标记并不需要如此大的存储空间,本论文将其大小均改为8KB。通
过表2-2可以看出,优化后的FLASH模块空间分配方案只用了7个扇区,272KB
大小的存储空间,节约了308KB的FLASH空间,同时减少了FLASH模块扇区
的使用。在占用最少资源情况下满足PLC系统存储功能,同时避免过多扇区擦
除带来的数据丢失问题。

使用特权

评论回复
15
東南博士|  楼主 | 2019-12-17 12:36 | 只看该作者

使用特权

评论回复
16
東南博士|  楼主 | 2019-12-17 12:38 | 只看该作者
FLASHes Unlock();
FLASHes DataCacheCmd(DISABLE);
一ASM("CPSID I");
if(starta ddr<OX 1 FFF0000){
    while(startaddr<endaddr){
        if(STMFLASH一ead}ord(startaddr)!=OXFFFFFFFF)
            {
                status=FLASH一raseSector(STMFLASHes GetFlashSector(st
                artaddr),VoltageRange_ 3);
                  if(status!=FLASH_ COMPLETE)break;
            }else startaddr+=1;
    }
}
FLASHes DataCacheCmd(ENABLE);
FLASHes LockU;
一ASM("CPSIE I");

使用特权

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

使用特权

评论回复
18
東南博士|  楼主 | 2019-12-17 12:40 | 只看该作者
    上位机软件根据课题组设计的指令编码表将PLC源程序转化为32位二进制
码下载到PLC系统中。此时的二进制码只是对PLC源程序的逐条翻译,并不具
备程序运行的能力。PLC指令的编码是将PLC指令分为几类进行的,包括基本
指令、其他基本指令和步进指令、数据流向指令等。考虑到PLC指令编码格式
的唯一性,充分利用32位二进制码并根据指令类别和指令所带软元件类型及数
量对每一条PLC指令进行编码。上位机编码基本指令LD XO X1的结果如图3-3
所示,可以看出编译结果为0100 0000 0000 0000 0100 0000 0000 10010

使用特权

评论回复
19
東南博士|  楼主 | 2019-12-17 12:41 | 只看该作者

使用特权

评论回复
20
東南博士|  楼主 | 2019-12-17 12:42 | 只看该作者

使用特权

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

本版积分规则

382

主题

6081

帖子

34

粉丝