微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我想实现开机步进电机转2秒,2秒后,停止转动,我该怎么写?

我想实现开机步进电机转2秒,2秒后,停止转动,我该怎么写?

时间:10-02 整理:3721RD 点击:
前面的程序我没上传,大家应该都看得明白。我现在的情况是,开机转不止2秒才停,我知道我的电机函数里,有延时影响了它,所以想请问你们是怎么写的? 谢谢!


把第一个if语句,写在定时器中试一下

这个函数不严谨,你可以看一下你的dianji()这个函数的运行时间,如果他超过的一个定时中断的时间,那么就会出现n>40的可能出现,这样是不严谨的,你把n的判断写入中断函数,或者把n==40改成n>39这样应该好一点。我不知道你用的哪款单片机,但是你的电机的函数应该超过了定时器的一次中断了!

用的是STC90C516RD,我知道我这样写不对,肯定是电机函数里面的延时时间叠加在中断处理函数了,如果是你写个通电电机运行2秒的程序,你的思路是怎么样的?谢谢。

这个例子不错  跟着小编一起学习一下

思路和你基本一样,不过在写的时候考虑执行的过程中中断应该判断一下自己的计数次数,还有中断里边执行的时间,不要中断没执行完就来了下一个本身的中断了!我建议你把时间判断都写入定时器中断中,不然你再加个按键检测,特别是那种等待按键松开的判断,你的程序就飞了!你不信把你的n的类型换成U32,你看看会不会有的时候转很久才能停下来啊!

其实不是很明白

你是用的定时器做定时的,到了时间就中断,然后一个变量+1,你在主函数中判断这个变量的值,但是你的主函数还要执行其他的程序,在执行其他程序的过程中可能定时器已经中断好几次了!这样你用==的话就会出现比你预期的值大了,那就不能关闭定时器,直到加到255,然后归零,在到你所需要的值,如果在到了你要的值以后还没判断,那么又会重复的!
就拿你这个N来说吧,在主程序里判断,那么这个n可能在你判断的时候已经是41了,那就不是等于40了!只能等记满255后归零在加到40,如果正好执行if(n==40)那么就停止,如果还是没执行的话就会又一个循环,因为你的dianji();的执行时间超出了定时器计时的时间,你把这个判断放进定时器中断就不一样了,那样到了就会判断N的值。不会有超出40的可能了!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top