步进电机驱动程序

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

步进电机驱动程序

采用热转印制作 PCB ,电路采用2相推挽全桥驱动,单片机采用 STC54C12C5404

学生的设计要求:具体的模式如下:五种模式选择

一:停止。

二:顺时针转2分钟,停6分钟,循环;

三:逆时针转2分钟,停6分钟,循环;

四:顺指针转2分钟停6分钟,逆时针转2分钟停6分钟,循环;

五:顺指针转5分钟,逆时针转5分钟持续3小时,停9小時,循环。

请将模式四和五放在首选。用数字码显示模式

步进电机39BYG250

品牌:北斗型号: 39BYG 技术参数

步距角: 1.8 电流: 0.4 A 电阻: 27 Ω

重量: 0.130 kg 驱动电压: 12 V

相电流: 0.4 A 相数: 2 环境温度:130 ℃

1代表程式1,2代表程式2。。。。。

1位数码管,1个按钮

8圈/分,

每圈要分4步跳

//2010.8.26

/**************************************************

具体的模式如下:五种模式选择

0:停止。

1:顺时针转2分钟,停6分钟,循环;

2:逆时针转2分钟,停6分钟,循环;

3:顺指针转2分钟停6分钟,逆时针转2分钟停6分钟,循环;

4:顺指针转5分钟,逆时针转5分钟持续3小时,停9小時,循环。

模式四和五放在首选。用数字码显示模式

1代表程式1,2代表程式2。。。。。

1位数码管,1个按钮

8圈/分,68

每圈要分4步跳

;***************************************************************/ #include "STC12C5410AD.H"//头文件

#include "intrins.h"//头文件

#define uchar unsigned char//宏定义

#define uint unsigned int//宏定义

#define DPDR P2//并行数据接口定义

sbit key=P3^2;//按键

sbit AB=P3^5;

sbit CP=P3^3;

//sbit HHH=P1^6;

sbit CLL=P3^4;

bit Forward_Inversion_bit;//正转,//反转,标志

bit bit_bit;

//1:正转

//0:反转

bit Start_Stop_bit;//启动,停止,标志

//1:启动

//0:停止

//uchar count_2;

uint counter_3;

uchar counter_4;

uchar Forward_Tolerance_Counter;//正转容错记数器,保持步进电机不跳步uchar Inversion_Tolerance_Counter;//反转容错记数器,保持步进电机不跳步

uchar Mode_Selection;//模式选择////数码管显示值

//0:停止。

//1:顺时针转2分钟,停6分钟,循环;

//2:逆时针转2分钟,停6分钟,循环;

//3:顺指针转2分钟停6分钟,逆时针转2分钟停6分钟,循环;

//4:顺指针转5分钟,逆时针转5分钟持续3小时,停9小時,循环。

uchar Time_Counter_5;//时间计数器:200*5=1秒

uchar Time_Counter_60;//时间计数器:1秒*60=1分钟

uchar Time_Counter_x;//时间计数器:1分钟*x=x分钟

uchar Time_3_by_3;//时间计数器:3小时*3=9小时

uchar Time_30_by_30;//时间计数器:3小时*3=9小时

#define ISP_IAP_BYTE_READ 0x01//读

#define ISP_IAP_BYTE_PROGRAM 0x02//编程

#define ISP_IAP_SECTOR_ERASE 0x03//扇区擦除

#define ENABLE_ISP 0x85//等待时间,和对ISP_CONTR设置初值

#define EEPROM_ADDRESS_1 0x2800//第一扇区地址 2800-29FF

#define EEPROM_ADDRESS_2 0x2A00//第二扇区地址 2A00-2BFF

#define EEPROM_ADDRESS_3 0x2A01//第二扇区地址 2A00-2BFF

//#define EEPROM_ADDRESS_3 0x2C00//第三扇区地址 2C00-2DFF

//#define EEPROM_ADDRESS_4 0x2E00//第四扇区地址 2E00-2FFF

uchar DATA_H_ADDRESS;//单片机内部 EEPROM 地址高字节

uchar DATA_L_ADDRESS;//单片机内部 EEPROM 地址低字节

uint sfr_16;//双字节缓存对单片机内部 EEPROM 地址字节的处理

uchar code DispTab_Digital[]={0xa0,0xf3,0x34,0x32,0x63,0x2a,0x28,0xb3,0x20,0x22,0xff};//数码管显示

//0;1;2;3;4;5; ;

uchar code DispTab_Inversion[]={0x60,0x09,0x12,0x84};//反转

//d=+,c=-;

//b=+,a=-;

//c=+,d=-;

//a=+,b=-;

/*

uchar code DispTab_Forward[]={0xa3,0x3a,0xac,0xca};//正转

//a=-,b=+;1010 0011=0xa3

//c=-,d=+;0011 1010=0x3a

//a=+,b=-;1010 1100=0xac

//c=+,d=-;1000 1010=0xca*/

uchar code DispTab_Forward[]={0x84,0x12,0x09,0x60};//正转

//a=-,b=+;1010 0011=0xa3

//c=-,d=+;0011 1010=0x3a

//a=+,b=-;1010 1100=0xac

//c=+,d=-;1000 1010=0xca

void delay(uint z)//延时为 1ms

{

uchar x,x1;

for(;z>0;z--)

{

for(x=0;x<114;x++)

{

for(x1=0;x1<1;x1++);

}

}

}

void init()

{

P1M1=0xff;// 设为强上拉0101 0101

P2M1=0xff;// 设为强上拉0101 0101

相关文档
最新文档