爱美容
当前位置: 首页 美容百科

stm32步进电机控制程序系统(步进电机控制程序编写)

时间:2023-07-22 作者: 小编 阅读量: 1 栏目名: 美容百科

理论为了实现步进电机的平缓启停以及避免转高转速时不失步停转。在步进电机启动、停止过程中,需要采用加减速的算法对启动过程进行控制。S曲线是加减速控制最理想的方案。步进电机的运行频率最高到40KHz,这种频率下,PWM的定时中断周期达到了25us,PWM定时器中断程序运行总时间尽量小,根据经验至少小于中断周期的30%,即7.5us。一旦超过这个数值,导致所有中断程序漏运行,基本主程序无法运行,导致整个控制器假死现象。

理论

为了实现步进电机的平缓启停以及避免转高转速时不失步停转。在步进电机启动、停止过程中,需要采用加减速的算法对启动过程进行控制。S曲线是加减速控制最理想的方案。但是S曲线的公式以及控制过程都比较复杂。基于单片机实现这一算法需要有深厚的数学以及单片机软件设计能力。

本视频从浅入深介绍S曲线加减数的理论、编程与实践。

将S曲线离散化,在整个加减速过程中,以一定的时间间隔更新频率,总的更新次数为2*N,i表示为第i次的更新,则第i次更新的频率f(i)表示为:

其中fb为开始的频率,fr是最终运行的频率,α是曲线的伸缩系数,一般可以取3-5之间的常数。

比如,启动加速,开始频率为400Hz,运行频率为5KHz。

停止减速,开始频率为5KHz,停止频率为400Hz,

加减速的时间均为1s,按10ms的时间间隔更新频率,总共更新100次,α取5。

则可以绘制以下的加减速曲线:

编程

通过以下步骤实现实现步进电机的S曲线的加减速控制:

  • 配置1ms的定时器以及1ms的中断程序
  • 在中断程序中对加减速的频率更新次数i进行计数
  • 配置产生步进电机驱动信号的PWM模块,设置PWM的定时中断以及中断程序
  • 在PWM的定时中断程序中,计算当前更新次数对应的频率,并按出来的频率更新PWM的频率以及占空比
  • 在PWM的定时中断程序中,计算步进电机运行的步数,如果达到设置的步数减去停止的S曲线减速运行所设置的步数,则开始减速运行。
  • 同时检测外部输入,如果有需要停止运行的输入条件,则开始减速运行。

整个加减速控制过程的难点在于:

  • 步进电机的计步以及频率更新需要在每一个PWM中断中进行。
  • 步进电机的运行频率最高到40KHz,这种频率下,PWM的定时中断周期达到了25us,PWM定时器中断程序运行总时间尽量小,根据经验至少小于中断周期的30%,即7.5us。一旦超过这个数值,导致所有中断程序(包括PWM定时中断程序)漏运行,基本主程序无法运行,导致整个控制器假死现象。
  • 根据S曲线的公司是一个复杂的非线性的指数浮点数运算,需要耗费大量的时间,直接调用C语言的库函数计算这一数值可能耗费几十上百毫秒。

为了解决S曲线的运算时间问题,基于STM32F103,我采用了查表法,具体步骤如下:

1. 将α值定义5,

的取值范围为-5~5之间。

2. 在整个加减速过程中,表达式

在取值范围-5~5内均匀取1024个数值,得到数值表。

3. 定义一个unsigned short型有1024个元素的const类型的数组,用于存储数值表。

4. Const数组存储在内部的flash,数值表共占用2048字节。

STM32F103RTC6共256K,程序组和设置参数占用48K,bootloader程序占用了8K,远程升级空间占用了100K,目前应用程序只用到40K左右。

剩余60K左右的空间,腾出2K的空间来存储数值表,有空间,就是这么任性。

5. 在中断程序中,根据总的更新次数以及当前的更新计数值,计算

值,再映射到0-1023的数值有的索引值,通过索引获取数值。

6. 需要注意的是stm32f103不支持浮点数的运算,所以对于浮点数的运算,需要换算成乘以一个数再除以另一个数,比如*α,需要转变为*65535/13107。

下面一段代码是根据更新的计数值获取频率的函数:

U16 fnMC_GetFreq(U16 n, U16 halftn, U16 alpha, U16 minfreq, U16 maxfreq){//alpha=alpha * 4096 signed int udataA; signed short uiDataA; U16 uiRes; U32 uwData; udataA = (signed int)alpha * (signed int)n; udataA = (signed int)udataA / halftn; if(udataA > 32767){udataA = 32767; } uiDataA = (signed short)alpha - (signed short)udataA; uiDataA = (signed short)4 * 4096 - uiDataA; if(uiDataA < 0){ uiDataA = 0; } uiRes = (U16)uiDataA;uiRes = uiRes / 32;//*1023/8/4096 if(uiRes > 1023){ uiRes = 1023; } udataA = (signed int)(maxfreq - minfreq) * g_mc_uchExp[uiRes]; udataA = udataA / 65535; uiDataA = (signed int)udataA; uiDataA += minfreq; if(uiDataA < 200){ uiDataA = 200; } return(uiDataA); }

下面一段代码是产生步进电机控制信号的PWM周期中断程序:

 int data; U16 freq; STRMotorRegs *motor; motor = &g_motor_regs[0]; MOTOR_A_CLEARINT(); motor->steps ++; data = (int)MOTOR_A_STEPS_GET(); if(motor->direction == 0) { data = data + 1;} else { data = data - 1; } MOTOR_A_STEPS_SET(data); freq = motor->runfrequency; if(motor->runstate == MOTOR_RUN_STATE_INC){if(motor->runtimer >= motor->starttime){motor->runstate = MOTOR_RUN_STATE_IDLE;}else{freq = fnMC_GetFreq(motor->runtimer, motor->halfstarttime, motor->alpha, motor->startfreq, motor->runfrequency);//U16 n,U16 halftn,U16 alpha,U16 maxfreq,U16 minfreq)}motor->runsnapfreq = freq; }else if(motor->runstate == MOTOR_RUN_STATE_IDLE){if(motor->totalstep <= (motor->steps + motor->stopremainstep)){motor->runstate = MOTOR_RUN_STATE_DEC;motor->runtimer = 0;}motor->runsnapfreq = freq; }else{ if(motor->runtimer >= motor->stoptime){freq = motor->stopfreq;}else{freq = fnMC_GetFreq(motor->runtimer, motor->halfstoptime, motor->alpha, motor->runsnapfreq, motor->stopfreq);//U16 n,U16 halftn,U16 alpha,U16 maxfreq,U16 minfreq)} }if(motor->steps >= motor->totalstep) {motor->starting = FALSE; }if(FALSE == motor->starting) { MOTOR_A_DISABLE(); }else{ motor->curfrequency = freq; fnMT_Cal_MotorA_TimeConf(); }

实践

下面是生成S曲线数值表、控制步进电机启动、停止的视频,从视频上可以明显看到启动时慢加速->快加速->慢加速的过程,以及停止时慢减速->快减速->慢减速的过程。

    推荐阅读
  • 怎么样让眼睛变大的最有效的方法(5种方法让你的眼睛变大)

    使用时先轻刷一层睫毛膏,趁睫毛膏尚未干掉时,将增长纤维的刷头转出,并将刷头上的白色细致纤维轻轻以滚动方式附着每根睫毛的尖端部位。再重复刷上黑头睫毛膏,电眼效果max。

  • 双减带给老师的挑战和机遇(双减之后教师面临的)

    7月24日,中共中央办公厅、国务院办公厅印发了《关于进一步减轻义务教育阶段学生作业负担和校外培训负担的意见》。面对教师陡然增加的负担,教育部相关负责人回应,将继续督促指导各地将教师减负工作同优化教师资源配置、深化教育教学改革等有机结合起来,健全教师减负长效机制,推动教师减负工作取得实效。“双减”政策明确提出,要构建教育良好生态,有效缓解家长焦虑情绪,促进学生全面发展、健康成长。

  • 我的世界橡胶甘蔗怎么杂交 我的世界粘性甘蔗种子

    杂交前需要合成作物架,用4个木棍合成,摆放成左右两列,合成2个作物架,由于杂交的几率比较低,所以需要准备多点作物架。拿着作物架在,每两个种了甘蔗的耕地的中间,放上两个作物架,作物架成十字交叉,代表此时在进行杂交。进行一段长时间的等待,等待甘蔗长大,等待杂交成功,注意杂交的地方很容易长杂草,如果长了杂草请尽快打掉,否则整个耕地都会蔓延杂草,需要重新杂交。

  • 娃哈哈新媒体营销策划(第13届娃哈哈营销策划大赛重磅来袭)

    为了丰富大学生的课余生活,引导和培养大学生创新精神和实践能力,4月23日18时30分,第十三届娃哈哈全国大学生营销策划大赛启动仪式于南宁职业技术学院大礼堂顺利举行。娃哈哈营销大赛为大学生提供了一个广阔的实践平台,推动教育与实践相结合,使同学们的创新意识得到激发。在此预祝娃哈哈营销策划大赛取得圆满成功,也祝本次参赛的团队都能够在比赛中取得佳绩!

  • 狮鹫怎么驯服(方舟生存进化手游狮鹫驯服技巧攻略)

    接下来我们就一起去研究一下吧!狮鹫怎么驯服方舟生存进化中狮鹫是高傲的守护兽,想要驯服狮鹫并不容易,必须获得狮鹫的尊重,这并不算容易的事,下面就来介绍一下怎么驯服狮鹫的方法吧。第一种方法:人物等级85级以上,并且不是可以获得全部尊重的!比如85级的,可能只能获取低等级狮鹫的尊重!

  • tabata间歇性训练的方法(什么是Tabata锻炼)

    各种研究得出结论,Tabata锻炼对健康有很多好处。有时您可能会达到最大强度,这可能会因肌肉松懈而导致受伤每周最多进行3-4次Tabata训练。Tabata锻炼以多种方式改善健康。此外,心脏病患者在开始Tabata锻炼之前还应听取医生的建议。在没有科学证据的情况下,对原始Tabata版本的修改可能弊大于利。人们可能会选择Tabata只是为了减肥,这不是它的实际用途。与传统HIIT相比,Tabata的强度水平更高,恢复时间更短。

  • s10和s9有什么区别(s10和s9有什么区别瑞思迈)

    vivoS9电池容量4000mAh,配置33W闪充。vivo官方宣布vivoS10系列于2021年7月15日正式发布,该手机代言人有Lisa、蔡徐坤、刘昊然。2021年7月15日,vivo召开了S10系列发布会,会上发布了新一代自拍旗舰vivoS10系列,其vivoS10系列依然采用了前置4400万像素AF双摄设计,仍然支持105度超广角,还有前置微缝式双柔光灯。

  • 专业版微博怎么设置(其实很简单)

    接下来我们就一起去了解一下吧!专业版微博怎么设置需要认证过才能成为专业版。专业版微博是为企业和机构定制的微博。新浪微博企业版是我们为企业、机构用户量身打造的服务平台。它具有更丰富的个性化页面展示功能设置,更精准的数据分析服务,以及更高效的沟通管理后台。我们期待新浪微博企业版能够帮助企业更便捷地与目标用户进行互动沟通,提升营销效果转化,挖掘更多商业机会。

  • 变速箱油到底多久换一次呢(变速箱油多久更换一次)

    如果需要更换变速箱油,查看用户的保养手册上如果有明确的更换周期,按照规定换油。如果变速箱油是终身免维护的,也一样要引起重视,终身免维护并不意味着变速箱油一直不用换。其实变速箱油不像机油那么黑,相比于机油甚至更为干净一点。所以车主千万不要忽略变速箱油,如果过长时间不更换,也会对变速箱造成一定的损伤,而且一些汽车的变速箱比发动机还要昂贵,修一次可能得要好几万元。

  • 恐惧症会遗传吗 幽闭恐惧症会遗传吗

    恐惧症是发病率非常高的一种心理疾病,而有许多患者并没有得到有效的治疗。导致恐惧症的因素恐惧症是各种因素的共同作用。恐惧症的典型症状是恐怖发作,并伴有强烈的生理反应。尽管患者知道这种恐惧是不合理的,但是没法控制。研究表明,在100名患者中40名患者可以彻底治疗,基本上没有什么后遗症。所以一定要及早治疗,效果好,造成的危害也小。