Compare commits
8 Commits
1ad6f56a9d
...
012f133dbe
| Author | SHA1 | Date | |
|---|---|---|---|
| 012f133dbe | |||
| daadb91055 | |||
| 6fbc0d4c08 | |||
| 39f9c1691a | |||
| b37d685690 | |||
| 14850ae8e9 | |||
| e514d57ddf | |||
| dcf1531033 |
7
abzug.c
7
abzug.c
@@ -1,5 +1,7 @@
|
|||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include "avrIOhelper/io-helper.h"
|
#include "avrIOhelper/io-helper.h"
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
uint16_t abzug_speed = 100;
|
uint16_t abzug_speed = 100;
|
||||||
|
|
||||||
@@ -14,8 +16,11 @@ void timer3_init()
|
|||||||
DDRE |= 1 << 4;
|
DDRE |= 1 << 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t get_abzug_state(){
|
||||||
|
return TCCR3B & _BV(CS31);
|
||||||
|
}
|
||||||
|
|
||||||
void send_settings(void);
|
extern void send_settings(void);
|
||||||
void do_abzug(){
|
void do_abzug(){
|
||||||
|
|
||||||
if (read_Input(BTN_ABZUG_EIN, RISING)) {
|
if (read_Input(BTN_ABZUG_EIN, RISING)) {
|
||||||
|
|||||||
1
abzug.h
1
abzug.h
@@ -7,5 +7,6 @@ extern uint16_t abzug_speed;
|
|||||||
|
|
||||||
void do_abzug(void);
|
void do_abzug(void);
|
||||||
void timer3_init(void);
|
void timer3_init(void);
|
||||||
|
uint8_t get_abzug_state(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ void do_kraftsensor(){
|
|||||||
|
|
||||||
/* read 2 16bit values and merge to 32bit signed integer */
|
/* read 2 16bit values and merge to 32bit signed integer */
|
||||||
readReg(1,0,2);
|
readReg(1,0,2);
|
||||||
if(wait_receive(2, m_data, 100)){
|
if(wait_receive(2, m_data, 10)){
|
||||||
kraftsensor_valid = 0;
|
kraftsensor_valid = 0;
|
||||||
//printf("modbus error\n\r");
|
printf("modbus error\n\r");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
kraftsensor_valid = 1;
|
kraftsensor_valid = 1;
|
||||||
@@ -45,24 +45,24 @@ void do_kraftsensor(){
|
|||||||
|
|
||||||
//kraftsensor_value = tmp;
|
//kraftsensor_value = tmp;
|
||||||
/* conversion magic to milliNewton */
|
/* conversion magic to milliNewton */
|
||||||
kraftsensor_read = ((tmp + 197700 /*539363*/)*9.81)/177.380;
|
kraftsensor_value = ((tmp + 197700 /*539363*/)*9.81)/177.380;
|
||||||
|
|
||||||
if(abs(kraftsensor_read - old_value) > 10000){
|
//if(abs(kraftsensor_read - old_value) > 10000){
|
||||||
if(abs(last_read - kraftsensor_read) > 10000){
|
// if(abs(last_read - kraftsensor_read) > 10000){
|
||||||
kraftsensor_value = old_value;
|
// kraftsensor_value = old_value;
|
||||||
//printf("delta: %ld\tvalue:%ld\n", kraftsensor_read - old_value, kraftsensor_read);
|
// //printf("delta: %ld\tvalue:%ld\n", kraftsensor_read - old_value, kraftsensor_read);
|
||||||
//printf("spike\n");
|
// //printf("spike\n");
|
||||||
}
|
// }
|
||||||
else{
|
// else{
|
||||||
kraftsensor_value = kraftsensor_read;
|
// kraftsensor_value = kraftsensor_read;
|
||||||
//printf("jump\n");
|
// //printf("jump\n");
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
else{
|
//else{
|
||||||
kraftsensor_value = kraftsensor_read;
|
// kraftsensor_value = kraftsensor_read;
|
||||||
}
|
//}
|
||||||
last_read = kraftsensor_read;
|
//last_read = kraftsensor_read;
|
||||||
old_value = kraftsensor_value;
|
//old_value = kraftsensor_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
11
main.c
11
main.c
@@ -198,16 +198,13 @@ int main()
|
|||||||
|
|
||||||
set_Output(BitPH5, ON);
|
set_Output(BitPH5, ON);
|
||||||
|
|
||||||
|
|
||||||
while(1)
|
|
||||||
{
|
|
||||||
wdt_reset(); // WDT reset at least every sec
|
|
||||||
|
|
||||||
#if PLC_MQTT_ENABLED
|
#if PLC_MQTT_ENABLED
|
||||||
if(millis() < 10)
|
send_settings();
|
||||||
send_settings();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
wdt_reset(); // WDT reset at least every sec
|
||||||
|
|
||||||
ioHelperReadPins();
|
ioHelperReadPins();
|
||||||
ioHelperDebounce();
|
ioHelperDebounce();
|
||||||
ioHelperEdgeDetector();
|
ioHelperEdgeDetector();
|
||||||
|
|||||||
51
spule.c
51
spule.c
@@ -50,6 +50,14 @@ static void spule_onoff(uint8_t state){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_spooling_speed(uint16_t speed){
|
||||||
|
ICR5=speed;
|
||||||
|
OCR5C = ICR5/2;
|
||||||
|
|
||||||
|
ICR1 = ICR5/TRANS_ROT_FACTOR;
|
||||||
|
OCR1A = ICR1/2;
|
||||||
|
}
|
||||||
|
|
||||||
void do_spule(){
|
void do_spule(){
|
||||||
//PORTH &= ~(1<<5);
|
//PORTH &= ~(1<<5);
|
||||||
if(read_Input(IN_SPULE_HOME, LEVEL) && spule_trans_homed == 0){
|
if(read_Input(IN_SPULE_HOME, LEVEL) && spule_trans_homed == 0){
|
||||||
@@ -69,22 +77,38 @@ void do_spule(){
|
|||||||
set_Output(MOTOR_TRANS_DIR, 1); // direction: front
|
set_Output(MOTOR_TRANS_DIR, 1); // direction: front
|
||||||
TCCR1B |= _BV(CS11); //TURN ON
|
TCCR1B |= _BV(CS11); //TURN ON
|
||||||
}
|
}
|
||||||
else if(taenzer_state.pos <= 10){
|
else if(!get_abzug_state()){
|
||||||
spule_onoff(0);
|
if(read_Input(BTN_WICKELN_EIN, LEVEL)){
|
||||||
|
set_spooling_speed(300);
|
||||||
|
spule_onoff(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
spule_onoff(0);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
/* speed regulation - keep taenzer at 10% */
|
/* speed regulation - keep taenzer at 10% */
|
||||||
int32_t tmp = 0;//(100 - (int32_t)taenzer_state.pos/1000);
|
float p = 100.0/(int32_t)(taenzer_state.pos/1000);
|
||||||
|
p-=1;
|
||||||
|
p/=2;
|
||||||
|
p+=1;
|
||||||
|
|
||||||
//printf("temp1: %d\n", tmp);
|
//printf("temp1: %d\n", tmp);
|
||||||
//TODO fix bounds
|
//TODO fix bounds
|
||||||
//if(tmp < -7500/abzug_speed/2)
|
//if(tmp < -7500/abzug_speed/2)
|
||||||
// tmp = -7500/abzug_speed/2;
|
// tmp = -7500/abzug_speed/2;
|
||||||
//printf("temp2: %d\n", tmp);
|
//printf("temp2: %d\n", tmp);
|
||||||
if(tmp < -35)
|
if(p < 0.75)
|
||||||
tmp = -35;
|
p = 0.75;
|
||||||
|
if(p > 1.5)
|
||||||
|
p = 1.5;
|
||||||
|
|
||||||
ICR5=7500/abzug_speed + tmp;
|
uint16_t base_speed = (7500/abzug_speed);
|
||||||
|
uint16_t ctrl_speed = base_speed * p;
|
||||||
|
|
||||||
|
if(ctrl_speed <= 70)
|
||||||
|
ctrl_speed = 70;
|
||||||
|
|
||||||
|
ICR5 = ctrl_speed;
|
||||||
OCR5C = ICR5/2;
|
OCR5C = ICR5/2;
|
||||||
|
|
||||||
ICR1 = ICR5/TRANS_ROT_FACTOR;
|
ICR1 = ICR5/TRANS_ROT_FACTOR;
|
||||||
@@ -96,14 +120,13 @@ void do_spule(){
|
|||||||
if (read_Input(BTN_WICKELN_AUS, RISING)) {
|
if (read_Input(BTN_WICKELN_AUS, RISING)) {
|
||||||
spule_onoff(0);
|
spule_onoff(0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (read_Input(BTN_INIT, RISING)) {
|
if (read_Input(BTN_INIT, RISING)) {
|
||||||
spule_trans_homed = 0;
|
spule_trans_homed = 0;
|
||||||
taenzer_state.homed = 0;
|
taenzer_state.homed = 0;
|
||||||
taenzer_state.active = 0;
|
taenzer_state.active = 0;
|
||||||
windings = 0;
|
windings = 0;
|
||||||
windings_wakeup = 0;
|
windings_wakeup = 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//PORTH |= (1<<5);
|
//PORTH |= (1<<5);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "kraftsensor.h"
|
#include "kraftsensor.h"
|
||||||
#include "notaus.h"
|
#include "notaus.h"
|
||||||
#include "pid_controller.h"
|
#include "pid_controller.h"
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -46,7 +47,7 @@ double pid(PID_vars *vars, double current_err) {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_info(void);
|
extern void send_settings(void);
|
||||||
void do_taenzer(){
|
void do_taenzer(){
|
||||||
|
|
||||||
/* Homing */
|
/* Homing */
|
||||||
@@ -65,13 +66,13 @@ void do_taenzer(){
|
|||||||
if (read_Input(BTN_KRAFT_PLUS, RISING)) {
|
if (read_Input(BTN_KRAFT_PLUS, RISING)) {
|
||||||
taenzer_state.force_setpoint += 1000;
|
taenzer_state.force_setpoint += 1000;
|
||||||
#if PLC_MQTT_ENABLED
|
#if PLC_MQTT_ENABLED
|
||||||
send_info();
|
send_settings();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (read_Input(BTN_KRAFT_MINUS, RISING)) {
|
if (read_Input(BTN_KRAFT_MINUS, RISING)) {
|
||||||
taenzer_state.force_setpoint -= 1000;
|
taenzer_state.force_setpoint -= 1000;
|
||||||
#if PLC_MQTT_ENABLED
|
#if PLC_MQTT_ENABLED
|
||||||
send_info();
|
send_settings();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (read_Input(BTN_TAENZER_START, RISING)) {
|
if (read_Input(BTN_TAENZER_START, RISING)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user