基于STM32的步进电机控制系统 - 图文

更新时间:2024-05-31 23:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于STM32的步进电机控制系统

沈阳航空航天大学 2010年6月

摘 要

本文的主要工作是基于STM32步进电机控制系统的设计。随着越来越多的高科技产品逐渐融入了日常生活中,步进电机控制系统发生了巨大的变化。单片机、C语言等前沿学科的技术的日趋成熟与实用化,使得步进电机的控制系统有了新的的研究方向与意义。本文描述了一个由STM32微处理器、步进电机、LCD显示器、键盘等模块构成的,提供基于STM32的PWM细分技术的步进电机控制系统。该系统采用STM32微处理器为核心,在MDK的环境下进行编程,根据键盘的输入,使STM32产生周期性PWM信号,用此信号对步进电机的速度及转动方向进行控制,并且通过LCD显示出数据。结果表明该系统具有结构简单、工作可靠、精度高等特点.

关键词:STM32微处理器;步进电机;LCD显示;PWM信号;细分技术

I

Abstract

As well as the high-tech products gradually integrated into the daily life, servo control system has undergone tremendous changes. SCM and C language of the frontier disciplines such mature technology and practical, steering control system is a new research direction and meaning. This paper describes a STM32 microprocessors, steering, LCD display and keyboard, Based on the STM32 servo control system of PWM signal,This system uses STM32 microprocessor as the core, MDK in the environment, according to the keyboard input , STM32 produce periodic PWM signal, with this signal to the velocity and Angle of steering gear control, and through the LCD display data. The features of the simple hardware, stable operation and high precision are incarnated in the proposed system.

Keywords: STM32 microprocessors; Steering system; LCD display;pulse width modulation signal;Subdivide technology

II

目 录

第1章 绪 论 ..................................................................................................................... 1 1.1 课题背景 .................................................................................................................... 1 1.2 课题目标及意义 ........................................................................................................ 2 1.3 课题任务及要求 ........................................................................................................ 3 1.4 课题内容分析与实现 ................................................................................................ 3 1.5 课题论文安排介绍 .................................................................................................... 3 第2章 步进电机控制系统的总体方案论证..................................................................... 5 2.1 总体方案 .................................................................................................................... 5 2.2 步进电机控制系统硬件方案 .................................................................................... 5 2.3 步进电机控制系统软件方案 .................................................................................... 6 第3章 系统的硬件设计 ..................................................................................................... 7 3.1 STM32开发板简介 .................................................................................................... 7 3.2 步进电机模块 ............................................................................................................ 8 3.2.1 步进电机驱动模块 .............................................................................................. 8 3.2.2 步进电机驱动控制模块 .................................................................................... 10 3.2.3 步进电机的一些特点 ........................................................................................ 11 3.2.4 步进电机的一些基本参数 ................................................................................ 12 3.2.5 步进电机的驱动方法 ........................................................................................ 13 3.3 A/D转换模块 ............................................................................................................ 13 3.3.1 模拟/数字转换(ADC)介绍 .......................................................................... 13 3.3.2 模拟/数字转换(ADC)主要特性 .................................................................. 13 3.3.3 模拟/数字转换(ADC)功能描述 .................................................................. 14 3.4 LCD显示模块 .......................................................................................................... 16 3.5 硬件电路 .................................................................................................................. 17 第4章 控制系统软件设计 ............................................................................................... 18 4.1 控制系统软件设计步骤 .......................................................................................... 18 4.2 Keil for ARM软件开发环境 .................................................................................... 19

III

4.3 PWM细分技术简介 ................................................................................................. 20 4.3.1 PWM细分技术简介 .......................................................................................... 20 4.3.2 PWM细分技术驱动原理 .................................................................................. 20 4.3.3 PWM细分调压调速原理 .................................................................................. 22 4.4 主程序设计 .............................................................................................................. 23 4.5 各模块程序设计 ...................................................................................................... 25 4.5.1系统初始化 ......................................................................................................... 25 4.5.2A/D转换程序设计 .............................................................................................. 26 4.5.3 PWM细分程序设计 .......................................................................................... 29 4.5.4电机控制程序设计 ............................................................................................. 30 4.5.5 LCD显示程序设计 ............................................................................................ 32 第5章 步进电机控制系统综合调试与分析................................................................... 33 5.1 硬件电路调试 .......................................................................................................... 33 5.2 软件电路调试 .......................................................................................................... 34 5.3 系统联调结果与分析 .............................................................................................. 34 结论 ..................................................................................................................................... 35 社会经济效益分析 ............................................................................................................. 36 参考文献 ............................................................................................................................. 37 致 谢 ................................................................................................................................. 38 附录I 电路原理图........................................................................................................... 39 附录Ⅱ 程序清单 ............................................................................................................... 41 附录IV 元器件清单 .......................................................................... 错误!未定义书签。

IV

第1章 绪 论

随着电力电子技术、微电子技术、控制理论以及永磁材料的快速发展,步进电机得以迅速发展。在现代工业生产中,生产机械一般都用电动机拖动。随着现代化的发展,工业自动化水平不断提高,各种自动控制系统中也日益广泛地应用各种控制电机。为了提高生产率和保证产品质量,大量的生产机械要求步进电机以不同的速度工作。这就要求人们采用一定的方法来改变机组的转速,即对步进电机进行调速。对电机的转速不仅要能调节,而且要求调节的范围宽广,过程平滑,调节的方法要简单、经济。步进电机在上述方面都具有独到的优点,使它得到广泛的应用。本文针对步进电机具有起动转距大、体积小、重量轻、转矩和转速容易控制以及效率高等十分优良的特点, 根据自动控制原理, 采用PWM细分控制方式, 设计了一个步进电机控制系统,以更好地对步进电机进行精确而又迅速的控制。

1.1 课题背景

STM32系列32位闪存微控制器使用来自于ARM公司具有突破性的Cortex-M3内核,该内核是专门设计于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域的要求。Cortex-M3在系统结构上的增强,让STM32受益无穷;Thumb-2?指令集带来了更高的指令效率和更强的性能;通过紧耦合的嵌套矢量中断控制器,对中断事件的响应比以往更迅速;所有这些又都融入了业界领先的功耗水准。STM32系列给MCU用户带来了前所未有的自由空间,提供了全新的32位产品选项,结合了高性能、实时、低功耗、低电压等特性,同时保持了高集成度和易于开发的优势。由于集成了更丰富的资源、方便使用的架构以及低功耗的特性,加上有竞争力的价格,使得从16位升级到32位变得容易。

在工业生产中,常常要用到步进电机在一些对位置控制要求不高的电机控制系统如传动控制系统中,传统电机如步进电机仍有很大的优势,而要对其进行精确而又迅速的控制,就需要复杂的控制系统。步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。

1

可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。通过细分来控制步进电机可以更加精确。细分的基本概念为:步进电机通过细分驱动器的驱动,其步距角变小了。如驱动器工作在10细分状态时,其步距角只为‘电机固有步距角’的十分之一,也就是:当驱动器工作在不细分的整步状态时,控制系统每发一个步进脉冲,电机转动1.8°;而用细分驱动器工作在10细分状态时,电机只转动了0.18°。细分功能完全是由驱动器靠精确控制电机的相电流所产生的,与电机无关。

步进电机的细分技术实质上是一种电子阻尼技术,其主要目的是提高电机的运转精度,实现步进电机步距角的高精度细分。其次,细分技术的附带功能是减弱或消除步进电机的低频振动,低频振荡是步进电机(尤其是反应式电机)的固有特性,而细分是消除它的唯一途径,如果步进电机有时要在共振区工作(如走圆弧),选择细分驱动器是唯一的选择。

驱动器细分后的主要优点为:完全消除了电机的低频振荡;提高了电机的输出转矩,尤其是对三相反应式电机,其力矩比不细分时提高约30-40% ;提高了电机的分辨率,由于减小了步距角、提高了步距的均匀度,‘提高电机的分辨率’是不言而喻的。

1.2 课题目标及意义

STM32是近年来发展非常迅速的处理器,有很好的应用前景。将其应用于步进电机的调速控制,有极大的使用价值。以脉宽调制技术为代表的电机数字驱动技术也在迅猛发展,将计算机应用于这一领域正好可以发挥其在数字控制方面的优势.微电子技术和计算机技术的发展,为计算机控制技术的发展和应用奠定了坚实的基础。可以这样说,没有微处理器的仪器不能称其为仪器,没有微型机的控制系统更谈不上现代工业控制系统。随着微型计算机、超大规模集成电路、新型电力电子开关器件和传感器的出现,以及自动控制理论、电力电子技术、计算机控制技术的深入发展,电气传动装置日新月异地更新换代,直流传动系统也在不断地更新和发展。

步进电机是常用的动力提供元件,在日常生活中占据着重要的地位。步进电机是最常见的一种电机,在各领域中得到广泛应用。研究步进电机的速度控制,有着

2

非常重要的意义。研究直流电机的控制方法,对提高控制精度、节约能源等都具有重要意义。本方案以STM32为控制核心,实现普通步进电机的转速、正反转调节功能,为进一步研究和优化步进电机控制方法提供基础。

1.3 课题任务及要求

通过STM32实现对步进电机的精确控制,通过按键实现正转、反转、加速、减速,并将这些信息通过TFT彩色LCD显示出来。

1.4 课题内容分析与实现

本设计是一种采用 STM32 为核心实现步进电机控制系统。基于设计目标的要求,本设计需要实现的硬件部分是系统的SPGT62C19B电机控制模组以及整个控制系统的编程。

首先,根据课题背景综合成本和控制精度指标等因素,选择需要的步进电机。 其次,基于成本和结构复杂的原因,本设计通过A/D转换代替键盘输入,将电压模拟信号转换为数字信号并通过LCD显示出来。

再次,设计SPGT62C19B电机控制模组,并完成硬件搭建。 最后,整体硬件和软件联调,实现任务要求。

1.5 课题论文安排介绍

本文的主要工作是基于STM32的步进电机控制系统的设计,介绍了整个控制系统的设计思想、主要模块的电路原理、程序结构以及测试结果等内容,整体上分为软件和硬件的两大部分来设计。本次课题设计内容安排可分为三部分:

第一部分是硬件设计,包括方案主要模块的电路设计、元器件的选择等。具体的硬件电路是SPGT62C19B电机控制模组步进电机驱动模块和STM32开发板两大电路模块。先对每一个模块的各个芯片测试成功后,再焊接其对应的整个模块电路,且每一部分都要进行单独调试,各个部分调试成功后,联接调试整个硬件电路,对在途中出现的错误进行分析和改正,最后得出结论。

第二部分是软件设计,软件采用C语言编写,软件设计的思想主要是自顶向下,模块化设计,逐一设计各个子模块,分别进行调试,最后的连调整个程序,判断是

3

否达到预期的要求,做出结论。

第三部分在软硬件模块调试都成功的前提下,进行硬、软件连调,这是整个控制系统设计的关键,也是设计的重点、难点所在。

本文对步进电机控制系统的设计进行了详细的介绍,共分五章。第1章简要介绍了整个课题的研究背景、目的、意义及整个任务的要求安排;第2章是针对此次课题的任务进行总体方案介绍;第3章具体介绍了步进电机控制系统的硬件设计,包括SPGT62C19B电机控制模块电路的设计;第4章阐述了步进电机控制系统的软件设计,包括PWM细分等子程序的设计;第5章是针对硬件调试、软件调试和整机连调的结果进行了具体的分析和说明。

4

第2章 步进电机控制系统的总体方案论证

步进电机控制系统的整个设计中最重要的部分是利用PWM细分实现步进电机调速的处理,虽然PWM调速很早就开始研究应用,但如何用PWM细分调速的快速性和准确性至今仍是生产和科研的课题。随着微电子技术的发展与普及,更多高性能的单片机应用使得PWM细分实现步进电机PWM调速的快速性和准确性都有了极大的提高。

2.1 总体方案

根据课题要求,本设计采用STM32cortex-M3处理器,由SPGT62C19B电机控制模块作为直流电机的驱动芯片,由ADC输入电位器产生调速命令,用TFT彩色LCD作为显示模块。

2.2 步进电机控制系统硬件方案

本系统主要由一块STM32平台、SPGT62C19B型步进电机驱动模块构成,以STM32为核心,包括电机驱动、电机、A/D转换、LCD显示等模块。系统的结构框图如图 2.1所示。

STM32作为主控芯片,通过I/O端口来控制SPGT62C19B型步进电机驱动芯片,从而实现对步进电机的控制。通过ADC输入电位器产生调速命令反馈给STM32,STM32调节SPGT62C19B型步进电机驱动模块的状态,从而使电机改变转速和方向。同时,电机转速可由彩色液晶LCD显示出来,用ADC输入电位器来对步进电机的转动方向和转速等进行设定。

5

ADC输入电位器主控制器STM32 SPGT62C19B驱动电路LCD显示电机 图2.1控制系统结构框图

2.3 步进电机控制系统软件方案

硬件功能的实现离不开软件的设计与完成。软件设计是步进电机控制系统设计中最重要、最关键的部分,也是本次毕业设计的难点之处。由于本系统使用STM32平台,运用Keil for ARM开发环境,在Keil u Vision软件平台进行开发。本课题软件设计的思想主要是自顶向下,模块化设计,逐一设计各个子模块,分别进行调试,最后的连调整个程序,判断是否达到预期的要求,做出结论。各个部分函数都可相互调用又相对独立可调,保证调试的便利与程序的可读性。

6

第3章 系统的硬件设计

本系统采用STM32作为主控制器,采用ADC输入电位器作为输入部分,步进电机及其驱动电路采用SPGT62C19B型步进电机驱动模块。下面分别对STM32以及相关模块的特性进行具体介绍。

3.1 STM32开发板简介

根据本课题设计的任务要求,须采用STM32作为开发平台,因此本课题设的控制电路由采用 ST 的STM32F103RB 芯片及其外围电路组成。芯片的引脚图如图3.1所示。

图3.1STM32F103RB芯片引脚排列图

1.1.2 STM32F103RB开发板硬件资源特性

采用 ST 的STM32F103RB 芯片*(72MHz,128KB Flash,20KB SRAM,2×SPI,2×I2C,USB,

7

CAN,PWM,2×ADC,3×USART,3 个16 位定时器-8 位/16 位单片机的终结者)

", 工业级设计,可稳定运行于-40 到85 摄氏度 ", 1 个串口 ", 1 个CAN 端口 ", 1 个USB 接口 ", 1 个SD 卡插槽

", 1 个160x128 图形点阵彩色TFT LCD ", 标准 20 针JTAG 口,用于下载与调试

", 1 个可调模拟电压控制用于ADC 输入,用来测试 STM32F103 的模数转换特性。

", 1 只扬声器用于测试PWM 输出。 ", 1 只五向游戏杆,作为开关量输入用。 1 片I2C 器件24C02

已经将芯片所有信号引出,方便二次开发 。

STM32 系列32 位闪存微控制器基于突破性的ARM Cortex-M3 内核,这是

一款专为嵌入式应用而开发的内核。Cortex-M3 内核:英国ARM 公司力推内核,致力于替代8 位/16 位单片机。使用THUMB-2 指令集,32 位性能,16 位密度,与ARM7TDMI 相比,Cortex-M3 内核要快35%,代码减少45%。

STM32 系列产品得益于Cortex-M3 在架构上进行的多项改进,包括提升性

能的同时又提高了代码密度的 Thumb-2 指令集,大幅度提高的中断响应,而且所有新功能都同时具有业界最优的功耗水平。

3.2 步进电机模块

3.2.1 步进电机驱动模块

本设计选用专用的电机驱动芯片SPGT62C19B。SPGT62C19B电机控制模组是为学生以及单片机爱好者学习步进电机和直流电机控制而设计的学习套件。模组采用凌阳SPGT62C19B电机驱动芯片,配置两相步进电机和直流电机各一台,并提供4位LED数码管用来显示电机转速等信息。模组针对SPCE061A单片机设计,可以方便地用排

8

线与SPCE061A精简开发板(即“61板”)连接,可作为单片机教学、产品开发前期验证等辅助工具使用。

模组配备的步进电机为35BYJ26型永磁步进电机,工作方式为双极性两相四拍。步进电机是一种将电脉冲转化为角位移的执行机构。当步进电机接收到一个脉冲信号,它就按设定的方向转动一个固定的角度(称为“步距角”)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率实现步进电机的调速。

SPGT62C19B是低电压单片式步进电机驱动器集成电路芯片,可驱动一台两相步进电机,或者两台直流电机。它带有双路H桥,可分别驱动两个独立的PNP功率管。每一个H桥都有各自独立的使能引脚,因此非常适合于需要独立控制的步进电机驱动系统。SPGT62C19B输出电压可达40v,输出电流可达750mA,由输入的逻辑电平来决定输出脉冲的宽度及频率,所以由这款芯片组成的电机驱动系统将脉冲发生器、脉冲分配器、脉冲放大器合为一体,省去了很多外围器件。

SPGT62C19B的内部由两组完全相同的控制电路组成了两路输出通道。。输入控制信号经前级缓冲后送入片内控制器,然后由控制部分进行处理并驱动晶体管,最后由OUT端口输出驱动信号以控制电机的运行。

SPGT62C19B的控制脚有如下6个:

表3.2.1SPGT62C19B的控制引脚

9

引脚 20 17 16 8 9 10 名称 I01 I11 PHASE1 I02 I12 PHASE2 用途 通道1的电流大小控制 通道1的电流大小控制 通道1的电流方向控制 通道2的电流大小控制 通道2的电流大小控制 通道2的电流方向控制

以通道1为例,控制口I01与I11的不同逻辑组合可使通道1输出端产生不同大小的电流输出:

表3.2.2控制脚I01与I11逻辑组合与输出电流的关系

I01逻辑值 0 1 0 1

I11逻辑值 0 0 1 1 输出电流 Imax 2/3*Imax 1/3*Imax 0 上表中,Imax是输出电流的上限值,它与图 2.3中Vref和Rs的值有关。其关系式为:

Imax = Vref /10*Rs:

PHASE1的逻辑电平值决定了该通道的电流输出方向。PHASE1与电流方向的对应关系

表3.2.3 控制脚PHASE1与输出电流的关系

PHASE1逻辑值 0 1 输出电流方向 OUT1B -> OUT1A OUT1A -> OUT1B 3.2.2 步进电机驱动控制模块

步进电机作为执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。

步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距

10

角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。虽然步进电机已被广泛地应用,但步进电机并不能象普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)和单相式步进电机等。

永磁式步进电机一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进电机一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。

混合式步进电机是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛,也是本次细分驱动方案所选用的步进电机。

3.2.3 步进电机的一些特点

1.一般步进电机的精度为步进角的3-5%,且不累积。 2.步进电机外表允许的最高温度。

步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃至于失步,因此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;一般来讲,磁性材料的退磁点都在摄氏130度以上,有的甚至高达摄氏200度以上,所以步进电机外表温度在摄氏80-90度完全正常。

11

3.步进电机的力矩会随转速的升高而下降。当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。

4.步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。步进电动机以其显著的特点,在数字化制造时代发挥着重大的用途。伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。

3.2.4 步进电机的一些基本参数

电机固有步距角:

它表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机给出的值为0.9°/1.8°(表示半步工作时为0.9°、整步工作时为1.8°),这个步距角可以称之为‘电机固有步距角’,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。 步进电机的相数:

是指电机内部的线圈组数,目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同,一般二相电机的步距角为0.9°/1.8°、三相的为0.75°/1.5°、五相的为0.36°/0.72° 。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求。如果使用细分驱动器,则‘相数’将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。 保持转矩(HOLDING TORQUE):

是指步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成

12

为了衡量步进电机最重要的参数之一。比如,当人们说2N.m的步进电机,在没有特殊说明的情况下是指保持转矩为2N.m的步进电机。

3.2.5 步进电机的驱动方法

步进电动机不能直接接到工频交流或直流电源上工作,而必须使用专用的步进电动机驱动器,如图3.5.1所示,它由脉冲发生控制单元、功率驱动单元、保护单元等组成。图中点划线所包围的二个单元可以用微机控制来实现。

控制指令脉冲发生控制单元功率驱动单元步进电机反馈与保护单元

图3.5.1 步进电机驱动控制器框图

3.3 A/D转换模块

本次设计采用ADC输入电位器作为输入部分。

3.3.1 模拟/数字转换(ADC)介绍

12 位ADC 是一种逐次逼近型模拟数字转换器。它有18 个通道,可测量16 个外部和2 个内部信号源。各通道的A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在16 位数据寄存器中。

3.3.2 模拟/数字转换(ADC)主要特性

● 12-位分辨率

● 转换结束,注入转换结束和发生模拟看门狗事件时产生中断 ● 单次和连续转换模式

● 从通道0 到通道n 的自动扫描模式

13

● 自校准

● 带内嵌数据一致的数据对齐 ● 通道之间采样间隔可编程

● 规则转换和注入转换均有外部触发选项 ● 间断模式

● 双重模式(带2 个ADC 的器件) ● ADC 转换时间:

? STM32F103xx 增强型产品:ADC 时钟为56MHz 时为1μs(ADC 时钟为 72MHz 为1.17μs)

? STM32F101xx 基本型产品:ADC 时钟为28MHz 时为1μs(ADC 时钟为 36MHz 为1.55μs)

● ADC 供电要求:2.4V 到3.6V

● ADC 输入范围:VREF- ≤ VIN ≤ VREF+ ● 规则通道转换期间有DMA 请求产生。

3.3.3 模拟/数字转换(ADC)功能描述

ADC开关控制

通过设置ADC_CR1 寄存器的ADON 位可给ADC 上电。当第一次设置ADON 位 时,它将ADC 从断电状态下唤醒。

ADC 上电延迟一段时间后(tSTAB),再次设置ADON 位时开始进行转换。 通过清除ADON 位可以停止转换,并将ADC 置于断电模式。在这个模式中, ADC 几乎不耗电(仅几个μA)。 单次转换模式

单次转换模式里,ADC 只执行一次转换。这个模式既可通过设置ADC_CR2 寄存 器的ADON 位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或

注入通道),这时CONT 位为0。 一旦选择通道的转换完成: ● 如果一个规则通道被转换:

14

? 转换数据被储存在 16 位ADC_DR 寄存器中 ? EOC(转换结束)标志被设置 ? 如果设置了 EOCIE,则产生中断。 ● 如果一个注入通道被转换:

? 转换数据被储存在 16 位的ADC_DRJ1 寄存器中 ? JEOC(注入转换结束)标志被设置 ? 如果设置了 JEOCIE 位,则产生中断。 然后ADC 停止。 连续转换模式

在连续转换模式中,当前面ADC 转换一结束马上就启动另一次转换。此模式可通

过外部触发启动或通过设置ADC_CR2 寄存器上的ADON 位启动,此时CONT 位是1。 每个转换后:

● 如果一个规则通道被转换:

? 转换数据被储存在 16 位的ADC_DR 寄存器中 ? EOC(转换结束)标志被设置 ? 如果设置了 EOCIE,则产生中断。 ● 如果一个注入通道被转换:

? 转换数据被储存在 16 位的ADC_DRJ1 寄存器中 ? JEOC(注入转换结束)标志被设置 ? 如果设置了 JEOCIE 位,则产生中断。

ADC 管脚:

名称 VREF+ 信号类型 输入,模拟参考正极 注解 ADC使用的高端/正极参考电压,2.4V ≤ VREF+ ≤ VDDA 等效于VDD的模拟电源且:2.4V ≤ VDDA ≤ 15

VDDA 输入,模拟电源

VREF- VSSA ADC_IN[15:0]

输入,模拟参考负极 输入,模拟电源地 模拟输入信号 VDD(3.6V) ADC使用的低端/负极参考电压,VREF- = VSSA 等效于VSS的模拟电源地 16个模拟输入通道 3.4 LCD显示模块

显示电路是本设计硬件的主要构成部分,STM32外接TFT模块,MzT24彩色TFT模块是一个2.4英寸的TFT模块,内置TFT控制器,对外连接直接通过8位的8080总线进行指令和数据的传输。MzT24有像素点数为240×320,色彩深度为16位色,也就是每一个像素点需要用16位的数据来表示其显示的内容。MzT24模块的显示操作非常简便,需要改变某一个像素点的颜色时,只需要对该点所对应的2个字节的显存进行操作即可。这部分电路连接时主要是把数据准确稳定的显示出来,因此连接电路时需注意端口对应的准确连接,否则严重影响数据显示的稳定,甚至出现显示不出来数据。

在外接LCD显示时,需在LED_A端口外接一个电路放大电压,否则无法达到需要的电压值,使电压由3.3V放大到5V,这样才能够点亮LCD显示器,当键盘的输入量经过AD转换和STM32微处理器进行数据的处理,由模拟量转换成数据量,传给LCD进行数据的显示。本系统采用型号为MzT24彩色TFT模块的LCD,因为STM32开发板Z32R所使用的LCD也为此型号,技术资料齐全,缩短开发周期。扩展LCD接口原理图如图所示。

16

3.5 硬件电路

硬件电路实物图如图3.5所示:

17

第4章 控制系统软件设计

4.1 控制系统软件设计步骤

对于一个完整的嵌入式应用系统的开发,硬件的设计与调试工作仅占整个工作量的一半,应用系统的程序设计也是嵌入式系统设计一个非常重要的方面,程序的质量直接影响整个系统功能的实现,好的程序设计可以克服系统硬件设计的不足,提高应用系统的性能,反之,会使整个应用系统无法正常工作。

不同于基于PC平台的程序开发,嵌入式系统的程序设计具有其自身的特点,在编写嵌入式系统应用程序时,可采取如下几个步骤:

(1) 明确所要解决的问题:根据问题的要求,将软件分成若干个相对独立的部分,并合理设计软件的总体结构

(2) 合理配置系统的资源:与基于8位或16位微控制器的系统相比较,基于32位微控制器的系统资源要丰富得多,但合理的资源配置可最大的限度发挥系统的硬件潜能,提高系统的性能。对于一个特定的系统来说,其系统资源,如Flash、EEPROM、SDRAM、中断控制等,都是有限的,应合理配置系统资源。

(3) 程序的设计、调试与优化:根据软件的总体结构编写程序,同时采用各种调试手段,找出程序的各种语法和逻辑错误,最后应使各功能程序模块化,缩短代码长度以节省存储空间并减少程序的执行时间。

此外,由于嵌入式系统一般都应用在环境比较恶劣的场合,易受各种干扰,从而影响到系统的可靠性,因此,应用程序的抗干扰技术也是必须考虑的,这也是嵌入式系统应用程序不同于其他应用程序的一个重要特点。

系统的软件程序是通过对硬件设备的控制来完成控制任务的,只有充分了解硬件系统的工作过程才能确定软件的任务,最终达到完美的统一。在进行软件程序编写之前首先要进行系统的需求分析,以确定系统要实现的功能,明确系统最终的任务指标。在本课题中,软件主要实现的是驱动电机、数据处理、通信、PWM信号产生等功能。

因为直接编写整套程序很烦琐并且容易出现错,所以我们可以采用自上向下逐

18

层分解的方式,把复杂的系统进行合理分解。将软件划分为若干个相互独立的部分,再根据各部分的关系设计出软件的整体框架。在程序设计时尽可能采用结构化模块设计,根据软件任务导出软件模块,每个软件模块功能要单一,尽量把各个模块之间的联系减少到最底。

4.2 Keil for ARM软件开发环境

Keil uVision调试器可以帮助用户准确的调试ARM器件的片内外围功能(中断、I/O口、A/D转换器和PWM模块等功能)ULINK USB-JTAG转换器将PC机的USB端口与用户的目标硬件相连(通过JTAG或OCD),使用户可在目标硬件上调试代码。通过使用Keil uVision IDE/调试器和ULINK USB-JTAG转换器,用户可以很方便地编辑、下载和在实际的目标硬件上测试嵌入式程序。

图4.1 Keil软件开发平台

19

4.3 PWM细分技术简介

步进电机的细分控制,从本质上讲是通过对步进电机的励磁绕组中电流的控制,使步进电机内部的合成磁场为均匀的圆形旋转磁场,从而实现步进电机步距角的细分。一般情况下,合成磁场矢量的幅值决定了步进电机旋转力矩的大小,相邻两合成磁场矢量之间夹角的大小决定了步距角的大小。因此,要想实现对步进电机恒转矩的均匀细分控制,必须合理控制电机绕组中的电流,使步进电机内部合成磁场的幅值恒定,且每个进给脉冲所引起的合磁场的角度变化也要均匀。

4.3.1 PWM细分技术简介

细分的基本概念为:步进电机通过细分驱动器的驱动,其步距角变小了。如驱动器工作在10细分状态时,其步距角只为‘电机固有步距角’的十分之一,也就是:当驱动器工作在不细分的整步状态时,控制系统每发一个步进脉冲,电机转动1.8°;而用细分驱动器工作在10细分状态时,电机只转动了0.18°。细分功能完全是由驱动器靠精确控制电机的相电流所产生的,与电机无关。

步进电机的细分技术实质上是一种电子阻尼技术,其主要目的是提高电机的运转精度,实现步进电机步距角的高精度细分。其次,细分技术的附带功能是减弱或消除步进电机的低频振动,低频振荡是步进电机(尤其是反应式电机)的固有特性,而细分是消除它的唯一途径,如果步进电机有时要在共振区工作(如走圆弧),选择细分驱动器是唯一的选择。

4.3.2 PWM细分技术驱动原理

所谓细分驱动就是把机械步距角细分成若干个电的步距角,当转子从一个位置转到下一个位置的时候,会出现一些“暂态停留点”。这样使得电机启动时的过调量或 者停止时的过调量就会减小,电机轴的振动也会减小,使电机转子旋转过程变得更加平滑,更加细腻,从而减小了噪声。其电机驱动示意图如图4.2所示。

图4.2 电机驱动示意图

20

当分别给各相绕组通电时,各相绕组产生的旋转磁场如下:仅有A相导通时,旋转磁场指向A;仅有B相导通时,旋转磁场指向B;仅有C相导通时,旋转磁场指向 C;仅有D相导通时,旋转磁场指向D。依次为各相绕组通电,每切换一次,旋转磁场矢量转过90°,电机转过一个步距角1.8°。当旋转磁场矢量转过 360°时,电机转过一个齿距,这种工作方式称为整步工作。

如果改变上述加电过程,采用四相八拍工作,即通电顺序依次为:

此工作方式称半步工作,旋转磁场的矢量变化如图4.3所示。每改变一次通电状态,旋转磁场的矢量转过45°。

图4.3 四细分驱动磁场矢量图

同理,旋转磁场转过360°,电机转过一个齿距。

由半步原理给予启发,如果让旋转磁场矢量每次转过22.5°,这样就实现了四细分驱动。其旋转磁场矢量变化如图4.4所示。

图4.4 步进电机四细分驱动磁场矢量图

为了使电机输出转距大小一致,也就是使电机匀速转动,我们控制流入A,B,C,D各相电流的大小,具体按公式sin2α+cos2α=1来计算。图4.5给出了四细分驱动时各相电机输入电流值的变换曲线。

21

图4.5 四细分驱动转距均匀输出原理图

4.3.3 PWM细分调压调速原理

电流矢量恒幅均匀旋转细分驱动方法。同时改变两相电流的大小,使电流合成矢量恒幅均匀旋转。这种方式可称为步进电机的模拟运行,它是一种基于交流同步电机概念的特殊细分技术,实质是对运行于交流同步电机状态的步进电机所受的交流模拟信号在一个周期内细分,即每个细分点对应于一个交流值。当细分数相当大时,例如本系统中将一个四分之一周期分成4096个点,电机绕组的电流信号就逼近模拟连续信号。这种细分技术可以极大地提高步进电机的分辨率和运行稳定性。

电流合成矢量的旋转示意图如图4.6所示。

图4.6 电流合成矢量的旋转示意图

步进电动机的细分控制函数数学模型: ia=im*cosX ib=im*sinX

式中: ia-A相绕组电流 ib-B相绕组电流

22

x-控制参数 im-电流幅值

cosx-控制参数余弦值 sinx-控制参数正弦值

4.4 主程序设计

本次设计的软件部分采用模块化的设计思想,将各个功能都编成了相应的子程序。程序运行时,通过主程序的调用及相应模块之间的嵌套调用,实现系统的整体功能。

开始运行程序,系统时钟、GPIO、NVIC、A/D转换分别进行初始化,读取A/D转换值判断,如果转换值大于0,则步进电机正转,否则步进电机反转。如果转换值大于170,则步进电机最大速度正转。如果转换值小于-170,则步进电机最大速度反转。如果读取的A/D转换值与显示的值一样,则继续读取A/D值。如果读取值与显示值不一样,则重新计算显示。

23

开始系统时钟初始化GIPO、NVIC初始化A/D初始化读A/D的值正转最大值细分表>170判断数值判断数值是否>170或<-170<-170反转最大值细分表是数值>0电机正转否电机反转显示主程序流程图如图4.7所示。

24

4.5 各模块程序设计

本次课程设计软件程序包括A/D转换子程序、PWM细分子程序、电机控制子程序、LCD显示子程序构成。

4.5.1系统初始化

本设计所需的STM32的外设包括PA口、PB口、PC口和定时器端口,所以也要对外设的时钟进行设置。由于PA口、PB口、PC口在APB1系统总线外设上,定时器TIM2和TIM3在APB2系统总线外设上,所以要对APB1和APB2总线的时钟频率进行设置。经过APB1与APB2的分频,将SYSCLK转换成可以进行外设及TIM可以接收的系统时钟。在时钟初始化子程序中先对系统时钟的模式进行选择,即将系统时钟设置为HSE模式(外部时钟模式),然后设置AHB时钟等于系统时钟,且设置了低速或高速AHB,最后使能的时钟,时钟初始化子程序的流程图如下图。

开始 使能外部高速晶振HSE

HSE设置成功? 是 设置AHB时钟 否 设置PLL时钟源及倍频系数 检查指定的RCC 标志位设置与否 是 选PLL作为系统的时钟 否

图4.8 时钟初始化流程图

25

本课设中需要对STM32的端口进行程序的配置,下为PA口的配置程序, GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7| GPIO_Pin_2 | GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure)

根据指定的参数初始化外设GPIOA寄存器,首先GPIO_InitStructure.GPIO_Pin选择待设置的GPIOA管脚,通过使用操作符“|”一次选中了多个管脚,选择了PA0端口、PA2端口,PA6端口、PA7端口,GPIO_Speed用以设置选中管脚的速率,管脚的速率有三种:10MHz、2MHz和50MHz,由于STM32强大的处理能力,为了能够达系统速率的提高,选择了端口的最高输出速率为50MHz,GPIO_Mode用以设置选中管脚的工作状态。,GPIO 端口有八种工作状态:GPIO_Mode_AIN 模拟输入, GPIO_Mode_IN_FLOATING 浮空输入, GPIO_Mode_IPD 下拉输入, GPIO_Mode_IPU 上拉输入, GPIO_Mode_Out_OD 开漏输出, GPIO_Mode_Out_PP 推挽输出, GPIO_Mode_AF_OD 复用开漏输出, GPIO_Mode_AF_PP 复用推挽输出。由于选择的PA2端口和PA6端口需要产生PWM信号,因此选择了复用推挽输出的工作状态,需要设置注意:当某管脚设置为上拉或者下拉输入模式,使用寄存器Px_BSRR和PxBRR 。GPIO_Mode允许同时设置GPIO方向(输入/输出)和对应的输入/输出设置。 当I/O端口被配置为输出时: (1) 输出缓冲器被激活 ─ 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。 ─ 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。 (2)施密特触发输入被激活 (3) 弱上拉和下拉电阻被禁止 (4) 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器 (5) 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态 (6) 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。

4.5.2A/D转换程序设计

在开始ADC转换和14个时钟周期后,EOC标志被设置,16位ADC数据寄存

26

器包含转换的结果,ADC在开始精确转换前需要一个稳定时间TSTAB。时序图如下图,

图4.9 时序图

在ADC初始化设置时,首先开启AHB外设时钟使能寄存器DMA1时钟,定义转换数据量,设置DMA的通道1的初始化,独立地选择通道的采样时间,在通道1设置看门狗,开启ADC1并启动转换,应用连续转换模式,使用DMA模式,接着便开始转换规则通道,完成由模拟量到数据量的转变。 void adc_Init (void) {

// GPIOA->CRL &= ~0x0000000F; /* set PIN1 analog input (see stm32_Init.c) */

RCC->AHBENR |= (1<<0); /* enable peripheral clock for DMA */

27

DMA1_Channel1->CMAR = (unsigned long)&analog; /* set chn1 memory address */

DMA1_Channel1->CPAR = (unsigned long)&(ADC1->DR); /* set chn1 peripheral address */

DMA1_Channel1->CNDTR = 3; /* transmit 3 words */

// DMA1_Channel1->CCR = 0x00002520; /* configure DMA channel 1 */

DMA1_Channel1->CCR = 0x000025A0; /* configure DMA channel 1 */

/* circular mode, memory increment mode */

/* memory & peripheral size 16bit */

/* channel priotity high */

DMA1_Channel1->CCR |= (1 << 0); /* enable DMA Channe1 */

RCC->APB2ENR |= (1<<9); /* enable periperal clock for ADC1 */

ADC1->SQR1 = 0x00200000; /* three conversions */

ADC1->SQR3 = (3<<10) | (2<<5) | (1<<0); /* set order to chn1 - chn2 - chn3 */

ADC1->SMPR2 = (5<< 9) | (5<<6) | (5<<3); /* set sample time (55,5 cycles) */

28

ADC1->CR1 = 0x00000100; /* use independant mode, SCAN mode */

ADC1->CR2 = 0x000E0103; /* data align right, cont. conversion */

/* EXTSEL = SWSTART */

/* enable ADC, DMA mode */

ADC1->CR2 |= 0x00500000; /* start SW conversion */ }

4.5.3 PWM细分程序设计

脉冲宽度调制(PWM)是英文“Pulse Width Modulation”的缩写,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量,通信,功率控制与变换等许多领域。实现STM32定时器的PWM信号的产生的子程序如下,

#include \struct Motor2P_Table { //细分表结构

unsigned char mQuadrant; //象限0-3 unsigned char mX_Pwm; //x 输出的PWM unsigned char mY_Pwm; //y 输出的PWM };

struct Motor2P{

unsigned char mTableId; //细分表ID

unsigned char mTask; //马达驱动的任务转移号

unsigned char mSaveTimer; //马达驱动节电模式使用的计数器 unsigned char mReg; //马达驱动使用的寄存器

29

unsigned char mTimer; //对2MS 的计数器,时间扩展 unsigned int mSteps; //马达要走的步数 unsigned char mDirect; //马达走动方向

unsigned char mStepRunTimer; //步进时输出有效的时间寄存器 unsigned char mStepIdleTimer; //步进时输出节电的时间寄存器 unsigned char mStepCount; //细分表走动步长。1-2-4-8-16 };

#define Motor2P_Head

Motor2P_Head struct Motor2P sMotor2P; //定义变量 #define Motor2P_Head #define Step_Quadrant0 0 #define Step_Quadrant1 1 #define Step_Quadrant2 2 #define Step_Quadrant3 3

//0-90 度的细分的PWM 数据(0-255).n 是细分=16.x=cos(a)*255,y=a/tg(a)(正弦转多边,减少误差).逆时针表,半周期。 const struct Motor2P_Table cMotor2P_Table[]=

程序定义了细分表结构体,包含了四个象限,X轴输出的PWM和Y轴输出的PWM。struct Motor2P定义了步进电机的结构体包括细分表ID、马达走动方向、细分表走动步长等。#define Motor2P_Head定义了步进电机的变量及四个象限。

4.5.4电机控制程序设计

通过A/D读取数值,转换为-180—180数值。如果转换值大于0,则步进电机正转,否则步进电机反转。如果转换值大于170,则步进电机最大速度正转。如果转换值小于-170,则步进电机最大速度反转。如果读取的A/D转换值与显示的值一样,则继续读取A/D值。如果读取值与显示值不一样,则重新计算显示。

ad_value=-180+analog[0] * 360 / 0xFFF; if(ad_value>0) run_dir=1; else run_dir=0;

30

本文来源:https://www.bwwdw.com/article/6xs6.html

Top