标题:
51单片机驱动伺服电机我这个程序思路可行吗?
[打印本页]
作者:
芝士平天下
时间:
2020-4-5 23:06
标题:
51单片机驱动伺服电机我这个程序思路可行吗?
用51单片机来驱动伺服电机,电机连接丝杠,带动丝杠转动。
滚珠丝杠模组.png
(248.49 KB, 下载次数: 41)
下载附件
丝杠模组
2020-4-5 22:26 上传
驱动伺服电机,跟步进电机差不多,都是输出脉冲。
我想用
一个程序
同时实现几个功能。
功能:点动(点一下,动一下)、正反转改变、加减速、停止
我是这样想:
简单的话,就多设几个按键,通过按键,按哪个就实现哪个功能。
复杂的话,就设置3个模式,模式1,模式2,模式3。这样就能少用些按键。
我想弄复杂点的。
模式1:准备模式,led灯闪烁。
模式2:自由模式,按键2——点动,按键3——只发送4000个脉冲,按键4——正反转改变
模式3:往复循环模式(用限位开关改变方向),按键2——加速,按键3——减速,按键4——停止/启动
通过
按键1
来
切换模式
。
想法是:
1、用
外部中断
来做按键1设置,按一下按键1,就进行外部中断,外部中断程序里,标志mode++,回到程序,判断标志mode是否改变,改变了就跳出程序,回到主函数,找到相应的模式,进入相应的程序。
2、模式3,用
内部中断
,来不断发出脉冲,通过按键2、3改变频率,实现加减速。
程序:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
//先省略内外部中断程序
void main()
{
while(1)
{
while(1)
{
if(key1 == 0) //这个就是按键1,切换模式。用1根杜邦线把P32和P37相接,每按下按键1就会进入一次中断。
{
delay(20);//按键消抖
if(key1 == 0)
{
flag = 0;
flag = 0;//产生低电平
flag = 1;//结束低电平
while(!key1);//松手检测
}
}
if(1 == mode)
mode_1(); //检测到mode等于1,就进入mode_1函数里面
if(2 == mode)
mode_2(); //检测到mode等于2,就进入mode_2函数里面
if3 == mode)
mode_3(); //检测到mode等于3,就进入mode_3函数里面
}
}
}
mode_1() 模式1
{
led灯闪烁;
判断标志mode是否改;(若改变,return跳出mode_1函数,回到主函数,根据标志mode进入子函数)
}
mode_2() 模式2
{
按键2,就实现点动;
按键3,发送4000个脉冲;
按键4,正反转改变;
判断标志mode是否改;(若改变,return跳出mode_2函数,回到主函数,根据标志mode进入子函数)
}
mode_3() 模式3
{
内部中断函数;
按键2,加速;
按键3,减速;
按键4,停止发送脉冲/启动发送脉冲;
判断标志mode是否改;(若改变,return跳出mode_2函数,回到主函数,根据标志mode进入子函数)
}
想问问各位大佬,这样写,思路有没有问题,能不能实现,是否有更好的思路来写,求解啊!!!不知道行不行才是可怕
作者:
man1234567
时间:
2020-4-15 15:18
是想听夸奖么 ? 你真是天下第一的棒棒棒耶
自己不写出来不试,你当别人都是你雇来的伙计
作者:
mamba啊
时间:
2020-5-10 18:00
没有问题直接仿真运行
作者:
heijin2020
时间:
2020-5-11 09:40
应该没问题的,关键是控制发脉冲的个数。现实中用到很多的
作者:
EDGClearlove7
时间:
2020-5-11 10:06
思路应该没问题,写出来程序仿真一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1