大家好,很高兴又给大家写博客了。平时工作比较繁忙,恰巧最近在学习和研究DSP,给大家带来这篇文章。文章的第1部分和第2部分为普中开发攻略摘抄的,因为写的比较详细,我也就不过多解释了,本文关注的点在于原理和程序,希望能给大家带来些帮助。本文实现的效果就是通过三个按键去控制四相双极性步进电机的正转,反转和停止。

  • 本篇文章的目录如下:

  • 1.步进电机的介绍

  • 2.步进电机的硬件电路设计

  • 3.步进电机的驱动程序

1.步进电机的介绍(该部分来自普中开发板攻略摘抄,了解一下)

强烈推荐大家看这个文章   四相双极性电机的驱动原理(点此进入),下面这些适当了解,如果大家从来没有接触过电机的话可能会花那么一些时间,你需要去花上一两个小时去了解下步进电机然后再回来看下面的内容,学习当循序渐进。

四相双极性电机

我们先来看看这两张图,从图中我们可以看到有4个线圈,我们把它称做4相,一个线圈就是一个相,有几个线圈就对应几个相,比较好理解。我们看到它的一组线圈有两个互相连接,那么很明显它有2个接线头,我们把它称做A+和A-,B+和B-。我们的电流从A+流到A-,通过我们的安培定理和右手定则,我们可以得到电流和磁场的关系,这个并不重要 ,我们只要知道,A+和A-是互相连接的,所以它们是先后流过电流的,这对于我们的程序来说,假如A+对应一个GPIO口,A-对应一个GPIO口,我们只要按照顺序来给它一个高低电平,就会有电流流过,假如A+为高,A-为低电平,这时候,电流从A+流到A-,产生磁场,同样我们的B+和B-也是一样的。所以四相就对应四个GPIO口的高低电平。只要我们按照顺序来开启相序,我们的转子就会转起来了。后面的电机时序就是这样来的。

     

(图片来自网上,借用一下)

引用:步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得步进电机在速度、位置等控制领域的控制操作非常简单。虽然步进电机应用广泛,但它并不像普通的直流和交流电机那样在常规状态下使用, 它必须由双环形脉冲信号、 功率驱动电路等组成控制系统方可使用。

 步进电机主要分为以下几类:

(1)永磁式(PM)

(2)反应式(VR)

(3)混合式(HB)

步进电机主要技术指标如下:

(1)相数

(2)步距角

(3)拍数

(4)保持转矩

步进电机有三线式、 四线式、 五线式和六线式, 但其控制方式均相同, 都要以脉冲信号电流来驱动。 假设每旋转一圈需要 200 个脉冲信号来励磁, 可以计算出每个励磁信号能使步进电机前进 1.8° 。 其旋转角度与脉冲的个数成正比。 步进电动机的正、 反转由励磁脉冲产生的顺序来控制。 六线式四相步进电机是比较常见的, 它的控制等效电路如下图所示:

励磁方式

步进电机的励磁方式分为全步励磁和半步励磁两种。其中全步励磁又有一相励磁和二相励磁之分, 半步励磁又称一二相励磁。 假设每旋转一圈需要 200 个脉冲信号来励磁, 可以计算出每个励磁信号能使步进电动机前进 1.8°。简要介绍如下:

①一相励磁:在每一瞬间, 步进电机只有一个线圈导通.每送一个励磁信号, 步进电机旋转 1.8, 这是三种励磁方式中最简单的一种。

其特点是:精确度好、 消耗电力小,但输出转矩最小, 振动较大。 如果以该方式控制步进电机正转

②二相励磁:在每一瞬间,步进电动机有两个线圈同时导通。每送一个励磁信号, 步进电机旋转 1.8。

其特点是: 输出转矩大, 振动小, 因而成为目前使用最多的励磁方式。 如果以该方式控制步进电机正转, 对应的励磁顺序见下表。 若励磁信号反向传送, 则步进电机反转。

③一二相励磁:为一相励磁与二相励磁交替导通的方式。 每送一个励磁信号, 步进电机旋转 0.9。

其特点是:分辨率高, 运转平滑, 故应用也很广泛。 如果以该方式控制步进电机正转,对应的励磁顺序见下表。 若励磁信号反向传送, 则步进电机反转。

2.步进电机的原理图

其实这个电路很简单,就是一个驱动芯片(TC15085)来驱动马达,就是一个非门的达林顿管,大家知道它是非门就可以了,它有多个通道。适用于把多个电平进行翻转,它的驱动电流也比较大,所以比较适合用于驱动马达。为什么用到驱动IC呢?而不是直接用GPIO口去控制电机的各个相位,这里的相指的是线圈。原因很简单,因为我们不能直接通过控制IC去控制电机,第一,耗电流,我们需要知道GPIO口能输出多大的电流。第二,有危险因素,可能会烧掉主芯片。所以通过IC的GPIO口去作一个开关控制,类似于MOS管的栅极给它一个门限电压导通一样,常见的把控制芯片的GPIO口当做开关用的很多,比如继电器,LED灯等等,都是把IO口作为一个控制作用,而不是去直接去驱动它。下图中我们用到了GPIO2,3,4,5这四个GPIO口。

这里是我自己用EXCEL列出来的,后面程序用到,原理就是把时序依次送到数据寄存器里。本部分为最核心的位与运算屏蔽算法,单独操作寄存器的多位而不影响其它无关的位,从而实现电机的运作。这里有点难理解,看不懂就多思考几次顺便去学习下逻辑运算,还是给大家讲讲这个算法吧

假设寄存器A有32位,分别为1111 1111 1111 1111 1111 1111 1100 1001, 如果我们只想改变最后6位使得其变成1111 1111 1111 1111 1111 1111 1111 0110,不影响前面的26位,那么可以采用万能的核心屏蔽算法:

(A | 0000 0000 0000 0000 0000 0011 1111 )&1111 1111 1111 1111 1111 1111 1111 0110

因为我们是要把GPIO和电机的极性时序分别对应上,所以请看下面这张图,右边就是28335的GPIO和电机的电极对应关系。我们要保证把这4位数送进GPIO数据寄存器里,而且又要保证GPIO数据寄存器的其他的位不受影响,所以这里我们用到逻辑运算屏蔽其他位,逻辑运算不熟悉的同学可以去百度查询下。

利用该算法去屏蔽其他位 ,用到了逻辑运算。这个比较难理解,希望大家不懂的多多看一下。

   Uint32 STEP_MOTOR_ZTurn[] = {(GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffff7,(GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffdf,(GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffffb,(GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffef};Uint32 STEP_MOTOR_FTurn[]   = {(GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffef,(GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffffb,(GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffdf,(GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffff7};

3.步进电机的驱动程序

程序的话大家仔细看,其实不难,按键扫描程序的话,由于开发板是矩阵按键,驱动程序我这里就不列出来了。等会我把源码打包供大家下载。现在来给大家讲解下程序

/** main.c**  Created on: 2020年5月31日*      Author: Administrator*/#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
#include "key.h"
#include "leds.h"
#include "beep.h"
#include "relay.h"
#include "dc_motor.h"
#include "step_motor.h"
void delay(void);////#define 4LINE2
void main(){InitSysCtrl();LED_Init();KEY_Init();BEEP_Init();StepMotorInit();//    the sequence of step_motor by working,1000,0100,0010,0001
//这里定义正反转的数组,根据上面给的图片推导出来的Uint32 STEP_MOTOR_ZTurn[] = {(GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffff7,(GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffdf,(GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffffb,(GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffef};Uint32 STEP_MOTOR_FTurn[]   = {(GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffef,(GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffffb,(GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffdf,(GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffff7};Uint16 i = 0;static short flag_key1 = 0;//按键1按下标志static short flag_key2 = 0;//按键2按下标志static short flag_key4 = 0;//按键4按下标志while(1){i++;if(i%5000==0){LED2_TOGGLE;}//打开LED2BEEP_ON;//打开蜂鸣器DELAY_US(200);char key_scan = Key_Scan();//判断按键按的是哪个,需要消抖,给个15ms的消抖时间//如果确定按键按的是1,标志为1if(key_scan==1){DELAY_US(15000);if(key_scan==1){flag_key1 = 1;flag_key2 = 0;flag_key4 = 0;}}//如果确定按键按的是2,标志为2if(key_scan==2){DELAY_US(15000);if(key_scan==2){flag_key2 = 1;flag_key1 = 0;flag_key4 = 0;}}//如果确定按键按的是4,标志为4if(key_scan==4){DELAY_US(15000);if(key_scan==4){flag_key2 = 0;flag_key1 = 0;flag_key4 = 1;}}//如果按键1按下if(flag_key1==1){int j;for(j=0;j<4;j++){GpioDataRegs.GPADAT.all = STEP_MOTOR_ZTurn[j];//把时序送到GPADAT寄存器里,GPADAT是GpioDataRegs寄存器里的一组,包含GPIO0-31共32个GPIO口DELAY_US(5000); //delay 5ms}}//如果按键2按下if(flag_key2==1){int j;for(j=0;j<4;j++){GpioDataRegs.GPADAT.all = STEP_MOTOR_FTurn[j];DELAY_US(5000); //delay 5ms}}}
}

文章用到源码下载地址:程序下载

TMS320f28335实现步进电机的驱动程序及原理分析相关推荐

  1. 多轴步进电机的加速度,速度原理分析和如何实现

    对于多轴步进电机联动的加减速,通过网络搜索,许多介绍也是比较单一讲解,像几条轴联动时如何计算各轴的加速度,减速度,空间矢量速度等如何计算都比较少有提及,通过GRBL源码,MACH3的插件SDK代码(可 ...

  2. Select函数实现原理分析

    转载自 http://blog.chinaunix.net/uid-20643761-id-1594860.html select需要驱动程序的支持,驱动程序实现fops内的poll函数.select ...

  3. 计算机故障的分析原理,蓝屏含义、原理分析、处理方法 电脑计算机故障系统安全...

    目录 1含义2原理分析3处理方法4代码含义和解决 5原因分析6预防电脑蓝屏的 含义 引蓝屏解释 1.故障检查信息 ***STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x ...

  4. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析(1)

             在Android系统中,不同的应用程序是不能直接读写对方的数据文件的,如果它们想共享数据的话,只能通过Content Provider组件来实现.那么,Content Provide ...

  5. bmp/gif/jpg图象最底层原理分析

    bmp/gif/jpg图象最底层原理分析(1)---- JPG 转载自:http://www.cnblogs.com/glaivelee/archive/2011/10/10/2205151.html ...

  6. Camera2 APP Flash 打闪流程及原理分析

    Camera Flash打闪流程梳理 Flash打闪的条件有两个一个是AE_Mode 一个是Flash Mode两个参数决定Flash打闪的过程. Flash mode有四个状态 AUTO OFF O ...

  7. 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,共同探讨软件知识经验,关注就有海量学习资料免费领哦: 目录 0背景 1.手机USB接口通信特点 1.1 使用方便 1.2 通用性强 1.3 ...

  8. PCI Express解析——系列文章【2】:PCIe原理分析之——PCI Express线路基础

    PCI Express解析--系列文章[2]:PCIe原理分析之--PCI Express线路基础 前文我们了解了一些概述的基本PCIe总线的简单知识点,下面本文从一些基本原理做一些分析 2 PCIe ...

  9. ZT自老罗的博客 Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析...

    Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 分类: Android 2011-09-23 00:59 31568人阅读 评论(42) 收藏 举报 androidclass ...

最新文章

  1. 藏青色在html页面怎么写,Html页面支持暗黑模式的实现
  2. 栈的应用-四则运算表达式
  3. 区块链技术的五大颠覆性价值
  4. mesageflow 集成spider 开发思路 手稿
  5. Linux—Centos 7.x安装Tomcat8
  6. spring如何实现注入
  7. 2015年3月计算机二级vb题库,2015年计算机二级vb机试试题
  8. 鸢尾花数据集的各种玩法
  9. 如何免费在线听周杰伦的歌曲
  10. 搭建一个个人网站需要多少钱预算?
  11. linux审计工具audit,Linux audit安全审计工具
  12. 不良资产证券化之后,谁来买单?
  13. 日月年时分秒转换为年月日时分秒
  14. 【构建ML驱动的应用程序】第 5 章 :训练和评估模型
  15. 求索NoSQL的现在与未来,第五届 Techo TVP 开发者峰会圆满落幕
  16. C语言编写简单的走迷宫小游戏
  17. SugarCRM源码分析之缓存
  18. Scarpy爬取当当网书籍
  19. js 跨域下载图片解决方法
  20. Java实现多条相同数据合并为一条数据

热门文章

  1. PostgreSQL 源码解读(35)- 查询语句#20(查询优化-简化Having和Grou...
  2. 基于单片机的测温风扇控制系统设计(#0420)
  3. 职场礼仪_举止_坐姿
  4. APP 合规讲堂 - 收集使用个人信息的目的、方式、范围发生变化时,是否以适当方式通知用户(五)
  5. 计算机专业群名有内涵,好听又有内涵的群名推荐 诗意有文化
  6. C语言获取执行程序所在的目录路径
  7. Twitter CEO自曝成长经历:生活充满了偶然
  8. laravel跨域问题
  9. 银河麒麟下安装ftp服务
  10. 梅宏院士:大数据技术的四大挑战与十大趋势