基于51单片机控制步进电机正反转
2023-06-13 09:11:56 时间
大家好,又见面了,我是你们的朋友全栈君。
基于51单片机控制步进电机正反转
此次采用uln2003模块来链接步进电机; ## 步进电机工作原理 步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。 步进电动机的结构形式和分类方法较多,一般按励磁方式分为磁阻式、永磁式和混磁式三种;按相数可分为单相、两相、三相和多相等形式。
因此我们可以控制单片机I/O口的电平来控制步进电机,此次设计中采用四相单拍工作方式,在这种工作方式下,A、B、C、D 三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。因此这种通电方式叫做四相单四拍工作方式。
- 电机正转代码 unsigned char code tableZ[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
- 电机反转代码 unsigned char code tableF[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
代码如下
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code tableZ[8]={
0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
unsigned char code tableF[8]={
0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//²½½øµç»úzheng
void delay(unsigned int t);
sbit S3=P3^4; //反转
sbit S4=P3^5; //反停
sbit S5=P3^6; // 正停
//正转写入数据
void motor_z()
{
unsigned char i,j;
for (i=0; i<8; i++)
{
if(S5==0){
break;}
for(j=0;j<8;j++){
P1 = tableZ[i]&0x1f;
delay(50);
}
}
}
//反转写入数据
void motor_f(){
unsigned char i,j;
for (i=0; i<8; i++)
{
if(S4==0){
break;}
for(j=0;j<8;j++){
P1 = tableF[i]&0x1f;
delay(50);
}
}
}
void delay(unsigned int t)//延时函数
{
unsigned int k;
while(t--)
{
for(k=0; k<60; k++)
{
}
}
}
void main()
{
while(1){
motor_z();
if(S3 == 0){
motor_f();
}
}
}
protel仿真图如下
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138088.html原文链接:https://javaforall.cn
相关文章
- 设计分享|单片机矩阵键盘控制条形LED显示
- 单片机控制步进电机-AVR详细程序
- 51单片机控制步进电机-电路连接[通俗易懂]
- Springboot+Vue+shiro实现前后端分离、权限控制
- springboot手动控制mysql事务
- 设计分享|单片机4*4矩阵键盘控制LED灯
- TRICONEX AI3351 以控制来自特定IP地址的数据访问
- Linux C编程:利用进程ID控制多进程运行(linuxc进程id)
- Linux实现精准的网络控制(linux网络控制)
- Oracle存储过程中的循环控制(oracle过程循环)
- 量子位保真度高达99.3%!英特尔和QuTech发表在《Nature》的论文证明高于1开尔文实现双量子位控制
- Redis时间超时控制让数据不过期(redis过期场景)
- CSS控制图片大小-适应宽度
- js控制输入框获得和失去焦点时状态显示的方法