单片机控制的步进电机不转

作者&投稿:战昌 (若有异议请与网页底部的电邮联系)
关于51单片机驱动l298n控制步进电机。步进电机不转只抖得问题~

如果程序无问题,应是步进电机四条输入线接错了。
将A+、A-或B+、B-其中一组的两条线对调(如A+、A-对调或B+、B-对调)便行。对调后如果转动正常了,而正反转反过来时,再将两组线的+和-对调。

把驱动部分代码贴上来看看,代码没问题就是驱动电流或电压不够

如果是感觉到里面的转子在转动了,可是外面的外芯就是不转,可能是因为你的延时太短,造成步进电机扭转力小,转不动.可将 delay()延时增大.比如delay(50000).另外你的应该是四项电机,使用a->ab->b->bc->c->cd-d-da比较好,这样不禁分频比增加,步进电机的扭矩也增加了.相应uchar step_table[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

步进电机应用广泛,
例如打印机、磁盘驱动器、玩具、汽车雨刷、手机震动、机械夹具、刻录机等各种机械控制场合
一些概念:
拍数N
定子控制绕组每改变一次通电方式,即为一拍
一个磁场通电周期是 A-B-C-D-A
完成一个磁场周期性变化所需脉冲数,
也指电机转过一个齿距角所需脉冲数,用N表示
拍数又等于相数的1倍或2倍,
以四相电机为例,
有4相4拍, A-B-C-D-A...
4相8拍, A-AB-B-BC-C-CD-D-DA-A...

齿距角θz
一个通电循环周期(比如4拍)转子转过一个齿距角
齿距角又等于360除以转子齿数Z, θz=360/Z

步距角θs
步距角,即在没有减速齿轮的情况下,对于一个脉冲信号,转子所转过的机械角度.
也就是说,每一拍转子转过的角度称之为步距角,通常用θs表示
θs=齿距角/拍数
θs=360/(N*Z)
 
步距角的误差不会长期积累,只与输入脉冲信号数相对应,
可以组成结构较为简单而又具有一定精度的开环控制系统,
也可以在要求更高精度时组成闭环系统。

转速X
每分钟电机转了多少转?设脉冲频率f
一个脉冲,转子转过角度为1/(ZN),
X=60*f/(ZN) 拍数与齿数表示法
=(f*θs)/6 步距角表示法
单片机控制舵机代码:

#include "my51.h"

//4相8拍
u8 code tableCCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时针旋转相序表
u8 code tableCW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //顺时针旋转相序表

sbit S3=P3^5; //反转 按键
sbit S4=P3^6; //正转 按键
sbit S5=P3^4; //停止 按键

void motorTurn_ccw() //转1圈,逆时针
{
u8 i,j;
for(j=0;j<8;j++) //电机内部的转子旋转一周
{
if(S5==0) //按键没处理抖动
{
break; //如果停止键按下,退出此循环
}
for(i=0;i<8;i++) //旋转45度, 8*5.625°=45°
{
P1=tableCCW[i];
delayms(2); //调节转速
}
}
}

void motorTurn_cw() //转1圈 ,顺时针
{
u8 i,j;
for(j=0;j<8;j++) //8*45°=360°
{
if(S5==0)
{
break; //如果停止键按下,退出此循环
}
for(i=0;i<8;i++) //旋转45度,8*5.625°=45°
{
P1=tableCW[i];
delayms(2); //调节转速
}
}
}

void main()
{
u8 r;
u8 N=64; //减速步进电机,减速比1/64,所以N=64时,步进电机外主轴转一圈
P1=0xff; _nop_();
ledLock= LOCK; //我们的P1口接有8个led灯,先锁定,不要让它们亮 ,节能环保
while(1)
{
if(S3==0) //按键了
{
for(r=0;r<N;r++)
{
motorTurn_ccw(); //电机逆时针转
if(S5==0)
{
break; //俺S5键立马停止
}
}
}
else if(S4==0)
{
for(r=0;r<N;r++)
{
motorTurn_cw(); //电机顺时针转
if(S5==0)
{
break;
}
}
}
else
{
P1=0xf0; //平时也是停止的
}
}
}

有几种可能
1)延时的时间不够:现在单片机指令在us级的很多,800us的步长,对于很多步进电机来说力矩是不够的
2)步进电机的驱动方式不对:需要搞清楚是几相几拍驱动的,不一定是A-B-C-D的
3)可能只是驱动的步数不够:步进电机动作4步一般用人眼是很难识别出来的,你增加到200步试试看(我用过的步进电机是每动作一步,步进电机仅动作0.9度,人眼很难发觉出来)

看哈你的,步进电机是,几线,几相的,再找清楚相序,按ABCD 或A A'B B',给脉冲,就转了。如果不知道相序,就一根一根的试喽。

延时长一点。。。试试。。。for(;;)外面套一层while(1);下面是用中文输入法打的。。。程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar step_table[]={0x01,0x02,0x04,0x08};
void delay(uint a)
{unsigned int i;
i=65536;
while(i--);
while(a--);

}

void main()
{ uchar i;
while(1)
{
for(i=0;i<4;i++)
{
P1=step_table[i];
delay(65536);
}
}
}


我想问一下,51单片机通过环形脉冲分配器和功率放大,控制电机?
51单片机可以通过多个IO口经功率放大直接控制步进电机的各个绕组,另外一种方法是单 片机输出方向信号和串行脉冲信号给控制器,再由控制器进行环形脉冲分配和功率放大,最后去驱动步进电机。

关于汽车仪表的步进电机
步进电机驱动器的工作原理 步进电机广泛应用于调节系统。它能将脉冲信号转换成角位移,可用作电磁制动轮、电磁微分器或角位移发生器等。有时候,从一些旧设备上拆下的步进电机(大部分没有损坏)需要用于其他用途,大部分需要自己设计驱动器。本文简要介绍了从一台老式日本打印机上拆下的步进电机驱动器的设计...

混合式步进电机的原理是什么,有什么优点?
B相与A相的情况类似。转子的两段齿槽相互错开半个齿距(见图5.1.5),中间用环形永久磁钢连接,两段转子的齿的磁极相反。根据反应式电机同样的原理,电机只要按照A—B—A—B—A或A—B—A—B—A的顺序通电,步进电机就能逆时针或顺时针连续旋转。显然,同一段转子片上的所有齿都具有相同极性,而...

单片微机控制应用技术实操指导书内容简介
还有打印机的操作演示。更为精彩的是,书中还提供了14个综合应用实例,涉及键盘扫描显示、秒表定时器的设置、5位计数器的设计、串行口多机通信技术、LED点阵和LCD点阵模块的汉字显示、步进电机控制技术、以及利用DS18B20进行精确温度控制等,这些实例不仅涵盖了基础编程和接口设计,还给出了实用电路设计、高效...

这个步进电机怎么用
用户需根据自己的负载选择合适的响应频和升降速曲线,找到一条理想的曲线并不容易,一般需要多次试机才行。指数曲线在实际软件编程过程中比较麻烦,一般事先算好时间常数存储在计算机存储器呢,工作过程中直接选取。六问: 步进电机发烫,正常温度范围是多少?步进电机温度过高会使电机的磁性材料退磁,从而...

...谁做的毕业设计是(基于单片机的车削数控运动控制)啊,或者差不多的...
该模块主要实现加工程序的处理(包括程序语法检查、程序编译、数据处理等)、插补运算步进电机的控制及自动换刀控制等。 ③参数设置 该模块主要实现刀具补偿参数设置、间隙补偿参数设置等自动加工参数的设置。 ④编辑模块 该模块主要实现零件加工程序的键盘编辑、输入。 ⑤通信模块 该模块主要实现与上位机或其他智能设备的串...

步进电机与伺服电机的区别是什么?详细点啊
10,我想用±10V或4~20mA的直流电压来控制步进电机,可以吗? 可以,但需要另外的转换模块。 11, 我有一个的伺服电机带编码器反馈,可否用只带测速机口的伺服驱动器控制? 可以,需要配一个编码器转测速机信号模块。 12, 伺服电机的码盘部分可以拆开吗? 禁止拆开,因为码盘内的石英片很容易破裂,且进入灰尘后,寿命和...

步进电机驱动器采用DSP芯片的作用?
随着世界对高效、节能和低噪音的呼声高涨,DSP正由高档工业马达控制领域向整个马达控制市场扩张。汉德保自主研发的ASD878R两相步进电机驱动器基于DSP控制芯片,与独特的控制电路结合。是新一代智能数字式步进电机驱动器,用户可设置1~128细分。低中高速运行都很平稳,几乎没有振动与噪音,完全解决步进电机...

如何正确选择伺服电机和步进电机
10,我想用±10V或4~20mA的直流电压来控制步进电机,可以吗? 可以,但需要另外的转换模块。 11, 我有一个的伺服电机带编码器反馈,可否用只带测速机口的伺服驱动器控制? 可以,需要配一个编码器转测速机信号模块。 12, 伺服电机的码盘部分可以拆开吗? 禁止拆开,因为码盘内的石英片很容易破裂,且进入灰尘后,寿...

步进电机怎么抗干扰?
步进电机抗干扰是否需要给驱动器电源加滤波器,这确实是一个值得探讨的问题。首先,我们得明白,步进电机在运行过程中,可能会受到各种内外因素的干扰,比如电源波动、电磁噪声等。这些干扰可能会导致步进电机的运行不稳定,甚至出现丢步、抖动等问题。所以,采取一些抗干扰措施是非常必要的。然后,关于是否需要...

临海市15850697329: 单片机控制的步进电机不转 -
枞怕盐酸: 如果是感觉到里面的转子在转动了,可是外面的外芯就是不转,可能是因为你的延时太短,造成步进电机扭转力小,转不动.可将 delay()延时增大.比如delay(50000).另外你的应该是四项电机,使用a->ab->b->bc->c->cd-d-da比较好,这样不禁分频比增加,步进电机的扭矩也增加了.相应uchar step_table[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

临海市15850697329: 我写单片机步进电机程序,按键按下去,电机怎么不转,希望那个高手,解释小弟 -
枞怕盐酸: #include#define uchar unsigned char#define uint unsigned int uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //反转 uchar code FFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //正转 uint i=0,j=0; sbit zz=P2^0;//正转按键 sbit fz=P2...

临海市15850697329: 求助,步进电机与单片机相连不转只有微弱震动为什么 -
枞怕盐酸: 求助,步进电机与单片机相连不转只有微弱震动为什么 你是不是用的那种5v和小的电机,你用手感觉一下步进电机是不是在震动,如果在震动可是没转可能是,你驱动的节拍太快了,适当加点延时尝试

临海市15850697329: 我的AVR单片机控制的步进电机不转,“吱吱”响! -
枞怕盐酸: 呃,先从硬件上找找原因,检查下是不是电机的线序搞错了,如果线圈接反的话,通常会使电机颤抖~~ 还有就是,是不是单片机输出的频率太高了,导致步进电机不能响应如此高的频率而停转.建议你调试时将步进脉冲以极缓慢的顺序发出去(比如一秒一个脉冲)来观察电机转动是否正常;正常的话,那就在程序里写一个加速的过程就好了~

临海市15850697329: 为什么我用单片机控制步进电机启动时当定时时间到时步进电机不开始转(求详细解答) -
枞怕盐酸: 你是不是用的那种5v和小的电机,你用手感觉一下步进电机是不是在震动,如果在震动可是没转可能是,你驱动的节拍太快了,适当加点延时尝试

临海市15850697329: 单片机控制步进电机动一下就不动了? -
枞怕盐酸: 一般都是驱动不对

临海市15850697329: 用8051单片机驱动4相6线步进电机,上电以后电机有声音不转动,这是为什么?
枞怕盐酸: 你的程序看上去没有问题.不能正常运转的可能性有以下几个方面: 1》通电相序不正确.可改变连线也可以改变程序.(后面传个容易调的程序供参考) 2》UNL2803电流较小,不能提供1.2A电流,建议给马达上DC12V电源,在正电源线上串...

临海市15850697329: 步进电机不会转,不知道是什么原因? -
枞怕盐酸: 单片机控制输出脉冲,驱动是L297+L299,步进电机不会转,不知道是什么原因,电机应该是没问题的

临海市15850697329: 利用单片机控制四相步进电机采用一相励磁方式,采用不同延时电机有时不转.
枞怕盐酸: 时间常数x越小,延迟时间越短,步进电动机应当转得越快. 时间常数x再小一些时步进电动机不转,可能是超出最高启动频率,步进电动机跟不上而不转; 时间常数x再大一些时步进电动机不转,可能是发生机械共振而不转; 一相励磁方式也叫做单拍通电方式.一般说,无论对于三相步进电动机、四相步进电动机还是更多相的步进电动机,单拍通电方式都容易产生共振.选用双拍通电方式或单-双拍通电等方式有助于避免共振.

临海市15850697329: 用单片机通过驱动器给步进电机输入脉冲信号为什么步进电机不转 -
枞怕盐酸: 在程序中,没有看到你使用你定义的正反转表格.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网