步进电机正反转程序 一

合集下载

PLC实现步进电机的正反转及调整控制

PLC实现步进电机的正反转及调整控制

实训课题三PLC实现步进电机正反转和调速控制一、实验目的1、掌握步进电机的工作原理2、掌握带驱动电源的步进电机的控制方法3、掌握DECO指令实现步进电机正反转和调速控制的程序二、实训仪器和设备1、FX2-48MR PLC 一台2、两相四拍带驱动电源的步进电机一套3、正反切换开关、起停开关、增减速开关各一个三、步进电机工作原理步进电机是纯粹的数字控制电动机,它将电脉冲信号转换成角位移,即给一个脉冲信号,步进电机就转动一个角度,图3-1是一个三相反应式步进电机结图。

从图中可以看出,它分成转子和定子两部分。

定子是由硅钢片叠成,定子上有六个磁极(大极),每两个相对的磁极(N、S极)组成一对。

共有3对。

每对磁极都绕有同一绕组,也即形成1相,这样三对磁极有3个绕组,形成三相。

可以得出,三相步进电机有3对磁极、3相绕组;四相步进电机有4对磁极、四相绕组,依此类推。

反应式步进电动机的动力来自于电磁力。

在电磁力的作用下,转子被强行推动到最大磁导率(或者最小磁阻)的位置,如图3-1(a)所示,定子小齿与转子小齿对齐的位置,并处于平衡状态。

对三相异步电动机来说,当某一相的磁极处于最大导磁位置时,另外两相相必处于非最大导磁位置,如图3-1(b)所示,即定子小齿与转子小齿不对齐的位置。

图3—1三相反应式步进电动机结构图把定子小齿与转子小齿对齐的状态称为对齿,把定子小齿与转子小齿不对齐的状态称为错齿。

错齿的存在是步进电机能够旋转的前提条件,所以,在步进电机的结构中必须保证有错齿的存在,也就是说,当某一相处于对齿状态时,其它绕组必须处于错齿状态。

本实验的电机采用两相混合式步进电机,其内部上下是两个磁铁,中间是线圈,通了直流电以后,就成了电磁铁,被上下的磁铁吸引后就产生了偏转。

因为中间连接的电磁铁的两根线不是直接连接的,是采用在转轴的位置用一根滑动的接触片。

这样如果电磁铁转过了头,原先连接电磁铁的两根线刚好就相反了,所以电磁铁的N极S极就和以前相反了。

步进电机转速转向程序(仅供参考)

步进电机转速转向程序(仅供参考)

附录Ⅱ:/************************************************************* *************************************************************/#include "reg52.h"#include <intrins.h>sbit ForeWordLed=P1^0;#define Set_ForeWordLed ForeWordLed=0;#define ReSet_ForeWordLed ForeWordLed=1;sbit BackWordLed=P1^1;#define Set_BackWordLed BackWordLed=0;#define ReSet_BackWordLed BackWordLed=1;sbit AddSpdLed=P1^3;#define Set_AddSpdLed AddSpdLed=0;#define ReSet_AddSpdLed AddSpdLed=1;sbit SubSpdLed=P1^5;#define Set_SubSpdLed SubSpdLed=0;#define ReSet_SubSpdLed SubSpdLed=1;sbit ResetLed=P1^7;#define Set_ResetLed ResetLed=0;#define ReSet_ResetLed ResetLed=1;sbit ReSetKeyIn=P2^0; //0 低表有代输入sbit SubSpdKeyIn=P2^1;sbit AddSpdKeyIn=P2^2;sbit BackWordKeyIn=P2^3;sbit ForeWordKeyIn=P2^4;unsigned int motorSpdDelayUs;//A-AB-B-BC-C-CD-D-DA#define A_run P0=0x01;#define AB_run P0=0x03;#define B_run P0=0x02;#define BC_run P0=0x06;#define C_run P0=0x04;#define CD_run P0=0x0C;#define D_run P0=0x08;#define DA_run P0=0x09;unsigned char nowWordFlg;/****************************************************************** 函数功能:延时US入口函数:unsigned char us_value返回参数:无/******************************************************************/ void delay_us(unsigned int value) //delay about 1 us{while(value--){_nop_();}}/****************************************************************** 函数功能:延时MS入口函数:unsigned int ms_value返回参数:无/******************************************************************/ void delay_ms(unsigned int ms_value) //delay about 1 ms{unsigned int k,i;for(k=0;k<ms_value;k++){i=200;while(i--){_nop_();}}}/****************************************************************** 函数功能:电机正转程序入口函数:返回参数:无/******************************************************************/ void motor_Foreward(){A_run;delay_us(motorSpdDelayUs);AB_run;delay_us(motorSpdDelayUs);B_run;delay_us(motorSpdDelayUs);BC_run;delay_us(motorSpdDelayUs);C_run;delay_us(motorSpdDelayUs);CD_run;delay_us(motorSpdDelayUs);D_run;delay_us(motorSpdDelayUs);DA_run;delay_us(motorSpdDelayUs);}/****************************************************************** 函数功能:电机反转程序入口函数:返回参数:无/******************************************************************/ void motor_Backward(){DA_run;delay_us(motorSpdDelayUs);D_run;delay_us(motorSpdDelayUs);CD_run;delay_us(motorSpdDelayUs);C_run;delay_us(motorSpdDelayUs);BC_run;delay_us(motorSpdDelayUs);B_run;delay_us(motorSpdDelayUs);AB_run;delay_us(motorSpdDelayUs);A_run;delay_us(motorSpdDelayUs);}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_ForeWordKeyIn(){if(!ForeWordKeyIn){delay_ms(10);if(!ForeWordKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_BackWordKeyIn(){if(!BackWordKeyIn){delay_ms(10);if(!BackWordKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取加速按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_AddSpdKeyIn(){if(!AddSpdKeyIn){delay_ms(10);if(!AddSpdKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_SubSpdKeyIn(){if(!SubSpdKeyIn){delay_ms(10);if(!SubSpdKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:读取按键程序入口函数:返回参数:unsigned char 1代表有信号,0代表没信号/******************************************************************/ unsigned char read_ReSetKeyIn(){if(!ReSetKeyIn){delay_ms(10);if(!ReSetKeyIn){return 1;}}return 0;}/****************************************************************** 函数功能:主函数入口函数:无返回参数:无/******************************************************************/ void main(){P0=0xff;P1=0xff;P2=0xff;motorSpdDelayUs=500;while(1){if(read_ReSetKeyIn()) //参数复位{motorSpdDelayUs=500;nowWordFlg=1;ReSet_BackWordLed;ReSet_ForeWordLed;ReSet_AddSpdLed;ReSet_SubSpdLed;Set_ResetLed;while(read_ReSetKeyIn());ReSet_ResetLed ;}if(read_SubSpdKeyIn()) //减速{ReSet_BackWordLed;ReSet_ForeWordLed;ReSet_AddSpdLed;Set_SubSpdLed;while(read_SubSpdKeyIn()){if(motorSpdDelayUs<1000) motorSpdDelayUs+=5;if(nowWordFlg) motor_Foreward();else motor_Backward();}ReSet_SubSpdLed;}if(read_AddSpdKeyIn()) //加速{ReSet_BackWordLed;ReSet_ForeWordLed;Set_AddSpdLed;ReSet_SubSpdLed;while(read_AddSpdKeyIn()){if(motorSpdDelayUs>100) motorSpdDelayUs-=5;if(nowWordFlg) motor_Foreward();else motor_Backward();}ReSet_AddSpdLed;}if(read_ForeWordKeyIn()) //前进{Set_ForeWordLed;ReSet_BackWordLed;ReSet_AddSpdLed;ReSet_SubSpdLed;nowWordFlg=1;while(read_ForeWordKeyIn())motor_Foreward();ReSet_ForeWordLed;}if(read_BackWordKeyIn()) //后退{Set_BackWordLed;ReSet_ForeWordLed;ReSet_AddSpdLed;ReSet_SubSpdLed;nowWordFlg=1;while(read_BackWordKeyIn())motor_Backward();ReSet_BackWordLed;}};}。

单片机数码管显示+步进电机正反加速转动C语言程序

单片机数码管显示+步进电机正反加速转动C语言程序
void key ()
{
if(jia_key == 0)
{
delay(5);
if(jia_key == 0)
{
num++; //速度标识位
feng_ming_qi();
while(jia_key == 0) ;
for(k=125;k>0;k--);
}
/***************************************************************************************************/
void xianshi ( )//显示程序
{
delay(50);
if(zf_key ==0)
{
flag=~flag;
feng_ming_qi();
while(zf_key == 0);
}
}
if(stop_key == 0)
{
{
uchar j;
uint i;
for(j=0+table_begin;j<4+table_begin;j++)
{
P1 = code_table[j];
for(i=0;i<maichong;i++)
{
xianshi();
}
{
tong = 0xff;
tong = on[0];//位选为0;
liang = table[show_num];
delay(3);
liang = 0xff;
}
/***************************************************************************************************/

步进电机正反转程序

步进电机正反转程序

步进电机正反转程序#include <reg51.h> //51芯片管脚定义头文件#include <intrins.h> //内部包含延时函数 _nop_();#define uchar unsigned char#define uint unsigned intuchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反转编码sbit K1 = P3^2; //正转sbit K2 = P3^3; //反转sbit K3 = P3^4; //停止sbit BEEP = P3^6; //蜂鸣器/********************************************************//*/* 延时t毫秒/* 11.0592MHz时钟,延时约1ms/*/********************************************************/void delay(uint t){uint k;while(t--){for(k=0; k<125; k++){ }}}/********************************************************** /void delayB(uchar x) //x*0.14MS{uchar i;while(x--){for (i=0; i<13; i++){ }}}/********************************************************** /void beep(){uchar i;for (i=0;i<100;i++){delayB(4);BEEP=!BEEP; //BEEP取反}BEEP=1; //关闭蜂鸣器}/********************************************************/ /*/*步进电机正转/*/********************************************************/ void motor_ffw(){uchar i;uint j;for (j=0; j<8; j++) //转1*n圈{if(K3==0){break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P1 = FFW[i]; //取数据delay(2); //调节转速}}}/********************************************************//*/*步进电机反转/*/********************************************************/ void motor_rev(){uchar i;uint j;for (j=0; j<8; j++) //转1×n圈{if(K3==0){break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P1 = REV[i]; //取数据delay(2); //调节转速}}}/******************************************************** ** 主程序**********************************************************/main(){uchar r,N=64; //N 步进电机运转圈数while(1){if(K1==0){beep();for(r=0;r<N;r++){motor_ffw(); //电机正转if(K3==0){beep();break;} //退出此循环程序}}else if(K2==0){beep();for(r=0;r<N;r++){motor_rev(); //电机反转if(K3==0){beep();break;} //退出此循环程序}}elseP1 = 0xf0;}}/********************************************************/。

51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。

所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图•注意:上图为共阳极接法,实际连接参考总体线路连接。

•驱动器信号端定义:PUL+:脉冲信号输入正。

( CP+ )PUL-:脉冲信号输入负。

( CP- )DIR+:电机正、反转控制正。

DIR-:电机正、反转控制负。

EN+:电机脱机控制正。

EN-:电机脱机控制负。

•电机绕组连接A+:连接电机绕组A+相。

A-:连接电机绕组A-相。

B+:连接电机绕组B+相。

B-:连接电机绕组B-相。

•电源连接VCC:电源正端“+”GND:电源负端“-”注意:DC直流范围:9-32V。

不可以超过此范围,否则会无法正常工作甚至损坏驱动器.•总体线路连接输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信号DIR+,DIR-③脱机信号EN+,EN-。

输入信号接口有两种接法,可根据需要采用共阳极接法或共阴极接法。

在这里我采用的是共阴极接法:分别将PUL-,DIR-,EN-连接到控制系统的地端(接入单片机地端);脉冲输入信号通过PUL+接入单片机(代码中给的P2^6脚),方向信号通过DIR+接入单片机(代码中给的P2^4脚),使能信号通过EN+接入(不接也可,代码中未接,置空)。

按键连接见代码,分别用5个按键控制电机启动、反转、加速、减速、正反转。

注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路,以免损坏驱动器。

2、代码1.#include<reg51.h>2.#define MotorTabNum 53.unsigned char T0_NUM;4.sbit K1 = P3^5; // 启动5.sbit K2 = P3^4; // 反转6.sbit K3 = P3^3; // 加速7.sbit K4 = P3^2; // 减速8.sbit K5 = P3^1; //正反转9.10.sbit FX = P2^4; // 方向11.//sbit MotorEn = P2^5; // 使能12.sbit CLK = P2^6; // 脉冲13.14.inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};15.16.unsigned char g_MotorSt = 0; //17.unsigned char g_MotorDir = 0; //18.unsigned char MotorTab[7] = {12, 10, 8, 6, 4, 2,1};19.20.signed char g_MotorNum = 0;21.22.void delayms(xms);23.void mDelay(unsigned int DelayTime);24.void T0_Init();25.26.void KeyScan(void);27.28.29.30.void main(void)31.{32.T0_Init();33.// MotorEn = 0; //34.FX = 0;35.while(1)36.{37.KeyScan(); //38.}39.40.41.}42.43.void T0_Init()44.{45.TMOD = 0x01;46.TH0 = (65535-100)/256; // 1ms47.TL0 = (65535-100)%256;48.EA = 1;49.ET0 = 1;50.// TR0 = 1;51.52.}53.54.void T0_time() interrupt 155.{56.// TR0 = 0;57.TH0 = (65535-100)/256;58.TL0 = (65535-100)%256;59.T0_NUM++;60.if(T0_NUM >= MotorTab[g_MotorNum]) //61.{62.T0_NUM = 0;63.CLK=CLK^0x01; //64.}65.// TR0 = 1;66.}67.68.69.//--------------------------70.void KeyScan(void)71.{72.if(K1 == 0)73.{74.delayms(10);75.if(K1 == 0)76.{77.g_MotorSt = g_MotorSt ^ 0x01;78.// MotorEn ^= 1;79.TR0 = 1;80.FX ^= 0; //反转81.}82.}83.84.if(K2 == 0)85.{86.delayms(10); //正转87.if(K2 == 0)88.{89.g_MotorDir = g_MotorDir ^ 0x01;90.FX ^= 1; //加速91.}92.}93.94.if(K3 == 0) //95.{96.delayms(5); //加速97.if(K3 == 0)98.{99.g_MotorNum++;100.if(g_MotorNum > MotorTabNum) 101.g_MotorNum = MotorTabNum; 102.}103.}105.if(K4 == 0) //106.{107.delayms(5); // 减速108.if(K4 == 0)109.{110.g_MotorNum--;111.if(g_MotorNum < 0)112.g_MotorNum = 0;113.}114.}115.116.if(K5 == 0) //117.{118.delayms(10); // 正反转119.if(K5 == 0)120.{121.g_MotorSt = g_MotorSt ^ 0x01; 122.g_MotorDir = g_MotorDir ^ 0x01; 123.MotorEn ^= 1;124.TR0 = 1;125.while(1)126.{127.FX ^= 1; //128.delayms(90000);129.FX ^= 0; //130.delayms(90000);131.}132.}133.}135.136.void delayms(xms)//延时137.{138.unsigned int x,y;139.for(x=xms;x>0;x--)140.for(y=110;y>0;y--);141.}3、常见问题解答•控制信号高于5v一定要串联电阻,否则可能会烧坏驱动器控制接口电路。

步进电机正反转实验报告

步进电机正反转实验报告

步进电机正反转实验报告步进电机正反转实验报告一、实验名称:步进电机正反转训练二、控制要求要求实现电机的正转三圈,反转三圈,电机正转和反转的频率可不相同,然后这样循环3次,3次后电机停止转动。

三、PLCI/O地址分配表PLC的I/O地址Y0电机转向输出点Y1电机的转速输出点连接的外部设备控制转速点CP控制转向点CW四、程序梯形图五、程序分析:M11、M12、M13的波形图M21、M22、M23的波形图电机正转的频率是20赫兹,通过MOV指令送到D5中,在电机正传三圈后,电机反转,反转的频率是40赫兹,通过MOV指令送到D5中。

电机正转3次,反转2次,再通过M23得电进入正转,重复上面的循环,即电机正转后再反转,M23才得电一次,所以可以加一个M23控制一个计数器计数,当计数器计数到3时,再通过计数器的常闭开关把M10线圈断电,从而实现电机停止。

扩展阅读:微机实验报告步进电机正反转及调速设计微机原理与接口设计实验报告步进电机正反转及调速设计专业:机械设计制造及其自动化班级:10090112小组成员:周先军10901239张赓10901240胡一国08901312组别:B5摘要:本系统是基于STM8系列单片机的步进电机转速转向控制器。

该系统采用STM8S103F3P6单片机作为主控制器,运用L298全桥驱动器驱动步进电机,通过摇杆、按键控制电机转速,并且通过1602液晶显示器显示当前转速。

该系统中使用的四相步进电机,具有控制精度高,转动扭矩大等特点,实际生产中有广泛的运用。

系统中除了传统按键控制外,还增加遥控控制,单片机通过AD读取摇杆控制信号,实时控制电机转速。

整个系统具有结构简单、可靠性高、成本低和实用性强等特点,具有较高的通用性和应用推广价值。

关键词:控制单片机控制驱动电路正反转摇杆四相步进电机STM8L2一、系统方案1.1控制系统方案方案一:采用8086系列单片机。

8086是Inter系列的16位微处理器,数据处理能力强。

步进电机程序流程图

步进电机程序流程图

图1 主程序流程图说明:1、flag_stop为电机转动或停止标志位,为0表示转动,为1表示定时转动,默认为1,通过某一按键会改变该位的值;2、flag_mode为电机正转或反转标志位,为0表示正转,为1表示反转,默认为0,同过某一按键会改变改位的值;图2 按键处理函数流程图图3 电机转步函数流程图下面是诗情画意的句子欣赏,不需要的朋友可以编辑删除!!谢谢1. 染火枫林,琼壶歌月,长歌倚楼。

岁岁年年,花前月下,一尊芳酒。

水落红莲,唯闻玉磬,但此情依旧。

2. 玉竹曾记凤凰游,人不见,水空流。

3. 他微笑着,在岁月的流失中毁掉自己。

4. 还能不动声色饮茶,踏碎这一场,盛世烟花。

5. 红尘嚣浮华一世转瞬空。

6. 我不是我你转身一走苏州里的不是我。

7. 几段唏嘘几世悲欢可笑我命由我不由天。

8. 经流年梦回曲水边看烟花绽出月圆。

9. 人生在世,恍若白驹过膝,忽然而已。

然,我长活一世,却能记住你说的每一话。

10. 雾散,梦醒,我终于看见真实,那是千帆过尽的沉寂。

11. 纸张有些破旧,有些模糊。

可每一笔勾勒,每一抹痕迹,似乎都记载着跨越千年万载的思念。

12. 生生的两端,我们彼此站成了岸。

13. 缘聚缘散缘如水,背负万丈尘寰,只为一句,等待下一次相逢。

14. 握住苍老,禁锢了时空,一下子到了地老天荒15. 人永远看不破的镜花水月,不过我指间烟云世间千年,如我一瞬。

16. 相逢一醉是前缘,风雨散,飘然何处。

17. 虚幻大千两茫茫,一邂逅,终难忘。

相逢主人留一笑,不相识,又何妨。

18. 天下风云出我辈,一入江湖岁月催;皇图霸业谈笑间,不胜人生一场醉。

19. 得即高歌失即休,多愁多恨亦悠悠,今朝有酒今朝醉,明日愁来明日愁。

20. 直道相思了无益,未妨惆怅是清狂。

21. 看那天地日月,恒静无言;青山长河,世代绵延;就像在我心中,你从未离去,也从未改变。

22. 就这样吧,从此山水不相逢。

23. 人天自两空,何相忘,何笑何惊人。

电机正反转简单程序

电机正反转简单程序

电机正反转简单程序引言电机正反转是在许多电气控制和机器人领域中常见的需求。

通过编写简单的程序,我们可以实现对电机的正向和反向旋转控制。

本文将介绍如何编写一个简单的程序来实现电机的正反转。

什么是电机正反转?在控制电机时,正反转是指改变电机的旋转方向。

电机正转是指电机按照设定的方向进行旋转,而电机反转则是电机按照相反的方向进行旋转。

通过控制电机的正反转,我们可以实现精确的运动控制和机器人运动的调整。

电机正反转的原理电机正反转的实现原理基于电机的构造和控制电路。

常见的电机类型包括直流电机和交流电机。

无论是直流电机还是交流电机,它们的正反转控制原理都是通过控制电极之间的电流流向来实现的。

在直流电机中,通过改变直流电源的电极连接方式,可以改变电流在电机绕组中的流向,从而改变电机的旋转方向。

在交流电机中,可以通过改变电机的相序来改变绕组中电流的流向,进而改变旋转方向。

编写电机正反转程序的步骤编写电机正反转程序的步骤主要包括以下几个方面:1. 确定电机类型和控制方式首先,我们需要确定使用的电机类型和控制方式。

根据不同的电机类型和控制方式,编写电机正反转程序的方法会有所不同。

例如,直流电机的正反转控制需要改变电机电极的连接方式,而交流电机的正反转控制需要改变电机的相序。

2. 确定控制电路和接口在编写程序之前,我们需要确定控制电路和接口。

控制电路和接口用于将控制信号传输到电机,从而实现对电机正反转的控制。

常见的电机控制电路和接口包括H桥电路、驱动模块和微控制器。

3. 编写程序根据电机类型和控制方式,我们可以编写相应的程序。

程序的主要任务是向电机发送控制信号以实现正反转。

在编写程序时,需要根据电机的规格和特性设置合适的参数,如电机转速、转向等。

4. 测试和调试完成程序编写后,我们需要进行测试和调试,以确保程序能够正常运行。

在测试和调试过程中,我们可以通过观察电机的转动方向和速度来验证程序的正确性。

如果程序存在问题,可以对程序进行调试和修改。

单片机控制步进电机正反转的实际应用程序

单片机控制步进电机正反转的实际应用程序

单片机控制步进电机正反转的实际应用程序/*这是一个控制步进电机正反转的实际应用程序*//*选用的是三相步进电机驱动器,p14口线用做步进电机的脉冲控制*//*p13口线用做步进电机的方向控制。

p15,p16,p17是光耦开关量输入*//*信号端,p20,p21,p22,p23与x25045看门狗存储器相连*//*k7,k8键是设定步进电机转动速度参数的加减键*//*k9是启动运行键,按一下k9,步进电机开始运行,直到p17口线有信号输入才停止*/ /*k10是停止键,任何时候按下k10都将停止步进电机当前的运行*//*k11是步进运行键,按一下,步进电机动一下*//*k12键是反向运行键,按一下,步进电机开始反向运行,知道p15口线有信号才停止*/ /*如果p16口线有信号输入,则只有k12键才起作用,其它键都没反应。

*/START:do;$INCLUDE(REG51.DCL)DECLARE (addrl,n,I,j,ok,ds) byte; /*定义变量*/declare l(5) byte;declare (dat,data) byte at (30h);declare delay word;DECLARE ACO(11) BYTE CONSTANT (05h,9fh,23h,0bh,99h,49h,/*定义LED段码表*/ 41h,1fh,01h,09h,00h);declare si literally 'p21',sck literally 'p20'; /*X25045囗线定义*/declare so literally 'p22',cs literally 'p23';dog:procedure; /* 初始化看门狗x25045 */cs=1;call time(1);cs=0;call time(1);cs=1;end dog;run:procedure; /*步进电机运行脉冲输出程序*/if ok=1 thencall dog;do;p14=0;call time(1);p14=1;call time(1);end;end run;DISPLAY:PROCEDURE(L0,L10); /*显示子程序*/DECLARE (L0,L10) BYTE; /*定义显示二位*/n=L10;n=aco(n); /*十位数BCD码译成段码*/sbuf=n; /*十位数送164显示*/do while ti=0; /*等待发送结束*/call dog; /*看门狗定时器复位*/end;n=L0;n=aco(n);sbuf=n; /*个位数送164显示*/do while ti=0;call dog;end;end display;outbyt: procedure(da); /*向看门狗存储器写入一字节*/ declare (i,da) byte;j=da; /*将要写入的字节赋给临时变量J */do i=0 to 7; /*左移8位,送到口线si */sck=0;j=scl(j,1);si=cy;sck=1; /*每移一位数据,跟一个时钟信号*/end;end outbyt;inbyt: procedure; /* 从看门狗存储器读出一字节*/ declare (i,di) byte;j=0;do i=0 to 7;sck=1;sck=0;cy=so;j=scl(j,1); /*从看门狗存储器读出一字节送入临时变量j*/ end;dat=j;end inbyt;wrenable: procedure; /* 置看门狗写使能*/sck=0;cs=0;; /* write enable command */call outbyt(06h); /* x25045 写使能指令06h */cs=1;sck=0;end wrenable;wrdisable: procedure; /* 置看门狗写禁止*/sck=0;cs=0;; /* write disable command */call outbyt(04h);sck=0;cs=1;end wrdisable;wrregister: procedure; /* 写状态寄存器*/sck=0;cs=0;dat=01h; /* write register command */call outbyt(dat);; /* 00h--1.4S, 20h--200MS, 10h--600MS, 30h--disable Wdog */ call outbyt(00h); /* 设定看门狗定时时间*/;sck=0;cs=1;call time(200); /* wait to complete writting cycle */end wrregister;rdregister:procedure; /* 读看门狗状态寄存器*/sck=0;cs=0;; /* register read command */call outbyt(05h);call inbyt; /* status register read in <DAT> */sck=0;cs=1;end rdregister;wbyte:procedure; /* 看门狗存储器字节写入子程序*/ declare comm byte;sck=0;cs=0;comm=02h; /* 写指令02h */call outbyt(comm);call outbyt(addrl);call outbyt(dat); /* send one byte data to X25043 */cs=1;sck=0;call time(150);end wbyte;rbyte:procedure; /*看门狗存储器字节读出子程序*/declare comm byte;sck=0;cs=0;comm=03h; /* read command */call outbyt(comm);call outbyt(addrl);call inbyt; /* read one byte to <DAT> */sck=0;cs=1;end rbyte;incdata: procedure; /* 参数修改--"加"键处理子程序+ */if p10=0 then /* 如果K7键按下*/do;do while p10=0; /* 等待键松开有效*/call dog; /* 此处必需调用看门狗复位子程序("喂狗"),否则程序将被看门狗复位*/ end;data=data+1; /* 设定值+1 */if data>99 then data=1; /* 规定设定值的上限*/L(1)=data MOD 10; /*将设定值的十位数拆出来送给十位数显示变量L(1) */L(2)=data/10; /*将设定值的个位数拆出来送给个位数显示变量L(2) */call display(L(1),L(2)); /* 将改变后的设定值送164显示出来*/call time(200); /* 延时*/call dog;call time(200);call dog;call wrenable; /* 置存储器写使能*/addrl=00h; /* 置存储器地址*/dat=l(1);call wbyte; /* 将变量L(1)的值写入存储器00h位置*/call wrenable;addrl=01h;dat=l(2);call wbyte; /* 将变量L(2)的值写入存储器01h位置*/end;end incdata;decdata: PROCEDURE; /* 参数修改---"减"键处理子程序- */IF p11=0 THEN /* k8 键处理子程序*/do;do while p11=0;call dog;end;DATA=DATA-1; /* 设定值-1 */if data=0 then data=99;L(1)=data MOD 10;L(2)=data/10;call display(l(1),l(2));call dog;call time(200);call dog;call time(200);call dog;call wrenable;addrl=00h;dat=l(1);call wbyte;call wrenable;addrl=01h;dat=l(2);call wbyte;end;END decdata;starton: PROCEDURE; /* start */declare sd byte;if p12=0 THEN /* K9键处理子程序*/do;do while p12=0;call dog;end;if p17=0 then ok=0; /* 如果p17 口线上有信号输入,则运行标志置0 (停止运行)*/ p13=1; /* 置步进电机正向运转*/call time(200);call dog;do while ok=1; /* 当运行标志为1时,执行速度延时操作*/do sd= 0 to data; /* 根据设定值data的数值延时来确定步进电机运行时的脉冲给定速度*/call dog;end;end;END starton;step: PROCEDURE; /* step */declare sd byte;p13=1; /* 置步进电机正向运转*/call time(200);IF p33=0 THEN /* k11键处理子程序*/do;if p17=0 then ok=0; /* 如果p17上有信号输入,则停止运行*/do while p33=0;do sd= 0 to data; /* 调用延时,调整步进电机的运行速度*/call dog;call time(2);end;call run;call dog;end;end;ok=0;END step;back: PROCEDURE; /* 反向运行处理子程序*/declare sd byte;IF p34=0 THENdo;do while p34=0;call dog;end;if p15=0 then ok=0; /* 反向运行时,如果遇到p15上有信号输入,则停止步进电机运行*/ p13=0; /* 置步进电机反向运行*/call time(200);call dog;do while ok=1;do sd=0 to data; /*根据设定值调节步进电机的运行速度*/call dog;call time(2);end;call run;if (p15=0 or p32=0 ) then ok=0; /* p15 或p32 口线任意一个有信号输入,停止运行*/ end;end;END back;MAIN$PROGRAM: /* 初始化主程序*/ea=0; /* 关中断*/SCON=00h; /*置串口方式0 ,串行数据输出模式*/PCON=00h;tmod=11h;enable; /* 开中断(ea=1) */SCK=0;cs=1; /* 定义存储器口线初始状态*/call wrenable;call wrregister; /* 看门狗存储器初始化*/call wrenable;call dog;p2=0ffh; /* 初始化各个口线的状态*/p1=0ffh;ok=0;p14=1;p32=1;p33=1;p34=1;p13=1;ADDRL=00h; /* 上电复位后从存储器中读出设定的速度值*/CALL rbyte;l(1)=dat;addrl=01h;call rbyte;l(2)=dat;DATA=L(1)+L(2)*10; /*将读出的值合并成十进制,存入变量data中*/ /* 以下是主循环程序*/LOOP:IF p10=0 THEN CALL incdata; /* 检测各个按键是否有按下*/IF p11=0 THEN CALL decdata;if p12=0 thendo;ok=1;call starton;end;if p34=0 thendo;ok=1;call back;end;if p33=0 thendo;ok=1;call step;end;call dog;CALL DISPLAY(L(1),L(2)); /* 将设定值送164显示*/call dog;CALL TIME(100);call dog;GOTO LOOP;END START;。

PLC实现步进电机正反转和调速控制

PLC实现步进电机正反转和调速控制

PLC实现步进电机正反转和调速控制PLC(可编程逻辑控制器)是一种专门用于工业自动化控制系统的计算机控制设备。

它可以实现对多种设备和机器的控制,包括步进电机。

步进电机是一种通过步进角度来控制转动的电机,其转动可以精确地控制在每个步进角度停留一段时间。

步进电机的正反转和调速控制是实现工业自动化过程中常用的功能,PLC可以很好地实现这些控制。

一、步进电机的正反转控制步进电机的正反转控制是通过控制步进电机的相序来实现的。

步进电机有多种相序方式,常见的包括正向旋转、逆向旋转、双向旋转等。

PLC 可以通过控制步进电机的相序开关来实现步进电机的正反转。

在PLC中,可以使用PLC的输出口来控制步进电机的相序开关。

通过将输出口与步进电机的控制线路连接,可以控制相序开关的状态,从而控制步进电机的正反转。

例如,将PLC的一个输出口连接到步进电机的CW (Clockwise)输入线路,另一个输出口连接到步进电机的CCW(Counter Clockwise)输入线路,可以通过控制这两个输出口的状态来实现步进电机的正反转。

二、步进电机的调速控制步进电机的调速控制是通过控制步进电机的脉冲频率来实现的。

步进电机的转速与脉冲频率成正比,脉冲频率越高,步进电机的转速越快。

因此,通过控制PLC输出口给步进电机发送的脉冲频率,可以实现步进电机的调速控制。

在PLC中,可以使用定时器模块来控制步进电机的脉冲频率。

定时器模块可以通过设定计时器的定时时间和周期,来控制输出口的脉冲频率。

通过控制定时器的定时时间,可以控制步进电机每个步进角度的停留时间,从而控制步进电机的转速。

除了定时器模块,PLC还可以使用计数器模块来实现步进电机的调速控制。

计数器模块可以通过设定计数器的初始值和计数步长,来控制输出口的脉冲频率。

通过控制计数器的初始值和计数步长,可以控制步进电机每个步进角度的停留时间,从而实现步进电机的转速控制。

三、步进电机正反转和调速控制实例以下是一个使用PLC实现步进电机正反转和调速控制的实例。

步进马达正反转程序(2014,11,14)

步进马达正反转程序(2014,11,14)

怎样登录微信?2012-07-04 13:31玲ZI3|来自手机知道|分类:聊天软件|浏览18313次分享到:2012-07-04 13:33网友采纳编辑本段账号账号注册微信推荐使用手机号注册,并支持100余个国家的手机号。

微信可以通过QQ号直接登录注册或者通过邮箱帐号注册。

第一次使用QQ号登陆时,微信会要求设置微信号和昵称。

微信号是用户在微信中的唯一识别号,必须大于或等于六位,注册成功后不可更改;昵称是微信号的别名,允许多次更改。

账号使用微信与QQ单向独立,且独立度非常有限。

输入QQ号进行注册的用户,虽然在微信中不会把QQ号透露给微信好友,但是所有的QQ好友可以看到用户的微信号。

微信中有单独设置的头像,可以在登陆后从设置菜单内修改。

提载微信安装包并安装微信软件。

或者从app store直接安装微信软件。

在手机应用程序中找到微信图标,打开微信软件。

注册微信账号,可用手机号进行注册。

如已有账号,可跳过此步骤。

登陆微信,填写微信账号和密码,点击登陆按钮。

添加微信好友:在“朋友们”菜单下面找到“添加朋友”,有以下方式可供选择:按号码查找,扫一扫(通过好友的微信二维码名片),从QQ好友列表添加,从手机通讯录列表添加,查看明星等微信认证账号。

或者在微信推荐的好友中选择添加。

添加了好友后,可以返回到“通讯录”菜单,找到好友,开始微信吧点击好友头像,点击“发消息”,消息窗口下方图标,可供选择消息发送方式,像喇叭一样的,发送语音消息;大写T可发送文字消息,点击加号“+”可展开其他消息形式菜单图标,可发送图片,视频,表情等切换到对讲模式按住对讲按钮不放开始录音说话。

轻开按钮后语音结束并且会发送到对方手机如何进行视频聊天打开聊天对话框点那个加号键视频聊天就在表情下面如何拍摄并发送视频、切换消息类别为视频消息,点击下方录制按钮开始录制、结束录制并压缩完毕后点击播放按钮进行预览或点击完成按钮发出视频如何接收并播放视频1、点击视频消息进入新页面开始下载下载完成则自动开始播放还可以点击右上角的按钮保存该视频到相册。

电机正反转简单程序

电机正反转简单程序

电机正反转简单程序电机正反转是一个非常重要的控制技术,在很多领域都得到广泛应用。

下面我来分享一下电机正反转的简单程序。

首先,我们需要确定你使用的是什么类型的电机。

如果是直流电机,就可以采用下面这个程序:void setup() {pinMode(9, OUTPUT); //引脚9连接电机}void loop() {digitalWrite(9, HIGH); //正转delay(5000); //持续5秒digitalWrite(9, LOW); //停止delay(1000); //等待1秒digitalWrite(9, LOW); //反转delay(5000); //持续5秒digitalWrite(9, LOW); //停止delay(1000); //等待1秒}如果是交流电机,就需要使用一个电机驱动模块,如L298N模块。

下面是一个交流电机正反转的简单程序:void setup() {pinMode(9, OUTPUT); //IN1pinMode(10, OUTPUT); //IN2pinMode(11, OUTPUT); //使能引脚}void loop() {digitalWrite(11, HIGH); //使能digitalWrite(9, HIGH); //正转digitalWrite(10, LOW); //正转delay(5000); //持续5秒digitalWrite(9, LOW); //停止digitalWrite(10, LOW); //停止delay(1000); //等待1秒digitalWrite(9, LOW); //反转digitalWrite(10, HIGH); //反转delay(5000); //持续5秒digitalWrite(9, LOW); //停止digitalWrite(10, LOW); //停止delay(1000); //等待1秒}以上程序只是给出了一个简单的示例,实际应用中还需要根据电机的特定要求来进行修改。

PLC实现步进电机的正反转以及调整控制

PLC实现步进电机的正反转以及调整控制

.实训课题三PLC实现步进电机正反转和调速控制一、实验目的1、掌握步进电机的工作原理2、掌握带驱动电源的步进电机的控制方法3、掌握DECO指令实现步进电机正反转和调速控制的程序二、实训仪器和设施1、FX2N-48MRPLC一台2、两相四拍带驱动电源的步进电机一套3、正反切换开关、起停开关、增减速开关各一个三、步进电机工作原理步进电机是纯粹的数字控制电动机,它将电脉冲信号变换成角位移,即给一个脉冲信号,步进电机就转动一个角度,图3-1是一个三相反响式步进电机结图。

从图中能够看出,它分红转子和定子两部分。

定子是由硅钢片叠成,定子上有六个磁极(大极),每两个相对的磁极(N、S极)构成一对。

共有3对。

每对磁极都绕有同一绕组,也即形成1相,这样三对磁极有3个绕组,形成三相。

能够得出,三相步进电机有3对磁极、3相绕组;四相步进电机有4对磁极、四相绕组,依此类推。

反响式步进电动机的动力来自于电磁力。

在电磁力的作用下,转子被强行推动到最大磁导率(或许最小磁阻)的地点,如图3-1(a)所示,定子小齿与转子小齿对齐的地点,并处于均衡状态。

对三相异步电动机来说,当某一相的磁极处于最大导磁地点时,此外两相相必处于非最大导磁地点,如图3-1(b)所示,即定子小齿与转子小齿不对齐的地点。

把定子小齿与转子小齿对齐的状态称为对齿,把定子小齿与转子小齿不对齐的状态称为错齿。

错齿的存在是步进电机能够旋转的前提条件,所以,在步进电机的构造中一定保证有错齿的存在,也就是说,当某一相处于对齿状态时,其余绕组一定处于错齿状态。

本实验的电机采纳两相混淆式步进电机,其内部上下是两个磁铁,中间是线圈,通了直流电此后,就成了电磁铁,被上下的磁铁吸引后就产生了偏转。

因为...中间连结的电磁铁的两根线不是直接连结的,是采纳在转轴的地点用一根滑动的接触片。

这样假如电磁铁转过了头,原来连结电磁铁的两根线恰好就相反了,所以电磁铁的N极S极就和从前相反了。

可是电机上下的磁铁是不变的,所以又能够持续吸引中间的电磁铁。

s7-200控制步进电机正转和反转程序

s7-200控制步进电机正转和反转程序

块:主程序作者:创建时间:2014.07.20 10:45:11 修改时间:2014.08.27 14:23:42符号变量类型数据类型注释 TEMP TEMP TEMPTEMP程序注释步进电机正转和反转控制程序网络 1正转(清零) 脉冲周期1msR MOV_WENOENOUT IN SM0.0脉冲口:Q0.012SMW68符号地址注释脉冲口Q0.0网络 2从Q0.0口发脉冲PMOV_BENOENOUT IN MOV_DW ENOENOUT IN PLSENOENQ0.X正转:I0.016#8D SMB67+400SMD720符号地址注释正转I0.0R 正转:I0.0方向:Q0.11符号地址注释方向Q0.1ON时反转,OFF时正转正转I0.0网络 4PMOV_BENOENOUT IN MOV_DW ENOENOUT IN PLSENOENQ0.X反转:I0.116#8D SMB67+400SMD720符号地址注释反转I0.1网络 5S 反转:I0.1方向:Q0.11符号地址注释反转I0.1方向Q0.1ON时反转,OFF时正转PMOV_BENO ENOUT INMOV_DWENO ENOUT INPLSENO ENQ0.X停止:I0.216#0SMB670SMD72符号地址注释停止I0.2创建时间:2014.07.20 10:45:11修改时间:2014.07.20 10:45:11符号变量类型数据类型注释EN IN BOOLININ_OUTOUTTEMP子程序注释网络标题网络 1网络注释创建时间:2014.07.20 10:45:11修改时间:2014.07.20 10:45:11符号变量类型数据类型注释TEMPTEMPTEMPTEMP中断程序注释网络 1网络标题网络注释。

实现步进电动机正反转的方法

实现步进电动机正反转的方法

实现步进电动机正反转的方法步进电动机是一种特殊的电动机,它可以按照一定的步长进行旋转,适用于需要精确控制位置和速度的应用。

步进电动机的正反转是指控制其旋转方向的操作,下面将介绍几种实现步进电动机正反转的方法。

1. 使用直流电源反向连接最简单的实现步进电动机反转的方法是通过改变电源的连接方式。

步进电动机通常有两种类型的线圈,分别记作A和B。

在正转时,电源的正极连接到A线圈,负极连接到B线圈;而在反转时,只需要将电源的正负极连接方式反过来即可。

这种方法的优点是简单易行,但需要手动操作电源连接,不适用于需要频繁反转的场景。

2. 使用电路切换正反转为了实现步进电动机的自动正反转,可以使用电路来切换电源连接方式。

这种方法通常使用继电器或开关来控制电源的连接,从而改变步进电动机的旋转方向。

通过控制继电器或开关的通断状态,可以轻松地实现步进电动机的正反转。

这种方法的优点是可以实现自动控制,但需要额外的电路设计和元器件,增加了系统的复杂度。

3. 使用驱动器控制正反转步进电动机通常需要使用驱动器来提供足够的电流和控制信号。

现代的步进电动机驱动器通常具有正反转控制功能,可以通过输入信号来控制步进电动机的旋转方向。

用户只需将控制信号设置为正转或反转,驱动器会自动控制步进电动机的旋转方向。

这种方法的优点是简单方便,无需额外的电路设计,适用于大多数步进电动机应用。

4. 使用编程控制正反转对于需要更精确控制步进电动机的应用,可以使用编程来实现正反转。

通过编写程序,可以根据需要控制步进电动机的旋转方向和步数。

编程控制的优点在于可以实现更复杂的运动模式和控制逻辑,可以满足各种应用的需求。

但这种方法需要具备一定的编程知识和硬件接口,对于初学者可能会有一定的难度。

总结起来,实现步进电动机正反转的方法有多种,可以根据实际需求选择合适的方法。

简单的方法包括改变电源连接方式或使用电路切换正反转;更先进的方法包括使用驱动器控制或编程控制。

控制步进电机正反转的加减速程序程序

控制步进电机正反转的加减速程序程序

控制步进电机正反转的加减速程序程序#include#define KeyPort P1#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P2^4;//定义锁存使能端口段锁存sbit LATCH2=P0^0;// 位锁存unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量sbit A1=P2^0; //定义步进电机连接端口sbit B1=P2^1;sbit C1=P2^2;sbit D1=P2^3;#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//DA相通电,其他相断电#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电unsigned char Speed=1;bit StopFlag;void Display(unsigned char FirstBit,unsigned char Num);void Init_Timer0(void);unsigned char KeyScan(void);/*------------------------------------------------uS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下 T=tx2+5 uS------------------------------------------------*/void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------mS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------主函数------------------------------------------------*/main(){unsigned int i=512;//旋转一周时间unsigned int n=0;unsigned char num,vo,v;Init_Timer0();Coil_OFF;while(1) //正向{num=KeyScan(); //循环调用按键扫描if(num==1)//第一个按键,速度等级增加{if(Speed<15)Speed=Speed+2;//+8}if(num==2)//第二个按键,速度等级减小{if(Speed>1)Speed=Speed-2;//-8}if(num==3)//第三个按键,电机停转{Coil_OFFStopFlag=1;}if(num==4)//第四个按键,电机启动{StopFlag=0;TR0=1;}if(num==5)//第五个按键,电机反转{TR0=0;TR1=1;}if(num==6)//第六个按键,电机正传{TR0=1;TR1=0;}vo=(0.25*(20-Speed)*64*32)/1000;v=60/vo;TempData[0]=dofly_DuanMa[v/10]; //分解显示信息,如要显示68,则68/10=6 68%10=8TempData[1]=dofly_DuanMa[v%10];}}/*------------------------------------------------显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

步进电机正反转程序一
#include &lt;reg51.h&gt; //51芯片管脚定义头文件
#include &lt;intrins.h&gt; //内部包含延时函数_nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码
uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反转编码
sbit K1 = P3^2; //正转
sbit K2 = P3^3; //反转
sbit K3 = P3^4; //停止
sbit BEEP = P3^6; //蜂鸣器
/********************************************************/
/*
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms
/*
/********************************************************/
void delay(uint t)
{
uint k;
while(t--)
{
for(k=0; k&lt;125; k++)
{ }
}
}
/**********************************************************/
void delayB(uchar x) //x*0.14MS
{
uchar i;
while(x--)
{
for (i=0; i&lt;13; i++)
{ }
}
}
/**********************************************************/
void beep()
{
uchar i;
for (i=0;i&lt;100;i++)
{
delayB(4);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
}
/********************************************************/ /*
/*步进电机正转
/*
/********************************************************/ void motor_ffw()
{
uchar i;
uint j;
for (j=0; j&lt;8; j++) //转1*n圈
{
if(K3==0)
{break;} //退出此循环程序
for (i=0; i&lt;8; i++) //一个周期转45度
{
P1 = FFW[i]; //取数据
delay(2); //调节转速
}
}
}
/********************************************************/ /*
/*步进电机反转
/*
/********************************************************/ void motor_rev()
{
uchar i;
uint j;
for (j=0; j&lt;8; j++) //转1×n圈
{
if(K3==0)
{break;} //退出此循环程序
for (i=0; i&lt;8; i++) //一个周期转45度
{
P1 = REV[i]; //取数据
delay(2); //调节转速
}
}
}
/******************************************************** *
* 主程序
*
*********************************************************/ main()
{
uchar r,N=64; //N 步进电机运转圈数
while(1)
{
if(K1==0)
{
beep();
for(r=0;r&lt;N;r++)
{
motor_ffw(); //电机正转
if(K3==0)
{beep();break;} //退出此循环程序
}
}
els
e if(K2==0)
{
beep();
for(r=0;r&lt;N;r++)
{
motor_rev(); //电机反转
if(K3==0)
{beep();break;} //退出此循环程序
}
}
else
P1 = 0xf0;
}
}
/********************************************************/。

相关文档
最新文档