mirror of
https://github.com/rene-dev/stmbl.git
synced 2026-09-26 01:54:24 +08:00
input + res 2.5
This commit is contained in:
@@ -0,0 +1,318 @@
|
||||
Version 4
|
||||
SHEET 1 5176 960
|
||||
WIRE 3744 -16 2928 -16
|
||||
WIRE 3728 16 3680 16
|
||||
WIRE 3376 64 3328 64
|
||||
WIRE 3520 64 3456 64
|
||||
WIRE 3536 64 3520 64
|
||||
WIRE 3632 64 3616 64
|
||||
WIRE 3680 64 3680 16
|
||||
WIRE 3680 64 3632 64
|
||||
WIRE 3456 80 3456 64
|
||||
WIRE 3520 80 3520 64
|
||||
WIRE 3632 80 3632 64
|
||||
WIRE 3744 96 3744 -16
|
||||
WIRE 3680 112 3680 64
|
||||
WIRE 3712 112 3680 112
|
||||
WIRE 1184 128 1088 128
|
||||
WIRE 1296 128 1184 128
|
||||
WIRE 1392 128 1296 128
|
||||
WIRE 1536 128 1392 128
|
||||
WIRE 1568 128 1536 128
|
||||
WIRE 2624 128 1568 128
|
||||
WIRE 2832 128 2624 128
|
||||
WIRE 2928 128 2928 -16
|
||||
WIRE 2928 128 2832 128
|
||||
WIRE 2976 128 2928 128
|
||||
WIRE 3808 128 3808 16
|
||||
WIRE 3808 128 3776 128
|
||||
WIRE 3936 128 3808 128
|
||||
WIRE 3712 144 3680 144
|
||||
WIRE 3936 160 3936 128
|
||||
WIRE 1392 176 1392 128
|
||||
WIRE 1568 176 1488 176
|
||||
WIRE 1600 176 1568 176
|
||||
WIRE 2688 176 2512 176
|
||||
WIRE 2832 176 2832 128
|
||||
WIRE 3008 176 2928 176
|
||||
WIRE 3040 176 3008 176
|
||||
WIRE 3376 176 3360 176
|
||||
WIRE 3456 176 3456 160
|
||||
WIRE 3536 176 3456 176
|
||||
WIRE 3632 176 3632 144
|
||||
WIRE 3632 176 3616 176
|
||||
WIRE 3680 176 3680 144
|
||||
WIRE 3680 176 3632 176
|
||||
WIRE 3328 192 3328 64
|
||||
WIRE 1536 208 1536 128
|
||||
WIRE 2976 208 2976 128
|
||||
WIRE 1296 224 1296 128
|
||||
WIRE 1488 224 1488 176
|
||||
WIRE 1504 224 1488 224
|
||||
WIRE 1856 224 1760 224
|
||||
WIRE 2080 224 1856 224
|
||||
WIRE 2928 224 2928 176
|
||||
WIRE 2944 224 2928 224
|
||||
WIRE 3680 224 3680 176
|
||||
WIRE 3680 224 3184 224
|
||||
WIRE 1600 240 1600 176
|
||||
WIRE 1600 240 1568 240
|
||||
WIRE 1696 240 1600 240
|
||||
WIRE 3040 240 3040 176
|
||||
WIRE 3040 240 3008 240
|
||||
WIRE 3936 240 3824 240
|
||||
WIRE 4064 240 3936 240
|
||||
WIRE 4096 240 4064 240
|
||||
WIRE 1088 256 1088 128
|
||||
WIRE 1184 256 1184 128
|
||||
WIRE 1504 256 1392 256
|
||||
WIRE 2368 256 2256 256
|
||||
WIRE 2944 256 2832 256
|
||||
WIRE 1760 272 1760 224
|
||||
WIRE 2624 288 2624 128
|
||||
WIRE 2512 304 2512 256
|
||||
WIRE 2592 304 2512 304
|
||||
WIRE 3360 304 3360 176
|
||||
WIRE 2080 320 2080 304
|
||||
WIRE 2256 320 2256 256
|
||||
WIRE 2256 320 2080 320
|
||||
WIRE 2688 320 2688 176
|
||||
WIRE 2688 320 2656 320
|
||||
WIRE 2704 320 2688 320
|
||||
WIRE 3040 320 3040 240
|
||||
WIRE 3056 320 3040 320
|
||||
WIRE 3104 320 3104 224
|
||||
WIRE 3104 320 3056 320
|
||||
WIRE 3136 320 3104 320
|
||||
WIRE 2368 336 2368 320
|
||||
WIRE 2432 336 2368 336
|
||||
WIRE 2592 336 2432 336
|
||||
WIRE 1088 384 1088 320
|
||||
WIRE 1184 384 1184 320
|
||||
WIRE 1184 384 1088 384
|
||||
WIRE 1296 384 1296 304
|
||||
WIRE 1296 384 1184 384
|
||||
WIRE 1392 384 1392 336
|
||||
WIRE 1392 384 1296 384
|
||||
WIRE 1536 384 1536 272
|
||||
WIRE 1536 384 1392 384
|
||||
WIRE 1760 384 1760 352
|
||||
WIRE 1760 384 1536 384
|
||||
WIRE 1856 384 1760 384
|
||||
WIRE 1984 384 1856 384
|
||||
WIRE 2160 384 1984 384
|
||||
WIRE 2624 384 2624 352
|
||||
WIRE 2624 384 2160 384
|
||||
WIRE 2832 384 2832 336
|
||||
WIRE 2832 384 2624 384
|
||||
WIRE 2976 384 2976 272
|
||||
WIRE 2976 384 2832 384
|
||||
WIRE 3056 384 2976 384
|
||||
WIRE 3136 384 3056 384
|
||||
WIRE 3744 384 3744 160
|
||||
WIRE 3744 384 3136 384
|
||||
WIRE 3824 384 3824 304
|
||||
WIRE 3824 384 3744 384
|
||||
WIRE 3936 384 3936 320
|
||||
WIRE 3936 384 3824 384
|
||||
WIRE 1296 400 1296 384
|
||||
WIRE 2080 400 2080 320
|
||||
WIRE 2368 416 2368 336
|
||||
WIRE 2512 416 2512 304
|
||||
WIRE 2784 416 2784 400
|
||||
WIRE 3360 416 3360 304
|
||||
WIRE 3616 416 3360 416
|
||||
WIRE 2160 464 2160 384
|
||||
WIRE 2160 464 2080 464
|
||||
WIRE 1696 496 1696 240
|
||||
WIRE 1856 496 1856 448
|
||||
WIRE 1856 496 1696 496
|
||||
WIRE 1984 496 1984 448
|
||||
WIRE 1984 496 1856 496
|
||||
WIRE 2368 496 1984 496
|
||||
WIRE 2512 496 2368 496
|
||||
WIRE 2784 496 2512 496
|
||||
WIRE 3328 496 3328 192
|
||||
WIRE 3600 496 3328 496
|
||||
WIRE 3600 528 3600 496
|
||||
WIRE 3600 528 3328 528
|
||||
WIRE 3248 544 3248 528
|
||||
WIRE 3328 560 3328 528
|
||||
WIRE 2768 576 2608 576
|
||||
WIRE 2768 592 2768 576
|
||||
WIRE 1536 672 1536 384
|
||||
WIRE 2608 672 2608 656
|
||||
WIRE 2608 672 1536 672
|
||||
WIRE 2768 672 2608 672
|
||||
WIRE 3328 672 3328 640
|
||||
WIRE 3616 672 3616 416
|
||||
WIRE 3616 672 3328 672
|
||||
WIRE 3136 768 3136 384
|
||||
WIRE 3248 768 3248 624
|
||||
WIRE 3248 768 3136 768
|
||||
WIRE 3328 768 3248 768
|
||||
FLAG 1296 400 0
|
||||
FLAG 1568 176 5v
|
||||
FLAG 1856 224 r_in
|
||||
FLAG 2256 256 r2_in
|
||||
FLAG 2432 336 r3_in
|
||||
FLAG 1568 128 12v
|
||||
FLAG 3008 176 5v
|
||||
FLAG 4064 240 sig
|
||||
FLAG 3808 128 op_out
|
||||
FLAG 2784 320 out
|
||||
FLAG 2688 320 out_op
|
||||
FLAG 3328 192 in_pos
|
||||
FLAG 3360 304 in_neg
|
||||
SYMBOL voltage 1296 208 R0
|
||||
SYMATTR InstName V3
|
||||
SYMATTR Value 12
|
||||
SYMATTR SpiceLine Rser=1
|
||||
SYMBOL res 1376 160 R0
|
||||
SYMATTR InstName R3
|
||||
SYMATTR Value 1.4k
|
||||
SYMBOL res 1376 240 R0
|
||||
SYMATTR InstName R4
|
||||
SYMATTR Value 1k
|
||||
SYMBOL ind2 2768 400 R0
|
||||
SYMATTR InstName L1
|
||||
SYMATTR Value 7m
|
||||
SYMATTR Type ind
|
||||
SYMATTR SpiceLine Rser=30
|
||||
SYMBOL Opamps/LT1497 2624 256 R0
|
||||
WINDOW 3 34 101 Left 2
|
||||
SYMATTR InstName U2
|
||||
SYMBOL ind2 3312 544 R0
|
||||
SYMATTR InstName L2
|
||||
SYMATTR Value 7m
|
||||
SYMATTR SpiceLine Rser=70
|
||||
SYMBOL res 2352 400 R0
|
||||
SYMATTR InstName R5
|
||||
SYMATTR Value 10k
|
||||
SYMBOL cap 2352 256 R0
|
||||
SYMATTR InstName C1
|
||||
SYMATTR Value 47n
|
||||
SYMBOL res 2496 160 R0
|
||||
SYMATTR InstName R6
|
||||
SYMATTR Value 7k
|
||||
SYMBOL res 2496 400 R0
|
||||
SYMATTR InstName R9
|
||||
SYMATTR Value 3k
|
||||
SYMBOL Opamps/LT1497 1536 176 R0
|
||||
SYMATTR InstName U3
|
||||
SYMBOL voltage 1760 256 R0
|
||||
SYMATTR InstName V4
|
||||
SYMATTR Value PULSE(0 3.3 0 10n 10n 0.05m 0.1m)
|
||||
SYMATTR SpiceLine Rser=1
|
||||
SYMBOL cap 2064 400 R0
|
||||
SYMATTR InstName C6
|
||||
SYMATTR Value 47n
|
||||
SYMBOL res 2064 208 R0
|
||||
SYMATTR InstName R14
|
||||
SYMATTR Value 1k
|
||||
SYMBOL cap 1840 384 R0
|
||||
SYMATTR InstName C2
|
||||
SYMATTR Value 100n
|
||||
SYMBOL polcap 1968 384 R0
|
||||
SYMATTR InstName C3
|
||||
SYMATTR Value 500ľ
|
||||
SYMBOL cap 1168 256 R0
|
||||
SYMATTR InstName C4
|
||||
SYMATTR Value 100n
|
||||
SYMBOL polcap 1072 256 R0
|
||||
SYMATTR InstName C5
|
||||
SYMATTR Value 500ľ
|
||||
SYMBOL ind2 2752 576 R0
|
||||
SYMATTR InstName L3
|
||||
SYMATTR Value 7m
|
||||
SYMATTR Type ind
|
||||
SYMATTR SpiceLine Rser=30
|
||||
SYMBOL voltage 2608 560 R0
|
||||
SYMATTR InstName V1
|
||||
SYMATTR Value PULSE(0 100 0 10n 10n 0.0005m 0.0315m)
|
||||
SYMATTR SpiceLine Rser=1
|
||||
SYMBOL Opamps/LT1497 3744 64 R0
|
||||
WINDOW 3 34 101 Left 2
|
||||
SYMATTR InstName U5
|
||||
SYMBOL res 3824 0 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R12
|
||||
SYMATTR Value 15k
|
||||
SYMBOL res 2816 160 R0
|
||||
SYMATTR InstName R13
|
||||
SYMATTR Value 1.4k
|
||||
SYMBOL res 2816 240 R0
|
||||
SYMATTR InstName R15
|
||||
SYMATTR Value 1k
|
||||
SYMBOL Opamps/LT1497 2976 176 R0
|
||||
SYMATTR InstName U1
|
||||
SYMBOL cap 3040 320 R0
|
||||
SYMATTR InstName C7
|
||||
SYMATTR Value 100n
|
||||
SYMBOL polcap 3120 320 R0
|
||||
SYMATTR InstName C8
|
||||
SYMATTR Value 500ľ
|
||||
SYMBOL res 3920 224 R0
|
||||
SYMATTR InstName R8
|
||||
SYMATTR Value 1k
|
||||
SYMBOL res 3920 144 R0
|
||||
SYMATTR InstName R11
|
||||
SYMATTR Value 1.8k
|
||||
SYMBOL cap 3808 240 R0
|
||||
SYMATTR InstName C10
|
||||
SYMATTR Value 22p
|
||||
SYMBOL res 2768 304 R0
|
||||
SYMATTR InstName R2
|
||||
SYMATTR Value 100
|
||||
SYMBOL voltage 3328 672 R0
|
||||
SYMATTR InstName V2
|
||||
SYMATTR Value SINE(6 6 1000 0)
|
||||
SYMATTR SpiceLine Rser=1
|
||||
SYMBOL res 2800 304 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R16
|
||||
SYMATTR Value 12
|
||||
SYMBOL voltage 3248 528 R0
|
||||
SYMATTR InstName 1k
|
||||
SYMATTR Value SINE(6 6 1000 0 0 180)
|
||||
SYMATTR SpiceLine Rser=1
|
||||
SYMBOL res 3440 64 R0
|
||||
SYMATTR InstName R21
|
||||
SYMATTR Value 400
|
||||
SYMBOL res 3632 48 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R1
|
||||
SYMATTR Value 1k
|
||||
SYMBOL res 3632 160 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R7
|
||||
SYMATTR Value 1k
|
||||
SYMBOL res 3472 48 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R10
|
||||
SYMATTR Value 400
|
||||
SYMBOL res 3472 160 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R18
|
||||
SYMATTR Value 400
|
||||
SYMBOL res 3504 64 R0
|
||||
SYMATTR InstName R19
|
||||
SYMATTR Value 20
|
||||
SYMBOL res 3200 208 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R20
|
||||
SYMATTR Value 15k
|
||||
SYMBOL cap 3616 80 R0
|
||||
SYMATTR InstName C9
|
||||
SYMATTR Value 22p
|
||||
TEXT 1664 -48 Left 2 !.tran 0 5mS
|
||||
TEXT 2480 -48 Left 2 !K1 L1 L2 0.5
|
||||
TEXT 2480 16 Left 2 !K2 L3 L2 0.00
|
||||
TEXT 2448 224 Left 2 ;poti
|
||||
@@ -0,0 +1 @@
|
||||
#include "input.h"
|
||||
+190
@@ -0,0 +1,190 @@
|
||||
typedef struct input{
|
||||
char name[32];
|
||||
|
||||
enum{
|
||||
ENC,
|
||||
STEP_DIR,
|
||||
RES,
|
||||
GMS,
|
||||
ETH,
|
||||
RS485,
|
||||
MISC,
|
||||
CONST_POS,
|
||||
CONST_VEL,
|
||||
SIN_POS,
|
||||
SIN_VEL
|
||||
SIN_ACC
|
||||
} class;
|
||||
|
||||
int port;
|
||||
|
||||
int (*setup)(input* i);
|
||||
|
||||
enum{
|
||||
INC,
|
||||
ABS
|
||||
} type;
|
||||
|
||||
float periode;
|
||||
|
||||
enum{
|
||||
POS,
|
||||
POS_VEL,
|
||||
POS_VEL_ACC
|
||||
VEL,
|
||||
VEL_ACC,
|
||||
ACC
|
||||
} flag;
|
||||
|
||||
int (*init)(input* i);
|
||||
int (*deinit)(input* i);
|
||||
|
||||
void (*reset)(input *i);
|
||||
|
||||
int (*start)(input* i);
|
||||
int (*stop)(input* i);
|
||||
|
||||
int (*valid)(input* i);
|
||||
|
||||
void (*work)(input* i);
|
||||
void (*filter)(input* i);
|
||||
void (*read)(input* i);
|
||||
|
||||
float (*get_pos)(input* i);
|
||||
float (*get_vel)(input* i);
|
||||
float (*get_acc)(input* i);
|
||||
|
||||
float pos[32];
|
||||
float vel[32];
|
||||
float acc[32];
|
||||
int pointer;
|
||||
|
||||
enum{
|
||||
PREINIT,
|
||||
DISABLED,
|
||||
STARTING,
|
||||
RUNNING,
|
||||
ERROR
|
||||
} state;
|
||||
|
||||
char info[32];
|
||||
};
|
||||
|
||||
int init(input* i){
|
||||
i->state = DISABLED;
|
||||
i->reset(i);
|
||||
return(1);
|
||||
}
|
||||
|
||||
int deinit(input* i){
|
||||
i->state = PREINIT;
|
||||
return(1);
|
||||
}
|
||||
|
||||
void reset(input* i){
|
||||
for(int j = 0; j < 32; j++){
|
||||
i->pos[j] = 0.0;
|
||||
i->pos[j] = 0.0;
|
||||
i->pos[j] = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
int start(input* i){
|
||||
if(i->state == DISABLED || i->state == RUNNING){
|
||||
i->state = RUNNING;
|
||||
return(1);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
int stop(input* i){
|
||||
if(i->state == DISABLED || i->state == RUNNING){
|
||||
i->state = DISABLED;
|
||||
return(1);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
int valid(input* i){
|
||||
if(i->state == RUNNING){
|
||||
return(1);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
void work(input* i){
|
||||
i->pointer = ++(i->pointer) % 32;
|
||||
i->read(i);
|
||||
i->filter(i);
|
||||
}
|
||||
|
||||
void filter1(input* i){
|
||||
i->vel[i->pointer] = (i->pos[i->pointer] - i->pos[(i->pointer + 31) % 32]) / i->periode[i->pointer];
|
||||
i->acc[i->pointer] = (i->vel[i->pointer] - i->vel[(i->pointer + 31) % 32]) / i->periode[i->pointer];
|
||||
}
|
||||
|
||||
void filter2(input* i){
|
||||
i->vel[i->pointer] = (i->pos[i->pointer] - i->pos[(i->pointer + 1) % 32]) / i->periode[i->pointer];
|
||||
i->acc[i->pointer] = (i->vel[i->pointer] - i->vel[(i->pointer + 1) % 32]) / i->periode[i->pointer];
|
||||
}
|
||||
|
||||
void read(input* i){
|
||||
i->pos[i->pointer] = 0.0;
|
||||
}
|
||||
|
||||
float get_pos(input* i){
|
||||
return(i->pos[i->pointer]);
|
||||
}
|
||||
|
||||
float get_vel(input* i){
|
||||
return(i->vel[i->pointer]);
|
||||
}
|
||||
|
||||
float get_acc(input* i){
|
||||
return(i->acc[i->pointer]);
|
||||
}
|
||||
|
||||
int setup(input *i){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void read_const_vel(input* i){
|
||||
i->pos[i->pointer] = 1.0 * i->periode[i->pointer];
|
||||
}
|
||||
|
||||
void read_enc_tim3(input* i){
|
||||
i->pos[i->pointer] = TIM_GetCounter(TIM3) * 2 * pi / 2048;
|
||||
}
|
||||
|
||||
void read_gms(input* i){
|
||||
static int min[2] = {65535, 65535}, max[2] = {-65535, -65535};
|
||||
int value[2], mid[2];
|
||||
if(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)){
|
||||
i->info = "ADC1 not ready\0";
|
||||
i->state = ERROR;
|
||||
return;
|
||||
}
|
||||
if(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC)){
|
||||
i->info = "ADC2 not ready\0";
|
||||
i->state = ERROR;
|
||||
return;
|
||||
}
|
||||
|
||||
value[0] = ADC_GetConversionValue(ADC1);
|
||||
value[1] = ADC_GetConversionValue(ADC2);
|
||||
|
||||
min[0] = MIN(value[0], min[0]);
|
||||
min[1] = MIN(value[1], min[1]);
|
||||
max[0] = MAX(value[0], max[0]);
|
||||
max[1] = MAX(value[1], max[1]);
|
||||
|
||||
|
||||
mid[0] = (min[0] + max[0]) / 2;
|
||||
mid[1] = (min[1] + max[1]) / 2;
|
||||
|
||||
i->pos[i->pointer] = atan2f(value[0] - mid[0], value[1] - mid[1]);
|
||||
|
||||
ADC_SoftwareStartConv(ADC1);
|
||||
ADC_SoftwareStartConv(ADC2);
|
||||
}
|
||||
Reference in New Issue
Block a user