本帖最后由 Maker_kun 于 2024-9-6 23:59 编辑
LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国国家仪器公司(National Instruments,简称NI)开发的一种图形化编程环境和工具。它主要用于数据采集、仪器控制和自动化测试等领域,通过可视化编程方法简化了复杂系统的开发过程。
LabVIEW的特点与应用 图形化编程:LabVIEW采用图形化编程方式,用户可以通过拖放控件和连接线来创建程序,而无需编写传统的代码。这种方式使得编程更加直观和易于学习。
虚拟仪器:LabVIEW中的程序被称为虚拟仪器(VI),这些VI可以模拟各种物理仪器的功能,并且具有高度的灵活性和可扩展性。
数据流编程:LabVIEW的核心概念之一是数据流编程,即通过数据流动来驱动程序的执行。这种编程方式强调了数据的流向和处理顺序,有助于提高程序的可读性和维护性。
优势:
快速原型开发:LabVIEW的图形化编程方式使得开发原型快捷高效,有助于加速深度学习等领域的研究和应用。
直观易用:LabVIEW采用图形化编程语言,可以通过图形化界面进行编程,而不是传统的文字化编程,使得编程更加直观、易于理解和调试。
虚拟仪器开发功能:LabVIEW提供了便捷的虚拟仪器开发功能,能够依据专家的经验对没有精确数学模型的系统进行良好的控制。
混合编程能力:LabVIEW可以与MATLAB进行混合编程,利用MATLAB强大的数据处理能力和LabVIEW便捷的虚拟仪器开发功能,实现优势互补。
一、开发上位机程序
安装labview后打开案例库,找到简单串口案例库文件
可以看到前面板和程序框架
在此基础上增加两个控制按键
界面设计如下:
添加事件结构,当按钮按下是=时触发相应事件
当向前运动按钮按下发送0X41 十六进制串口"A"指令,当向后运动按钮按下发送0X42 十六进制串口"B"指令
第二部分:ESP32程序设计
打开Arduino IDE
程序代码
String inputString = ""; // a String to hold incoming data
bool stringComplete = false; // whether the string is complete
char inChar;
const int stepPin=13; //步进引脚
const int dirPin=12; //方向引脚
const int enPin=14; //使能引脚
void setup() {
// initialize serial:
Serial.begin(9600);
// reserve 200 bytes for the inputString:
inputString.reserve(200);
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(enPin,OUTPUT);
digitalWrite(enPin,HIGH); //关闭使能
digitalWrite(dirPin,HIGH); //控制转动方向
}
void loop() {
int i;//控制转动步数
i=3000;
// print the string when a newline arrives:
if (stringComplete) {
Serial.println(inputString);
// clear the string:
inputString = "";
stringComplete = false;
Serial.println(inChar);
if(inChar=='A')
{
digitalWrite(enPin,LOW); //打开电机使能
inChar='G';
digitalWrite(dirPin,HIGH); //正转
while(i)
{
i--;
digitalWrite(stepPin,HIGH);
delayMicroseconds(100);
digitalWrite(stepPin,LOW);
delayMicroseconds(100);
}
}
else if(inChar=='B')
{
inChar='G';
digitalWrite(dirPin,LOW); //正转
digitalWrite(enPin,LOW); //打开电机使能
while(i)
{
i--;
digitalWrite(stepPin,HIGH);
delayMicroseconds(100);
digitalWrite(stepPin,LOW);
delayMicroseconds(100);
}
}
else
{
digitalWrite(enPin,HIGH); //关闭电机使能
}
}
}
/*
SerialEvent occurs whenever a new data comes in the hardware serial RX. This
routine is run between each time loop() runs, so using delay inside loop can
delay response. Multiple bytes of data may be available.
*/
void serialEvent() {
while (Serial.available()) {
// get the new byte:
inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag so the main loop can
// do something about it:
stringComplete = true;
}
}
程序流程图
实物展示
视频演示:
上位机控制电机正反转