DIY电机测试平台——MOTOR TEST1.0
相信许多喜欢航模的朋友,对电子制作会很感兴趣,我也不例外,特别当我接触到了arduino的时候,我就深深的爱上了它,只要有些许C语言的知识和电子认识,就可以通过它完成你以前很想却做不到的事情。
比如从简单的声光控制、气压测量、温度测量、湿度测量、超声波测距,到看起来很高端的物联网:通过手机遥控遥远地方的灯、养老家的鱼缸里的鱼等等。
接下来分享的电机测试平台就是我与它相爱(学习)路上的小作品。
这个帖子主要想和大家分享一下我做的一个电机测试平台——MOTOR TEST1.0。
先对它进行简单介绍:通过对拉力传感器、电流传感器、电压分压器、温度传感器的数据采集和TF卡的写入,实现以下几个功能:1.电机拉力记录 2.电流记录 3.电压记录3.电机温度记录 4.电调温度记录5.数据存储 6.通过电位器来控制pwm信号输出,控制电调,驱动电机。
一、先看看我们需要那些东西:
1.arduino nano一块
2.DC-DC5v模块(供电使用,也可以在arduino nano vin接口接入6.5-12的电压)
3.I2C1602LCD显示屏
4.3KG称重传感器
5.HX711AD模块
6.ACS712电流传感器模块
7.Micro SD卡模块SPI接口
8.LM35温度传感器
9.轨道滑块一套(由于型号不同,需要对3D模型进行修改)
10.3d打印件
11.亚克力板
12.电位器一个
13.电阻电容若干
14.磁环
15.螺丝螺母若干,拉力传感器用的是M5螺丝
16.导线等其他零件
二、接下来看看接线:
上图显示了大部分的接线,下面我给出了明细:const int duoliangpin=A0;//舵量输入引脚
const int wendupin=A1;//温度1引脚
const int wendu2pin=A2;//温度2引脚
const int dianliupin=A3;//电流引脚
const int dianyapin=A7;//电压引脚
const int huanpingpin=2;//换屏引脚
const int guilingpin=3;//拉力归零引脚
const int starpin=5;//开始开关引脚
duoliang.attach(6);//舵信号输出为D6
const int shakepin=7;//震动器引脚
const byte hx711_data_pin=8;//
const byte hx711_clock_pin=9;//hx711数据引脚sd卡模块spi接线
MOSI-pin11on
MISO-pin12on
SCK-pin13on
CS-const int chipSelect=4;//spi cs定义引脚lcd显示屏接线
A4、A5为IIC的引脚A4连SDA,A5连SCL 三、我们需要固定拉力传感器和电机的基座:
3D建模学习了一段时间,感受到了3D打印的魅力,能创造很多可能,用空的朋友可以尝试玩玩。
因为轨道滑块型号不同,需要对3D模型进行修改,我现在用的这套不是很好,就不在帖子里多介绍了,大家都懂的去哪里买这些东西。
我会在帖子的最后提供固定件的3d 建模和CAD图(用于6mm亚克力板加工)文件的下载,大家可用于参考。
四、程序的写入
我用的Arduino IDE1.6.9,泡泡老师15元超声波模块制作的视频教程里有很详细的arduino 程序写入的方法。
这里要注意的是,需要把帖子后的程序文件中的库文件(libraries文件夹里的)复制到arduino安装位置的libraries文件夹中,不要从Arduino IDE里直接下,我做
了小修改。
五、传感器的校准
一个测量工具,校准是最重要的,下面提供主要传感器的校准方法。
(虽然校准了也不是那么准,以后慢慢改进)
测试的需要用到Arduino IDE里工具选项的串口监视器,把nano板连上电脑,选择端口,然后打开串口监视器,通过实际测量与监视器里的原始值的比较,求出相关系数。
1.拉力传感器
//*******************拉力****************************
float Lali(float maopi)
{lali=hx711.read()/1000-maopi;
Serial.print(lali);
lali=1.387*lali;
return lali;
}
//校准拉力系数,通过实际拉力测量,比如500g和1000g的重物。
通过对原始值lali相差值的计算,可以求的lali=1.387*lali中的这个系数,每个传感器这个系数都不一样。
2.电压分压器
//*********************电压*******************************
float volts(int dianyapin)
{int val=Filter(dianyapin);
Serial.println(val);
float volts=(val/295.2)*5.00;//可以通过串口显示的val值和万用表测的volts的值求出refactor值,295.2是即此值。
//使用refactor=1023*(R2/(R1+R2))的,把295.2改为refactor。
return volts;
}
这个在我以前的帖子里有说过,通过电压和电阻成正比的关系,利用小电压的测量,测量大电压,具体我就不多说了。
3.电流传感器
//*****************电流********************************
float current(int dianliupin)
{float current;
float a=Filt(dianliupin);//delay(1);
Serial.print(a);
current=0.07518*a-38.40;
return current;
}
//电流校准,30A的模块,每安培对应66mv,20A模块为100mv,通过实际测量决定系数和校准。
current=0.07518*a-38.40;a乘以的是系数,可以通过66mv这个值推算出来,不过每个芯片不一定100%的一样,要通过校准使它准确点,38.40这个值是用来归零用的,因为再没有电流输入的情况下该模块输出二分一的电压。
(现在使用的这个模块精度不够,且易受电磁影响,我在电流端加了大电容和磁环电感(自己绕的))
4.温度传感器是封装好的,LM35挺贵的,精度不高,0.25度左右。
红色是正极,中间是输出。
//***********************温度**********************************
float temp(int wendupin)
{float val=Filter(wendupin);//温度传感器LM35接到模拟PIN上;val变量为从LM35信号口读取到的数值
float temperature=(val/1024.0)*500;//把读取到的val转换为温度数值,系数一:
0.00488125=5/1024,0~5V对应模拟口读数1~1024,系//数二:100=1000/10,1000是毫伏与伏的转换;10是每10毫伏对应一度温升。
return temperature;
}
大部分内容都讲完了,再上些图吧。
sd卡模块
hx711模块
一些部件
六、写在最后
这套平台还有你多不完善的地方,需要改进的地方,希望发现问题,或觉得需要改进的朋友能反馈给我,我的QQ1099975399,也可以在帖子下留言或吧内联系,我也将不定期的更新固件,请继续关注。
转自模友之吧GUC,整理EMAX银燕。