Açı Sensörleri hakkında

Başlatan görkem, 07 Şubat 2018, 11:47:57

ghistmanzero

Alıntı yapılan: görkem - 17 Şubat 2018, 15:22:55
haberleştirmeyi başardım çok stabil çalışıyor tavsiye ederim kodları yakında yayınlarım.
takipteyim :) sonuçlar mpu9250 den daha iyi galiba .mpu9250 yi de denediniz mi  ? açıyı kendiniz hesaplayarak bulunca sorun mu oluyor ? bosch un sensörünü merak ettim baya.

görkem

Alıntı yapılan: ghistmanzero - 17 Şubat 2018, 18:11:49
takipteyim :) sonuçlar mpu9250 den daha iyi galiba .mpu9250 yi de denediniz mi  ? açıyı kendiniz hesaplayarak bulunca sorun mu oluyor ? bosch un sensörünü merak ettim baya.
mpu9250 hiç kullanmadım fakat mpu6050 kullanmıştım kat kat iyi çok stabil çalışıyor.çok fazla işlemyaptığım için hazır veri almak daha kolaylık sağladı.

ghistmanzero

Alıntı yapılan: görkem - 08 Mart 2018, 19:54:06
mpu9250 hiç kullanmadım fakat mpu6050 kullanmıştım kat kat iyi çok stabil çalışıyor.çok fazla işlemyaptığım için hazır veri almak daha kolaylık sağladı.
6050 yi ben de 877a da kullandım bir hazır kütüphane ile ama sadece acılar var. 9250 de acı, pusula ve ivme var galiba. Hepsini bir arada deneme şansım olmadı hiç.

görkem

 @ladybird @fide uzun bir aradan sonra dönebildim sensör çok stabil çalışıyor hareket halindeyken sapma yok denecek kadar az beni tatmin etti.
aşağıda hazırlamış olduğum kütüphanelerini yayınlıyorum herkeze kolay gelsin.

header
#ifndef _BNO055_H
#define _BNO055_H

#include "stm32f1xx.h"                  // Device header
#include "stm32f1xx_hal_gpio.h"
#include "stm32f1xx_hal_i2c.h"
#include "stdio.h"
#include "string.h"

extern I2C_HandleTypeDef hi2c2;





#define BNO055_ADDRESS_W 0x50
#define BNO055_ADDRESS_R 0x51
#define BNO055_ID        0xA0




      /* Page id register definition */
      

      /* PAGE0 REGISTER DEFINITION START*/
#define	      BNO055_CHIP_ID_ADDR                                      0x00			
#define	      BNO055_ACCEL_REV_ID_ADDR                                 0x01			
#define	      BNO055_MAG_REV_ID_ADDR                                   0x02			
#define	      BNO055_GYRO_REV_ID_ADDR                                  0x03			
#define	      BNO055_SW_REV_ID_LSB_ADDR                                0x04			
#define	      BNO055_SW_REV_ID_MSB_ADDR                                0x05			
#define	      BNO055_BL_REV_ID_ADDR                                    0x06			
#define	      BNO055_PAGE_ID_ADDR                                      0x07	

#define       BNO055_ACCEL_DATA_X_LSB_ADDR                             0x08
#define       BNO055_ACCEL_DATA_X_MSB_ADDR                             0x09
#define	      BNO055_ACCEL_DATA_Y_LSB_ADDR                             0x0A			
#define	      BNO055_ACCEL_DATA_Y_MSB_ADDR                             0x0B			
#define	      BNO055_ACCEL_DATA_Z_LSB_ADDR                             0x0C			
#define	      BNO055_ACCEL_DATA_Z_MSB_ADDR                             0x0D			

#define	      BNO055_MAG_DATA_X_LSB_ADDR                               0x0E			
#define	      BNO055_MAG_DATA_X_MSB_ADDR                               0x0F			
#define	      BNO055_MAG_DATA_Y_LSB_ADDR                               0x10			
#define	      BNO055_MAG_DATA_Y_MSB_ADDR                               0x11			
#define	      BNO055_MAG_DATA_Z_LSB_ADDR                               0x12			
#define	      BNO055_MAG_DATA_Z_MSB_ADDR                               0x13			

#define	      BNO055_GYRO_DATA_X_LSB_ADDR                              0x14			
#define	      BNO055_GYRO_DATA_X_MSB_ADDR                              0x15			
#define	      BNO055_GYRO_DATA_Y_LSB_ADDR                              0x16			
#define	      BNO055_GYRO_DATA_Y_MSB_ADDR                              0x17			
#define	      BNO055_GYRO_DATA_Z_LSB_ADDR                              0x18			
#define	      BNO055_GYRO_DATA_Z_MSB_ADDR                              0x19			

#define	      BNO055_EULER_H_LSB_ADDR                                  0x1A			
#define	      BNO055_EULER_H_MSB_ADDR                                  0x1B			
#define	      BNO055_EULER_R_LSB_ADDR                                  0x1C			
#define	      BNO055_EULER_R_MSB_ADDR                                  0x1D			
#define	      BNO055_EULER_P_LSB_ADDR                                  0x1E			
#define	      BNO055_EULER_P_MSB_ADDR                                  0x1F			

#define	      BNO055_QUATERNION_DATA_W_LSB_ADDR                        0x20			
#define	      BNO055_QUATERNION_DATA_W_MSB_ADDR                        0x21			
#define	      BNO055_QUATERNION_DATA_X_LSB_ADDR                        0x22			
#define	      BNO055_QUATERNION_DATA_X_MSB_ADDR                        0x23			
#define	      BNO055_QUATERNION_DATA_Y_LSB_ADDR                        0x24			
#define	      BNO055_QUATERNION_DATA_Y_MSB_ADDR                        0x25			
#define	      BNO055_QUATERNION_DATA_Z_LSB_ADDR                        0x26			
#define	      BNO055_QUATERNION_DATA_Z_MSB_ADDR                        0x27			

#define	      BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR                      0x28			
#define	      BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR                      0x29			
#define	      BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR                      0x2A			
#define	      BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR                      0x2B			
#define	      BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR                      0x2C			
#define	      BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR                      0x2D			
		
#define	      BNO055_GRAVITY_DATA_X_LSB_ADDR                           0x2E			
#define	      BNO055_GRAVITY_DATA_X_MSB_ADDR                           0x2F			
#define	      BNO055_GRAVITY_DATA_Y_LSB_ADDR                           0x30			
#define	      BNO055_GRAVITY_DATA_Y_MSB_ADDR                           0x31			
#define	      BNO055_GRAVITY_DATA_Z_LSB_ADDR                           0x32			
#define	      BNO055_GRAVITY_DATA_Z_MSB_ADDR                           0x33			
		
#define	      BNO055_TEMP_ADDR                                         0x34			
	
#define	      BNO055_CALIB_STAT_ADDR                                   0x35			
#define	      BNO055_SELFTEST_RESULT_ADDR                              0x36			
#define	      BNO055_INTR_STAT_ADDR                                    0x37			
#define	      BNO055_SYS_CLK_STAT_ADDR                                 0x38			
#define	      BNO055_SYS_STAT_ADDR                                     0x39			
#define	      BNO055_SYS_ERR_ADDR                                      0x3A			
		
#define	      BNO055_UNIT_SEL_ADDR                                     0x3B			
#define	      BNO055_DATA_SELECT_ADDR                                  0x3C			
		
#define	      BNO055_OPR_MODE_ADDR                                     0x3D			
#define	      BNO055_PWR_MODE_ADDR                                     0x3E			
#define	      BNO055_SYS_TRIGGER_ADDR                                  0x3F			
#define	      BNO055_TEMP_SOURCE_ADDR                                  0x40			
#define	      BNO055_AxIS_MAP_CONFIG_ADDR                              0x41			
#define	      BNO055_AxIS_MAP_SIGN_ADDR                                0x42			

#define	      BNO055_SIC_MATRIX_0_LSB_ADDR                             0x43			
#define	      BNO055_SIC_MATRIX_0_MSB_ADDR                             0x44			
#define	      BNO055_SIC_MATRIX_1_LSB_ADDR                             0x45			
#define	      BNO055_SIC_MATRIX_1_MSB_ADDR                             0x46			
#define	      BNO055_SIC_MATRIX_2_LSB_ADDR                             0x47			
#define	      BNO055_SIC_MATRIX_2_MSB_ADDR                             0x48			
#define	      BNO055_SIC_MATRIX_3_LSB_ADDR                             0x49			
#define	      BNO055_SIC_MATRIX_3_MSB_ADDR                             0x4A			
#define	      BNO055_SIC_MATRIX_4_LSB_ADDR                             0x4B			
#define	      BNO055_SIC_MATRIX_4_MSB_ADDR                             0x4C			
#define	      BNO055_SIC_MATRIX_5_LSB_ADDR                             0x4D			
#define	      BNO055_SIC_MATRIX_5_MSB_ADDR                             0x4E			
#define	      BNO055_SIC_MATRIX_6_LSB_ADDR                             0x4F			
#define	      BNO055_SIC_MATRIX_6_MSB_ADDR                             0x50			
#define	      BNO055_SIC_MATRIX_7_LSB_ADDR                             0x51			
#define	      BNO055_SIC_MATRIX_7_MSB_ADDR                             0x52			
#define	      BNO055_SIC_MATRIX_8_LSB_ADDR                             0x53			
#define	      BNO055_SIC_MATRIX_8_MSB_ADDR                             0x54			

#define	      ACCEL_OFFSET_X_LSB_ADDR                                  0x55			
#define	      ACCEL_OFFSET_X_MSB_ADDR                                  0x56			
#define	      ACCEL_OFFSET_Y_LSB_ADDR                                  0x57			
#define	      ACCEL_OFFSET_Y_MSB_ADDR                                  0x58			
#define	      ACCEL_OFFSET_Z_LSB_ADDR                                  0x59			
#define	      ACCEL_OFFSET_Z_MSB_ADDR                                  0x5A			

#define	      MAG_OFFSET_X_LSB_ADDR                                    0x5B			
#define	      MAG_OFFSET_X_MSB_ADDR                                    0x5C			
#define	      MAG_OFFSET_Y_LSB_ADDR                                    0x5D			
#define	      MAG_OFFSET_Y_MSB_ADDR                                    0x5E			
#define	      MAG_OFFSET_Z_LSB_ADDR                                    0x5F			
#define	      MAG_OFFSET_Z_MSB_ADDR                                    0x60			

#define	      GYRO_OFFSET_X_LSB_ADDR                                   0x61			
#define	      GYRO_OFFSET_X_MSB_ADDR                                   0x62			
#define	      GYRO_OFFSET_Y_LSB_ADDR                                   0x63			
#define	      GYRO_OFFSET_Y_MSB_ADDR                                   0x64			
#define	      GYRO_OFFSET_Z_LSB_ADDR                                   0x65			
#define	      GYRO_OFFSET_Z_MSB_ADDR                                   0x66			

#define	      ACCEL_RADIUS_LSB_ADDR                                    0x67			
#define	      ACCEL_RADIUS_MSB_ADDR                                    0x68			

#define	      MAG_RADIUS_LSB_ADDR                                      0x69			
#define	      MAG_RADIUS_MSB_ADDR                                      0x6A			


  

#define	      POWER_MODE_NORMAL                                        0x00
#define	      POWER_MODE_LOWPOWER                                      0x01
#define	      POWER_MODE_SUSPEND                                       0x02
	
	

#define	      OPERATION_MODE_CONFIG                                    0x00
#define	      OPERATION_MODE_ACCONLY                                   0x01
#define	      OPERATION_MODE_MAGONLY                                   0x02
#define	      OPERATION_MODE_GYRONLY                                   0x03
#define	      OPERATION_MODE_ACCMAG                                    0x04
#define	      OPERATION_MODE_ACCGYRO                                   0x05
#define	      OPERATION_MODE_MAGGYRO                                   0x06
#define	      OPERATION_MODE_AMG                                       0x07
#define	      OPERATION_MODE_IMUPLUS                                   0x08
#define	      OPERATION_MODE_COMPASS                                   0x09
#define	      OPERATION_MODE_M4G                                       0x0A
#define	      OPERATION_MODE_NDOF_FMC_OFF                              0x0B
#define	      OPERATION_MODE_NDOF                                      0x0C
	
#define	      REMAP_CONFIG_P0                                          0x21
#define	      REMAP_CONFIG_P1                                          0x24 
#define	      REMAP_CONFIG_P2                                          0x24
#define	      REMAP_CONFIG_P3                                          0x21
#define	      REMAP_CONFIG_P4                                          0x24
#define	      REMAP_CONFIG_P5                                          0x21
#define	      REMAP_CONFIG_P6                                          0x21
#define	      REMAP_CONFIG_P7                                          0x24
	
#define	      REMAP_SIGN_P0                                            0x04
#define	      REMAP_SIGN_P1                                            0x00 
#define	      REMAP_SIGN_P2                                            0x06
#define	      REMAP_SIGN_P3                                            0x02
#define	      REMAP_SIGN_P4                                            0x03
#define	      REMAP_SIGN_P5                                            0x01
#define	      REMAP_SIGN_P6                                            0x07
#define	      REMAP_SIGN_P7                                            0x05



    typedef struct
    {
      uint8_t  accel_rev;
      uint8_t  mag_rev;
      uint8_t  gyro_rev;
      uint16_t sw_rev;
      uint8_t  bl_rev;
    } adafruit_bno055_rev_info_t;

    typedef enum
    {
      VECTOR_ACCELEROMETER = BNO055_ACCEL_DATA_X_LSB_ADDR,
      VECTOR_MAGNETOMETER  = BNO055_MAG_DATA_X_LSB_ADDR,
      VECTOR_GYROSCOPE     = BNO055_GYRO_DATA_X_LSB_ADDR,
      VECTOR_EULER         = BNO055_EULER_H_LSB_ADDR,
      VECTOR_LINEARACCEL   = BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR,
      VECTOR_GRAVITY       = BNO055_GRAVITY_DATA_X_LSB_ADDR
    } adafruit_vector_type_t;

		


extern uint8_t bno055_init(uint8_t reg);
extern void set_mode(uint8_t mode);
extern uint8_t i2c_read(uint8_t adress,uint8_t len);
extern void i2c_write(uint8_t reg,uint8_t value);			
extern void i2c_read_multi(uint8_t adress);
extern void euler_oku(void);		
	
		
		
#endif
 

source

#include "bno055.h"





extern uint8_t j,k,g,h;
extern uint8_t buffer[6];	
extern uint8_t id;	
extern uint8_t data;
extern uint8_t veri[6]; 	
extern uint8_t operasyon;	
extern int16_t Heading,Roll,Pitch;
extern int32_t date[3];
extern uint8_t opr,sys;	

void i2c_write(uint8_t reg,uint8_t value)    // 1 byte yazma yapar
{
	
HAL_I2C_Mem_Write(&hi2c2,BNO055_ADDRESS_W,reg,I2C_MEMADD_SIZE_8BIT,&value,1,50);	
	

}






uint8_t i2c_read(uint8_t adress,uint8_t len)    //1 byte okuma yapar
{

HAL_I2C_Mem_Read(&hi2c2,BNO055_ADDRESS_R,adress,I2C_MEMADD_SIZE_8BIT,&data,len,50);

	return data;
}
	






void i2c_read_multi(uint8_t adress)	     //6 byte okuma yapar.
{
	
i2c_write(BNO055_PAGE_ID_ADDR,0x00);	
	
HAL_I2C_Mem_Read(&hi2c2,BNO055_ADDRESS_R,adress,I2C_MEMADD_SIZE_8BIT,veri,6,50);	
	
	
}

	
uint8_t bno055_init(uint8_t reg)   // bno055 init eder.
{
	
	
HAL_I2C_Mem_Read(&hi2c2,BNO055_ADDRESS_R,reg,I2C_MEMADD_SIZE_8BIT,&id,1,50);
	
	
i2c_write(BNO055_PAGE_ID_ADDR,0x00);   //
	HAL_Delay(10);
set_mode(OPERATION_MODE_CONFIG);     //config seçiliyor
i2c_write(BNO055_UNIT_SEL_ADDR,0x00);    // euler birimi seçiliyor
HAL_Delay(10);
set_mode(OPERATION_MODE_NDOF);     // fusion modu ndof olarak seçiliyor
HAL_Delay(10);
opr=i2c_read(BNO055_OPR_MODE_ADDR,1);     // çalisma modu okunuyor


g=i2c_read(BNO055_UNIT_SEL_ADDR,1);
h=i2c_read(BNO055_SYS_ERR_ADDR ,1);

sys=i2c_read(BNO055_SYS_TRIGGER_ADDR,1);	  
	
	
	
//HAL_I2C_Mem_Write(&hi2c2,BNO055_ADDRESS_W,BNO055_PWR_MODE_ADDR,I2C_MEMADD_SIZE_8BIT,POWER_MODE_NORMAL,1,50);	
	
k=id;	

if(id==BNO055_ID)
{
	return 1;
}
else
{
	return 0;
}

}




void set_mode(uint8_t mode)
{

	
	i2c_write(BNO055_OPR_MODE_ADDR,mode);
	HAL_Delay(30);
	
}




void euler_oku()
{
	
i2c_read_multi(BNO055_EULER_H_LSB_ADDR);	
	
Heading=veri[1];
Heading=Heading<<8|veri[0];		
Roll=veri[3];
Roll=Roll<<8|veri[2];
Pitch=veri[5];
Pitch=Pitch<<8|veri[4];	
		
date[0]=((int32_t)Heading)/16.0f;
date[1]=((int32_t)Roll)/16.0f;		
date[2]=((int32_t)Pitch)/16.0f;		
	
		
}

apsis

Alıntı Yap6050 yi ben de 877a da kullandım bir hazır kütüphane ile ama sadece acılar var. 9250 de acı, pusula ve ivme var galiba. Hepsini bir arada deneme şansım olmadı hiç.

MPU6050'den de ivme ölçülebilir. 6050 ivme+gyro'dur. Registerlarına bakarsanız ivme ve gyro için ayrı ayrı adresler var.
"Makineye Beyin" MEKATRONİK