mirror of
https://github.com/eddyem/scorpio.git
synced 2025-12-06 02:35:13 +03:00
Fixed bug with end-switches check
This commit is contained in:
parent
84a915b18a
commit
78c1544a79
30
STM8/Readme.koi8-r
Normal file
30
STM8/Readme.koi8-r
Normal file
@ -0,0 +1,30 @@
|
||||
Протокол команд платформы SCORPIO
|
||||
=================================
|
||||
|
||||
Все команды должны быть заключены в квадратные скобки с символом '\n' после закрывающейся скобки
|
||||
(анализатор протокола работает в строковом режиме). Пробелы внутри скобок игнорируются.
|
||||
|
||||
Контроллер платформы имеет номер "2", поэтому парсер команд принимает лишь команды вида "[2 Xxx]\n".
|
||||
|
||||
Список команд:
|
||||
|
||||
* [2 ?] (отладочная команда) -- выдача оставшегося количества шагов.
|
||||
|
||||
* [2 0] (изначально было "restart") -- остановить все моторы и реле (работающий watchdog не требует
|
||||
команды принудительной перезагрузки).
|
||||
|
||||
* [2 N xxx], где N - число от 1 до 6, а xxx - число от -32767 до 32767 -- запуск шагового двигателя
|
||||
номер N на заданное количество шагов. Если двигатель стоит на концевике и не сможет двигаться в
|
||||
заданном направлении, вместо эха команды сразу возвращается статус концевика в виде [2 N St=x],
|
||||
где x - 1 или 2 в зависимости от номера концевика. После окончания движения возвращается статус
|
||||
двигателя, если концевики не зажаты, St=3.
|
||||
|
||||
* [2 N x], где N - число от 7 до 9 -- включить (x=1) или выключить (x=0) реле (7 - затвор, 8 - неон,
|
||||
9 - плоское поле). Проверить статус можно, заменив x минусом (возврат будет таким же, как у статуса
|
||||
моторов).
|
||||
|
||||
* [2 a xxx], где x - число от -8 до 32767 (наследие от старого протокола) -- изменить скорость шаговых
|
||||
двигателей на величину, равную 65535/(xxx-10)*0.125 шагов в секунду.
|
||||
|
||||
* [2 N xxx], где N от 'b' до 'd', а xxx от 0 до 255 --- изменить яркость светодиодов ('b' - первый,
|
||||
'c' - второй и 'd' - третий). Значение 0 соответствует минимальной, а 255 максимальной яркости.
|
||||
@ -139,7 +139,6 @@ int main() {
|
||||
process_string();
|
||||
}
|
||||
if(chk_esw){
|
||||
chk_esw = 0;
|
||||
stepper_get_esw(cur_motor);
|
||||
}
|
||||
}while(1);
|
||||
|
||||
@ -48,8 +48,7 @@ U8 move_motor(char *cmd){
|
||||
|
||||
if(steps) return stepper_move(N, steps);
|
||||
else{ // steps == 0 - just check endswitches
|
||||
cur_motor = N;
|
||||
chk_esw = 1;
|
||||
prep2chkesw(N);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -86,7 +86,14 @@ U8 stepper_ch_speed(char *spd){
|
||||
*/
|
||||
U8 check_endsw(){
|
||||
// A1 - "+", A2 - "-"
|
||||
U8 i;
|
||||
U8 pc = PORT(ESW_PORT, IDR);
|
||||
for(i = 0; i < 255; ++i){ // wait a while for multiplexer
|
||||
if(pc != PORT(ESW_PORT, IDR)){
|
||||
pc = PORT(ESW_PORT, IDR);
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
if(0 == (pc & ESW_MINUS)) return 1;
|
||||
if(0 == (pc & ESW_PLUS)) return 2;
|
||||
return 0;
|
||||
@ -148,9 +155,14 @@ void stop_motor(){
|
||||
void stepper_get_esw(U8 Nmotor){
|
||||
U8 sw;
|
||||
char str[] = "[2 0 St=0]\n"; // 3 - motor number, 5 - endswitch (3 if none)
|
||||
IWDG_KR = KEY_REFRESH; // refresh watchdog
|
||||
if(Nmotor == 0 || Nmotor > 6) return; // no running motor
|
||||
IWDG_KR = KEY_REFRESH; // refresh watchdog
|
||||
ESW_SELECT(Nmotor);
|
||||
if(chk_esw > 1){
|
||||
--chk_esw;
|
||||
return;
|
||||
}
|
||||
chk_esw = 0;
|
||||
str[3] = Nmotor + '0';
|
||||
sw = check_endsw();
|
||||
if(sw == 0) sw = 3;
|
||||
@ -158,3 +170,14 @@ void stepper_get_esw(U8 Nmotor){
|
||||
uart_write(str);
|
||||
cur_motor = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* prepare for end-switches selection:
|
||||
* switch multiplexer and set flag
|
||||
*/
|
||||
void prep2chkesw(U8 N){
|
||||
if(N == 0 || N > 6) return;
|
||||
ESW_SELECT(N);
|
||||
cur_motor = N;
|
||||
chk_esw = 255;
|
||||
}
|
||||
|
||||
@ -42,6 +42,7 @@ U8 stepper_move(U8 Nmotor, int Nsteps);
|
||||
|
||||
void stop_motor();
|
||||
U8 check_endsw();
|
||||
void prep2chkesw(U8 Nmotor);
|
||||
void stepper_get_esw(U8 Nmotor);
|
||||
|
||||
U8 chk_stpr_cmd(char N);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user