2006-05-07 17:11:19
字体变小 字体变大
学单片机 | 站长的书 | 学C语言 | 教学资料 | 销售中心 | 产品资料 | McuBBS | 下载中心 | 版主原创 | 关于我们

学 单 片 机 从 这 里 开 始

本站推出具有仿真功能单片机实验板,配套齐全的资料、独特的教学法一定可以让你快速入门

href="../css.css" type=text/css rel=stylesheet>

您的位置: 首页 - 教学资料 按标题搜索按内容搜索

站 内 搜 索

推 荐 信 息
纯手工打造之数字钟
使用单片机制作多路输入电压表
使用单片机制作的测速表
用单片机控制步进电机
站长现实生活中的工作室
DKB-2工控板实战
本 周 热 点
英国留学
注册香港公司
翻译公司
地板
dehumidifier
注册香港公司

用单片机控制步进电机

2006-4-9 http://www.mcustudio.com 平凡

步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

一、步进电机常识
常见的步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB),永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。

二、永磁式步进电机的控制
下面以电子爱好者业余制作中常用的永磁式步进电机为例,来介绍如何用单片机控制步进电机。
图1是35BY型永磁步进电机的外形图,图2是该电机的接线图,从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5根引出线。要使用步进电机转动,只要轮流给各引出端通电即可。将COM端标识为C,只要AC、 C、BC、 C,轮流加电就能驱动步进电机运转,加电的方式可以有多种,如果将COM端接正电源,那么只要用开关元件(如三极管),将A、 、B、 轮流接地。
下表列出了该电机的一些典型参数:
表1 35BY48S03型步机电机参数
型号 步距角 相数 电压 电流 电阻 最大静转距 定位转距 转动惯量
35BY48S03 7.5 4 12 0.26 47 180 65 2.5
有了这些参数,不难设计出控制电路,因其工作电压为12V,最大电流为0.26A,因此用一块开路输出达林顿驱动器(ULN2003)来作为驱动,通过P1.4~P1.7来控制各线圈的接通与切断,电路如图3所示。开机时,P1.4~P1.7均为高电平,依次将P1.4~P1.7切换为低电平即可驱动步进电机运行,注意在切换之前将前一个输出引脚变为高电平。如果要改变电机的转动速度只要改变两次接通之间的时间,而要改变电机的转动方向,只要改变各线圈接通的顺序。


图1 35BY48S03型步进电机外形图

图2 35BY48S03型步进电机的接线图

图3 单片机控制35BY48S03型步进电机的电路原理图
三、步进电机的驱动实例
要求:控制电路如图3所示,开机后,电机不转,按下启动键,电机旋转,速度为25转/分,按下加1键,速度增加,按下减1键,速度降低,最高速度为100转/分,最低转带为25转/分,按下停止键,电机停转。速度值要求在数码管上显示出来。

1.要求分析
按上面的分析,改变转速,只要改变P1.0~P1.3轮流变低电平的时间即可达到要求,这个时间不应采用延时来实现,因为会影响到其他功能的实现。这里以定时的方式来实现。下面首先计算一下定时时间。
按要求,最低转速为25转/分,而上述步进电机的步距角为7.5,即每48个脉冲为1周,即在最低转速时,要求为1200脉冲/分,相当于50ms/脉冲。而在最高转速时,要求为100转/分,即48000脉冲/分,相当于12.5ms/脉冲。可以列出下表
表1 步进电机转速与定时器定时常数关系
速度 单步时间(us) TH1 TL1 实际定时(us)
25 50000 76 0 49996.8
26 48077 82 236 48074.18
27 46296 89 86 46292.61
28 44643 95 73 44640.155
… … … … …
100 12500 211 0 12499.2
表中不仅计算出了TH1和TL1,而且还计算出了在这个定时常数下,真实的定时时间,可以根据这个计算值来估算真实速度与理论速度的误差值。
表中TH1和TL1是根据定时时间算出来的定时初值,这里用到的晶振是11.0592M。有了上述表格,程序就不难实现了,使用定时/计数器T1为定时器,定时时间到后切换输出脚即可。

2.程序实现
定义DSB-1A实验板的S1为启动键,S2为停止键,S3为加1键,S4为减1键,程序如下:

StartEnd bit 01H ;起动及停止标志
MinSpd EQU 25 ;起始转动速度
MaxSpd EQU 100 ;最高转动速度
Speed DATA 23H ;流动速度计数
DjCount DATA 24H ;控制电机输出的一个值,初始为11110 111
Hidden EQU 10H ;消隐码
Counter DATA 57H ;显示计数器
DISPBUF DATA 58H ;显示缓冲区

ORG 0000H
AJMP MAIN
ORG 000BH
JMP DISP
ORG 001BH
JMP DJZD
ORG 30H
MAIN:
MOV SP,#5FH
MOV P1,#0FFH
MOV A,#Hidden
MOV DispBuf,A
MOV DispBuf+1,A
MOV DispBuf+2,A

MOV DjCount,#11110111B
MOV SPEED,#MinSpd ;起始转动速度送入计数器
CLR StartEnd ;停转状态
MOV TMOD,#00010001B ;
MOV TH0,#HIGH(65536-3000)
MOV TL0,#LOW(65536-3000)
MOV TH1,#0FFH;
MOV TL1,#0FFH
SETB TR0
SETB EA
SETB ET0
SETB ET1

LOOP: ACALL KEY ;键盘程序
JNB F0,m_NEXT1 ;无键继续
ACALL KEYPROC ;否则调用键盘处理程序
m_NEXT1:
MOV A,Speed
MOV B,#10
DIV AB
MOV DispBuf+5,B ;最低位
MOV B,#10
DIV AB
MOV DispBuf+4,B
MOV DispBuf+3,A
JB StartEnd,m_Next2
CLR TR1 ;关闭电机
JMP LOOP
ORL P1,#11110000B
m_Next2:
SETB TR1 ;启动电机
AJMP LOOP ;主程序结束
;---------------------------------------
D10ms:
……
;---------延时程序,键盘处理中调用
KEYPROC:
MOV A,B ;获取键值
JB ACC.2,StartStop ;分析键的代码,某位被按下,则该位为1
JB ACC.3,KeySty
JB ACC.4,UpSpd
JB ACC.5,DowSpd
AJMP KEY_RET
StartStop:
SETB StartEnd ;启动
AJMP KEY_RET
KeySty:
CLR StartEnd; ;停止
AJMP KEY_RET
UpSpd:
INC SPEED;
MOV A,SPEED
CJNE A,#MaxSpd,K1 ;到了最多的次数?
DEC SPEED ;是则减去1,保证下次仍为该值
K1:
AJMP KEY_RET
DowSpd:
DEC SPEED
MOV A,SPEED
CJNE A,#MAXSPD,KEY_RET ;不等(未到最大值),返回
MOV SPEED,#MinSpd;
KEY_RET:
RET

KEY:
……获取键值的程序
RET

DjZd: ;定时器T1用于电机转速控制
PUSH ACC
PUSH PSW
MOV A,Speed
SUBB A,#MinSpd ;减基准数
MOV DPTR,#DjH
MOVC A,@A+DPTR
MOV TH1,A
MOV A,Speed
SUBB A,#MinSpd
MOV DPTR,#DjL
MOVC A,@A+DPTR
MOV TL1,A
MOV A,DjCount
CPL A
ORL P1,A
MOV A,DjCount
JNB ACC.7,d_Next1
JMP d_Next2
d_Next1:
MOV DjCount,#11110111B
d_Next2:
MOV A,DjCount
RL A
MOV DjCount,A ;回存
ANL P1,A
POP PSW
POP ACC
RETI

DjH: DB 76,82,89,95,100,106,110,115,119,123,12……
DjL: DB 0,236,86,73,212,0,214,96,163,165
……

DISP: ;显示程序
POP PSW
POP ACC
……
RETI
BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH
DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
END

3.程序分析
本程序主要由键盘程序、显示器程序、步进电机驱动程序三部份组成,主程序首先初始化各变量,将显示器的高3位消隐,步进电机驱动的各引脚均输出高电平,然后调用键盘程序,并作判断,如果有键按下,则调用键盘处理程序,否则直接转下一步。下一步是将当前的转速值转换为BCD码,送入显示缓冲区;接着判断StartEnd这个位变量,是“1”还是“0”,如果是“1”,则开启定时器T1,否则关闭定时器T1,为防止关闭时某一相线圈长期通电,因此,在关闭定时器T1时,将P1.0~P1.3均置高。至此,主程序的工作即结束。这里为简便起见,这里没有做高位“0”消隐的工作,即如果速度为10转/分,则显示值“010”,读者可以自行加入相关的代码来处理这一工作。
步进电机的驱动工作是在定时器T1的中断服务程序中实现的,由前述分析,每次的定时时间到达以后,需要将P1.0~P1.3依次接通,程度中用了一个变量DjCntr来实现这一功能,在主程序初始化时,该变量被赋予初值11110111B,进入到定时中断以后,将该变量取出送ACC累加器,并在累加器中进行左移,这样,该数值就变为1110 1111,然后将该数与P1相“与”,此时,P1.4即输出低电平,第二次进入中断时,先将该数取反,成为 0001 0000,然后将该数与P1相“或”,这样,P1.4即输出高电平,关断了相应的线圈,然后将该数重新取出,并作左移,即 1110,1111右移成为1101 1111,将该数与P1相“与”,这样P1.5即输出低电平,依次类推,P1.7~P1.4即循环输出低电平。当这一数据变为0111 1111后,需要作适当的改动,将数据重新变回 1111 0111,进行第二次循环,相关代码,请读者自行分析。
定时时间又是如何确定的呢?这里用的是查表的方法,首先用Excel计算得出在每一种转速下的TH值和TL值,然后,分别放入DjH和DjL表中,在进入T1中断程序之后,将速度值变量Speed送入累加器ACC,然后减去基数25,使其基数从0开始计数,然后分别查表,送入TH1和TL1,实现重置定时初值的目的。
看完这一部份内容以后,请读者自行完成以下工作:

1. 更改程序,将S1定义为“启动/停止”,而S2定义为“方向”,按下S2,切换电机旋转方向。

2. 更改程序,要求转速从1到100。

3. 更改程序,实现首位无效零消隐。


【发表评论】 【查看评论】 【发给好友】 【关闭窗口】

href="css.css" type=text/css rel=stylesheet>

监听与测向爱好者 Amine嵌入式系统开发单片机爱好者 通大信息发布网 中国电器论坛 飞扬科技 中国IC在线 中源单片机 61IC湖南电子网

志艺单片机工作室 单片机天地 春芝单片机工作室 生物医学工程论坛 315遥控网 大中化工业自动化 单片机制作信息网 电子信息资源网

一学网 上海单片机培训 嵌入式作坊

说明:部份资料为网上收集,如有侵犯您的版权,请通知我站即撤

用单片机控制步进电机相关推荐

  1. 51单片机控制步进电机-电路连接

    51单片机控制步进电机-电路连接 概要:本案例讲解的内容是51单片机控制步进电机硬件连接部分.后续会分别讲解单片机程序,S曲线加减速方法,上位机等相关内容 硬件清单: 1.51单片机控制板一个 2.二 ...

  2. Arduino单片机控制步进电机,关于步进电机的细分

    关于步进电机的细分 查询的资料说:增加细分数并不能增加力矩.但是,细分后会运行更平稳,减少低频振动和噪声.驱动器输出的工作电流越大,力矩越大.转速越快,工作电流会减小越快,力矩也会减小越快.建议步进电 ...

  3. 单片机控制步进电机正反转

    单片机控制步进电机正反转 硬件连接: 程序: #include <reg52.h> #define uint unsigned int #define uchar unsigned cha ...

  4. 单片机控制步进电机T型加速实现原理

     单片机控制步进电机是通过时钟计数器计算次数产生脉冲 T型加速转换到数学计算 计数器每秒钟计数c=1000000次 脉冲频率从 v0 = 4K 到v = 40K次  v0时每个脉冲需要计数 m0 ...

  5. 51单片机控制步进电机启停,正反转速度——入门

    实验器件 STC89C52RC的学习板子一个 DC 5V 4相5线步进电机 28YBJ-48 减速步进电机一个 元器件连接: 51单片机开发板 电气原理图 实验现象:下载程序后: 当按下KEY1键可调 ...

  6. 基于stc89c52单片机控制步进电机正反转、加减速、测温(蜂鸣器报警)、LCD读取温度

    51单片机是许多单片机初学者的入门开发板,今天给大家做一个基于51内核的stc89c52板子来控制步进电机,可以实现步进电机的正反转.加减速.另外,使用板子自带的Ds18b20模块进行环境测温,并将测 ...

  7. Arduino单片机控制步进电机

    步进电机是一种将电脉冲转化为角位移的执行机构.当步进电机的驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步长).通过控制脉冲个数来控制角位移量,达到准确定位的目的:通过控 ...

  8. 51单片机控制步进电机Protues仿真设计

    一.概述 1.1步进电机简介 步进电机(Stepper Motor)是一种将电信号转换为机械运动的电动机,是一种专用于精密控制的电机.一般步进电机运行稳定,并且精度较高,因此常用于精密仪器.自动化设备 ...

  9. stc8a8k64s4单片机控制步进电机(四相八拍)实现顺时针转一圈和逆时针转一圈

    步进电机28BYJ48型四相八拍电机,电压为DC5V-DC12V.当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动.每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就 ...

最新文章

  1. php中address,address.php
  2. GPS 气压计高度测量
  3. linux基础 linhaifeng,Linux 基础命令(一)
  4. C语言手写二叉树(链式存储结构)
  5. python上传本地文件到远程hdfs_Python之——自动上传本地log文件到HDFS(基于Hadoop 2.5.2)...
  6. tensorflow图片预处理,随机亮度,旋转,剪切,翻转。
  7. WINDOWS下内存泄漏检测工具VLD(Visual Leak Detector)的使用
  8. 淘宝/天猫获取卖出的商品订单列表 API
  9. python语言迷宫游戏_一个Python迷宫小游戏
  10. 全球与中国氧化PAN纤维市场销售现状与投资前景预测报告2022~2027年
  11. 学好python可以实现财务自由哦—python基础教学(二)
  12. CSAPP Lab3: Buffer Bomb
  13. 计算机网红,网红短句
  14. 详解深度学习之经典网络架构(十):九大框架汇总
  15. 英飞凌TC264之ADC
  16. 定义Serializer
  17. PullNet: Open Domain Question Answering with Iterative Retrieval on Knowledge Bases and Text 论文笔记
  18. opencv球体追踪
  19. 电子相册制作软件哪一个简单好用?大神推荐的制作技巧在这里
  20. 锐捷RG-ESS硬件化网络访问控制产品彩页

热门文章

  1. matlab中功率谱密度,功率谱和功率谱密度
  2. Apache Pulsar的Function流式计算框架使用
  3. MySQL没有 data 目录的解决方法或者重建 data 目录
  4. oracle 部分多字节字符,ORA-29275:部分多字节字符
  5. js 直接打开选择文件窗口_RPGMakerMV探秘01-文件结构
  6. layui————一个页面展示两个页签
  7. OpenGrok搭建方法
  8. php复姓怎么排序,这些高大上的复姓,你喜欢哪个?
  9. 【5G】UE开关移动数据信令分析
  10. android锁屏页面的实现