Compare commits
6 Commits
c62792a864
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 24ef8ce70d | |||
| 701ae5501a | |||
| 4ba5a3c39f | |||
| 2f5f57546a | |||
| 3f662045e6 | |||
| 18d2ae2f3c |
42
abzug.c
42
abzug.c
@@ -40,26 +40,6 @@ void do_abzug(){
|
||||
}
|
||||
|
||||
if (read_Input(BTN_ABZUG_PLUS, RISING)) {
|
||||
if(abzug_speed <= 900)
|
||||
abzug_speed += 100;
|
||||
else
|
||||
abzug_speed = 1000;
|
||||
#if PLC_MQTT_ENABLED
|
||||
send_settings();
|
||||
#endif
|
||||
}
|
||||
|
||||
if (read_Input(BTN_ABZUG_MINUS, RISING)) {
|
||||
if(abzug_speed >= 110)
|
||||
abzug_speed -= 100;
|
||||
else
|
||||
abzug_speed = 10;
|
||||
#if PLC_MQTT_ENABLED
|
||||
send_settings();
|
||||
#endif
|
||||
}
|
||||
|
||||
if (read_Input(BTN_ABZUG_PLUS_FEIN, RISING)) {
|
||||
if(abzug_speed <= 990)
|
||||
abzug_speed += 10;
|
||||
else
|
||||
@@ -69,7 +49,7 @@ void do_abzug(){
|
||||
#endif
|
||||
}
|
||||
|
||||
if (read_Input(BTN_ABZUG_MINUS_FEIN, RISING)) {
|
||||
if (read_Input(BTN_ABZUG_MINUS, RISING)) {
|
||||
if(abzug_speed >= 20)
|
||||
abzug_speed -= 10;
|
||||
else
|
||||
@@ -79,6 +59,26 @@ void do_abzug(){
|
||||
#endif
|
||||
}
|
||||
|
||||
if (read_Input(BTN_ABZUG_PLUS_FEIN, RISING)) {
|
||||
if(abzug_speed <= 999)
|
||||
abzug_speed += 1;
|
||||
else
|
||||
abzug_speed = 1000;
|
||||
#if PLC_MQTT_ENABLED
|
||||
send_settings();
|
||||
#endif
|
||||
}
|
||||
|
||||
if (read_Input(BTN_ABZUG_MINUS_FEIN, RISING)) {
|
||||
if(abzug_speed >= 11)
|
||||
abzug_speed -= 1;
|
||||
else
|
||||
abzug_speed = 10;
|
||||
#if PLC_MQTT_ENABLED
|
||||
send_settings();
|
||||
#endif
|
||||
}
|
||||
|
||||
// 16000000/8
|
||||
|
||||
ICR3 = ((1.0/abzug_speed)*3.14*42.0*(1.0/5.0))*2.0*500.0*(1/1.03);
|
||||
|
||||
@@ -154,4 +154,6 @@ void ioHelperEdgeDetector(void);
|
||||
#define IN_TAENZER_HOME BitPinF0
|
||||
#define IN_SPULE_HOME BitPinF1
|
||||
|
||||
#define IN_BREMSE_STATE BitPinF2
|
||||
|
||||
#endif
|
||||
|
||||
@@ -29,10 +29,7 @@ void kraftsensor_init(){
|
||||
}
|
||||
|
||||
void do_kraftsensor(){
|
||||
static int32_t last_read;
|
||||
static int32_t old_value;
|
||||
uint16_t m_data[4];
|
||||
int32_t kraftsensor_read;
|
||||
|
||||
/* read 2 16bit values and merge to 32bit signed integer */
|
||||
readReg(1,0,2);
|
||||
@@ -45,31 +42,12 @@ void do_kraftsensor(){
|
||||
int32_t tmp = (uint32_t)m_data[1]<<16;
|
||||
tmp |= m_data[0];
|
||||
|
||||
//kraftsensor_value = tmp;
|
||||
/* conversion magic to milliNewton */
|
||||
kraftsensor_value = (((tmp /* + 539363*/)*9.81)/177.380)+kraftsensor_zero_offset;
|
||||
|
||||
//if(abs(kraftsensor_read - old_value) > 10000){
|
||||
// if(abs(last_read - kraftsensor_read) > 10000){
|
||||
// kraftsensor_value = old_value;
|
||||
// //printf("delta: %ld\tvalue:%ld\n", kraftsensor_read - old_value, kraftsensor_read);
|
||||
// //printf("spike\n");
|
||||
// }
|
||||
// else{
|
||||
// kraftsensor_value = kraftsensor_read;
|
||||
// //printf("jump\n");
|
||||
// }
|
||||
//}
|
||||
//else{
|
||||
// kraftsensor_value = kraftsensor_read;
|
||||
//}
|
||||
//last_read = kraftsensor_read;
|
||||
//old_value = kraftsensor_value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
uint8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout){
|
||||
int8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout){
|
||||
|
||||
uint8_t breaker = timeout;
|
||||
while(!receiveOkay && breaker) { //wait for client response, time out after 1s
|
||||
@@ -94,6 +72,23 @@ uint8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout){
|
||||
return 0;
|
||||
}
|
||||
|
||||
int8_t wait_write(uint8_t timeout){
|
||||
uint8_t breaker = timeout;
|
||||
while(!receiveOkay && breaker) { //wait for client response, time out after 1s
|
||||
breaker--;
|
||||
_delay_ms(1);
|
||||
if(breaker==0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(receiveOkay) { //if this fails, there was either no response or a crc error
|
||||
if(rxbuffer[1]&0x80) { //client responded with an error code
|
||||
return rxbuffer[1]&0x80;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void readReg(uint8_t slaveid, uint16_t address, uint8_t amount) {
|
||||
_delay_ms(2);
|
||||
rxbuffer[0]=slaveid;
|
||||
|
||||
@@ -13,7 +13,7 @@ extern int32_t kraftsensor_zero_offset;
|
||||
void timer2_init();
|
||||
void kraftsensor_init();
|
||||
void do_kraftsensor(void);
|
||||
uint8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout);
|
||||
int8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout);
|
||||
void readReg(uint8_t slaveid, uint16_t address, uint8_t amount);
|
||||
void writeReg(uint8_t slaveid, uint16_t address, uint16_t value);
|
||||
|
||||
|
||||
15
main.c
15
main.c
@@ -2,6 +2,7 @@
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/wdt.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -89,6 +90,12 @@ void send_values(void){
|
||||
|
||||
itoa((250*60)/ICR5, msg, 10);
|
||||
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/speed", msg, strlen(msg));
|
||||
|
||||
sprintf(msg, "%d", windings);
|
||||
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/windings", msg, strlen(msg));
|
||||
|
||||
sprintf(msg, "%ld", spule_trans_pos);
|
||||
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/trans_pos", msg, strlen(msg));
|
||||
}
|
||||
|
||||
// send settings wich only change on buttion press
|
||||
@@ -96,8 +103,6 @@ void send_settings(void){
|
||||
//TODO only send on change or improve performance otherwise
|
||||
char msg[10];
|
||||
|
||||
//PORTH &= ~(1<<5);
|
||||
//PORTH |= (1<<5);
|
||||
/* Abzug */
|
||||
sprintf(msg, "%d", abzug_speed);
|
||||
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/abzug/speed", msg, strlen(msg));
|
||||
@@ -196,7 +201,7 @@ int main()
|
||||
|
||||
set_Output(LED_FEHLER, OFF);
|
||||
|
||||
set_Output(BitPH5, ON);
|
||||
set_Output(BitPH5, ON); //DEBUG
|
||||
|
||||
#if PLC_MQTT_ENABLED
|
||||
send_settings();
|
||||
@@ -220,7 +225,7 @@ int main()
|
||||
}
|
||||
|
||||
if(millis() - timer_modbus_poll > 20){
|
||||
do_kraftsensor();
|
||||
do_kraftsensor(); // 8ms !!!
|
||||
timer_modbus_poll += 20;
|
||||
}
|
||||
|
||||
@@ -228,7 +233,7 @@ int main()
|
||||
// send misc info
|
||||
if(millis() - timer_send_info > 200){
|
||||
timer_send_info += 200;
|
||||
send_values();
|
||||
send_values(); // 10ms
|
||||
//send_info(); // 27ms every 200ms
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -25,7 +25,7 @@ typedef struct {
|
||||
} PID_vars;
|
||||
|
||||
|
||||
#define PID_VARS_INIT(x) PID_vars x = {.Kp=1.7,.Ki=0.00,.Kd=0.00,.output_max=25000.0, \
|
||||
#define PID_VARS_INIT(x) PID_vars x = {.Kp=1.3,.Ki=0.00,.Kd=0.00,.output_max=25000.0, \
|
||||
.output_min=-25000.0,._integral_sum=0.0,._prev_err=0.0,._dt=1.0}
|
||||
|
||||
/* Function Prototypes */
|
||||
|
||||
31
spule.c
31
spule.c
@@ -10,6 +10,8 @@
|
||||
volatile uint16_t windings = 0;
|
||||
volatile uint16_t windings_wakeup = 0;
|
||||
|
||||
volatile uint8_t trans_state = 0;
|
||||
|
||||
int32_t spule_trans_pos = 0;
|
||||
uint8_t spule_trans_homed = 0;
|
||||
|
||||
@@ -80,7 +82,7 @@ void do_spule(){
|
||||
}
|
||||
|
||||
// manual forwarding if button is held
|
||||
else if(!get_abzug_state()){
|
||||
else if(!get_abzug_state() || (get_abzug_state() && read_Input(IN_BREMSE_STATE, LEVEL)) ){
|
||||
if(read_Input(BTN_WICKELN_EIN, LEVEL)){
|
||||
set_spooling_speed(300);
|
||||
spule_onoff(1);
|
||||
@@ -118,11 +120,13 @@ void do_spule(){
|
||||
ICR5 = ctrl_speed;
|
||||
OCR5C = ICR5/2;
|
||||
|
||||
|
||||
if(trans_state != 4)
|
||||
ICR1 = ICR5/TRANS_ROT_FACTOR;
|
||||
else
|
||||
ICR1 = 0.5*(ICR5/TRANS_ROT_FACTOR);
|
||||
OCR1A = ICR1/2;
|
||||
|
||||
if (read_Input(BTN_WICKELN_EIN, RISING)) {
|
||||
if (read_Input(BTN_WICKELN_EIN, RISING) && !read_Input(IN_BREMSE_STATE, LEVEL)) {
|
||||
spule_onoff(1);
|
||||
}
|
||||
if (read_Input(BTN_WICKELN_AUS, RISING)) {
|
||||
@@ -136,6 +140,17 @@ void do_spule(){
|
||||
windings = 0;
|
||||
windings_wakeup = 0;
|
||||
}
|
||||
|
||||
if (read_Input(IN_BREMSE_STATE, FALLING)) {
|
||||
printf("draußen\n");
|
||||
spule_onoff(1);
|
||||
}
|
||||
|
||||
if (read_Input(IN_BREMSE_STATE, RISING)) {
|
||||
printf("drinne\n");
|
||||
spule_onoff(0);
|
||||
}
|
||||
|
||||
//PORTH |= (1<<5);
|
||||
}
|
||||
|
||||
@@ -160,7 +175,8 @@ ISR(TIMER5_OVF_vect) {
|
||||
windings++;
|
||||
steps=0;
|
||||
printf("windungen: %d\t", windings);
|
||||
printf("trans pos: %ld\n", taenzer_state.pos);
|
||||
printf("trans pos: %ld\n", spule_trans_pos);
|
||||
printf("speed %d\n", ICR1);
|
||||
}
|
||||
|
||||
if(windings == windings_wakeup){
|
||||
@@ -170,23 +186,30 @@ ISR(TIMER5_OVF_vect) {
|
||||
uint8_t windings_on_layer = windings % 25;
|
||||
|
||||
if(windings_on_layer == 0 && steps == 0){
|
||||
trans_state = 1;
|
||||
ICR1 = ICR5/TRANS_ROT_FACTOR;
|
||||
OCR1A = ICR1/2;
|
||||
set_Output(MOTOR_TRANS_DIR, TOGGLE);
|
||||
printf("toggle at pos: %ld\n", spule_trans_pos);
|
||||
printf("speed %d\n", ICR1);
|
||||
}
|
||||
if(windings_on_layer == 1 && steps == 0){
|
||||
trans_state = 2;
|
||||
printf("nachlauf aufbauen\n");
|
||||
TCCR1B &= ~(_BV(CS11));
|
||||
}
|
||||
if(windings_on_layer == 3 && steps == 0){
|
||||
trans_state = 3;
|
||||
TCCR1B |= _BV(CS11);
|
||||
printf("done\n");
|
||||
printf("speed %d\n", ICR1);
|
||||
}
|
||||
if(windings_on_layer == 21 && steps == 0){
|
||||
trans_state = 4;
|
||||
ICR1 = 0.5*(ICR5/TRANS_ROT_FACTOR);
|
||||
OCR1A = ICR1/2;
|
||||
printf("nachlauf abbauen\n");
|
||||
printf("speed %d\n", ICR1);
|
||||
}
|
||||
//;PORTH |= (1<<5);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user