做骑兵电影网站赚钱,编辑器,网页制作基础教程电子工业出版社,天津招标信息网一.接线、原理参考
共阴极接法
原理篇 arduino控制步进电机接线 https://blog.csdn.net/RickyWasYoung/article/details/132301936?spm1001.2014.3001.5501
接线篇 arduino控制步进电机接线控制[2] https://blog.csdn.net/RickyWasYoung/article/details/132405984?spm100…一.接线、原理参考
共阴极接法
原理篇 arduino控制步进电机接线 https://blog.csdn.net/RickyWasYoung/article/details/132301936?spm1001.2014.3001.5501
接线篇 arduino控制步进电机接线控制[2] https://blog.csdn.net/RickyWasYoung/article/details/132405984?spm1001.2014.3001.5501
二.电机参数
2.1参数示意图 图注
1.脉冲pps指每秒的脉冲数
2.线速度越大力矩特性越小。但是小电流难以支持快速度(电流小难以克服电机内阻)
3.单个脉冲间隔时长1(秒)/脉冲频率(pps)1000,000(微秒)/脉冲频率(pps)。
单个脉冲间隔时长/2是HIGH/LOW电位delay时长即单个脉冲间隔时间电位供电时间*2
4.个人测试1.0A下电机脉冲间隔时间100微秒即HIGH/LOW电位delay时长50微秒可行对应线速度254mm/s
2.2额外参数计算
360/步距角360/1.8200 即正常情况不细分情况下转一圈需要200步
因此当TB6600设置细分数为200时电机步数没有被细分
有效行程/整步步长25.40/0.02541000 即有效行程在不细分的条件下对应1000步也就是转5圈
三.代码能用
注意此电机正转时推杆缩回逆转时伸出
由于步进电缸/电推杆有限位作用推杆伸到头之后电机空转此时电机会产生强烈的振动导致步进电缸/电推杆不能像普通的旋转式步进电机可以一直转下去。
因此步进电缸/电推杆在没有限位传感器/计数传感器的条件下想精确定位很困难需要先转到头让推杆缩/伸到末端再进行控制因此提供以下代码使电机在初次运行时两个方向各转1001步前提是无细分即TB6600细分数为200细分条件下需要乘以细分倍数即细分数/200*1000
3.0. 代码零测试代码无循环使电机伸到最末端(定位到最末端)
然后静止
注意代码里digitalWrite(STEPPIN, HIGH/LOW);后面的delayMicroseconds()影响了电机旋转的角速度也影响了推杆伸缩的线速度
即
脉冲总数影响推杆伸缩总距离
脉冲频率影响推杆伸缩速度
删除第三段(//3.正转500步归中归中)即可定位到伸长最末端
#define STEPPIN 9 //脉冲位为9
#define DIRPIN 8 //方向位为8
#define bushu 300 //循环时的脉冲步数void setup() {pinMode(STEPPIN, OUTPUT);pinMode(DIRPIN, OUTPUT);Serial.begin(9600);//不论电机初始位置如何使电机超量程运动以达到复位效果
//1.正转1001步Serial.println(Forward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, HIGH);//方向引脚高电位正转// 正向转1001步for (int x 0; x 1001; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);//Microseconds是微秒digitalWrite(STEPPIN, LOW);delayMicroseconds(500);//Microseconds是微秒}Serial.println(Forward Ends);//串口监视器输出引号内容delay(1000); // 暂停1秒//2.逆转1001步 Serial.println(Backward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, LOW);//方向引脚低电位逆转// 反向转bushu脉冲for (int x 0; x 1001; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);//Microseconds是微秒digitalWrite(STEPPIN, LOW);delayMicroseconds(500);//Microseconds是微秒}Serial.println(Backward Ends);//串口监视器输出引号内容delay(1000); //暂停1秒//3.正转500步归中归中归中归中归中归中归中归中归中归中归中归中Serial.println(Forward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, HIGH);//方向引脚高电位正转// 正向转500步for (int x 0; x 500; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);digitalWrite(STEPPIN, LOW);delayMicroseconds(500);}Serial.println(Forward Ends);//串口监视器输出引号内容delay(1000); // 暂停1秒
}//循环
void loop() {}
3.1. 代码一使电机伸到最末端(定位到最末端)
然后以1000步缩-伸-缩-伸-…循环
#define STEPPIN 9 //脉冲位为9
#define DIRPIN 8 //方向位为8
#define bushu 1000 //循环时的脉冲步数void setup() {pinMode(STEPPIN, OUTPUT);pinMode(DIRPIN, OUTPUT);Serial.begin(9600);//不论电机初始位置如何使电机超量程运动以达到复位效果
//1.正转1001步Serial.println(Forward Begins);//串口监视器输出Forward BeginsdigitalWrite(DIRPIN, HIGH);//方向引脚高电位正转// 正向转1001步for (int x 0; x 1001; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);//Microseconds是微秒digitalWrite(STEPPIN, LOW);delayMicroseconds(500);//Microseconds是微秒}Serial.println(Forward Ends);//串口监视器输出Forward Endsdelay(1000); // 暂停1秒//2.逆转1001步 Serial.println(Backward Begins);//串口监视器输出Backward BeginsdigitalWrite(DIRPIN, LOW);//方向引脚低电位逆转// 反向转bushu脉冲for (int x 0; x 1001; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);digitalWrite(STEPPIN, LOW);delayMicroseconds(500);}Serial.println(Backward Ends);//串口监视器输出Backward Endsdelay(1000); //暂停1秒
}//循环
void loop() {
//1.正转//使电机向特定方向运动Serial.println(Forward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, HIGH);//方向引脚高电位正转// 正向转bushu脉冲for (int x 0; x bushu; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);digitalWrite(STEPPIN, LOW);delayMicroseconds(500);}Serial.println(Forward Ends);//串口监视器输出引号内容delay(1000); // 暂停一秒//2.逆转 //使电机向反方向运动Serial.println(Backward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, LOW);//方向引脚低电位逆转// 反向转bushu脉冲for (int x 0; x bushu; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);digitalWrite(STEPPIN, LOW);delayMicroseconds(500);}Serial.println(Backward Ends);//串口监视器输出引号内容delay(1000); //暂停一秒
}
3.2. 代码二使电机伸到最末端后缩500步(定位到中间)
然后以300步缩-伸-缩-伸-…循环
#define STEPPIN 9 //脉冲位为9
#define DIRPIN 8 //方向位为8
#define bushu 300 //循环时的脉冲步数void setup() {pinMode(STEPPIN, OUTPUT);pinMode(DIRPIN, OUTPUT);Serial.begin(9600);//不论电机初始位置如何使电机超量程运动以达到复位效果
//1.正转1001步Serial.println(Forward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, HIGH);//方向引脚高电位正转// 正向转1001步for (int x 0; x 1001; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);//Microseconds是微秒digitalWrite(STEPPIN, LOW);delayMicroseconds(500);//Microseconds是微秒}Serial.println(Forward Ends);//串口监视器输出引号内容delay(1000); // 暂停1秒//2.逆转1001步 Serial.println(Backward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, LOW);//方向引脚低电位逆转// 反向转bushu脉冲for (int x 0; x 1001; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);//Microseconds是微秒digitalWrite(STEPPIN, LOW);delayMicroseconds(500);//Microseconds是微秒}Serial.println(Backward Ends);//串口监视器输出引号内容delay(1000); //暂停1秒//3.正转500步归中归中归中归中归中归中归中归中归中归中归中归中Serial.println(Forward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, HIGH);//方向引脚高电位正转// 正向转500步for (int x 0; x 500; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);digitalWrite(STEPPIN, LOW);delayMicroseconds(500);}Serial.println(Forward Ends);//串口监视器输出引号内容delay(1000); // 暂停1秒
}//循环
void loop() {
//1.正转//使电机向特定方向运动Serial.println(Forward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, HIGH);//方向引脚高电位正转// 正向转bushu脉冲for (int x 0; x bushu; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);digitalWrite(STEPPIN, LOW);delayMicroseconds(500);}Serial.println(Forward Ends);//串口监视器输出引号内容delay(1000); // 暂停一秒//2.逆转 //使电机向反方向运动Serial.println(Backward Begins);//串口监视器输出引号内容digitalWrite(DIRPIN, LOW);//方向引脚低电位逆转// 反向转bushu脉冲for (int x 0; x bushu; x ) {digitalWrite(STEPPIN, HIGH);delayMicroseconds(500);digitalWrite(STEPPIN, LOW);delayMicroseconds(500);}Serial.println(Backward Ends);//串口监视器输出引号内容delay(1000); //暂停一秒
}
串口监视器显示
参考
1.步进电机转速和方向控制 https://blog.csdn.net/hhaowang/article/details/86359014?spm1001.2014.3001.5506