完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我写了一个步进电机加减速运动的程序,但是发现电机进入不了加减速,主程序中给定一个固定步数,由加减速程序去判断加减速且走完固定步数就关闭定时器,但是电机停不了,也不能加减速。
|
|
相关推荐
1 条评论
29个回答
|
|
程序明显有问题啊! if(!stepCnt) 是当stepCnt等于0是才会进入。结果就是第一步会进入这个函数然后加速,然后后面永远不会在进入,最后就是永远处于这个速度,永远不会减速,不会停止。
|
|
|
|
xianhehu 发表于 2016-12-7 17:31 这一点是因为我希望主程序给电机步数的时候,电机都是从一开始进入加减速,if(!stepCnt)里面包含的程序只是为了分配加减速步数而已。走过第一步之后不需要再进入这一段程序,直接跑到后面的加速段或者减速段执行就好了。匀速段则不会改变定时器的值。经过昨天的测试,我发现问题出在减速段的条件上面,应该是else if(stepCnt>lessSpeedStep),去掉等号就可以加减速了。不过现在主要的问题是无论我怎么设置加减速数组,电机声音都很大。 |
|
|
|
本帖最后由 xianhehu 于 2016-12-9 18:00 编辑
黑眼圈红了 发表于 2016-12-8 09:38 你后面的所有加速减速代码不都在if(!stepCnt)这个条件语句块之内的吗,你进不了这个条件,你后面怎么可能进去?stepCnt等于0才进入,后面胡if(stepCnt>lessSpeedStep)还有意义吗? 或者你程序改了,不是上面发的那个? |
|
|
|
xianhehu 发表于 2016-12-9 17:55 只在第一次启动的时候进入if(!stepCnt),在这段程序里实现加减速步数的计算,第二次以及之后的步数因为已经不等于0了,所以进入中断的时候直接跳到判断stepCnt与addSpeedStep或者lessSpeedStep的大小,从而得知电机是在加速段还是减速段,然后进入相应的程序、 |
|
|
|
本帖最后由 xianhehu 于 2016-12-12 12:42 编辑
黑眼圈红了 发表于 2016-12-12 09:31 关键是跳不过去啊,判断stepCnt与addSpeedStep或者lessSpeedStep的大小这些代码都是if(!stepCnt)这个if条件语句内的,这个条件不满足后面就不可能跳过去。如果是像你说的这个逻辑,上面发的那段代码就是错的,少了一个"}",在第33行应该加一个}括号。 |
|
|
|
不懂编程的我好像看懂了楼上在讨论什么
|
|
|
|
xianhehu 发表于 2016-12-12 12:36 确实是少了一个括号。。。。。 |
|
|
|
xianhehu 发表于 2016-12-12 12:36 后来的程序我已经有加上了,截图的时候没注意到、、、、、 |
|
|
|
xianhehu 发表于 2016-12-12 12:36 其实这不是重点啦,重点是为什么我有了加减速声音还辣么大,好心累。。。 |
|
|
|
|
|
|
|
|
|
|
|
其实就是每次中断去改变定时器的值然后达到加减速的目的,也就是你说的变频。 |
|
|
|
|
|
|
|
|
|
我就来看看 。。。。。。。。。。。。
|
|
|
|
/*******************************************************************/
/* 程序名:PWM直流电机调速 */ /* 晶振:11.00592 MHz CPU型号:AT89C51 */ /* 直流电机的PWM波控制,可以直接的调速从0到5级的调速 */ /*****************************************************************/ #include #define TH0_TL0 (65536-1000)//设定中断的间隔时长 unsigned char count0 = 50;//低电平的占空比 unsigned char count1 = 0;//高电平的占空比 bit Flag = 1;//电机正反转标志位,1正转,0反转 bit start =0; //电机停止标志 ***it Key_add=P3 ^ 0; //电机减速 ***it Key_dec=P3 ^ 1; //电机加速 ***it Key_turn=P3 ^ 2; //电机换向 ***it Key_start_stop=P3 ^ 3; //电机启停 ***it PWM1=P2^6;//PWM 通道 1,反转脉冲 ***it PWM2=P2^7;//PWM 通道 2,正转脉冲 unsigned char Time_delay; /************函数声明**************/ void Delay(unsigned char x); void Motor_speed_high(void); void Motor_speed_low(void); void Motor_turn(void); void start_stop(void); void Timer0_init(void); /****************延时处理**********************/ void Delay(unsigned char x) { Time_delay = x; while(Time_delay != 0);//等待中断,可减少PWM输出时间间隔 } /*******按键处理加pwm占空比,电机加速**********/ void Motor_speed_high(void)// { if(Key_add==0) { Delay(10); if(Key_add==0) { count0 +=20; if(count0 >= 100) { count0 = 100; } } while(!Key_add);//等待键松开 } } /******按键处理减pwm占空比,电机减速*****/ void Motor_speed_low(void) { if(Key_dec==0) { Delay(10); if(Key_dec==0) { count0 -= 20; if(count0 <= 0) { count0 = 0; } } while(!Key_dec ); } } /******************电机的启停控制*******************/ void start_stop() {start = 0; PWM1 =0; PWM2 =0; while(1) { if(Key_start_stop==0) { while(Key_start_stop == 0); start = ~start; if(start == 1) { PWM1 = 1;PWM2 = 0; } else { PWM1 =0;PWM2 =0; } } } } /************电机正反向控制**************/ void Motor_turn(void) { if(Key_turn == 0) { Delay(10); if(Key_turn == 0) { Flag = ~Flag; } while(!Key_turn); } } /***********定时器0初始化***********/ void Timer0_init(void) { TMOD=0x01; //定时器0工作于方式1 TH0=TH0_TL0/256; TL0=TH0_TL0%256; TR0=1; ET0=1; EA=1; } /*********主函数********************/ void main(void) { Timer0_init(); start_stop(); while(1) { Motor_turn(); Motor_speed_high(); Motor_speed_low(); } } /**************定时0中断处理******************/ void Timer0_int(void) interrupt 1 using 1 { TR0 = 0;//设置定时器初值期间,关闭定时器 TL0 = TH0_TL0 % 256; TH0 = TH0_TL0 / 256 ;//定时器装初值 TR0 = 1; if(Time_delay != 0)//延时函数用 { Time_delay--; } if(start==0) { PWM1 = 0; PWM2 = 0; } else PWM1 = 1; PWM2 = 0 ; if(Flag == 1)//电机正转 { PWM1 = 0; if(++count1 < count0) { PWM2 = 1; } else PWM2 = 0; if(count1 >= 100) { count1=0; } } else //电机反转 { PWM2 = 0; if(++count1 < count0) { PWM1 = 1; } else PWM1 = 0; if(count1 >= 100) { count1=0; } } } |
|
|
|
J636495 发表于 2016-12-25 15:14 我用L298N连接只会转不会加速,还有就是PWM的那俩个引脚是接298的INPUT端吗 |
|
|
|
是的,你看看你的pwm有没有问题呢 |
|
|
|
|
|
1 条评论
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【⌈嵌入式机电一体化系统设计与实现⌋阅读体验】+磁力输送机系统设计的创新与挑战
1617 浏览 0 评论
3237 浏览 2 评论
4772 浏览 6 评论
3826 浏览 0 评论
设计一个TEC驱动电路输出19V6A,有没有办法把输出整成直流?
3073 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 23:00 , Processed in 1.020229 second(s), Total 82, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号