×

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

消耗积分:2 | 格式:rar | 大小:2.3 MB | 2017-11-27

分享资料个

  摘 要

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

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

  1.1 课题背景

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

  在工业生产中,常常要用到步进电机在一些对位置控制要求不高的电机控制系统如传动控制系统中,传统电机如步进电机仍有很大的优势,而要对其进行精确而又迅速的控制,就需要复杂的控制系统。步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。通过细分来控制步进电机可以更加精确。细分的基本概念为:步进电机通过细分驱动器的驱动,其步距角变小了。如驱动器工作在10细分状态时,其步距角只为‘电机固有步距角’的十分之一,也就是:当驱动器工作在不细分的整步状态时,控制系统每发一个步进脉冲,电机转动1.8°;而用细分驱动器工作在10细分状态时,电机只转动了0.18°。细分功能完全是由驱动器靠精确控制电机的相电流所产生的,与电机无关。

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

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

  1.2 课题目标及意义

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

  步进电机是常用的动力提供元件,在日常生活中占据着重要的地位。步进电机是最常见的一种电机,在各领域中得到广泛应用。研究步进电机的速度控制,有着非常重要的意义。研究直流电机的控制方法,对提高控制精度、节约能源等都具有重要意义。本方案以STM32为控制核心,实现普通步进电机的转速、正反转调节功能,为进一步研究和优化步进电机控制方法提供基础。

  1.3 课题任务及要求

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

  1.4 课题内容分析与实现

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

  首先,根据课题背景综合成本和控制精度指标等因素,选择需要的步进电机。

  其次,基于成本和结构复杂的原因,本设计通过A/D转换代替键盘输入,将电压模拟信号转换为数字信号并通过LCD显示出来。

  再次,设计SPGT62C19B电机控制模组,并完成硬件搭建。

  最后,整体硬件和软件联调,实现任务要求。

  1.5 课题论文安排介绍

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

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(2)
发评论
恐高的鸟00 2020-08-29
0 回复 举报
感谢楼主分享 先下载下来研究一下 收起回复
bochne886 2020-07-04
0 回复 举报
感谢分享 收起回复

下载排行榜

全部2条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'基于STM32的步进电机控制系统',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);