arduino控制电机正反转程序

arduino控制电机正反转程序,第1张

arduino控制电机,这可没有固定的程序。因为直接控制电机的是“电机驱动器”,arduino并不能适宜直接与电机连接在一起。

所以,控制正反转以及转速等的程序,取决于你购买的电机驱动器。仔细阅读该驱动器的说明书,将arduino的引脚与电机驱动器的控制引脚连接,然后控制相应引脚的高低电平和pwm,以实现电机的正反转和转速调节。

可以,你说的”电脑编好的程序,烧给Arduino,然后Arduino成为一个独立个体进行代码下的活动“是对arduino编程和烧写,这个环节只要一次。arduino根据你的程序运行之后可以通过串口与电脑进行双向通信(前提是你的arduino程序里有串口通信代码)。与此同时,如果你用的arduino板上的芯片还有其他未用的串行通信接口或者I2C、SPI、CAN接口,也可以与传感器进行通信,这样,就可以将传感器的数据借助arduino传输至你的电脑了。

PS如果你要实现的任务不复杂,用arduino IDE进行编程、汇编是可以的,如果对时效要求较高,譬如想达到1Mbps的串口传输速率或者400kHz的I2C通信或者10KHz以上的方波输出或者尽可能短的程序执行周期,建议在Atmel Studio用gcc直接对avr进行编程。效率很轻松的能达到arduino IDE编译的程序的5到10倍强。

PPS你的电脑上位机程序编写看你个人爱好,如果你之前学过编程有基础,可以用VB,C++,DELPHI如果你的基础不是太牢并且想短时间内看到成果,推荐matlab或者labview。内部集成强大的数学分析工具,可以直接使用,譬如离散卡尔曼,FFT,等等等等。

一 通讯的途径

arduino和processing可以通过串行端口进行通讯,也就是我们常见的COM1、COM2什么的。在安装arduino驱动的时候我们已经设置了arduino的端口,我自己设置的是COM4,可以参考这里进行设置。

在arduino程序中也需要设置相同的端口:

processing接受和发送数据也是在这个端口进行的,在编写的代码中定义,不需要设置程序。

二 arduino通过串行端口发布数据

下面是arduino最简单的数据发布代码,将data的值“1”,通过串行端口发布出去

int data=1; //创建变量,储存需要发送的数据

void setup()

{

Serialbegin(9600);//定义数据传输率为9600比特

}

void loop()

{

Serialprint(data); //通过串行端口发送data的值

}

将代码上传到arduino后,可以先通过串行端口@@@@@@@@@检查,当然,需要将@@@@@@@@@的数据传输率设置成代码中的一样。这样,我们可以在程序下方看到不断出现的“1”。

三 processing从串行端口获取数据

下面是最简单的processing从串行端口获取数据的代码,注意端口和传输率的值:

import processingserial;//引入serial库

int p_data;//创建变量用于储存接收到的数据

Serial myPort;//创建一个名为“myPort”的Serial对象

void setup() {

myPort = new Serial(this,”COM4″, 9600);

//定义myPort的端口和数据传输率

//应和Arduino保持一致

}

void draw() {

p_data = myPortread();//读取从串行端口获得的值,并储存在变量p_data中

println(p_data);//打印p_data的值

}

运行代码后,可以看到processing程序下方开始有数据涌现了,这说明它已经取得了来自COM4,以9600比特发布的值。这里有两个需要注意的地方,其一是Arduino必须连接到电脑,其二是不能同时开启Arduino的串行端口监控器。

但是,数据虽然已经取得,但并不是Arduino发布的“1”,而是“49”,这个问题我们后面章节再谈。

四 Arduino获取来自串行端口的值

创建一个简单的Arduino程序用于接收来自串行端口的值,并通过一个LED来判断。我们选择13号插口是因为arduino电路板中本身就在这个插口集成了个小型LED,在这个范例中我们就不用自己连线了:)

int a_data = 0; // 创建变量用于储存在串行端口收到的值

int ledPin = 13;//设定一个LED插口,用于检测收到的值

void setup() {

Serialbegin(9600);//定义数据传输率为9600比特

pinMode(ledPin, OUTPUT);//定义13号插口为输出模式

}

void loop() {

if (Serialavailable() > 0) {// 在收到数据后再做出处理:

a_data = Serialread(); // 将收到的值储存在变量中

if(a_data){//如果收到“1”(a_data为真),点亮LED,否则熄灭

digitalWrite(ledPin, HIGH);

}

else{

digitalWrite(ledPin, LOW);

}

}

}

五 processing通过串行端口发布数据

processing没有像arduino一样的串行端口@@@@@@@@@,所以最好先创建上一步所述的arduino接收端。下面的代码根据鼠标点击状态发布“0”和“1”:

import processingserial;//引入serial

Serial myPort;

//创建一个名为“myPort”的Serial对象

void setup()

{

myPort = new Serial(this, “COM4″, 9600);

//定义myPort的端口和数据传输率

//应和Arduino保持一致

}

void draw(){

}

void mousePressed(){

myPortwrite(1);

//当鼠标按下时通过COM4,以9600传输率发布数值“1”

}

void mouseReleased(){

myPortwrite(0);

//当鼠标松开时通过COM4,以9600传输率发布数值“0”

}

非要用51么

现在有更强大的ARDUINO,两大开源飞控都是基于这个的(APM,Multiwii)

multiwii比较满足你的要求,这只是个程序固件,你可以参考下,如果说要自己写飞控程序难度不小,用一块pro mini开发板+mpu6050模块刷入简单设置好的固件就可以实现飞控的功能,此外还兼容大量的其他模块(地磁,气压),添加升级也很方便(只需要打开固件里的设置)。

要调PID的

pid调节首先要是一个

闭环系统

,也就是要有转速的反馈,通过反馈回来的转速输入到pid控制器,转化成pwm波输出,控制电动机,大致思路是这样,希望对你有用,具体看一下

pid算法

以上就是关于arduino控制电机正反转程序全部的内容,包括:arduino控制电机正反转程序、简单的arduino开发问题关于由电脑控制程序启动和结束、processing 怎么运行arduino程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10133637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存