永发信息网

想用51单片机控制两个步进电机画一个圆,有没有什么简单的指令,菜鸟求传授谢谢

答案:2  悬赏:40  手机版
解决时间 2021-03-01 22:41
  • 提问者网友:谁的错
  • 2021-03-01 12:17
想用51单片机控制两个步进电机画一个圆,有没有什么简单的指令,菜鸟求传授谢谢
最佳答案
  • 五星知识达人网友:未来江山和你
  • 2021-03-01 13:00
没有。在数控机床上把这个过程叫做插补,如果要在51上实现这个功能的话需要自己写插补程序,常用的插补方法有逐点比较法和数字积分法,这个几句话说不清楚,随便找本数控原理的书就能看明白了。
全部回答
  • 1楼网友:归鹤鸣
  • 2021-03-01 13:53
这个简单,让我来教楼主怎么玩 首先我说下思路: 我们采用p1口来采集adc0832的8位数据,用p0.0口控制步进电机动作,利用t0的时间中断来采集p1口的adc0832数据并做出比较后设置步进电机启动标志位start=1;并设置他的运行频率,当然,楼主没说怎么比较,我这就只是写了个简单的例子,一通百通,希望对你有帮助 下面是程序: #include //选用晶振11.0592mhz unsigned int m=0,n=0; //设置循环的周期 unsigned char start=0,t0temp=0; sbit y0=p0^0; //控制步进电机的管脚 delay() { unsigned char i,j; for(i=m;i>0;i--) for(j=n;i>0;j--); } main() { //自检测t0时间设置 et0=1; tmod|=0x01; th0=0xfc; //1ms中断扫描 tl0=0x66; it0=1; //下降沿触发 tr0=0; //关闭扫描 //****************i/o口程序 while(1) { while(start) { delay(); y0=~y0; } } } void counter1(void) interrupt 1 //t0计时器中断 { if(t0temp%4)t0temp++; //4ms时间才采集一次p0口的数据 else { t0temp++; //这里就写你怎么做对比的程序,我举个例子 if(p1>150) {start=1;n=1000;m=0;} //入错采用12m晶振,那这时候控制步进电机的输出周期就是1ms一次,也就是1000hz else {start=0;n=0;m=0;} } } //ps:我在输出频率中用了两个全局变量m,n可以延迟很长时间,楼主可以根据需要选用,一般16位的,选用一个就可以了,另一个放弃 ok,至于电路图,我软件没有adc0832的封装,不然就发给你了,但想来楼主完全就没必要担心,adc0832的8位数据接到p1口,p0.0控制步进电机启动的三极管,电路图就那么简单!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯