Compare commits
	
		
			No commits in common. '2c707929a294bdd98fc2d534dff72d881af4a051' and 'ab8fb924ed4cb9c49e8a67543521d86e6b7a6e24' have entirely different histories. 
		
	
	
		
			2c707929a2
			...
			ab8fb924ed
		
	
		
	| @ -1,36 +0,0 @@ | ||||
| #include <util/atomic.h> | ||||
| #include "pid.h" | ||||
| 
 | ||||
| extern volatile uint16_t holdingRegisters[10]; | ||||
| int16_t pid_step(volatile struct pid* controller, float dt, int16_t error) { | ||||
|     // Calculate p term
 | ||||
| 
 | ||||
|     uint16_t p = error * controller->kP; | ||||
| 
 | ||||
|     // Calculate i term
 | ||||
|     ATOMIC_BLOCK(ATOMIC_FORCEON){ | ||||
|         controller->integral += error * dt * controller->kI; | ||||
|         if(controller->integral > 80) | ||||
|             controller->integral = 80; | ||||
|         if(controller->integral < -80) | ||||
|             controller->integral = -80; | ||||
|     } | ||||
|     //holdingRegisters[3]=((float)(error) * controller->kI);
 | ||||
|     //holdingRegisters[4] = error;
 | ||||
| 
 | ||||
|     // Calculate d term, taking care to not divide by zero
 | ||||
|     float d = dt == 0 ? 0 : ((error - controller->lastError) / dt) * controller->kD; | ||||
|     controller->lastError = error; | ||||
| 
 | ||||
|     return p + controller->integral + d; | ||||
| } | ||||
| 
 | ||||
| void init_pid(volatile struct pid* controller, float p, float i, float d){ | ||||
|     *controller = (struct pid){ | ||||
|         .kP = p, | ||||
|         .kI = i, | ||||
|         .kD = d, | ||||
|         .lastError = 0, | ||||
|         .integral = 0 | ||||
|     }; | ||||
| } | ||||
| @ -1,21 +0,0 @@ | ||||
| #ifndef _PID_H_ | ||||
| #define _PID_H_ | ||||
| 
 | ||||
| #include <stdint.h> | ||||
| 
 | ||||
| struct pid{ | ||||
|     // Controller gains
 | ||||
|     float kP; | ||||
|     float kI; | ||||
|     float kD; | ||||
| 
 | ||||
|     // State variables
 | ||||
|     float lastError; | ||||
|     float integral; | ||||
| }; | ||||
| 
 | ||||
| //float pid_step(volatile struct pid* controller, float dt, float error);
 | ||||
| int16_t pid_step(volatile struct pid* controller, float dt, int16_t error); | ||||
| void init_pid(volatile struct pid* controller, float p, float i, float d); | ||||
| 
 | ||||
| #endif | ||||
					Loading…
					
					
				
		Reference in New Issue