Compare commits
	
		
			No commits in common. '92f31a1849f98faf6028a30711a710b249458c17' and '2bbafd5569dfdf162e0fba0202b0cb849e53a458' have entirely different histories. 
		
	
	
		
			92f31a1849
			...
			2bbafd5569
		
	
		
	| @ -1,42 +0,0 @@ | |||||||
| #include <util/atomic.h> |  | ||||||
| 
 |  | ||||||
| #include "buffer.h" |  | ||||||
| 
 |  | ||||||
| void insert_to_buffer(uint16_t val, volatile buffer_t* buf){ |  | ||||||
|     ATOMIC_BLOCK(ATOMIC_FORCEON){ |  | ||||||
|         buf->position++; |  | ||||||
|         if(buf->position == BUFFER_SIZE) |  | ||||||
|             buf->position = 0; |  | ||||||
|         buf->values[buf->position] = val; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| float get_buffer_mean(volatile buffer_t* buf){ |  | ||||||
| 
 |  | ||||||
|     ///* discard lowest and highest value */
 |  | ||||||
|     //uint16_t low=0xFFFF;
 |  | ||||||
|     //uint16_t high=0;
 |  | ||||||
|     //uint16_t index_l = 0;
 |  | ||||||
|     //uint16_t index_h = 0;
 |  | ||||||
|     //for(uint16_t i=0; i<BUFFER_SIZE; i++){
 |  | ||||||
|     //    if(buf->values[i] < low){
 |  | ||||||
|     //        low=buf->values[i];
 |  | ||||||
|     //        index_l = i;
 |  | ||||||
|     //    }
 |  | ||||||
|     //    if(buf->values[i] > high){
 |  | ||||||
|     //        high=buf->values[i];
 |  | ||||||
|     //        index_h = i;
 |  | ||||||
|     //    }
 |  | ||||||
|     //}
 |  | ||||||
|          |  | ||||||
| 
 |  | ||||||
|     uint32_t sum = 0; |  | ||||||
|     for(uint16_t i=0; i<BUFFER_SIZE; i++){ |  | ||||||
|         //if(i == index_h || i == index_l)
 |  | ||||||
|         //    continue;
 |  | ||||||
|         sum += buf->values[i]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     uint16_t res = sum/(BUFFER_SIZE/*-2*/); |  | ||||||
|     return res; |  | ||||||
| } |  | ||||||
| @ -1,11 +0,0 @@ | |||||||
| #include <stdint.h> |  | ||||||
| 
 |  | ||||||
| #define BUFFER_SIZE 200 |  | ||||||
| 
 |  | ||||||
| typedef struct { |  | ||||||
|     uint16_t values[BUFFER_SIZE]; |  | ||||||
|     uint16_t position; |  | ||||||
| } buffer_t; |  | ||||||
| 
 |  | ||||||
| void insert_to_buffer(uint16_t val, volatile buffer_t* buf); |  | ||||||
| float get_buffer_mean(volatile buffer_t* buf); |  | ||||||
| @ -1,32 +0,0 @@ | |||||||
| #include <util/atomic.h> |  | ||||||
| #include "pid.h" |  | ||||||
| 
 |  | ||||||
| float pid_step(volatile struct pid* controller, float dt, float error) { |  | ||||||
|     // Calculate p term
 |  | ||||||
|     float 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; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // 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,14 +0,0 @@ | |||||||
| 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); |  | ||||||
| void init_pid(volatile struct pid* controller, float p, float i, float d); |  | ||||||
| 
 |  | ||||||
| @ -1,43 +0,0 @@ | |||||||
| import time |  | ||||||
| from simple_pid import PID |  | ||||||
| from itertools import count |  | ||||||
| import matplotlib.pyplot as plt |  | ||||||
| from matplotlib.animation import FuncAnimation |  | ||||||
| 
 |  | ||||||
| import minimalmodbus |  | ||||||
| 
 |  | ||||||
| tempSens = minimalmodbus.Instrument('/dev/ttyUSB0', 1) |  | ||||||
| tempSens.serial.baudrate = 38400 |  | ||||||
| 
 |  | ||||||
| plt.style.use('fivethirtyeight') |  | ||||||
| 
 |  | ||||||
| x_values = [] |  | ||||||
| y_values = [] |  | ||||||
| 
 |  | ||||||
| index = count() |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def animate(i): |  | ||||||
|     try: |  | ||||||
|         #temp1 = tempSens.read_float(1, functioncode=4, byteorder=0) / 100  |  | ||||||
|         #temp2 = tempSens.read_float(3, functioncode=4, byteorder=0) / 100 |  | ||||||
|         #temp3 = tempSens.read_float(5, functioncode=4, byteorder=0) / 100 |  | ||||||
| 
 |  | ||||||
|         #temp = tempSens.read_register(1) |  | ||||||
|         temp2 = tempSens.read_float(3, functioncode=4) |  | ||||||
| 
 |  | ||||||
|         y_values.append(temp2) |  | ||||||
|         x_values.append(next(index)) |  | ||||||
|         print(tempSens.read_float(11, functioncode=4), end="\t") |  | ||||||
|         print(temp2) |  | ||||||
| 
 |  | ||||||
|         plt.cla() |  | ||||||
|         plt.scatter(x_values, y_values) |  | ||||||
|     except Exception as e: print(e) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ani = FuncAnimation(plt.gcf(), animate, 2000) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| plt.tight_layout() |  | ||||||
| plt.show() |  | ||||||
					Loading…
					
					
				
		Reference in New Issue