找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2275|回复: 4
打印 上一主题 下一主题
收起左侧

51单片机驱动伺服电机我这个程序思路可行吗?

[复制链接]
跳转到指定楼层
楼主
6黑币
用51单片机来驱动伺服电机,电机连接丝杠,带动丝杠转动。
驱动伺服电机,跟步进电机差不多,都是输出脉冲。

我想用一个程序同时实现几个功能。

功能:点动(点一下,动一下)、正反转改变、加减速、停止
我是这样想:
简单的话,就多设几个按键,通过按键,按哪个就实现哪个功能。

复杂的话,就设置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进入子函数)
}

想问问各位大佬,这样写,思路有没有问题,能不能实现,是否有更好的思路来写,求解啊!!!不知道行不行才是可怕

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2020-4-15 15:18 | 只看该作者
是想听夸奖么 ? 你真是天下第一的棒棒棒耶
自己不写出来不试,你当别人都是你雇来的伙计
回复

使用道具 举报

板凳
ID:730069 发表于 2020-5-10 18:00 | 只看该作者
没有问题直接仿真运行
回复

使用道具 举报

地板
ID:748837 发表于 2020-5-11 09:40 | 只看该作者
应该没问题的,关键是控制发脉冲的个数。现实中用到很多的
回复

使用道具 举报

5#
ID:748862 发表于 2020-5-11 10:06 | 只看该作者
思路应该没问题,写出来程序仿真一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表