步进电机驱动程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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