步进电机的一点收获

编程入门 行业动态 更新时间:2024-10-25 16:19:29

<a href=https://www.elefans.com/category/jswz/34/1754351.html style=步进电机的一点收获"/>

步进电机的一点收获

型号:17HD40007-22B 步进电机
两相四拍,步距角为1.8°

最终代码:

#include <reg52.h>sbit LeftA1 = P1^0;
sbit LeftA2 = P1^1;
sbit LeftB1 = P1^2;
sbit LeftB2 = P1^3;
sbit EnLeft = P2^3;sbit RightA1 = P1^4;
sbit RightA2 = P1^5;
sbit RightB1 = P1^6;
sbit RightB2 = P1^7;
sbit EnRight = P2^4;unsigned char T0RH;
unsigned char T0RL;
signed long LeftBeats = 0;
signed long RightBeats = 0;void ConfigTimer0(unsigned int ms);
void StartLeftMotor(signed long angle);
void StartRightMotor(signed long angle);unsigned char code BeatCode[8] = {//不同的引脚驱动代码不一样0xE,0xA,0xB,0x9,0xD,0x5,0x7,0x6
};void main()
{EA = 1; EnLeft = 0;EnRight = 0;ConfigTimer0(3);//此值越大,转的越慢StartLeftMotor(360*25);//调整转的角度StartRightMotor(360*25);while (1);
}void StartRightMotor(signed long angle)
{EnRight = 1;EA = 0;RightBeats = (angle*400)/360;EA = 1;
}void StartLeftMotor(signed long angle)
{EnLeft = 1;EA = 0;LeftBeats = (angle*400)/360;EA = 1;
}void LeftMotor()
{unsigned char tmp; static unsigned char index = 0; if(LeftBeats != 0){if(LeftBeats > 0){        index++;                   index = index & 0x07;LeftBeats--;       } else{index--;index = index & 0x07;LeftBeats++;} tmp = P1;                   tmp = tmp & 0xF0;            tmp = tmp | BeatCode[index];P1  = tmp;               }else{P1 = P1 | 0x0F;}  
}void RightMotor()
{unsigned char tmp;static unsigned char index = 0;if(RightBeats != 0){if(RightBeats > 0){index--;index = index & 0x07;RightBeats--;}else{index++;index = index &0x07;RightBeats++;}tmp = P1;tmp &= 0x0F;tmp |= (BeatCode[index]<<4);P1 = tmp;}else{P1 = P1 | 0xF0;}
}void ConfigTimer0(unsigned int ms)
{unsigned long tmp;tmp = 12000000/12;tmp = (tmp * ms)/1000;tmp = 65536 - tmp;tmp = tmp + 2;T0RH = (unsigned char)(tmp >> 8);T0RL = (unsigned char)tmp;TH0 = T0RH;TL0 = T0RL;TMOD &= 0xF0;TMOD |= 0x01;ET0 = 1;TR0 = 1;        
}
void InterruptTimer0() interrupt 1
{   TH0 = T0RH;TL0 = T0RL;LeftMotor();RightMotor();                                                                                                                                              
}

注意启动频率,不要那么快,不然会跟不上,出现乱颤的情况。

如果没有细分,那么步进电机每接受一个脉冲,就会转动一个步距角。.当我们不细分的时候,假如步进电机是1.8度的话,那就是二百个脉冲每转360度,二个细分就是四百个,总之就是再次细分的意思,精度更高

很明显,在此处我是进行了细分。变成了二相八拍,步距角更加精确变为0.9

附一张关于步进参数图:

驱动数组书写原理:

对比教程28BYJ

常见的5线4相的步进电机 24BYJ48
因为24BYJ48 步进电机是自带 1/64 减速比的步进电机,也就是内部转64圈外部齿轮转一圈,所以步距角相对别的步进电机而言,更加精确

步距角:5.625 / 64 = 0.087度 (也就是说理论上,你给一个脉冲,电机外部轴转动0.087度) 减速比 :1/64

步进电机的 扭矩 和 其驱动方式 驱动频率 输入电压 有着直接的关系,以28BYJ48为例

输入电压(V) 频率(HZ) 转矩(gf.cm) 5 100

= 250 12 100 >=500 驱动方式:四相八拍驱动

一个电机你所采用的励磁方式不同,你所得到的步进角也是不一样的,参数上所说的步进角,表示的是用四相八拍这种励磁方式的所能达到的最大精度。

28BYJ有减速比1:64,也就是里面转64圈,外面转一圈。而里面转一圈需要64节拍,转64圈需要4096拍。
而由于制造误差实际大概为4076拍

更多推荐

步进电机的一点收获

本文发布于:2024-02-11 12:50:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1681085.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:步进电机

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!