在线时间350 小时
UID1575830
注册时间2015-1-20
NXP金币0
TA的每日心情 | 郁闷 2018-2-7 18:18 |
---|
签到天数: 5 天 连续签到: 1 天 [LV.2]偶尔看看I
金牌会员
 
- 积分
- 1628
- 最后登录
- 2021-7-13
|
本帖最后由 pythonworld 于 2016-12-7 21:34 编辑
功能概要:
基本上实现了一个绕单轴的角度测量,测量范围为+-180度绕Y轴--板子的宽度方向。
硬件组成:
硬件由LPC824 lite+oled+ adxl335传感器组成;
软件开发工具:软件用mbed开发
传感器校准:
ADXL335灵敏度和0g偏移需要校准,校准方法为记录传感器在1g输入和-1g输入时的输出电压值,两个电压值的差值除以2就是传感器的灵敏度,
当两个电压值相加除以2就是0g的偏移电压。X、Y、Z都需要进行校准,校准后的灵敏度和0g偏移电压写入到程序中,这样测量的结果就比较准了。
Oled显示:
显示屏使用0.9英寸128x64 SPI接口白色显示屏,有点小吆。
Oled显示驱动使用的是mbed中的Adafruit_SSD1306库,非常方便,只是稍微有点占内存。但NXP824 使用完全没有问题。
PC串口输出:
串口输出的是直接由ADC采集的电压,没有经过处理,便于分析和校准传感器提供参考。
源代码:
#include "mbed.h"
#include "Adafruit_SSD1306.h"
#include <math.h> /* atan2 */
#define PI 3.14159265
// oled connection
#define DO P0_24 //CLK
#define DI P0_26 // MOSI
#define CS P0_10
#define DC P0_11
#define RST P0_17
class SPIPreInit : public SPI
{
public:
SPIPreInit(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk) {
format(8,3);
frequency(2000000);
};
};
SPIPreInit mySpi(DI,NC,DO);
Adafruit_SSD1306_Spi oled(mySpi,DC,RST,CS,64,128);
//ADXL334 connection
DigitalOut myled1(P0_13);
DigitalOut myled2(P0_16);
DigitalOut myled3(P0_17);
DigitalIn myinput1(P0_6);
DigitalIn myinput2(P0_14);
DigitalIn myinput3(P0_22);
Serial uart(P0_4, P0_0);
AnalogIn myadc1(A0);
AnalogIn myadc2(A1);
AnalogIn myadc3(A3);
int main()
{
double x, y, z, result;
myinput1.mode(PullNone);//这步很重要,不然是电压是测不准的
myinput2.mode(PullNone);
myinput3.mode(PullNone);
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextCursor(0,0);
while(1) {
uart.printf("X: %2.3f V\r\n" ,myadc1.read()*3.3);
uart.printf("Y: %2.3f V\r\n" ,myadc2.read()*3.3);
uart.printf("Z: %2.3f V\r\n" ,myadc3.read()*3.3);
z= (myadc2.read()*3.3-1.625)*3025.72; // z轴校准
x = (myadc1.read()*3.3-1.646)*3048.78;//x轴校准
y = (myadc3.read()*3.3-1.672)*3067.48;//y轴校准
result = atan2 (x,y) * 180 / PI;
uart.printf ("The arc tangent for (x=%f, y=%f) is %.4f degrees\r\n", x, y, result );
oled.printf (" %.2f D\r\n",result);
oled.printf ("Y: %.0f mg\r\n",z);
myled1 = 1;
myled2 = 0;
myled3 = 1;
oled.display();
wait(1);
oled.setTextCursor(0,0);
oled.clearDisplay();
}
}
附件是最新的源文件,支持两种模式的倾角测量:
1.三轴模式 测量范围+-90度
2.单轴模式 测量范围+-180度
|
|