发新帖我要提问
123
返回列表
打印
[应用相关]

STM32和FPGA的多通道步进电机控制系统

[复制链接]
楼主: Diyer2015
手机看帖
扫描二维码
随时随地手机跟帖
41
Diyer2015|  楼主 | 2018-10-15 12:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
    状态对应的编码是其在状态机中的标标志,所以使用状态机时要对步进电机各个
状态予以编码。对电机状态进行划分以后,需要根据相应的规则对电机的各个状态予
以编码与命名。状态机通过判断状态编码来进行各个运行状态之间的转换。设置好的
状态编码被存储在寄存器中等候状态机进行调用。本系统使用parameter对状态编码进
行定义,并将其保存至定义好的寄存器state中。各个状态的命名和编码如表所示。
    在编写状态机程序时,涉及的控制信号和寄存器有:
    (1)   reset:复位信号,由STM32提供,高电平有效。
      (2)   clk 1k:  1KHz时钟信号,在检测到上升沿时有效。
    ( 3 )   pul}clr:步数计数器复位信号,在低电平时有效,步数计数器清零。
      ( 4 )   state:步进电机状态寄存器。
    ( 5 )   pul_ counter en:步数计数器使能信号。
    ( 6 )   counter en:计数器使能信号。
      ( 7 )   counter now:  24位当前分频值,由上位机确定。

使用特权

评论回复
42
Diyer2015|  楼主 | 2018-10-15 12:48 | 只看该作者
状态机采用的时钟为一1-KHz、在检测到信号上升沿时护执行程序0省先判断正set
信号的电平高低,如果reset是低电平,状态机正常执行,否则相关的寄存器全部清零,
步进电机停在初始状态。各状态间的转换可使用状态转换图清晰地展现出来,如图5-8
所示

使用特权

评论回复
43
Diyer2015|  楼主 | 2018-10-15 12:49 | 只看该作者

使用特权

评论回复
44
Diyer2015|  楼主 | 2018-10-15 12:50 | 只看该作者
    在上位机人机交互操作界面上,用户能够完成对各个步进电机相应运行参数(如
步数、初始速度、加速度等)的设置。步进电机的速度只和脉冲的频率有关,对电机
速度的控制归根到底是对输入电机的脉冲频率的控制,因此,在本控制系统中,通过
控制分频值N来完成对电机的控制,分频值N愈大,则频率愈低,而速度也愈小。所
以,各个步进电机速度相关的参数在人机操作界面设置后,由上位机进行相应的转换
和计算。

使用特权

评论回复
45
Diyer2015|  楼主 | 2018-10-15 12:51 | 只看该作者
  C 1) STM32通信软件设计
    STM32与FPGA之间的通信包括了两部分:STM32向FPGA发送数据和STM32
从FPGA读取数据。依据系统设计指标,STM32与FPGA之间的通信采用FSMC总线。
    1, FSMC简介
    FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列中内
部集成256 KB以上Flash,后缀为xC, xD和xE的高存储密度微控制器特有的存储控
制机制[}sz}0
    本设计中,STM32使用FSMC与FPGA的SRAM(静态随机存储器)引脚相连,
完成信息的收发。程序中,调用函数SRAM-Init()完成对FSMC进行初始化,设置FSMC
为A模式。

使用特权

评论回复
46
Diyer2015|  楼主 | 2018-10-15 12:51 | 只看该作者
2, STM32从FPGA中读取数据
    STM32从FPGA读取数据时,需要先对当前数据进行锁存,然后调用函数
Read Data from FPGA( ),确定FSMC需要读取的数据地址。Read卫ata from FPGA( )
定义了2个参数:步进电机通道号和电机内部的寄存器地址。这两个参数综合起来就
是STM32要读取数据的地址。最后,FSMC将收到的信息保存至Read data里,交由
STM32进行处理。
    3 , STM32向FPGA发送数据
    STM32向FPGA发送信息时,Control Flag Down置为1,意思是STM32开始向
FPGA发送数据,这些数据经过相应的处理之后被存储到clk ini计数联合体里。使用
C语言时,能够将联合体拆分字节,所以这里将clk ini拆分成三次发送,STM32每次
传送一个字节。
    使用FSMC进行数据传输时,调用Writedata()向指定的地址写入数据。Writedata( )
有2个参数,分别表示要写入的地址和数据。数据传输结束之后,要将下位机控制命
令标志位进行清0,数据传输结束。

使用特权

评论回复
47
Diyer2015|  楼主 | 2018-10-15 12:51 | 只看该作者
  C 2 )  FPGA通信软件设计
    FPGA和STM32之间的数据传输是双向进行的,所以要把FPGA的端口设置为双
向I/O口。
    1、双向数据I/O的方向控制
    FPGA与STM32通过双向I/O口实现两者之间数据的读写。进行通信之前,应当
先对I/O的方向予以定义。这个程序中,使用如下语句对端口方向予以定义:
              assign  data=(rw stm32& en)?databuff:  8'bzzzzzzzz;
    其中data是要进行输入或者输出的数据,rw stm32是写信号(高电平有效),en
是FPGA使能信号,databuff为数据输出时所使用的数据寄存器。这个语句意思是在
FPGA使能时,I/O口数据传输方向有rw stm32决定。当rw stm32=1时,data=databuffo
数据从FPGA输出,写入STM32;否则,data为高阻态。I/O口为输入状态。

使用特权

评论回复
48
Diyer2015|  楼主 | 2018-10-15 12:52 | 只看该作者

使用特权

评论回复
49
Diyer2015|  楼主 | 2018-10-15 12:52 | 只看该作者

使用特权

评论回复
50
Diyer2015|  楼主 | 2018-10-15 12:52 | 只看该作者

使用特权

评论回复
51
Diyer2015|  楼主 | 2018-10-15 12:53 | 只看该作者
    在keil开发环境中完成对STM32的调试工作。按照对系统框架功能的设计,STM32
要执行的任务有:将上位机发送的控制命令以及设置的步进电机的运行参数进行处理
并传送给FPGA,将从FPGA读取到各电机实时状态信息进行处理和转换,并传回上
位机。对STM32需要调试的主要有以下几方面内容:STM32的初始化、有关管脚的
设置、变量的定义,同时也需要对关键函数进行调试,如FSMC总线读取函数等。
    在Quartus II中完成对FPGA的调试工作。将FPGA输出脉冲信号out door接出并
在示波器上进行显示,检测输出频率,从而检验信号符合要求与否。最后,还要进行8
通道予以同步控制的调试。
    最后还要对上位机与STM32间的网络通讯进行相关的调试工作,将安装有上位机
的PC与STM32使用RJ45网线相连。PC端上位机将电机的参数信息和控制命令传送
给STM32 } STM32也要把FPGA发送来的电机的运行状态信息传送给上位机,并在上
位机状态显示模块进行显示。在上位机人机交互操作界面观察是否正确接收到STM32
传送来的状态信息,检验STM32是否接收到上位机传送来的信息。

使用特权

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

本版积分规则