问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

步进电机用单片机控制转动

发布网友 发布时间:2022-04-30 16:10

我来回答

3个回答

热心网友 时间:2022-06-27 03:40

步进电机的编程步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。采用的步进电机为24或28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)等。28BYJ48步进电机为四相八拍,其相序表如下
3 2 1 0 对应A口输出值
1 0 0 0 1 01H
2 0 0 1 1 03H
3 0 0 1 0 02H
4 0 1 1 0 06H
5 0 1 0 0 04H
6 1 1 0 0 0CH
7 1 0 0 0 08H
8 1 0 0 1 09H 步进电机为24或28BYJ48型四相八拍电机步进电机相序28BYJ48步进电机为四相八拍,其相序表如下
3 2 1 0 对应A口输出值

1 0 0 0 1 0 1H
2 0 0 1 1 0 3H
3 0 0 1 0 0 2H
4 0 1 1 0 0 6H
5 0 1 0 0 0 4H
6 1 1 0 0 0 CH
7 1 0 0 0 0 8H
8 1 0 0 1 0 9H 编程如下:#include <reg52.h> //52芯片管脚定义头文件
#include <intrins.h> //内部包含延时函数 _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<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 步进电机运转圈数 因为我们的步进电机是减速步进电机 减速比是1/64 所以这里N=64时 步进电机外部的主轴转1圈
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;} //退出此循环程序
}
}
else
P1 = 0xf0;
}
}/********************************************************/

热心网友 时间:2022-06-27 03:41

#include "reg52.h"sbit P00=P0^0;sbit P01=P0^1;sbit P02=P0^2;sbit P03=P0^3;sbit P07=P0^7; void main(){ P00=1; P01=1; P03=1; P02=1; P07=1; TMOD=0x01; TH0=(-1500/256); TL0=(-1500%256); TR0=1; for(;;){ TH0=(-1500/256); TL0=(-1500%256); do{}while(!TF0); P07=!P07; TF0=0; }}
这个是我以前弄得一个步进电机的驱动程序,应该很好看懂,不是很深,关键你是要先搞清楚步进电机的原理,这样你只要在对应那对引脚上面给电,他就可以转动啦。

热心网友 时间:2022-06-27 03:41

楼上说的还行,建议你用定时器的方法处理,电机。那样效果好。#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code FFW[]=
{
0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09

}; sbit K1 = P3^0;
sbit K2 = P3^1;
sbit K3 = P3^2;
uchar TT0=0;
uchar TT1=0;void timer0() interrupt 1 //定时中断0
{
TH0=TT0;//中断时间50MS
TL0=TT1; P1 = FFW[j];
j++;
if(j==8)
j=0;}
void main()
{

P3=0xff;
TMOD=0x01;
EA=1;
ET0=1; if(!P3_1)
{
TT0=0xD8;
TT1=0xF0;
//10毫秒
} if(!P3_2)
{
TT0=0x5B;
TT1=0xB1;
//20毫秒
} if(!P3_3)
{
TT0=0x4F;
TT1=0x3C;
//50毫秒
}}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中导条约是什么意思 南京的事业单位待遇好吗 condition ...个登陆和注册信息的源代码,最简单的就可以,不需要数据库的那种... 个旧附近的vba编程培训机构哪家比较正规? 个旧附近的.Net培训班? 个旧附近的编程培训班? 个旧附近哪里有编程培训在哪里? 湖口哪里可以学电脑电脑技术哪里可以学习 个旧北大青鸟少儿编程培训学费多少? 步进电机通电不转? 关于步进电机的问题 可以把液晶电视当成电脑显示器与音响的结合吗 电脑显示器可以当电视用吗咪咕合子能不能用? 蛋挞液需要纯蛋黄吗 用电脑主机连接电视,电视当做显示屏用,能用电视自带的音响吗? 电视当电脑显示器。电视自带喇叭可以用吗? 制作蛋挞为什么不用蛋清 葡式蛋挞为什么只加蛋黄? 农村户户通卫星电视机上,在播放时出现该频道未解锁,这样的问题怎么处理 中国广播电视直播卫星户户通长期不看会怎么样 户户通几个月没收看,再看就不能看了。咋办? 卫星电视被锁了是什么样子的?怎么解锁? 微信好友在千里之外能显示运动步数吗? 户户通好久没看了,没有节目咋办? 户户通接收机锁住了怎么解锁 户户通到期了如何解锁 如何认识无价之宝——潜意识中的速成自信? 比茶叶更好的提神产品是什么?‘ 速成课、救死扶伤,速溶咖啡,英文翻译 单片机控制步进电机 单片机负载太大 步进电机抖动 通电后为什么步进电机不转呢? 哪位给我一段控制步进电机的C程序示例?最近学习这个,找不到合适的例子... 42减速步进电机运行时产生振动, EPSON LQ-630K打印及一直发出吱吱声音却不能打印是什么原因 设计一个三相步进电机发生器 联想打印机突然不能打印了出现咔咔的声音? 求单片机控制步进电机的的c程序 单片机STC89C52 如何控制舵机 求单片机控制步进电机简单的c程序 怎么用C语言控制步进电机 通过一个按键控制电机的速度,该怎样? 4相5线步进电机 90度后停顿5秒继续走怎么改? 海信空调1p26什么意思? 今日中国银行外汇汇率表2017 8月8日中行人民币对美元汇率多少 海信空调1p26是1p吗 为什么海信两个型号空调后面小型号都是1p26.就是一级能效那两款 海信空调1P26与1P41那个好 2010年8月1日中国人民银行外汇牌价(基准价) 空调23是小1P26是大1P请问正1P是25的吗?