commit
1090c2fb99
@ -1,181 +0,0 @@
|
||||
/*
|
||||
* File: filtLowPass.c
|
||||
*
|
||||
* Code generated for Simulink model 'filtLowPass'.
|
||||
*
|
||||
* Model version : 1.1167
|
||||
* Simulink Coder version : 8.13 (R2017b) 24-Jul-2017
|
||||
* C/C++ source code generated on : Sun Oct 6 22:11:53 2019
|
||||
*
|
||||
* Target selection: ert.tlc
|
||||
* Embedded hardware selection: ARM Compatible->ARM Cortex
|
||||
* Emulation hardware selection:
|
||||
* Differs from embedded hardware (MATLAB Host)
|
||||
* Code generation objectives:
|
||||
* 1. Execution efficiency
|
||||
* 2. RAM efficiency
|
||||
* Validation result: Not run
|
||||
*/
|
||||
|
||||
#include "filtLowPass.h"
|
||||
#ifndef UCHAR_MAX
|
||||
#include <limits.h>
|
||||
#endif
|
||||
|
||||
#if ( UCHAR_MAX != (0xFFU) ) || ( SCHAR_MAX != (0x7F) )
|
||||
#error Code was generated for compiler with different sized uchar/char. \
|
||||
Consider adjusting Test hardware word size settings on the \
|
||||
Hardware Implementation pane to match your compiler word sizes as \
|
||||
defined in limits.h of the compiler. Alternatively, you can \
|
||||
select the Test hardware is the same as production hardware option and \
|
||||
select the Enable portable word sizes option on the Code Generation > \
|
||||
Verification pane for ERT based targets, which will disable the \
|
||||
preprocessor word size checks.
|
||||
#endif
|
||||
|
||||
#if ( USHRT_MAX != (0xFFFFU) ) || ( SHRT_MAX != (0x7FFF) )
|
||||
#error Code was generated for compiler with different sized ushort/short. \
|
||||
Consider adjusting Test hardware word size settings on the \
|
||||
Hardware Implementation pane to match your compiler word sizes as \
|
||||
defined in limits.h of the compiler. Alternatively, you can \
|
||||
select the Test hardware is the same as production hardware option and \
|
||||
select the Enable portable word sizes option on the Code Generation > \
|
||||
Verification pane for ERT based targets, which will disable the \
|
||||
preprocessor word size checks.
|
||||
#endif
|
||||
|
||||
#if ( UINT_MAX != (0xFFFFFFFFU) ) || ( INT_MAX != (0x7FFFFFFF) )
|
||||
#error Code was generated for compiler with different sized uint/int. \
|
||||
Consider adjusting Test hardware word size settings on the \
|
||||
Hardware Implementation pane to match your compiler word sizes as \
|
||||
defined in limits.h of the compiler. Alternatively, you can \
|
||||
select the Test hardware is the same as production hardware option and \
|
||||
select the Enable portable word sizes option on the Code Generation > \
|
||||
Verification pane for ERT based targets, which will disable the \
|
||||
preprocessor word size checks.
|
||||
#endif
|
||||
|
||||
#if ( ULONG_MAX != (0xFFFFFFFFU) ) || ( LONG_MAX != (0x7FFFFFFF) )
|
||||
#error Code was generated for compiler with different sized ulong/long. \
|
||||
Consider adjusting Test hardware word size settings on the \
|
||||
Hardware Implementation pane to match your compiler word sizes as \
|
||||
defined in limits.h of the compiler. Alternatively, you can \
|
||||
select the Test hardware is the same as production hardware option and \
|
||||
select the Enable portable word sizes option on the Code Generation > \
|
||||
Verification pane for ERT based targets, which will disable the \
|
||||
preprocessor word size checks.
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
|
||||
/* Skip this size verification because of preprocessor limitation */
|
||||
#if ( ULLONG_MAX != (0xFFFFFFFFFFFFFFFFULL) ) || ( LLONG_MAX != (0x7FFFFFFFFFFFFFFFLL) )
|
||||
#error Code was generated for compiler with different sized ulong_long/long_long. \
|
||||
Consider adjusting Test hardware word size settings on the \
|
||||
Hardware Implementation pane to match your compiler word sizes as \
|
||||
defined in limits.h of the compiler. Alternatively, you can \
|
||||
select the Test hardware is the same as production hardware option and \
|
||||
select the Enable portable word sizes option on the Code Generation > \
|
||||
Verification pane for ERT based targets, which will disable the \
|
||||
preprocessor word size checks.
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern int16_T filtLowPass_l(int16_T rtu_u, uint16_T rtu_coef, DW_filtLowPass
|
||||
*localDW);
|
||||
|
||||
/*===========*
|
||||
* Constants *
|
||||
*===========*/
|
||||
#define RT_PI 3.14159265358979323846
|
||||
#define RT_PIF 3.1415927F
|
||||
#define RT_LN_10 2.30258509299404568402
|
||||
#define RT_LN_10F 2.3025851F
|
||||
#define RT_LOG10E 0.43429448190325182765
|
||||
#define RT_LOG10EF 0.43429449F
|
||||
#define RT_E 2.7182818284590452354
|
||||
#define RT_EF 2.7182817F
|
||||
|
||||
/*
|
||||
* UNUSED_PARAMETER(x)
|
||||
* Used to specify that a function parameter (argument) is required but not
|
||||
* accessed by the function body.
|
||||
*/
|
||||
#ifndef UNUSED_PARAMETER
|
||||
# if defined(__LCC__)
|
||||
# define UNUSED_PARAMETER(x) /* do nothing */
|
||||
# else
|
||||
|
||||
/*
|
||||
* This is the semi-ANSI standard way of indicating that an
|
||||
* unused function parameter is required.
|
||||
*/
|
||||
# define UNUSED_PARAMETER(x) (void) (x)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Output and update for atomic system: '<Root>/filtLowPass' */
|
||||
int16_T filtLowPass_l(int16_T rtu_u, uint16_T rtu_coef, DW_filtLowPass *localDW)
|
||||
{
|
||||
int32_T tmp;
|
||||
int16_T rty_y_0;
|
||||
|
||||
/* Outputs for Atomic SubSystem: '<S1>/Low_Pass_Filter1' */
|
||||
/* Sum: '<S2>/Sum1' incorporates:
|
||||
* DataTypeConversion: '<S1>/Data Type Conversion'
|
||||
* Product: '<S2>/Divide1'
|
||||
* Product: '<S2>/Divide2'
|
||||
* Sum: '<S2>/Sum5'
|
||||
* UnitDelay: '<S2>/UnitDelay3'
|
||||
*/
|
||||
tmp = (((int16_T)(rtu_u << 4) * rtu_coef) >> 16) + (((int32_T)(65535U -
|
||||
rtu_coef) * localDW->UnitDelay3_DSTATE) >> 16);
|
||||
if (tmp > 32767) {
|
||||
tmp = 32767;
|
||||
} else {
|
||||
if (tmp < -32768) {
|
||||
tmp = -32768;
|
||||
}
|
||||
}
|
||||
|
||||
rty_y_0 = (int16_T)tmp;
|
||||
|
||||
/* Update for UnitDelay: '<S2>/UnitDelay3' incorporates:
|
||||
* Sum: '<S2>/Sum1'
|
||||
*/
|
||||
localDW->UnitDelay3_DSTATE = (int16_T)tmp;
|
||||
|
||||
/* End of Outputs for SubSystem: '<S1>/Low_Pass_Filter1' */
|
||||
return rty_y_0;
|
||||
}
|
||||
|
||||
/* Model step function */
|
||||
void filtLowPass_step(RT_MODEL *const rtM)
|
||||
{
|
||||
DW *rtDW = ((DW *) rtM->dwork);
|
||||
ExtU *rtU = (ExtU *) rtM->inputs;
|
||||
ExtY *rtY = (ExtY *) rtM->outputs;
|
||||
|
||||
/* Outputs for Atomic SubSystem: '<Root>/filtLowPass' */
|
||||
|
||||
/* Outport: '<Root>/y' incorporates:
|
||||
* Inport: '<Root>/coef'
|
||||
* Inport: '<Root>/u'
|
||||
*/
|
||||
rtY->y = (int16_T) filtLowPass_l(rtU->u, rtU->coef, &rtDW->filtLowPass_l2);
|
||||
|
||||
/* End of Outputs for SubSystem: '<Root>/filtLowPass' */
|
||||
}
|
||||
|
||||
/* Model initialize function */
|
||||
void filtLowPass_initialize(RT_MODEL *const rtM)
|
||||
{
|
||||
/* (no initialization code required) */
|
||||
UNUSED_PARAMETER(rtM);
|
||||
}
|
||||
|
||||
/*
|
||||
* File trailer for generated code.
|
||||
*
|
||||
* [EOF]
|
||||
*/
|
||||
@ -1,91 +0,0 @@
|
||||
/*
|
||||
* File: filtLowPass.h
|
||||
*
|
||||
* Code generated for Simulink model 'filtLowPass'.
|
||||
*
|
||||
* Model version : 1.1167
|
||||
* Simulink Coder version : 8.13 (R2017b) 24-Jul-2017
|
||||
* C/C++ source code generated on : Sun Oct 6 22:11:53 2019
|
||||
*
|
||||
* Target selection: ert.tlc
|
||||
* Embedded hardware selection: ARM Compatible->ARM Cortex
|
||||
* Emulation hardware selection:
|
||||
* Differs from embedded hardware (MATLAB Host)
|
||||
* Code generation objectives:
|
||||
* 1. Execution efficiency
|
||||
* 2. RAM efficiency
|
||||
* Validation result: Not run
|
||||
*/
|
||||
|
||||
#ifndef RTW_HEADER_filtLowPass_h_
|
||||
#define RTW_HEADER_filtLowPass_h_
|
||||
#ifndef filtLowPass_COMMON_INCLUDES_
|
||||
# define filtLowPass_COMMON_INCLUDES_
|
||||
#include "rtwtypes.h"
|
||||
#endif /* filtLowPass_COMMON_INCLUDES_ */
|
||||
|
||||
/* Macros for accessing real-time model data structure */
|
||||
|
||||
/* Forward declaration for rtModel */
|
||||
typedef struct tag_RTM RT_MODEL;
|
||||
|
||||
/* Block signals and states (auto storage) for system '<Root>/filtLowPass' */
|
||||
typedef struct {
|
||||
int16_T UnitDelay3_DSTATE; /* '<S2>/UnitDelay3' */
|
||||
} DW_filtLowPass;
|
||||
|
||||
/* Block signals and states (auto storage) for system '<Root>' */
|
||||
typedef struct {
|
||||
DW_filtLowPass filtLowPass_l2; /* '<Root>/filtLowPass' */
|
||||
} DW;
|
||||
|
||||
/* External inputs (root inport signals with auto storage) */
|
||||
typedef struct {
|
||||
int16_T u; /* '<Root>/u' */
|
||||
uint16_T coef; /* '<Root>/coef' */
|
||||
} ExtU;
|
||||
|
||||
/* External outputs (root outports fed by signals with auto storage) */
|
||||
typedef struct {
|
||||
int16_T y; /* '<Root>/y' */
|
||||
} ExtY;
|
||||
|
||||
/* Real-time Model Data Structure */
|
||||
struct tag_RTM {
|
||||
ExtU *inputs;
|
||||
ExtY *outputs;
|
||||
DW *dwork;
|
||||
};
|
||||
|
||||
/* Model entry point functions */
|
||||
extern void filtLowPass_initialize(RT_MODEL *const rtM);
|
||||
extern void filtLowPass_step(RT_MODEL *const rtM);
|
||||
|
||||
/*-
|
||||
* The generated code includes comments that allow you to trace directly
|
||||
* back to the appropriate location in the model. The basic format
|
||||
* is <system>/block_name, where system is the system number (uniquely
|
||||
* assigned by Simulink) and block_name is the name of the block.
|
||||
*
|
||||
* Note that this particular code originates from a subsystem build,
|
||||
* and has its own system numbers different from the parent model.
|
||||
* Refer to the system hierarchy for this subsystem below, and use the
|
||||
* MATLAB hilite_system command to trace the generated code back
|
||||
* to the parent model. For example,
|
||||
*
|
||||
* hilite_system('BLDCmotorControl_FOC_R2017b_fixdt/filtLowPass') - opens subsystem BLDCmotorControl_FOC_R2017b_fixdt/filtLowPass
|
||||
* hilite_system('BLDCmotorControl_FOC_R2017b_fixdt/filtLowPass/Kp') - opens and selects block Kp
|
||||
*
|
||||
* Here is the system hierarchy for this model
|
||||
*
|
||||
* '<Root>' : 'BLDCmotorControl_FOC_R2017b_fixdt'
|
||||
* '<S1>' : 'BLDCmotorControl_FOC_R2017b_fixdt/filtLowPass'
|
||||
* '<S2>' : 'BLDCmotorControl_FOC_R2017b_fixdt/filtLowPass/Low_Pass_Filter1'
|
||||
*/
|
||||
#endif /* RTW_HEADER_filtLowPass_h_ */
|
||||
|
||||
/*
|
||||
* File trailer for generated code.
|
||||
*
|
||||
* [EOF]
|
||||
*/
|
||||
Binary file not shown.
@ -0,0 +1,96 @@
|
||||
/**
|
||||
* This file is part of the hoverboard-firmware-hack project.
|
||||
*
|
||||
* Copyright (C) 2020-2021 Emanuel FERU <aerdronix@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// Define to prevent recursive inclusion
|
||||
#ifndef UTIL_H
|
||||
#define UTIL_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#if defined(CONTROL_SERIAL_USART2) || defined(CONTROL_SERIAL_USART3)
|
||||
#ifdef CONTROL_IBUS
|
||||
typedef struct{
|
||||
uint8_t start;
|
||||
uint8_t type;
|
||||
uint8_t channels[IBUS_NUM_CHANNELS*2];
|
||||
uint8_t checksuml;
|
||||
uint8_t checksumh;
|
||||
} Serialcommand;
|
||||
#else
|
||||
typedef struct{
|
||||
uint16_t start;
|
||||
int16_t steer;
|
||||
int16_t speed;
|
||||
uint16_t checksum;
|
||||
} Serialcommand;
|
||||
#endif
|
||||
#endif
|
||||
#if defined(SIDEBOARD_SERIAL_USART2) || defined(SIDEBOARD_SERIAL_USART3)
|
||||
typedef struct{
|
||||
uint16_t start;
|
||||
int16_t roll;
|
||||
int16_t pitch;
|
||||
int16_t yaw;
|
||||
uint16_t sensors;
|
||||
uint16_t checksum;
|
||||
} SerialSideboard;
|
||||
#endif
|
||||
|
||||
// Initialization Functions
|
||||
void BLDC_Init(void);
|
||||
void Input_Lim_Init(void);
|
||||
void Input_Init(void);
|
||||
|
||||
// General Functions
|
||||
void poweronMelody(void);
|
||||
void shortBeep(uint8_t freq);
|
||||
void shortBeepMany(uint8_t cnt);
|
||||
void longBeep(uint8_t freq);
|
||||
void calcAvgSpeed(void);
|
||||
void adcCalibLim(void);
|
||||
void updateCurSpdLim(void);
|
||||
void saveConfig(void);
|
||||
|
||||
// Poweroff Functions
|
||||
void poweroff(void);
|
||||
void poweroffPressCheck(void);
|
||||
|
||||
// Read Command Function
|
||||
void readCommand(void);
|
||||
|
||||
// Sideboard functions
|
||||
void sideboardLeds(uint8_t *leds);
|
||||
void sideboardSensors(uint8_t sensors);
|
||||
|
||||
// Filtering Functions
|
||||
void filtLowPass32(int32_t u, uint16_t coef, int32_t *y);
|
||||
void rateLimiter16(int16_t u, int16_t rate, int16_t *y);
|
||||
void mixerFcn(int16_t rtu_speed, int16_t rtu_steer, int16_t *rty_speedR, int16_t *rty_speedL);
|
||||
|
||||
// Multiple Tap Function
|
||||
typedef struct {
|
||||
uint32_t t_timePrev;
|
||||
uint8_t z_pulseCntPrev;
|
||||
uint8_t b_hysteresis;
|
||||
uint8_t b_multipleTap;
|
||||
} MultipleTap;
|
||||
void multipleTapDet(int16_t u, uint32_t timeNow, MultipleTap *x);
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
Reference in new issue