12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- * position.c
- *
- * Author: Andrey Koryagin https://blog.avislab.com/
- */
- #include "u_foc.h"
- #define POSITION_MAX 4095
- extern volatile SettingsStruct Settings;
- PIDstruct PositionPID;
- int32_t POSITION_TASK = 0;
- int32_t Position_Calc () {
- int32_t pos;
- //pos = (int32_t)MC_ADC_GetRegularValue(ADC_POT) - POSITION_TASK;
- pos = POSITION_TASK - (int32_t)MC_ADC_GetRegularValue(ADC_POT);
- if (pos > POSITION_MAX/2) {
- pos = pos - POSITION_MAX;
- }
- if (pos < -POSITION_MAX/2) {
- pos = POSITION_MAX + pos;
- }
- return pos;
- }
- void Position_Init () {
- PositionPID.kp = 50000;
- PositionPID.ki = 50000;
- PositionPID.kd = 0;
- PositionPID.max = Settings.RpmMax;
- PositionPID.min = -Settings.RpmMax;
- PositionPID.task = 0;
- PositionPID.input = Position_Calc();
- MC_SetMode(MC_MODE_SPEED);
- MC_SetSpeed(0);
- }
- void Position_Process () {
- PositionPID.input = Position_Calc();
- int16_t speed = -(int16_t)PI_Compute(&PositionPID);
- if ((-200 < speed) & (speed < 200) ) {
- speed=0;
- }
- MC_SetSpeed(speed);
- }
- void Position_Set (uint16_t position) {
- if (position > POSITION_MAX) {
- position = POSITION_MAX;
- }
- POSITION_TASK = (int32_t)position;
- }
- uint16_t Position_Get () {
- return (uint16_t)POSITION_TASK;
- }
- uint16_t Position_Get_Real () {
- return (uint16_t) MC_ADC_GetRegularValue(ADC_POT);
- }
|