- 打卡等级:偶尔看看I
- 打卡总天数:15
- 最近打卡:2025-03-26 09:09:59
中级会员
- 积分
- 351
|
发表于 2024-8-27 10:42:38
|
显示全部楼层
#include "STC8Hxxx.h" //包含此头文件后,不需要再包含"reg51.h"头文件
#define MAIN_Fosc 24000000L //定义主时钟
/************* 功能说明 **************
程序使用
AIN1-P1.1
AIN2-P1.2
BIN1-P1.5
BIN2-P3.4
驱动步进电机
******************************************/
//typedef unsigned char u8;
//typedef unsigned int u16;
//typedef unsigned long u32;
sbit A1F = P1^1;
sbit A2F = P1^2;
sbit B1F = P1^5;
sbit B2F = P3^4;
sbit SLEEP = P1^4;
sbit DECAY = P1^0;
sbit up = P3^2;
sbit down = P3^3;
sbit slow_down = P3^5;
sbit nFAULT = P1^3;
#define Coil_A1F {A1F=1;A2F=0;B1F=0;B2F=0;}//A相通电,其他相断电
#define Coil_A2F {A1F=0;A2F=1;B1F=0;B2F=0;}//B相通电,其他相断电
#define Coil_B1F {A1F=0;A2F=0;B1F=1;B2F=0;}//C相通电,其他相断电
#define Coil_B2F {A1F=0;A2F=0;B1F=0;B2F=1;}//D相通电,其他相断电
#define Coil_OFF {A1F=0;A2F=0;B1F=0;B2F=0;}//全部断电
unsigned int Step;
unsigned int Speed;
//delay_ms(unsigned char ms);
//========================================================================
// 函数: void delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2021-3-9
// 备注:
//========================================================================
void delay_ms(unsigned int ms)
{
unsigned int i;
do{
i = MAIN_Fosc / 10000;
while(--i); //10T per loop
}while(--ms);
// {while(ms--);}
}
/******************** 驱动函数 **************************/
void Driver()
{
if(Step == 4) Step = 0;
switch(Step)
{
case 0: A1F = 1;A2F = 0;B1F = 0;B2F = 0; break;
case 1: A1F = 0;A2F = 0;B1F = 1;B2F = 0; break;
case 2: A1F = 0;A2F = 1;B1F = 0;B2F = 0; break;
case 3: A1F = 0;A2F = 0;B1F = 0;B2F = 1; break;
}
Step++;
}
/******************** 主函数 **************************/
void main(void)
{
int i = 0;
P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能
P1M1 = 0x00;
P1M0 = 0xff; //设置P1推挽输出
P3M1 = 0x2c; // 0 0 1 0 1 1 0 0
P3M0 = 0xd3; //设置P3推挽输出和高阻输入 1 1 0 1 0 0 1 1
Speed=20; //调整速度 1900- 2000 2200 2400 较快 有抖动2500较慢
DECAY = 0;
// nFAULT = 0;
SLEEP = 1;
while(1)
{
if(up == 0)
{
if(up == 1)
{
for(i=0;i<50;i++)
{
Driver();
delay_ms(Speed);
}
}
}
}
}
其中P3.2 P3.3 P3.5为按键开关,想实现按下up键,电机转90度,但是实际怎么一直实现不了,不是一个脉冲1.8度吗。我这里发了循环50次,不是应该转90度吗 |
|