基于STM32步进电机多细分控制的设计

发布者:大泉人家最新更新时间:2023-06-26 来源: elecfans关键字:STM32  步进电机  多细分控制 手机看文章 扫描二维码
随时随地手机看文章

本文主要介绍了一种基于STM32的混合式步进电机控制方案,STM32产生PWM(脉宽调制信号),利用PWM完成DAC转换,通过PWMDAC的输出电压实现对步进电机的多细分控制。该设计相比利用DAC数模转换芯片的设计方案具有电路简单,费效比高的优点,而且可实现步进电机十六分之一步的驱动控制,精度较高。


1、硬件设计

硬件设计框图如图1所示,主要由PC上位机给STM32F103发送控制命令,通过STM32F103控制A3988,从而驱动两个步进电机转动。其中,STM32F103是意法半导体公司生产的基于ARMCortex—M3内核的微控制器,内核架构先进,性能优越,主频可达72MHz,执行效率高,具有较高的运算能力及数据处理功能,拥有丰富的外设接口,在硬件设计中,上位机与STM32F103之间的RS—422串行通信,就是通过外接MAX3079电平转换芯片来实现的。

基于STM32步进电机多细分控制的设计

图1硬件设计框图

STM32F103控制定时器产生PWM,通过LPF(低通滤波器)实现PWM的DAC转换,并由PWMDAC来提供A3988的4个基准电压,设计中,定时器TIM1的输出通道在经过滤波器后与A3988的参考电压VERFx接口相连,PC0~3,PB12~15,PB6~9为通用GPIO输出端口,接A3988的逻辑控制信号输入脚I0x、I1x和Phasex,PC0~3和PB12~15分别置低,Phasex用于控制流过电机各相电流的方向。选用的步进电机的步距角为0.9,额定电流为0.5A。


2、多细分控制原理分析与实现

2.1、多细分控制原理分析

选用电机为两相步进电机,假设为A、B相,通过两相的电流在相位上相差为90,控制流过两相的电流大小和方向就可以控制电机转动。A3988是一个4DMOS全桥脉宽调制电机驱动器,可以同时驱动两个步进电机,每个全桥输出电流最大可达到1.2A。流过电机的每一相电流可以通过UREFx,I0x,I1x,Phasex和接SENSEx引脚的电阻Rx进行控制。工作电流通过公式(1)可以得到。


ITripMax=UREFx/(3RSx)(1)

由式(1)可知,最大电流ITripMax是由UREFx和RSx共同决定,UREFx为PWM-DAC的输出的电压,其最大值为1.1V,RSx选用1欧的电阻。

ITrip=(%ITripMax/100)ITripMax(2)

式(2)中,ITrip为实际输出的电流,逻辑接口I0x,I1x控制%ITripMax,由A3988的用户文档可知,当I0x,I1x控制逻辑都为低时,实际输出电流就等于最大电流,由上述公式可知,ITrip最大输出约为367mA。


为实现步进电机多细分控制,必须能够控制流过步进电机的两相电流,在参考电压UREFx一定的情况下,使用逻辑接口I0x,I1x,Phasex仅可实现步进电机整步、半步和四分之一步的驱动控制,这样的细分控制并不能满足设计需求,为了得到更多的细分,设计采用动态改变UREFx的方法来输出动态变化的电流,通过对UREFx的多细分控制,来实现对ITrip的多细分,从而实现对步进电机多细分控制。


UREFx由PWM-DAC输出,其值在0~1.1V变化,将其按0~π的正旋曲线32等分得到32个电压值,令PWM-DAC输出的值为这32个值,从而对应得到0~1.1V的32个电压值和按正弦规律变化的32个电流值,通过Phasex控制电流方向,可实现步进电机1/16步的驱动控制。


2.2、PWM实现DAC转换的原理及设计

虽然大容量的STM32F103具有内部DAC,但是更多的型号是没有DAC的,本文中所用到的STM32F03就没有DAC外设功能。不过STM32所有的芯片都有PWM输出,因此,可以用PWM+LPF来实现PWM-DAC输出,从而节省成本。


PWM本质上是一种周期一定而高低电平的占空比可以调制的方波信号,实际电路中典型的PWM波形如图2所示。

基于STM32步进电机多细分控制的设计

图2典型的PWM波形

图2的PWM波形可以用分段函数表示为式(3)。

基于STM32步进电机多细分控制的设计

式(3)中,T是STM32定时器TIM1的计数频率(最高可达72MHz)的倒数,N是PWM波一个周期的计数脉冲个数,也就是STM32的ARR—1的值,n是PWM波一个周期中高电平的计数脉冲个数,也就是STM32的CCRx的值,VH和VL分别是STM32产生PWM波的高低电平电压值,高电平为3.3V,低电平为0V,k为谐波次数,t为时间。将式(3)展开成傅里叶级数,得到式(4)。

基于STM32步进电机多细分控制的设计

从式(4)可以看出,式(4)中第1个方括弧为直流分量,第2项为1次谐波分量,第3项为大于1次的高次谐波分量。直流分量与n成线性关系,并随着n从0到N,直流分量在0~3.3V变化。这正是电压输出的DAC所需要的。因此,如果能把式中除直流分量外的谐波过滤掉,则可以得到从PWM波到电压输出DAC的转换,即:PWM波可以通过一个低通滤波器进行解调。其中,第2项的幅度和相角与n有关,频率为1/(NT),其实就是PWM的输出频率。该频率是设计低通滤波器的依据。如果能把1次谐波很好过滤掉,则高次谐波就基本不存在了。


选用RC二阶低通滤波器实现PWM波的解调,电路设计如图3所示。

基于STM32步进电机多细分控制的设计

图3二阶低通滤波器调理电路

当N取值为256时,PWM-DAC的分辨率为log2(N)=8位,在8位分辨条件下,要求1次谐波对输出电压的影响不要超过1个位的精度,也就是3.3/256=0.01289V。由式(4)可知,一次谐波的最大值是2×3.3/π=2.1V,所以,RC滤波电路要提供至少-20lg(2.1/0.01289)=-44dB的衰减。

当STM32的定时器TIM1的计数频率是72MHz,分辨率为8的时候,PWM频率为72/256=281.25kHz。如果是1阶RC滤波,则要求截止频率为1.77kHz,如果为2阶RC滤波,则要求截止频率为22.34kHz。相比之下,2阶滤波器的信号抑制能力更强,滤波效果更好。由分析可知,2阶RC滤波截止频率计算公式为:

基于STM32步进电机多细分控制的设计

7.96×10-5,可确定电路参数值,令R1=R2=2.4kΩ,C1=C2=3300pF,可计算出图3的截止频率为21.9kHz,略小于22.34kHz,符合设计需求。PWM波调制后,输出的直流分量最大值为3.3V,而UREFx可操作的电压的范围是只有0~1.5V,可利用一个2.4kΩ的电阻R3与滤波器串联,从而实现对直流分量的分压调理。


3、软件设计

软件设计主要是电机驱动软件的相关设计,通过对定时器的控制,实现电机的转动方向和速度的调节,其次是PC上位机控制软件设计,主要利用C++Bulider平台开发,完成对步进电机的测试。


3.1、PWM信号产生的设计

STM32F103中的7个定时器,每个定时器均有4个独立可编程通道输出的PWM信号。选用高级定时器TIM1,它由APB2总线提供时钟,设置为72MHz,向上(增)计数,自动装载寄存器ARR—1的值为256,所以,PWM波的占空比的取值范围为0~256,不同占空比的取值存储在每个通道的捕获比较寄存器CCRx中,编程时,通过改变寄存器CCRx的值来改变PWM波的占空比。占空比值的计算如式(6)所示。

基于STM32步进电机多细分控制的设计

这样就得到正旋曲线0~π范围内的32个点对应的占空比的值。将得到的占空比的值放在定义的数组Sequence[32]内,通过查表的方法,使定时器TIM1输出占空比变化的PWM波,通过滤波器后产生UREFx的波形如图4。

基于STM32步进电机多细分控制的设计

图4PWM产生UREFx波形图

从图中可以看出,输出信号UREFx波形达到了预期目标。由于选择了合适的滤波器参数,PWM波和UREFx几乎不存在大的相位差。


3.2、Phasex信号产生的设计

Phase1~Phase4用于控制流过电机各相电流的方向,当Phase1为1时,电流从OUT1A流向OUT1B流向,当Phase1为0时,电流从OUT1B流向OUT1A,其他三相控制原理相同,下面就以Phase1为例加以阐述。


STM32F103通过PB6来控制Phase1信号,配置PB6为推挽输出端口,在UREFx奇数次周期时,将PB6置1,偶数次周期时,PB6置0,在0~2π区间内,PB6将变化两次。Phase1信号变化如图5所示。

基于STM32步进电机多细分控制的设计

图5Phase1信号变化波形

通过Phasex信号对电流方向的控制,可实现实际输出电流ITrip以2π为周期的正弦曲线变化,在0~2π共产生64个电流值,从而实现了步进可实现步进电机十六分之一步的驱动控制。

3.3、步进电机正反转和变速控制

由于通过步进电机A、B相的电流在相位上相差为90,当A相超前B相时,电机正转,而当B超前A时,则电机反转。所以,控制流过A、B相电流的相位差,即可实现对步进电机的方向控制,也就是控制输入参考电压的相位差。在软件设计时,定时器TIM1通过查表法输出PWM波,在占空比数组的初始下标取值时,让A、B相对应的PWM输出相差90。例如,当A相对应的PWM输出的初始占空比为Sequence[0]时,B相为Sequence[16],这样使得输入各相的参考电压在相位上相差了90。

在步距角已知的情况下,通过控制相邻两个取值的变化时间间隔,便可以控制电机的转动速度,时间间隔越小,转动速度越高,时间长则转速低。为了得到两个取值变化之间精确的时间间隔,设计通过定时器TIM2进行精确的定时控制,TIM2中ARR—1的取值通过等分0~π2正弦曲线的办法计算得到,在这里不再赘述,定时器产生定时中断,中断响应中改变PWM占空比的值,实现了速度10级可调。可知,在步进电机实现变速控制时,Phasex和UREFx的频率都发生了变化。


3.4、上位机控制和实验测试

STM32F103提供功能强大的USART串口功能,在本设计中,通过外接电平转换芯片实现了上位机与MCU之间的RS—422串行通信,RS—422是一种全双工的通讯总线。STM32F103通过计算PWM占空比变化的次数和TIM2的中断周期,将电机的位置点和速度信息发送至上位机,上位机利用增量式PID算法,向步进电机发送控制命令,实现对电机的实时控制。

为了确定系统能否按照设计需求工作,需要对系统进行测试。上位机模拟生成一段目标航路,控制步进电机跟踪,测试结果如图6所示。

基于STM32步进电机多细分控制的设计

图6模拟航路跟踪误差曲线

由测试结果可知,步进电机跟踪精度在2mil之内,达到了模型设计的需求。


4、结束语

本文介绍了基于STM32F103和A3988的步进电机多细分控制系统,较传统的利用DA转换芯片的方案,具有结构简单,灵活性较好等优点,充分利用了A3988技术应用特点和STM32F103芯片优越的性能,极大提高了系统的性能和可扩展性。经实际实验表明,该系统工作稳定,精度高,且具有较高精度及效费比,达到了设计要求,为步进电机控制提供了一种新的方法,具有一定推广价值。


关键字:STM32  步进电机  多细分控制 引用地址:基于STM32步进电机多细分控制的设计

上一篇:使用STM32CubeMX生成初始化代码
下一篇:stm32中断嵌套实例分析

推荐阅读最新更新时间:2024-11-07 16:46

学习STM32的思路和关键步骤
首先设定一个的两周入门计划: 所谓的“两周”,根据每个人的时间安排不同而不同。这里列出一个思路,仅供参考。 步骤一:安装完STM32学习的软件 步骤二:挑选部分例程的HEX,比如LED灯的例程HEX文件,下载到芯达STM32开发板中,观察两个LED灯的闪烁情况。 实际上,以上两个步骤,是为了熟悉要使用的工具软件而已。属于找感觉的阶段。 步骤三:准备几个常用的文档,比如《STM32的用户手册》,《STM32固件库使用手册》等文档,用于平时查阅。 步骤四:开始查看例程的编写,看看例程是如何写的,自己可否修改下例程,达到自己想要的效果呢? 步骤五:Ucos-II的移植,是否需要试一下? 恭喜你,至此,你已经可以自如进行独立的开发了。
[单片机]
stm32 编程的收获,有关C语言(在stm32 公交报站中的收获)
1. char * msg = { //以下内容请自行修改 { 乘客您好,欢迎乘坐 }, { 2 路 }, //车次,采用单个数字变读(1读作幺)模式,读后恢复正常模式 { 公交车,本路车由 }, { 开往 }, { ,前门上车,后门下车,本车无人售票,请自备零钱 }, { 车辆起动,请站稳扶好 }, { 车辆转弯,请注意安全 }, { 前方到站 }, { 下车的乘客后门请 }, { 车站到了,请您带好随身物品,从后门下车,谢谢您的乘坐,再见 }, { 始发站 }, { 终点站 }, { soundk }, { 到了 } }; 指针数组:指针的数组。 在字符串定义的时候使用指针; 调用的时候 v
[单片机]
IAR单片机编程软件建立stm32工程的方法解析
Keil和IAR单片机编程软件,是当前流通度庞大的两款单片机编程软件。而对于单片机编程软件的使用,各自存在一定区别。本文中,将为大家讲解IAR单片机编程软件建立stm32工程的详细方法,希望大家通过本文能够有所收获哦。 版本1: stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种,接下来是利用stm32固件库3.5在IAR下的建立的工程模板历程: 1、在常用的文件夹下新建立一个文件夹,根据个人喜好,分别建立如下几个文件夹,用于分别存放固件库中的文件和用户自己的文件。 2、将固件库E:STM32stm32固件库3.5STM32F10x_StdPeriph
[单片机]
IAR单片机编程软件建立<font color='red'>stm32</font>工程的方法解析
stm32和电机开发(从mcu到架构设计)
有过外资企业工作经验的同学应该都有这样的感觉,好像老外都很擅长做架构设计。与此相比较,国内的同学似乎更擅长编写代码。同样的设计,老外比较喜欢画图,文字部分有,但也是文字和图各一半;国内同学写文档比较少,更喜欢写代码,就算写文档也是文字和表格占了一大部分。 细细想来,出现这种差别,既有文化的原因、差异,也有产业分工的原因,同时也有东西方工作方法的差别。西方比较看重的是沟通、协同、接口定义清楚;东方讲究分工,功能完整,快速推进。 就拿架构设计来说,不管是业务层面的,还是技术层面,画图是少不了的。但是画图是为了构建模型,挖掘出问题的主要矛盾、主要流程,不是为了画图而画图。如果架构设计只是停留在纸面上,落不
[单片机]
<font color='red'>stm32</font>和电机开发(从mcu到架构设计)
STM32固件库V3.5.0的CMSIS文件详细说明
1.首先选择启动文件:根据自己所用芯片的型号,选择正确的启动文件。例如选择STM32F107系列的处理器,我们就选择startup_stm32f10x_hd.s。在这个文件里首先要定义自己堆栈的大小,根据自己的需要确定。文件中已经定义好了中断向量的位置及堆栈的初始化操作。 Reset_Handler PROC EXPORT Reset_Handler IMPORT __main IMPORT SystemInit LDR R0, =SystemInit
[单片机]
基于LMD18245型驱动器的二相步进电机细分驱动器设计
摘要:给出一种基于LMDl8245型驱动器的二相步进电机细分驱动器的设计方法.着重介绍LMD-18245的工作原理以及系统的硬件连接和软件设计。 关键词:LMDl8245;步进电机;细分驱动 引言 步进电机在电脑绣花机等纺织机械设备中有着广泛的应用,这类步进电机的特点是保持转矩不高,频繁启动反应速度快、运转噪音低、运行平稳、控制性能好、整机成本低。目前用于电脑绣花机的步进电机多数为五相混合式步进电机,目的是通过采用高相数的步进电机来减小步矩角和提高控制精度,但是采用该种方式获得的性能上的提高是有限的.而且成本也相对较高。采用细分驱动技术可以大大改善步进电机的运行品质,减少转矩波动,抑制振荡,降低噪音,提高步矩分辨率。若采用
[工业控制]
stm32系列简介与stm32 esp32性能比较
STM32应该是比较熟悉的一个系列的单片机,而ESP32相对陌生一些。但是从名字看,两者应该都是32位单片机。那么两者之间到底有什么关联,或者性能哪个好一些,哪个差一些呢? STM32系列 意法半导体 (STMicroelectronics) 集团于1987年6月成立,是由意大利的SGS 微电子公司和法国Thomson 半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics 将公司名称改为意法半导体有限公司,意法半导体是世界最大的半导体公司之一。 STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM Cortex®-M0,M0+,M3, M4和M7内核(ST‘s produ
[单片机]
<font color='red'>stm32</font>系列简介与<font color='red'>stm32</font> esp32性能比较
STM32单片机小Tips 玩转IAR开发STM32
BKP还没有搞完,怎么又换到了RTC上了,因为RTC和BKP有些联系,想不关联还不行呢。 以下是数据手册上有关RTC的介绍: RTC 简介 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位或从待机模式唤醒后RTC的设置和时间维持不变。 系统复位后,禁止访问后备寄存器和RTC,防止对后备区域(BKP)的意外写操作。执行以下操作使能对后备寄存器和RTC的访问: ● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位来使能电源和后备接口时
[电源管理]
<font color='red'>STM32</font>单片机小Tips 玩转IAR开发<font color='red'>STM32</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved