美文网首页
软件编程实现

软件编程实现

作者: lxr_ | 来源:发表于2021-12-16 20:35 被阅读0次

此程序实现串口接收一个距离值(单位为cm),滑台移动相应的距离,即通过串口控制滑台。

端口定义

//**************滑台控制*********************
int PUL=5;                //电机驱动脉冲控制端口
int DIR=6;                //电机运行方向控制端口
bool DIR_STATE=LOW;       //电机运行方向的状态

int STOP=4;               //接近传感器检测端口

float distance;           //串口接收的距离值,单位为cm

PUL端口的脉冲

周期frequence越小,电机转速越快,但经过测试,并不是所有的速度都能达到,比如细分设置为800时,当周期设为几个微秒时,电机的转速达不到,可能就不会转,可以自己测试。
注:(这里不要被代码里的frequence误导,其实是周期,而不是frequence的中文意思频率,两者是倒数关系)

//控制脉冲频率
void OnePulse(unsigned int frequence)
{
  digitalWrite(PUL,LOW);
  delayMicroseconds(frequence/2);
  digitalWrite(PUL,HIGH);
  delayMicroseconds(frequence);
  digitalWrite(PUL,LOW);
  delayMicroseconds(frequence/2);
}

上面的程序在PUL端口产生的脉冲如下图所示,周期为2frequence*。

脉冲

控制脉冲数量

//脉冲数
void PulseNum(unsigned int num)
{
  for(unsigned int i=num;i>0;i--)
  {
    if(digitalRead(STOP)==LOW)
    {
      return;
    }
    OnePulse(500);
  }
}

检测到STOP端口,即限位开关触发时,此函数退出,即不给PUL提供脉冲,电机停止旋转,保护滑台。

初始化函数

void setup() {

  pinMode(PUL,OUTPUT);          //设置端口模式
  pinMode(DIR,OUTPUT);
  pinMode(STOP,INPUT);

  digitalWrite(DIR,DIR_STATE);  //方向端口DIR初始化

  Serial.begin(115200);         //串口初始化

  while(Serial.read()>0);       //串口缓存清空

  //PulseNum(5000);             //旋转一圈
}

由于本人设置的5000细分,所以旋转一圈需要5000个脉冲

void loop() {

  while(Serial.available())           //串口是否有数据
  {
    distance=Serial.parseFloat();     //从串口解析距离数据
    delay(3);
    if(distance!=0)
    {
      Serial.println(distance);

      //根据接收的distance(单位为cm)计算脉冲数,5000细分滑台移动1mm需要40个脉冲
      int num=abs(distance)*10*40;
      Serial.println(num);
      if(distance<0)
      {
        DIR_STATE=!DIR_STATE;         //电机反向运行
        digitalWrite(DIR,DIR_STATE);  //DIR端口反向
      }
      PulseNum(num);                  //电机开始运行,滑台开始移动
    }

  }
}

对上面的程序解释:由于我的滑台使用的同步带,同步轮旋转一周滑台移动12.5cm,也就是同步轮的直径接近为4cm。
而在细分5000的情况下,电机旋转一周,也就是同步轮旋转一周需要5000个脉冲,那么滑台移动1mm需要5000/125=40个脉冲
故脉冲数=distancex10x30

相关文章

  • 软件编程实现

    此程序实现串口接收一个距离值(单位为cm),滑台移动相应的距离,即通过串口控制滑台。 端口定义 PUL端口的脉冲 ...

  • 我们用的软件是编程软件编的,那编程软件是用什么编的?

    我们手机的APP,电脑的APP。都是软件,我们用的软件都是用编程软件编的。 实际上,编程软件也是软件,所以编程软件...

  • Execl工具-宏-VBA

    VBA是一种编程语言,它依托于Office软件,不能独立运行,通过VBA可以实现各种Office软件操作的自动化。...

  • 关于数学建模的一些思考

    三人分工的思考: 一人主攻matlab软件实现模型的编程。 matlab搭配EXCEL软件进行数据初处理 matl...

  • 1. 算法基础

    基础编程模型 描述和实现算法所用到的语言特性、软件库和操作系统称为基础编程模型 Java 程序的基本结构 原始数据...

  • 《Google 软件工程》 读书笔记1

    软件工程VS编程 软件工程就是随时间不断集成的编程。 思考:编程是需要考虑时间维度的,软件的生命长度决定了编程时需...

  • 团队开发框架实战—面向切面的编程 AOP

    团队开发框架实战—面向切面的编程 AOP 引言 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统...

  • 计算机网络第四次作业

    冯过 软件工程二班 1505060204 作业目的:用套接字编程写一个GUI小程序实现简单的只能回复功能。 实现过...

  • 9.13 知识点总结

    软件编程实现LED亮灯和切换颜色。 钟源,输出,推挽,速度,上拉,输出数据寄存器地址写出 利用函数延迟 实现让LE...

  • 2021-05-02生物信息在线分析平台

    Galxy分析软件种类齐全,更快,适合新手,无需代码平台系统优势: 1、无需编程基础,通过简单操作实现客户定制化分...

网友评论

      本文标题:软件编程实现

      本文链接:https://www.haomeiwen.com/subject/chxsfrtx.html