Back

Analysefase testen versnellinsgmeter

  • Om de versnellingsmeter te testen heb ik eerst in STMCubeMX/IDE een testprogramma geschreven om de waarden van de analoge X pin van de versnellingsmeter uit te lezen.
    Foto van de aansluiting:
    aansluiting pins ADXL337
  • Ik heb pin PA0 (A0) van de microcontroller gebruikt voor ADC1.
    Pinout:
    accelerometer pinout
  • Code STM voor uitlezen versnellingsmeter:
                    
    /**
    * @brief  The application entry point.
    * @retval int
    */
    int main(void) {
    /* USER CODE BEGIN 1 */
    /* USER CODE END 1 */
    /* MCU Configuration--------------------------------------------------------*/
    
    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();
    
    /* USER CODE BEGIN Init */
    
    uint16_t raw;
    char buf[40];
    uint16_t AD_RES = 0;
    
    /* USER CODE END Init */
    
    /* Configure the system clock */
    SystemClock_Config();
    
    /* USER CODE BEGIN SysInit */
    /* USER CODE END SysInit */
    
    /* Initialize all configured peripherals */
    
    MX_GPIO_Init();
    MX_USART2_UART_Init();
    MX_ADC1_Init();
    
    /* USER CODE BEGIN 2 */
    
    /* USER CODE END 2 */
    
    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    
    while (1) {
    
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
    raw = HAL_ADC_GetValue(&hadc1);
    
    sprintf(buf, "%hu\r\n", raw);
    HAL_UART_Transmit(&huart2, (uint8_t*)buf, strlen((char*) buf), HAL_MAX_DELAY);
    HAL_Delay(1);
    
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
    }
    /* USER CODE END 3 */
    }
            
        
  • Als ik de accelorameter niet beweeg krijg ik de waarden uit de linker foto, als ik de accelorameter wel beweeg krijg ik de waarden uit de rechter foto. Uit de waarden is te zien dat ze niet veranderen als ik de accelorameter beweeg. Hierom kreeg ik het vermoeden dat de accelorameter defect was.

    Om mijn vermoeden vast te stellen heb ik ook een testprogramma geschreven in de Arduino IDE, omdat het hiermee makkelijker was om alle analoge waarden om te zetten naar digitale waarden.
  • Code Arduino om versnellingsmeter uit te lezen:
                    
    int scale = 3; // 3 (±3g) for ADXL337, 200 (±200g) for ADXL377
    
    void setup()
    {
    // Initialize serial communication at 115200 baud
    Serial.begin(115200);
    }
    
    // Read, scale, and print accelerometer data
    void loop()
    {
    // Get raw accelerometer data for each axis
    int rawX = analogRead(A0);
    int rawY = analogRead(A1);
    int rawZ = analogRead(A2);
    // Scale accelerometer ADC readings into common units
    // Scale map depends on if using a 5V or 3.3V microcontroller
    float scaledX, scaledY, scaledZ; // Scaled values for each axis
    scaledX = mapf(rawX, 0, 675, -scale, scale); // 3.3/5 * 1023 =~ 675
    scaledY = mapf(rawY, 0, 675, -scale, scale);
    scaledZ = mapf(rawZ, 0, 675, -scale, scale);
    // Print out raw X,Y,Z accelerometer readings
    Serial.print("X: ");
    Serial.print(rawX);
    Serial.print(" ");
    Serial.print(scaledX);
    Serial.print(" Y: ");
    Serial.print(rawY);
    Serial.print(" ");
    Serial.print(scaledY);
    Serial.print(" Z: ");
    Serial.print(rawZ);
    Serial.print(" ");
    Serial.print(scaledZ);
    Serial.println();
    delay(20); // Minimum delay of 2 milliseconds between sensor reads (500 Hz)
    }
    // Same functionality as Arduino's standard map function, except using floats
    float mapf(float x, float in_min, float in_max, float out_min, float out_max)
    {
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    }
                
            

    De arduino waarden zijn te lezen als:
    X: [ruwe x waarde] [X g-krachten] Y: [ruwe Y waarde] [Y g-krachten] Z: [ruwe Z waarde] [Z g-krachten]
    De verkregen waarden zijn als volgt:
    Bij stilstand:

    Bij beweging:
    beweging
    Er is dus te zien dat de x- en z-waarden niet veranderen. Alleen de y-waarde verandert op een gegeven moment maar deze gaat hierna ook niet meer terug naar de stationaire waarde.
    Met deze gegevens heb ik de conclusie getrokken dat de accelorameter defect is en dat er een nieuwe besteld moet worden.