You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
476 lines
11 KiB
476 lines
11 KiB
1 year ago
|
//////////////////////////////////////////////////////////////////////////
|
||
|
/// COPYRIGHT NOTICE
|
||
|
/// Copyright (c) 2023, 传控科技
|
||
|
/// All rights reserved.
|
||
|
///
|
||
|
/// @file asp_move.c
|
||
|
/// @brief asp_move
|
||
|
///
|
||
|
///(本文件实现的功能的详述)
|
||
|
/// moved的任务调度,是角度传感器和限位开关、的上层
|
||
|
/// moto工作 限位开关限位 角度传感器指示位置
|
||
|
///move--|--adc
|
||
|
/// |--key
|
||
|
/// |--moto
|
||
|
#include "asp_move.h"
|
||
|
#include "bsp_moto.h"
|
||
|
#include "msp_UART1.h"
|
||
|
|
||
|
#include "asp_expara.h"
|
||
|
TS_task_move_ ts_task_move;
|
||
|
TS_task_step_ ts_task_step;
|
||
|
|
||
|
////ts_angle2val[1].val ts_angle2val[2].val很重要 需要出厂前配置,换板子和安装都应该配置下,否则上位机应该配置
|
||
|
////ts_angle2val[0].val 经验值 取决adc比例 和结构
|
||
|
TS_angel2val_ ts_angle2val[5]=
|
||
|
{
|
||
|
-1,100, ///0,1 限位 <= 0度的直接定位到该值 ts_angle2val[0].val
|
||
|
0,268, ///1,2 /u8 loc_min_real;////校准后的最小位置;adc比例 限位<= 0度的 直接定位到 - ts_angle2val[0].val
|
||
|
90,1285, ///2,3 /u8 loc_max_real;////校准后的最大位置;adc比例限位>= 90度的 直接定位到+ts_angle2val[0].val
|
||
|
99,1333, ///3,4
|
||
|
100,1333 ///4,5 限位
|
||
|
};
|
||
|
|
||
|
|
||
|
/// angle 0-90 0,90, 1-89
|
||
|
vU16 L2_angel2adc(u8 angle)
|
||
|
{
|
||
|
if(angle > 0 )
|
||
|
{
|
||
|
if(angle >= 90 )
|
||
|
{
|
||
|
return (ts_angle2val[2].val+ts_angle2val[0].val);///1258+200=1458
|
||
|
}
|
||
|
}else
|
||
|
{
|
||
|
angle = 0;///直接到达限位
|
||
|
return ts_angle2val[1].val - ts_angle2val[0].val;
|
||
|
}
|
||
|
|
||
|
return ts_angle2val[1].val;
|
||
|
}
|
||
|
|
||
|
|
||
|
void L2_task_step_register(void)
|
||
|
{
|
||
|
L1_task_reg_clear(&ts_task_step.task);
|
||
|
///L3_task_s_go(ts_task_step,D_task_init);
|
||
|
}
|
||
|
|
||
|
void L2_task_move_register(void)
|
||
|
{
|
||
|
L1_task_reg_clear(&ts_task_move.task);
|
||
|
L3_task_s_go(ts_task_move,D_task_init);
|
||
|
L2_task_step_register();
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
3个命令:
|
||
|
1 前进到某一角度
|
||
|
2 自检
|
||
|
|
||
|
|
||
|
A-loc_now
|
||
|
M loc_mid
|
||
|
loc_min loc_max
|
||
|
|
||
|
|
||
|
|A-----------------M--------------------|
|
||
|
|>>>>>>>>>>>>>>>>>>M>>>>>>>>>>>>>>>>>>>A|
|
||
|
|A<<<<<<<<<<<<<<<<<M<<<<<<<<<<<<<<<<<<<<|
|
||
|
|
||
|
|
||
|
|
||
|
|------------------M-------------------A|
|
||
|
|A<<<<<<<<<<<<<<<<<M<<<<<<<<<<<<<<<<<<<<|
|
||
|
|>>>>>>>>>>>>>>>>>>M>>>>>>>>>>>>>>>>>>>A|
|
||
|
|
||
|
|
||
|
|-----------A------M--------------------|
|
||
|
|A<<<<<<<<<<<------M--------------------|
|
||
|
|>>>>>>>>>>>>>>>>>>M>>>>>>>>>>>>>>>>>>>A|
|
||
|
|-----------A<<<<<<M<<<<<<<<<<<<<<<<<<<<|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|------------------M-----A--------------|
|
||
|
|------------------M------>>>>>>>>>>>>>A|
|
||
|
|A<<<<<<<<<<<<<<<<<M<<<<<<<<<<<<<<<<<<<<|
|
||
|
|>>>>>>>>>>>A>>>>>>M>>>>>A--------------|
|
||
|
|
||
|
|
||
|
|
||
|
真实real
|
||
|
0------------------90
|
||
|
实际采样
|
||
|
240 263 1285 1308/1333
|
||
|
转换角度
|
||
|
Key 0-------10----------------90-----100 key
|
||
|
|
||
|
|
||
|
输入: 0度默认关闭 一直到key
|
||
|
90度 默认打开 直到key
|
||
|
其他角度 收到后按默认配置执行 上位机可以调整
|
||
|
出厂根据阀门调整下(发送协议完成验证),上位机具备参数分类校准调整更方便
|
||
|
出厂ok 除非控制机构,同时弹片上加可调
|
||
|
|
||
|
2.1 判断当前位置在上还是下,
|
||
|
如果下 先向下走 直到限位
|
||
|
如果上 先往上走 直到限位
|
||
|
向相反的方向运动,然后
|
||
|
*/
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define D_ok BITN7/// 1=成功 0 =失败
|
||
|
#define D_angle BITN6///角度逼近1= 发生 0未发生
|
||
|
#define D_locok BITN5///到达指定位置
|
||
|
|
||
|
#define D_modemove BITN4
|
||
|
|
||
|
#define D_locmax BITN3////标志位:到达最大位置;
|
||
|
#define D_locmin BITN2///标志位:到达最小位置;
|
||
|
#define D_locminOV BITN1////标志位:到达最小位置超时
|
||
|
#define D_locmaxOV BITN0////标志位:到达最大位置超时
|
||
|
|
||
|
|
||
|
#define D_moto_diff 1
|
||
|
#define D_angel_over 100
|
||
|
|
||
|
|
||
|
void L2_task_step_handle(TS_task_step_ *s)
|
||
|
{///fixme:需要添加超时保护
|
||
|
unsigned char d = 0;
|
||
|
|
||
|
TTSS_Task_init():
|
||
|
printf("\r\nL2_task_step_handle TTSS_Task_init");
|
||
|
L2_task_go(D_task_step_init);
|
||
|
|
||
|
TTSS_Task_step(D_task_step_init):
|
||
|
|
||
|
printf("\r\nL2_task_step_handle D_task_step_dir");
|
||
|
s->ok_want = 0;
|
||
|
L2_task_go(D_task_step_dir);
|
||
|
TTSS_Task_step(D_task_step_dir):////移动到指定的位置
|
||
|
if(s->loc_want > s->loc_now)//// 1>0 3>2 90>89 34>2 67>45
|
||
|
{
|
||
|
if( (s->loc_want-s->loc_now) >= D_moto_diff)////避免出现一个角度抖动
|
||
|
{
|
||
|
///BITS_1(s->ok_want,D_locok);
|
||
|
L0_moto_run(D_MOTO_FORWARD);
|
||
|
L2_task_go(D_task_step_moto);
|
||
|
}else
|
||
|
{
|
||
|
BITS_1(s->ok_want,D_angle);
|
||
|
L2_task_go(D_task_step_ok);
|
||
|
}
|
||
|
}else
|
||
|
{
|
||
|
if( (s->loc_now-s->loc_want) >= D_moto_diff)////避免出现一个角度抖动
|
||
|
{
|
||
|
|
||
|
L0_moto_run(D_MOTO_BACKWARD);
|
||
|
L2_task_go(D_task_step_moto);
|
||
|
}else
|
||
|
{
|
||
|
BITS_1(s->ok_want,D_angle);
|
||
|
L2_task_go(D_task_step_ok);
|
||
|
}
|
||
|
}
|
||
|
TTSS_Task_step(D_task_step_moto):
|
||
|
if(ABS(s->loc_want, s->loc_now) <= D_moto_diff)
|
||
|
{////到达指定位置
|
||
|
L0_moto_run(D_MOTO_STOP);
|
||
|
BITS_1(s->ok_want,D_locok);
|
||
|
L2_task_go(D_task_step_ok);
|
||
|
}
|
||
|
///printf("\r\nF =%d<-%d ", (int)s->loc_want,s->loc_now);
|
||
|
TTSS_Task_step(D_task_step_ok):
|
||
|
s->ok_want = 1;
|
||
|
/// L2_task_go(0);
|
||
|
printf("\r\nstep_ok =%d<-%d ", (int)s->loc_want,s->loc_now);
|
||
|
L2_task_Tdelay_go(D_Tdelay_30s,D_task_step_init);///测试使用:
|
||
|
TTSS_Task_end();
|
||
|
|
||
|
/// 7 6 5 4 3 2 1 0
|
||
|
|
||
|
|
||
|
|
||
|
/// 7 D_OK BITN7
|
||
|
///6 D_angle BITN6
|
||
|
///5 D_locok BITN5
|
||
|
///4
|
||
|
|
||
|
///3 D_locmax BITN3
|
||
|
///2 D_locmin BITN2
|
||
|
///1 D_locminOV BITN1
|
||
|
///0 D_locmaxOV BITN0
|
||
|
///
|
||
|
///
|
||
|
|
||
|
|
||
|
//>>>>>>>>>>>>>保护代码
|
||
|
if (ts_moto.mode > 0x80 )////运动中
|
||
|
{
|
||
|
BITS_1(s->ok_want,D_modemove);
|
||
|
if((D_MOTO_FORWARD|0x80) == ts_moto.mode)
|
||
|
{
|
||
|
if(L0_Mmax_arrive())
|
||
|
{
|
||
|
L0_moto_run(D_MOTO_STOP);
|
||
|
BITS_1(s->ok_want,D_locmax);
|
||
|
printf("\r\n##Protect:moto max arrive ");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
BITS_0(s->ok_want,D_locmaxOV);
|
||
|
TTSS_overtime_get(s->overtimes)
|
||
|
|
||
|
printf("\r\n@Protect:moto overtime ");
|
||
|
BITS_1(s->ok_want,D_locmaxOV);
|
||
|
L0_moto_run(D_MOTO_STOP);
|
||
|
TTSS_overtime_end
|
||
|
}
|
||
|
}else
|
||
|
{
|
||
|
if(L0_Mmin_arrive())
|
||
|
{
|
||
|
L0_moto_run(D_MOTO_STOP);
|
||
|
BITS_1(s->ok_want,D_locmin);
|
||
|
printf("\r\n##Protect:moto min arrive %d ",(int)ts_moto.mode);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
BITS_0(s->ok_want,D_locminOV);
|
||
|
TTSS_overtime_get(s->overtimes)
|
||
|
|
||
|
printf("\r\n@Protect:moto overtime ");
|
||
|
BITS_0(s->ok_want,D_locminOV);
|
||
|
L0_moto_run(D_MOTO_STOP);
|
||
|
TTSS_overtime_end
|
||
|
}
|
||
|
}
|
||
|
}else
|
||
|
{
|
||
|
BITS_0(s->ok_want,D_modemove);
|
||
|
TTSS_overtime_init(s->overtimes,D_Tdelay_15s);
|
||
|
/////快速设置(每次设置小于1s或更少时间间隔)如果累计超过15s 电机自动停止,下条指令后重新计时
|
||
|
}
|
||
|
|
||
|
}
|
||
|
////L2_task_move_handle(&ts_task_move);
|
||
|
void L2_task_move_handle(TS_task_move_ *s)
|
||
|
{///fixme:需要添加超时保护
|
||
|
unsigned char d = 0;
|
||
|
|
||
|
TTSS_Task_init():
|
||
|
printf("\r\nL2_task_move_handle TTSS_Task_init");
|
||
|
|
||
|
|
||
|
|
||
|
L2_task_go(D_task_move_init);
|
||
|
TTSS_Task_step(D_task_move_init):
|
||
|
|
||
|
s->loc_angle[0] = 34;
|
||
|
s->loc_angle[1] = 67;
|
||
|
s->loc_angle[2] = 90;
|
||
|
s->loc_angle[3] = 100;
|
||
|
/**/
|
||
|
ts_expara.angle.en = 1;///打开角度采集
|
||
|
|
||
|
s->loc_i = 0;
|
||
|
/// L2_task_Tdelay_go(D_Tdelay_2s,D_task_move_cmd_netid);
|
||
|
L2_task_Tdelay_go(D_Tdelay_100ms,D_task_move_next);///等待adc采样稳定
|
||
|
///L2_task_go(D_task_move_next);
|
||
|
TTSS_Task_step(D_task_move_next):
|
||
|
if(100 != s->loc_angle[s->loc_i])
|
||
|
{
|
||
|
s->loc_want = L2_angel2adc(s->loc_angle[s->loc_i]);
|
||
|
|
||
|
printf("\r\ni =%d %d<-%d",(int)s->loc_i,(int)s->loc_want,s->loc_angle[s->loc_i]);
|
||
|
s->loc_i ++;
|
||
|
L2_task_go(D_task_move_angle);
|
||
|
L3_task_s_go(ts_task_step,D_task_init);
|
||
|
}else
|
||
|
{
|
||
|
|
||
|
}
|
||
|
printf("\r\n over %d %d ",s->loc_i,s->loc_m);
|
||
|
TTSS_Task_step(D_task_move_angle):////移动到指定的位置
|
||
|
if(ts_task_step.ok_want)
|
||
|
{
|
||
|
|
||
|
}else
|
||
|
{
|
||
|
|
||
|
}
|
||
|
TTSS_Task_step(D_task_move_stop):
|
||
|
|
||
|
ts_expara.angle.en = 0;///关闭角度采集
|
||
|
/// L2_task_go(0);
|
||
|
L2_task_Tdelay_go(D_Tdelay_30s,D_task_move_init);///测试使用:
|
||
|
TTSS_Task_end();
|
||
|
|
||
|
L2_task_step_handle(&ts_task_step);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#if 0
|
||
|
[]发送→??D"1608 2956 1357 1973
|
||
|
|
||
|
D_UART1 ok 6 F1 01 DC 33 44 22 1->cmd=F num=1 len = 6
|
||
|
cmd = DC 33 44 22 00 00 B 22: moto=(1)3331608 2874 1340 1971
|
||
|
1608 2946 1315 1969
|
||
|
1608 2944 1301 1967
|
||
|
1608 2943 1276 1967
|
||
|
1608 2942 1261 1968
|
||
|
1609 2945 1235 1973
|
||
|
1609 2946 1201 1969
|
||
|
1608 2942 1183 1968
|
||
|
1608 2944 1149 1974
|
||
|
1608 2945 1130 1974
|
||
|
1609 2947 1101 1976
|
||
|
1608 2946 1070 1970
|
||
|
1608 2944 1051 1971
|
||
|
1609 2945 1022 1966
|
||
|
1608 2944 1007 1972
|
||
|
1608 2947 977 1974
|
||
|
1608 2945 958 1969
|
||
|
1608 2944 925 1972
|
||
|
1608 2945 896 1967
|
||
|
1609 2944 877 1969
|
||
|
1609 2945 848 1975
|
||
|
1608 2946 818 1969
|
||
|
1608 2944 799 1971
|
||
|
1608 2946 771 1974
|
||
|
1608 2946 750 1964
|
||
|
1609 2944 721 1971
|
||
|
1608 2946 699 1971
|
||
|
1608 2944 671 1976
|
||
|
1608 2946 637 1971
|
||
|
1608 2944 619 1967
|
||
|
1608 2944 593 1973
|
||
|
1608 2947 566 1970
|
||
|
1608 2945 548 1976
|
||
|
1608 2946 520 1968
|
||
|
1608 2944 507 1966
|
||
|
1608 2944 483 1971
|
||
|
1608 2946 457 1974
|
||
|
1608 2945 441 1971
|
||
|
1608 2946 412 1969
|
||
|
1608 2944 392 1967
|
||
|
1608 2945 367 1968
|
||
|
1608 2947 349 1976
|
||
|
1608 2945 325 1972
|
||
|
1608 2944 298 1970
|
||
|
1608 2945 282 1970
|
||
|
1608 2944 263 1963
|
||
|
|
||
|
[]发送→??D"
|
||
|
D_UART1 ok 6 F1 02 DC 33 44 22 1->cmd=F num=1 len = 6
|
||
|
cmd = DC 33 44 22 00 00 F 22: moto=(2)3331608 2942 258 1963
|
||
|
1608 2906 248 1971
|
||
|
1608 2946 261 1977
|
||
|
1608 2946 268 1972
|
||
|
1608 2945 294 1968
|
||
|
1608 2944 318 1967
|
||
|
1608 2945 335 1975
|
||
|
1608 2944 363 1971
|
||
|
1608 2943 378 1971
|
||
|
1608 2945 402 1973
|
||
|
1607 2946 433 1965
|
||
|
1608 2944 449 1971
|
||
|
1608 2944 475 1972
|
||
|
1608 2944 492 1969
|
||
|
1608 2944 515 1970
|
||
|
1608 2946 541 1968
|
||
|
1608 2946 557 1965
|
||
|
1609 2942 581 1973
|
||
|
1608 2945 600 1969
|
||
|
1608 2944 630 1973
|
||
|
1608 2946 661 1966
|
||
|
1608 2944 680 1971
|
||
|
1608 2946 708 1974
|
||
|
1607 2945 729 1967
|
||
|
1607 2942 763 1972
|
||
|
1608 2944 794 1964
|
||
|
1608 2945 812 1973
|
||
|
1608 2946 838 1975
|
||
|
1608 2946 856 1974
|
||
|
1608 2944 887 1972
|
||
|
1608 2944 916 1965
|
||
|
1608 2945 934 1971
|
||
|
1608 2945 967 1968
|
||
|
1608 2944 986 1968
|
||
|
1608 2944 1015 1974
|
||
|
1607 2944 1044 1973
|
||
|
1608 2945 1062 1964
|
||
|
1608 2942 1084 1970
|
||
|
1608 2944 1102 1973
|
||
|
1608 2945 1140 1967
|
||
|
1608 2940 1172 1973
|
||
|
1608 2944 1195 1971
|
||
|
1607 2945 1220 1963
|
||
|
1608 2941 1244 1972
|
||
|
1608 2944 1269 1974
|
||
|
1608 2944 1295 1970
|
||
|
1608 2945 1309 1967
|
||
|
1608 2945 1333 1968
|
||
|
|
||
|
[]发送→??D"
|
||
|
D_UART1 ok 6 F1 00 DC 33 44 22 1->cmd=F num=1 len = 6
|
||
|
cmd = DC 33 44 22 00 00 S 22: moto=(0)3331608 2945 1349 1971
|
||
|
1608 2955 1371 1974
|
||
|
|
||
|
|
||
|
转动到0的时候的值
|
||
|
|
||
|
-------------------0
|
||
|
1608 2905 1285 1950
|
||
|
1608 2905 1285 1951
|
||
|
1608 2904 1285 1950
|
||
|
1608 2904 1285 1949
|
||
|
1609 2905 1285 1948
|
||
|
1608 2905 1285 1949
|
||
|
1608 2905 1285 1951
|
||
|
误差的值 球阀自己的间隙
|
||
|
1608 2956 962 1961
|
||
|
1608 2958 962 1960
|
||
|
1608 2956 962 1961
|
||
|
1608 2956 962 1963
|
||
|
1608 2956 962 1962
|
||
|
1607 2956 962 1961
|
||
|
1608 2956 962 1960
|
||
|
1608 2956 962 1962
|
||
|
1608 2956 962 1963
|
||
|
1608 2956 962 1962
|
||
|
1607 2956 962 1961
|
||
|
1608 2956 962 1960
|
||
|
1608 2956 957 1962
|
||
|
1608 2956 957 1963
|
||
|
1608 2956 958 1963
|
||
|
1608 2956 958 1961
|
||
|
1608 2956 958 1960
|
||
|
1608 2956 958 1962
|
||
|
1608 2956 958 1963
|
||
|
1608 2956 958 1962
|
||
|
1608 2956 958 1961
|
||
|
1608 2956 958 1960
|
||
|
1608 2956 958 1962
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|