完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、用到的硬件设备以及最终实验效果
用到一个5V直流步进电机(28BYJ-48),然后一块对应的电机驱动(主芯片是ULN2003A),一个Arduino UNO开发板。我们最终实现的效果是,在Matlab GUI界面上输入想让电机正转(反转)的角度,执行程序之后,电机开始转动。 2、Arduino部分程序 驱动电机利用的是Arduino的库函数,使用起来十分简单。然后利用串口接收Matlab发送的字符,接收到相应字符之后就执行对应的命令。 //使用arduino IDE自带的Stepper.h库文件 #include // 这里设置步进电机旋转一圈是多少步 #define STEPS 100 int flag=0;//电机正反转标志,默认情况下正转 char key; //设置步进电机的步数和引脚(就是驱动板上IN1~IN4连接的四个数字口)。 Stepper stepper(STEPS, 8, 9, 10, 11); void setup() { Serial.begin(9600);//设置波特率 // 设置电机的转速:每分钟为90步 stepper.setSpeed(90); } void stopmotor() { digitalWrite(8,0); digitalWrite(9,0); digitalWrite(10,0); digitalWrite(11,0); } void loop() { key=Serial.read(); delay(10);// 加个延时可能会好一点,这样可以保证读完所有数据。 switch(key) { case 'Z':flag=1;break; case 'F':flag=0;break; case '1': if(flag==1) //4步模式下旋转一周用2048 步,所以45°是256步 { stepper.step(256*1); stopmotor(); } else if(flag==0) { stepper.step(-256*1); stopmotor(); } break; case '2': if(flag==1) { stepper.step(256*2); stopmotor(); } else if(flag==0) { stepper.step(-256*2); stopmotor(); } break; case '3': if(flag==1) { stepper.step(256*3); stopmotor(); } else if(flag==0) { stepper.step(-256*3); stopmotor(); } break; case '4': if(flag==1) { stepper.step(256*4); stopmotor(); } else if(flag==0) { stepper.step(-256*4); stopmotor(); } break; case '5': if(flag==1) { stepper.step(256*5); stopmotor(); } else if(flag==0) { stepper.step(-256*5); stopmotor(); } break; case '6': if(flag==1) { stepper.step(256*6); stopmotor(); } else if(flag==0) { stepper.step(-256*6); stopmotor(); } break; case '7': if(flag==1) { stepper.step(256*7); stopmotor(); } else if(flag==0) { stepper.step(-256*7); stopmotor(); } break; case '8': if(flag==1) { stepper.step(256*8); stopmotor(); } else if(flag==0) { stepper.step(-256*8); stopmotor(); } break; default: break; } } 3、Matlab的GUI界面 需要注意的是,我们输入的角度必须是45°的整数倍,因为Arduino程序里面电机转360°是2048步,转45°步数不会出现小数的情况,否则不精确。 4、Matlab代码 首先在xx_OpeningFcn()函数里面初始化: global a; a=serial(‘COM9’); set(a,’BaudRate’,9600); set(a,’DataBits’,8); set(a,’StopBits’,1); fopen(a); 然后是正转按钮的回调函数: global a; fprintf(a,’Z’); 反转按钮的回调函数: global a; fprintf(a,’F’); 开始按钮的回调函数: global a; global angle; if angle==45 fprintf(a,’1’); else if angle==90 fprintf(a,’2’); else if angle==135 fprintf(a,’3’); else if angle==180 fprintf(a,’4’); else if angle==225 fprintf(a,’5’); else if angle==270 fprintf(a,’6’); else if angle==315 fprintf(a,’7’); else if angle==360 fprintf(a,’8’); end end end end end end end end 连接外围电路,运行Matlab代码——实验成功。 |
|
|
|
只有小组成员才能发言,加入小组>>
1953 浏览 0 评论
7289 浏览 4 评论
34649 浏览 18 评论
4579 浏览 0 评论
21815 浏览 33 评论
451浏览 2评论
630浏览 1评论
3059浏览 1评论
627浏览 1评论
2418浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 17:17 , Processed in 0.949674 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号