Arduino:控制步进电机/旋转台

这两天入门arduino,用来控制旋转台。arduino集成度高,可以快速出效果,这一点确实真切感受到了。做的过程中编程不难,麻烦的是找资料,官网的电机转台只给了一张表,刚接触有点看不懂。 

上图是使用到的DB9,那个厂家的就找他们的说明吧,图一的颜色分配和图二的不一致。是有一套颜色标准的,但是百度上的图和这厂家的图颜色分配有出入……

 

 

只需要用到四个引脚,对应端口接四个到步进电机驱动器即可。总体连接如下图,ENA端口可不接,DIR-与PUL-最好共地,试了下不共地问题不大。这里使用到的电压源给到24V左右。

 

转动比是指电机转动90圈,台面转动1圈,也就是说电机转一圈,台面转4°。步距角是指一个脉冲电机转动1.8°,电机需要200个脉冲才能转一圈,总共90*200=18000个脉冲转台才转一圈,在算上步进电机驱动器的细分精度(该实验选择的细分进度为4),那么电机需要800个脉冲才能转一圈,总共90*800=72000个脉冲转台才转一圈,下图是步进电机驱动器的设置对照表。

 

上位机指令:

格式:rotxxxx

bit

num

说明

1~3

rot

指令起始位rotate

4

0

自行设置

1

使用默认顺时针旋转5°,后续bit位无效

5

0

设置逆时针旋转

1

设置顺时针旋转

6~7

theta

一次旋转角度

代码:

/
//            	       参数定义                      
/
#define Moto1_drivel 3			
#define Moto1_drive2 4
#define Moto1Dir1_negative 5
#define Moto1Dir1_positive 6

int theta;

///
//              		起始定义                         //
///
void setup()
{
	pinMode(Moto1_drivel,OUTPUT);		//设置引脚为输出引脚
	pinMode(Moto1_drive2,OUTPUT);
	pinMode(Moto1Dir1_negative,OUTPUT);
	pinMode(Moto1Dir1_positive,OUTPUT);//定义波特率9600
	Serial.begin(9600);  
}


///
//              		主循环                               //
///
void loop()		//主循环
{ 
if(Serial.available()){
  command ();
  rotate(theta);
}
else
 delay(1000);
}


// 800脉冲电机转一圈
// 电机转一圈转台转4°
// 200个脉冲转台转动1°,rotate_unit为转一度;太快了电机扛不住

void rotate_unit() 
{
int i;
 for(i=0;i<200;i++) { 
 digitalWrite(Moto1_drivel,HIGH);
 delayMicroseconds(500);
 digitalWrite(Moto1_drivel,LOW);
 delayMicroseconds(10);
 }
}


//              转多少度                          //

void rotate(int theta)
{
  u32 k;
  char str_temp[50] = {0};
  for (k = 1; k <= theta; k++)
  {
    rotate_unit();
  }
}



//              分析上位机的命令                   //

void command()
{
  char buffer[8] =  {0};  
  for(int j=0;j<8;j++){
	if(Serial.available()){
		buffer[j]=Serial.read();
	}
  }
  if(buffer[0]==114&&buffer[1]==111&&buffer[2]==116){
	if(buffer[3]==49) {//第一位为1则设置默认选项,顺时针转5° 
		digitalWrite(Moto1Dir1_negative,HIGH);
		theta=5;
		Serial.print("direction:");
		Serial.println("顺时针");
		Serial.println("theta=5");    
	}
	
	if(buffer[3]==48){
		if(buffer[4]==49)   { 
		digitalWrite(Moto1Dir1_negative,HIGH);   
		Serial.print("direction:");
		Serial.println("顺时针");
		}
		if(buffer[4]==48)   {
		digitalWrite(Moto1Dir1_negative,LOW); 
		Serial.print("direction:");
		Serial.println("逆时针");
		} 
		theta  = (buffer[5]-48)*10  + buffer[6]-48;
		Serial.print("theta=");
		Serial.println(theta);
	}  
  }
}

实物图:

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]中的代码,可以使用Arduino控制42步进电机旋转。首先,需要连接Arduino驱动器以及步进电机。然后,编写Arduino程序来控制步进电机旋转。 以下是一个示例的Arduino程序,可以让42步进电机正转80个脉冲: ```cpp void setup() { pinMode(8, OUTPUT); // 设置ENA引脚为输出 pinMode(9, OUTPUT); // 设置PUL引脚为输出 pinMode(10, OUTPUT); // 设置DIR引脚为输出 digitalWrite(8, LOW); // 使能开启 digitalWrite(10, HIGH); // 设置方向为正转 } void loop() { for (int i = 0; i <= 80; i++) { digitalWrite(9, HIGH); // 发送脉冲信号 delayMicroseconds(500); digitalWrite(9, LOW); delayMicroseconds(500); } } ``` 这段代码中,ENA引脚用于使能步进电机,PUL引脚用于发送脉冲信号,DIR引脚用于设置方向。在循环中,通过控制PUL引脚的高低电平来发送脉冲信号,从而控制步进电机旋转。 需要注意的是,具体的引脚号可能需要根据实际连接情况进行调整。 希望这个回答能够帮到你! #### 引用[.reference_title] - *1* [arduino uno+驱动控制42步进电机](https://blog.csdn.net/liuzifu123/article/details/127158000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Arduino从零开始(2)——控制舵机与步进电机](https://blog.csdn.net/lylelo/article/details/127867445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Arduino控制步进电机/旋转](https://blog.csdn.net/cxis0/article/details/128218444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值