打印
[应用相关]

STM32开发脉冲中子发生器

[复制链接]
楼主: wangjiahao88
手机看帖
扫描二维码
随时随地手机跟帖
41
wangjiahao88|  楼主 | 2019-7-6 16:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
    74HC 123单稳态电路可根据外部电路的电阻和电容来调节单稳态时间,本
系统根据实际需求,经过多次实际电路测试后,选用电阻阻值为10欧姆,电容
值为0.1 uF o  74HC 123典型电路如图3.24所示。

使用特权

评论回复
42
wangjiahao88|  楼主 | 2019-7-6 16:24 | 只看该作者
    中子定标器采用STM32内置的DAC模块来实现DA输出功能。它的DA模
块分辨率可达到12位数字信号,输出电压范围为。-3.3V,调节精度为0.8mV}
满足定标器的设计需要。
    STM32F 103系列单片机有两个DAC通道,分别为引脚PA4一通道1和PAS-
通道2。本系统将两个DAC引脚连接至比较器的一端,进行电压比较,实现对
4路脉冲信号的阂值选择。

使用特权

评论回复
43
wangjiahao88|  楼主 | 2019-7-6 16:24 | 只看该作者

使用特权

评论回复
44
wangjiahao88|  楼主 | 2019-7-6 16:24 | 只看该作者

使用特权

评论回复
45
wangjiahao88|  楼主 | 2019-7-6 16:25 | 只看该作者
    离子源触发脉冲是中子发生器控制系统进行模式选择的关键部件,需要使用
者实时监测脉冲是否正常。传统的示波器不能满足远距离监测脉冲的功能,且体
积大、携带不便。考虑到这些问题,本文基于S TM32F 103 VET6最小系统提出了
一种便携式远程波形监测仪设计方案,用于脉冲中子发生器控制系统离子源触发
脉冲的监测。本文设计的远程波形监测仪结构框图如图3.26所示,它的硬件由
USB模块、接口模块及STM32最小系统构成,可采集0-3 . 3 V }  0-1 OKHz的任意
波形信号。各模块功能如下:
      (1) USB模块用于波形监测仪与上位机进行正常的USB通信。
      (2)接口模块是示波器电路板和外界信号进行交互的通道。
      C 3 ) STM32最小系统是整个系统进行处理和发送数据的核心。

使用特权

评论回复
46
wangjiahao88|  楼主 | 2019-7-6 16:25 | 只看该作者
    STM32F 103 VET6内置有USB控制外设(不含OTG功能),可用于制作
USB设备,无需外接,使用方便[[49]。其主要特性如下:
      (1)符合USB2.0全速设备的技术规范,速度为12Mb/s o
      C2)可配置1-8个端点,其中这8个端点均为双向端点,若配置为单向端
点,可配置16个。
      C 3) CRC生成/校验,反相不归零(NRZI)编码/解码和位填充。
    C4)支持同步传输。
      CS)支持批量/同步端点的双缓冲区机制,为实现USB存储器提供技术支
持。
      (6)支持USB挂起/恢复操作,降低功耗。
    STM32内部集成的USB收发器,它的作用和CAN的收发器作用类似,主
要负责一些协议相关的数模转换工作和设备接入检测功能。

使用特权

评论回复
47
wangjiahao88|  楼主 | 2019-7-6 16:25 | 只看该作者

使用特权

评论回复
48
wangjiahao88|  楼主 | 2019-7-6 16:26 | 只看该作者

使用特权

评论回复
49
wangjiahao88|  楼主 | 2019-7-6 16:26 | 只看该作者
      (1)主控板电路以STM32为主控芯片,TD301D232H为串口通信芯片,实
现对控制台的监控和控制。另外,主控板还外置有ESP8266 Wifi模块和W25Q64
计时模块。
      C2)驱动板电路是系统的辅助电路,以二阶有源低通滤波电路和放大电路
构成,主要实现AD采集和DA输出功能。此外,驱动板电路也起到系统供电和
隔离作用。
    C3)脉冲板以EP4CE6E22C8N为控制芯片,DG412为离子源触发电平转
换芯片,IS07240为同步脉冲输出芯片,实现了脉冲中子发生器单一脉冲和复合
脉冲模式的硬件设计。
      (4)中子定标器以STM32为控制系统,LM318, LMV761, 74HC123为中
子脉冲采集芯片,实现了中子的实时计数。
      CS)远程波形监测仪以STM32为控制器,利用内部的USB收发器及外置
放大器电路,实现了实时波形采集和简易波形输出功能。

使用特权

评论回复
50
wangjiahao88|  楼主 | 2019-7-6 16:27 | 只看该作者
    主控电路板作为系统的硬件核心,协调着整个系统的运行,是软件系统的核
心。STM32主控程序功能如下:
      C1)采集6路中子管内部电参数,即储存器电压和电流、离子源电压和电
流、加速极电压和电流,将其写入相应的数组中,不断循环执行。同时,等待上
位机发送上传指令,将采集数据显示至上位机。
      C2)控制3路PWM输出,即控制储存器电流、离子源电压、加速极电压
三路电参数。在接收到上位机的PWM输出命令后,系统会根据指令改变相应的
寄存器值,实现波形占空比可调功能。
      C3)利用SPI通信实现主控电路控制FPGA产生不同的脉冲时序,达到中
子发生器模式选择的目的。若设置为直流模式,只需要FPGA产生恒定的高电平
即可;若设置为脉冲模式,FPGA产生可调控的同步脉冲波形。
      C4)记录中子管累计运行时间和中子发生器控制系统在线使用时间。STM32
控制系统从上电开始计时,若离子源电流大于100mA,则每过一分钟写Flash一
次,实时记录中子管累计运行时间;中子发生器在线运行时间在控制台开电复位
后实时记录。
      CS)采用FreeModbus通信协议与LabVIEW上位机进行通信,保证系统运
行的稳定性。
      C6)由LabVIEW上位机进行设置,调控主控电路板外置I/O口的高低电平,
进而控制离子源的电源开关。
    主控电路板程序主要包括以下子程序:ADC采集程序、PWM输出程序、
DART串口通信程序、FreeModbus协议移植程序、计时程序、FPGA控制程序、
I/O口设置程序。主控电路板软件流程如图4.1所示。

使用特权

评论回复
51
wangjiahao88|  楼主 | 2019-7-6 16:28 | 只看该作者
      (1)首先是对STM32系统初始化,如:DART, ADC, Flash、定时器、PWM
初始化。
      C2)进入定时器中断,完成以下操作:采集储存器电压、储存器电流、离
子源电压、离子源电流、加速极电压、加速极电流;实时等待是否有Modbus指
令,若有命令,则进行命令解析,否则继续等待;实时记录中子管运行时间和中
子发生器运行时间。
    C 3 ) Modbus协议响应后,进行相应的读写操作,并回传Modbus命令数据。
      C4)等待上位机发送调控命令,进入Function函数,实现如下功能:调节
或读取保持寄存器值,如储存器电流、离子源电压、加速极电压等;读取输出寄
存器值,如储存器电压、中子管累计时间、中子发生器在线运行时间的读取;调
节或读取线圈值,如离子源开关、直流/脉冲开关、单一/复合开关。
      (5)循环步骤40

使用特权

评论回复
52
wangjiahao88|  楼主 | 2019-7-6 16:28 | 只看该作者
    4.1.1 AD采集程序
    STM32有3个12位的ADC,每个ADC共用21个采集通道,且可以使用
DMA方式进行数据采集。本程序除了采集中子管的6路电压,还预留出7路AD
采集通道,方便以后使用。
    AD采集程序包含引脚的初始化和AD采集初始化两个程序。引脚初始化程
序将引脚设置为模拟输出模式,并为其配置时钟。AD采集初始化程序功能主要
分为两部分:DMA配置和AD采集方式选择。
    DMA,是一种减轻CPU工作量的数据存储方式,因而被广泛应用[[50,51] o DMA
方式是点对点的数据转移,无需内核的参与,显然,DMA方式效率更高。本系
统使用DMA方式进行AD采集,采集周期约Suso
    4.1.2 PWM输出程序设计
    STM32F 103 VET6自带有两路DAC模块,由于本系统需要控制三路电源,
所以系统舍弃了自带的两路DAC模块,改为用定时器产生不同占空比的PWM
波形,后经过二阶有源低通滤波器转化为直流电压,进而控制中子发生器三路电
源。
    当上位机向STM32发送PWM输出指令时,系统会先将命令进行解析,然
后对应的修改相应寄存器值,实现控制三路电源的目的。若通讯成功,下位机会
在调节后向上位机返回调节完的步数和电压值,确保了DA输出的正确性。其程
序设计流程图如图4.2所示。

使用特权

评论回复
53
wangjiahao88|  楼主 | 2019-7-6 16:29 | 只看该作者
    STM32在接收到上位机工作模式选择命令后,通过SPI通信将命令传递给
FPGA,  FPGA由解析函数将数值依次赋值给相应寄存器,产生离子源触发脉冲
和对应的同步脉冲,从而实现控制台模式的选择。中子发生器控制系统有四个开
关:单一/复合开关、直流/脉冲开关、离子源开关和加速极开关。离子源开关是
硬件开关,主要控制离子源电源电路是否输出电压;加速极开关是上位机软件开
关,是上位机确保用户操作规范的一种措施;单一/复合开关和直流/脉冲开关是
下位机软件开关,用于中子发生器控制系统工作模式的选择。
    工作模式选择程序设计实现了上位机经过STM32来控制FPGA模式选择的
功能。它有三种模式:直流模式、单一脉冲模式和复合脉冲模式。在不同的模式
下,离子源触发脉冲和同步脉冲输出会发生相应的改变。离子源模式选择程序框
图如图4.3所示。

使用特权

评论回复
54
wangjiahao88|  楼主 | 2019-7-6 16:29 | 只看该作者

使用特权

评论回复
55
wangjiahao88|  楼主 | 2019-7-6 16:30 | 只看该作者
    FreeModbus函数众多,逻辑复杂,但使用者在移植时无需关心内部的逻辑
结构,只需注意关键的C文件加以修改,即可移植。关键的C文件有:porttimer.c,
portserial. c和function. c。不同的版本对于function. c有不同的命名。
    Potttimer. c文件用于配置Modbus通信的串口及其中断;portserial. c文件用
于配置Modbus通信所使用的定时器;function. c用于Modbus数据收发及解析功
能。其中最为重要的是function. c,它将Modbus协议数据和内存数据关联起来,
从而实现上位机来控制单片机寄存器、线圈功能[[52]
    function. c内包含有对保持寄存器、线圈和开关的读写操作,对输入寄存器
的读操作。本系统主要使用线圈、保持寄存器和输入寄存器。

使用特权

评论回复
56
wangjiahao88|  楼主 | 2019-7-6 16:31 | 只看该作者
    为了记录中子发生器控制系统的在线运行时间和中子管累计运行时间,系统
需要设计计时程序来完成此功能。本文利用Flash W25Q64这款芯片来记录时间,
确保了数据掉电不丢失。记录设备运行时间和中子管累计时间原理如图4.4所示。
    具体过程:首先STM32对W25Q64这款Flash芯片和一个通用定时器进行
初始化,等待离子源电源的产生。当离子源电流大于100uA时,打开通用定时
器,读取Flash内部地址为0x08070000和0x08070002两处的值,将两值转化为
32位数据,再累加当前定时器时间,获得中子管运行时间,从而实现记录中子
管工作时间的功能。由于Flash芯片W25Q64采用SPI通信协议,因此需要设计
SPI通信来实现对该芯片进行读/写操作。

使用特权

评论回复
57
wangjiahao88|  楼主 | 2019-7-6 16:31 | 只看该作者
    早期中子发生器控制系统使用无校验、自定义式通信协议,在工业测试中经
常出现通信异常、死机等情况。为了解决这个问题,本系统采用FreeModbus协
议作为系统的通信协议。
    FreeModbus协议是针对嵌入式应用的通用Modbus协议,它不仅使得数据发
送变得稳定、可靠,而且使得系统可应用232-485通信方式来对控制多个下位机,
节省了串口的使用。
    主控板程序预设函数名及内容:
    一、模式:RTU
    二、设备地址:OSH
    三、设备型号:DSWLLQ001
    四、波特率:9600
    五、默认设置:maichong zhiliu=0(直流),fuhe_ danyi=0(单一),LZY一EY=1(离
子源开关开),脉冲1高电平:1 ms,脉冲1低电平:1 ms,脉冲2高电平:0.01 s,
脉冲2低电平:O.Olso
    命令表1:  COx04、只读)
    输入寄存器:30个,包含有AD采集值和系统时间
    起始地址:0x0000

使用特权

评论回复
58
wangjiahao88|  楼主 | 2019-7-6 16:32 | 只看该作者
命令表2:  COx03,
保持寄存器:50个,
起始地址:0x0003
0x06, 0x10;可读,可写)
32位寄存器为FPGA寄存器设置,16位为DA设置

使用特权

评论回复
59
wangjiahao88|  楼主 | 2019-7-6 16:33 | 只看该作者

使用特权

评论回复
60
wangjiahao88|  楼主 | 2019-7-6 16:33 | 只看该作者
    从探测器出来的脉冲信号,是一种负电压、脉冲宽度较窄的无序信号,它需
要经过处理才可被单片机采集。处理方法可分为以下几种:第一种是脉冲计数,
即把所需要的脉冲数量进行记录。第二种是脉冲幅度分析,即按照脉冲幅度的不
同,进行计数,从而得到脉冲幅度谱。第三种是脉冲信号时间分析,即测量脉冲
信号之间的时间间隔关系。本文设计的中子定标器是按照脉冲幅度进行脉冲计数
的,可以采集在不同时间不同幅度下脉冲数量的总和,使得中子数实时测量更为
方便。
    中子定标器的核心芯片为STM32F103VET6,旨在采集He-3探测器引出的
负脉冲个数,是实现在直流情况下中子发生器闭环自动化控制的一个必要环节。
中子定标器程序设计主要实现以下功能:
      C1)利用片内4个通用定时器的计数单元,在不占用CPU的同时采集4路
外部脉冲个数。
      C2)实现两路DA输出功能,用于比较电路阂值的设置。
      (3)加入了FreeModbus协议,设置中子定标器的从机地址。
    中子定标器程序包含以下子程序:系统初始化程序、定时器计数单元程序、
通用计数器程序、FreeModbus功能函数、阂值选择程序等。中子定标器程序流
程图如图4.5所示。
    其主要运行流程如下:
      C1)系统初始化(定时器初始化、DA功能初始化、计数单元初始化、中
断初始化等),设置4路计数溢出标志(考虑到系统自带的计数单元是16位的,
只能实现65536个脉冲计数,故本文设计32位的计数单元,溢出后低16位自动
清零,高16位加一)。
      C2)根据采集时间来记录外部脉冲信号上升沿个数,系统将其存入相应的
寄存器中。
      C3)等待上位机发出Modbus指令(调控DA输出指令或读取采集脉冲个
数指令)。若为调控DA指令,系统将调节DA输出,进行阂值选择;若为读取
采集脉冲个数指令,则将当前采集到脉冲的个数发送至上位机,并清空相应的寄
存器。
      (4)循环3命令。

使用特权

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

本版积分规则