完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
继续写第二种方法,主要是受到之前写流水灯的程序原理启发。
24BYJ48步进电机 本文不涉及指定圈数的转动,旨在控制步进正反转以及停止的控制。(知道其原理,实现指定圈数的转动,只是关于小学水平的数学计算问题,这里不做探讨) 24BYJ48分配顺序图 公共极通正电(E),然后依次把A、B、C、D拉低,就可以形成一个旋转的磁场,拖动转子转动,电机自带减速器,减速比为1:64,步进角为5.625/64度,如果需要转动1圈,那么需要360/5.625*64=4096个脉冲信号。 采用uln2003驱动, 采用1相励磁驱动步进的方式。 程序代码二: unsigned char coutR[4] = {8, 9, 10, 11}; unsigned char coutZ[4] = {11, 10, 9, 8}; unsigned char cout3[3] = {7, 5, 6}; byte flow = 0x01; int State3= 0; void setup() { for(int j=0;j《3;j++){//正反转停止控制引脚 pinMode(cout3[j],INPUT);delay(5);digitalWrite(cout3[j],HIGH);} for(int i=0;i《4;i++) {//电机驱动引脚 pinMode(coutR,OUTPUT); digitalWrite(coutR,LOW); } Serial.begin(115200); } void loop() { int State1=digitalRead(6); int State2=digitalRead(5); State3=digitalRead(7); if(State1 == LOW){MotorZ();} else if(State2 == LOW){MotorR();} else MotorStop(); } /*********反转**********/ void MotorR(){ for(int i=0;i《4;i++) { if(State3==LOW){ Serial.println(“stop.。。”); break; } digitalWrite(coutR,(flow&(0x01《《i))); delayMicroseconds(4950);//低于3500不转, Serial.println(“MotorR.。。”); } flow《《=1; if(flow == 0x8) { flow = 0x01; } } /*********正转**********/ void MotorZ(){ for(int i=0;i《4;i++) { if(State3==LOW){ Serial.println(“stop.。。”); break; } digitalWrite(coutZ,(flow&(0x01《《i))); delayMicroseconds(4900); Serial.println(“MotorZ.。。”); } flow《《=1; if(flow == 0x8) { flow = 0x01; } } /*********停止**********/ void MotorStop(){ for(int i=0;i《4;i++) {digitalWrite(coutR,LOW); } Serial.println(“stop.。。”); } |
|
|
|
只有小组成员才能发言,加入小组>>
644浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 03:54 , Processed in 1.143264 second(s), Total 97, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号