51单片机 步进电机旋转角度控制

发布者:渤海湾最新更新时间:2017-11-15 来源: eefocus关键字:51单片机  步进电机  旋转角度控制 手机看文章 扫描二维码
随时随地手机看文章
  1. #include   

  2.   

  3. typedef unsigned char uchar;  

  4. typedef unsigned int uint;  

  5. typedef unsigned long ulong;  

  6.   

  7. uchar code beatCode[8] = {  

  8.     0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6  

  9. };  

  10. ulong beats = 0;  

  11. uchar T0RH = 0, T0RL = 0;  

  12.   

  13. void turnMotor(ulong angle){  

  14.     EA = 0;  

  15.     beats = angle * 4076 / 360;  

  16.     EA = 1;  

  17. }  

  18.   

  19. void setTimer0(uint ms){  

  20.     ulong tmp;  

  21.     tmp = 11059326 / 12;  

  22.     tmp = tmp * ms / 1000;  

  23.     tmp = 65536 - tmp;  

  24.     tmp += 28;  

  25.     T0RL = tmp;  

  26.     T0RH = tmp>>8;  

  27. }  

  28.   

  29. void interruptTimer0() interrupt 1{  

  30.     static uchar index = 0;  

  31.     TH0 = T0RH;  

  32.     TL0 = T0RL;  

  33.     if(beats){  

  34.         uchar tmp = P1;  

  35.         tmp &= 0xF0;  

  36.         tmp |= beatCode[index];  

  37.         P1 = tmp;  

  38.         index = ++index & 0x07;  

  39.         beats--;  

  40.     }  

  41.     else{  

  42.         P1 |= 0x0F;  

  43.     }  

  44. }  

  45.   

  46. void main(){  

  47.     EA = 1;  

  48.     TMOD = 0x01;  

  49.     setTimer0(2);  

  50.     TH0 = T0RH;  

  51.     TL0 = T0RL;  

  52.     ET0 = 1;  

  53.     TR0 = 1;  

  54.     turnMotor(2 * 360 + 180);  

  55.     while(1);  

  56. }  

下面是使用库函数循环左移实现的:


  1. #include   

  2. #include   

  3.   

  4. typedef unsigned char uchar;  

  5. typedef unsigned int uint;  

  6. typedef unsigned long ulong;  

  7.   

  8. ulong beats = 0;  

  9. uchar T0RH = 0, T0RL = 0;  

  10.   

  11. void turnMotor(ulong angle){  

  12.     EA = 0;  

  13.     beats = angle * 4076 / 360;  

  14.     EA = 1;  

  15. }  

  16.   

  17. void setTimer0(uint ms){  

  18.     ulong tmp;  

  19.     tmp = 11059326 / 12;  

  20.     tmp = tmp * ms / 1000;  

  21.     tmp = 65536 - tmp;  

  22.     tmp += 28;  

  23.     T0RL = tmp;  

  24.     T0RH = tmp>>8;  

  25. }  

  26.   

  27. void interruptTimer0() interrupt 1{  

  28.     static uchar beatCode = 0x33;  

  29.     TH0 = T0RH;  

  30.     TL0 = T0RL;  

  31.     if(beats){  

  32.         uchar tmp = P1;  

  33.         tmp &= 0xF0;  

  34.         beatCode = _crol_(beatCode, 1);  

  35.         tmp |= beatCode;  

  36.         P1 = tmp;  

  37.         beats--;  

  38.     }  

  39.     else{  

  40.         P1 |= 0x0F;  

  41.     }  

  42. }  

  43.   

  44. void main(){  

  45.     EA = 1;  

  46.     TMOD = 0x01;  

  47.     setTimer0(2);  

  48.     TH0 = T0RH;  

  49.     TL0 = T0RL;  

  50.     ET0 = 1;  

  51.     TR0 = 1;  

  52.     turnMotor(2 * 360 + 180);  

  53.     while(1);  

  54. }  


关键字:51单片机  步进电机  旋转角度控制 引用地址:51单片机 步进电机旋转角度控制

上一篇:51单片机 使用蜂鸣器播放简单音乐
下一篇:51单片机 矩阵按键的扫描、消抖、动作分离

推荐阅读最新更新时间:2024-03-16 15:45

基于51单片机的流水灯设计
三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键 设计思路一(未用中断): 8个LED灯正极解电源,负极接单片机I/O口。 死循环:设置P2口为11111110,使用左移函数,循环七次。 同时每次位移中间加入延时函数。 三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键控制流水灯暂停蜂鸣器长响: 思路一:设置一个变量i,起初为0,按下A键后为1;当i为1进入死循环 设置变量j,按下B,j++,当j大于3,j=j-3;使用j*1000,来空置循环函数的延时时间。设置bit变量s=0,按下按键C,s++,当s=1,j进入循环蜂鸣器响,s=0退出循环。 在每次延时时检查按键 #inclu
[单片机]
基于<font color='red'>51单片机</font>的流水灯设计
一种廉价实用的双积分A/D转换器
1原理 51系列单片机具有两个以上16位双通道定时器(TIME0和TIME1),每个通道可选择为输入捕获方式来测量脉宽。我们用片内16位的定时器外接运放、比较器实现双积分A/D转换。原理图如图1所示(电源和5l单片机外围电路同常规电路),TL082是JFETINPUT运放;LM358作为比较器;MC4066是多路开关。51单片机P1口的P10、P11、P12作为输出,控制MC4066多路开关的输入选择;INT0作为中断输入口,捕捉LM358比较器的输出电平跳变。C1为积分电容,常取0.22μF左右的聚丙烯电容,R2为积分电阻,可取500k左右,U2A为积分运放,U2A、C1、R2构成了积分器,U2B是过零检测运放。VIN为输入电压
[单片机]
一种廉价实用的双积分A/D转换器
基于51单片机的智能恒温箱设计--数码管显示
一.硬件方案 根据恒温箱控制器的功能要求,并结合对51系列单片机软件编程自由度大,可用编程实现各种控制算法和逻辑控制。所以采用AT89C52作为电路系统的控制核心。按键将设置好的温度值传给单片机,通过温度显示模块显示出来。初始温度设置好后,单片机开启输出控制模块,使电热器开始加热,同时将从数字温度传感器DS18B20测量到的温度值实时的显示出来,当加热到设定温度值时,单片机控制声光报警模块,发出声光报警,同时关闭加热器。当自然冷却到设定温度50摄氏度以下时,单片机再次启动加热器,如此循环反复,以达到恒温控制的目的。 主要由51单片机+最小系统+数码管显示模块+数码管驱动模块+温度采集模块+蜂鸣器模块+LED指示灯模块+继电器驱
[单片机]
基于<font color='red'>51单片机</font>的智能恒温箱设计--数码管显示
基于51单片机的数字秒表实现
//基于51单片机的八位数字秒表 //开发语言:C51 //所选芯片:AT89S51 #include reg51.h #include intrins.h #define DIG_NONE 0xff; #define DIG_1 0x7f #define DIG_2 0xbf #define DIG_3 0xdf #define DIG_4 0xef #define DIG_5 0xf7 #define DIG_6 0xfb #define DIG_7 0xfd #define DIG_8 0xfe #define LINE 0xf7//根据共阴共阳以及接法要调整 typedef unsigned char Byt
[单片机]
51单片机IO口的几点说明
P0、P1、P2、P3四个I/O口作为通用IO口用是都是准双向口,即作为输入(读引脚)前先要对IO口置为1,截止俩个场效应管。 单片机扩展外部存储器时,P0口可作为数据/地址复用线使用。即使得控制信号为1。控制信号为0时,P0口作为通用IO口使用,由于采用漏极开路,要是1信号正常输出,必须外接上拉电阻。 P1口仅作为输入输出端口,P2口还可以作为外部存储器的高八位地址,P0口为低八位。单片机复位后,所用IO口为1,作为输入输出端口使用。 P3端口可以使用第二功能。如果没有设置第二功能则自动运行第一功能,即输入输出。当设置P3口如下功能时,则运行第二功能。1、串行I/O处于运行状态(RXD,TXD); 2、打开了处部中断(
[单片机]
基于8051单片机的数控电源设计方案
本文介绍了以8051单片机为控制单元,以数模转换器DAC0832输出参考电压,以该参考电压控制电压转换模块LM350的输出电压大小。该电路设计简单,应用广泛,精度较高等特点.LM350系列三端可调式集成稳压器的方法。   关键词:单片机(MCU),数模转换器(DA),掉电存储器(EEPROM)。   引言   目前所使用的直流可调电源中,几乎都为旋纽开关调节电压,调节精度不高,而且经常跳变,使用麻烦。利用数控电源,可以达到每步0.1V的精度,输出电压范围0~15V,电流可以达到2A。   系统结构 图1:硬件系统结构图   对选用芯片说明   DAC0832是一款常用的数摸转换器,它有两种连接模式,一种是电
[单片机]
基于80<font color='red'>51单片机</font>的数控电源设计方案
利用51单片机实现简单射频无线识别装置系统
1 引言 射频识别是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据。射频识别工作无须人工干预,非接触,阅读速度快,无磨损,不受环境影响,寿命长,便于使用。目前,射频识别技术在国外发展非常迅速,射频识别产品种类繁多,已广泛用于工业自动化、商业自动化、交通运输控制管理等众多领域,如汽车、火车等交通监控;高速公路自动收费系统;停车场管理系统;物品管理;仓储管理;车辆防盗等。由于我国射频识别技术起步较晚,除用于中国铁路的车号自动识别系统外,仅限于射频公交卡的应用。 在此,给出一种实现简单射频识别系统的方式。阅读器和应答器均包含在单片机控制系统中,利用2ASK调制与解调电路以及匹配网络电路,使整个系统的可识别有
[单片机]
利用<font color='red'>51单片机</font>实现简单射频无线识别装置系统
如何实现简单的步进电机多段控制呢?
一、目标功能 输入多个目标角度,以及每个角度对应的速度,实现 步进电机 的多段多速度转动 二、计算过程 **2.1 **简化C与n函数关系 根据上一节内容, 定时器 初值与速度函数关系为 硬件 系统确定后,angle、Xtal、X均为定值,为降低计算量,将公式中可以提前计算好的地方直接计算出来 根据硬件设置情况,step=1.8,Xtal=12000000,X=2,计算K值 2.2计算步数(step_num)与角度(angle)函数关系 三、程序代码 //定义步进电机转动段数及运动参数 #define para 5 unsigned int angle ={90,360,720,180,0}; //电机目标
[嵌入式]
如何实现简单的<font color='red'>步进电机</font>多段<font color='red'>控制</font>呢?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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