/* Copyright 2015 Benjamin Vedder benjamin@vedder.se 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 . */ /* * mcpwm_foc.h * * Created on: 10 okt 2015 * Author: benjamin */ #ifndef MCPWM_FOC_H_ #define MCPWM_FOC_H_ #include "conf_general.h" #include "datatypes.h" #include // Functions void mcpwm_foc_init(volatile mc_configuration *configuration); void mcpwm_foc_deinit(void); void mcpwm_foc_set_configuration(volatile mc_configuration *configuration); mc_state mcpwm_foc_get_state(void); bool mcpwm_foc_is_dccal_done(void); void mcpwm_foc_stop_pwm(void); void mcpwm_foc_set_duty(float dutyCycle); void mcpwm_foc_set_duty_noramp(float dutyCycle); void mcpwm_foc_set_pid_speed(float rpm); void mcpwm_foc_set_pid_pos(float pos); void mcpwm_foc_set_current(float current); void mcpwm_foc_set_brake_current(float current); float mcpwm_foc_get_duty_cycle_set(void); float mcpwm_foc_get_duty_cycle_now(void); float mcpwm_foc_get_switching_frequency_now(void); float mcpwm_foc_get_rpm(void); float mcpwm_foc_get_tot_current(void); float mcpwm_foc_get_tot_current_filtered(void); float mcpwm_foc_get_abs_motor_current(void); float mcpwm_foc_get_tot_current_directional(void); float mcpwm_foc_get_tot_current_directional_filtered(void); float mcpwm_foc_get_tot_current_in(void); float mcpwm_foc_get_tot_current_in_filtered(void); int mcpwm_foc_get_tachometer_value(bool reset); int mcpwm_foc_get_tachometer_abs_value(bool reset); float mcpwm_foc_get_phase(void); float mcpwm_foc_get_phase_observer(void); float mcpwm_foc_get_phase_encoder(void); float mcpwm_foc_get_vd(void); float mcpwm_foc_get_vq(void); void mcpwm_foc_encoder_detect(float current, float *offset, float *ratio, bool *inverted); float mcpwm_foc_measure_resistance(float current, int samples); float mcpwm_foc_measure_inductance(float duty, int samples, float *curr); bool mcpwm_foc_measure_res_ind(float *res, float *ind); void mcpwm_foc_print_state(void); // Interrupt handlers void mcpwm_foc_adc_inj_int_handler(void); // Defines #define MCPWM_FOC_INDUCTANCE_SAMPLE_CNT_OFFSET 10 // Offset for the inductance measurement sample time in timer ticks #define MCPWM_FOC_INDUCTANCE_SAMPLE_RISE_COMP 50 // Current rise time compensation #endif /* MCPWM_FOC_H_ */