mirror of
https://github.com/eddyem/stm32samples.git
synced 2025-12-06 18:55:13 +03:00
some bugs fixed, but found new (e.g. ADC always give 4095)
This commit is contained in:
parent
ab5f7bc87b
commit
1a8345d4f0
@ -17,6 +17,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "adc.h"
|
#include "adc.h"
|
||||||
|
#ifdef EBUG
|
||||||
|
#include "proto.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief ADCx_array - arrays for ADC channels with median filtering:
|
* @brief ADCx_array - arrays for ADC channels with median filtering:
|
||||||
@ -25,8 +28,8 @@
|
|||||||
* 4 - internal Tsens - ADC1_IN16
|
* 4 - internal Tsens - ADC1_IN16
|
||||||
* 5 - Vref - ADC1_IN18
|
* 5 - Vref - ADC1_IN18
|
||||||
* ADC2:
|
* ADC2:
|
||||||
* 6 - AIN4 (ADC2_IN1)
|
* 6 - AIN4 - vdrive/10 (ADC2_IN1)
|
||||||
* 7 - AIN5 (ADC2_IN10)
|
* 7 - AIN5 - 5v/2 (ADC2_IN10)
|
||||||
*/
|
*/
|
||||||
static uint16_t ADC_array[NUMBER_OF_ADC_CHANNELS*9];
|
static uint16_t ADC_array[NUMBER_OF_ADC_CHANNELS*9];
|
||||||
|
|
||||||
@ -76,7 +79,7 @@ void adc_setup(){
|
|||||||
ADC1->SMPR2 = ADC_SMPR2_SMP16 | ADC_SMPR2_SMP18;
|
ADC1->SMPR2 = ADC_SMPR2_SMP16 | ADC_SMPR2_SMP18;
|
||||||
// 4 conversions in group: 1->2->3->4->16->18
|
// 4 conversions in group: 1->2->3->4->16->18
|
||||||
ADC1->SQR1 = (1<<6) | (2<<12) | (3<<18) | (4<<24) | (NUMBER_OF_ADC1_CHANNELS-1);
|
ADC1->SQR1 = (1<<6) | (2<<12) | (3<<18) | (4<<24) | (NUMBER_OF_ADC1_CHANNELS-1);
|
||||||
ADC1->SQR2 = (16<<6) | (18<<12);
|
ADC1->SQR2 = (16<<0) | (18<<6);
|
||||||
ADC2->SMPR1 = ADC_SMPR1_SMP1;
|
ADC2->SMPR1 = ADC_SMPR1_SMP1;
|
||||||
ADC2->SMPR2 = ADC_SMPR2_SMP10;
|
ADC2->SMPR2 = ADC_SMPR2_SMP10;
|
||||||
ADC2->SQR1 = (1<<6) | (10<<12) | (NUMBER_OF_ADC2_CHANNELS-1);
|
ADC2->SQR1 = (1<<6) | (10<<12) | (NUMBER_OF_ADC2_CHANNELS-1);
|
||||||
@ -121,9 +124,12 @@ uint16_t getADCval(int nch){
|
|||||||
PIX_SORT(p[3], p[6]) ; PIX_SORT(p[1], p[4]) ; PIX_SORT(p[2], p[5]) ;
|
PIX_SORT(p[3], p[6]) ; PIX_SORT(p[1], p[4]) ; PIX_SORT(p[2], p[5]) ;
|
||||||
PIX_SORT(p[4], p[7]) ; PIX_SORT(p[4], p[2]) ; PIX_SORT(p[6], p[4]) ;
|
PIX_SORT(p[4], p[7]) ; PIX_SORT(p[4], p[2]) ; PIX_SORT(p[6], p[4]) ;
|
||||||
PIX_SORT(p[4], p[2]) ;
|
PIX_SORT(p[4], p[2]) ;
|
||||||
return p[4];
|
|
||||||
#undef PIX_SORT
|
#undef PIX_SORT
|
||||||
#undef PIX_SWAP
|
#undef PIX_SWAP
|
||||||
|
#ifdef EBUG
|
||||||
|
DBG("val: "); printu(p[4]); newline();
|
||||||
|
#endif
|
||||||
|
return p[4];
|
||||||
}
|
}
|
||||||
|
|
||||||
// get voltage @input nch (V)
|
// get voltage @input nch (V)
|
||||||
@ -131,6 +137,9 @@ float getADCvoltage(int nch){
|
|||||||
float v = getADCval(nch);
|
float v = getADCval(nch);
|
||||||
v *= getVdd();
|
v *= getVdd();
|
||||||
v /= 4096.f; // 12bit ADC
|
v /= 4096.f; // 12bit ADC
|
||||||
|
#ifdef EBUG
|
||||||
|
DBG("v="); printf(v); newline();
|
||||||
|
#endif
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,6 +151,9 @@ float getMCUtemp(){
|
|||||||
temperature *= (110.f - 30.f);
|
temperature *= (110.f - 30.f);
|
||||||
temperature /= (float)(*TEMP30_CAL_ADDR - *TEMP110_CAL_ADDR);
|
temperature /= (float)(*TEMP30_CAL_ADDR - *TEMP110_CAL_ADDR);
|
||||||
temperature += 30.f;
|
temperature += 30.f;
|
||||||
|
#ifdef EBUG
|
||||||
|
DBG("t="); printf(temperature); newline();
|
||||||
|
#endif
|
||||||
return(temperature);
|
return(temperature);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,5 +161,8 @@ float getMCUtemp(){
|
|||||||
float getVdd(){
|
float getVdd(){
|
||||||
float vdd = ((float) *VREFINT_CAL_ADDR) * 3.3f; // 3.3V
|
float vdd = ((float) *VREFINT_CAL_ADDR) * 3.3f; // 3.3V
|
||||||
vdd /= getADCval(ADC_VREF);
|
vdd /= getADCval(ADC_VREF);
|
||||||
|
#ifdef EBUG
|
||||||
|
DBG("vdd="); printf(vdd); newline();
|
||||||
|
#endif
|
||||||
return vdd;
|
return vdd;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,8 +19,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <stm32f3.h>
|
#include <stm32f3.h>
|
||||||
|
|
||||||
#define NUMBER_OF_ADC1_CHANNELS (6)
|
// ADC1 channels
|
||||||
#define NUMBER_OF_ADC2_CHANNELS (2)
|
#define NUMBER_OF_ADC1_CHANNELS (6)
|
||||||
|
// ext ADC channels (ADC_AINx)
|
||||||
|
#define NUMBER_OF_EXT_ADC_CHANNELS (4)
|
||||||
|
// ADC2 channels
|
||||||
|
#define NUMBER_OF_ADC2_CHANNELS (2)
|
||||||
// total number of channels - for array
|
// total number of channels - for array
|
||||||
#define NUMBER_OF_ADC_CHANNELS ((NUMBER_OF_ADC1_CHANNELS+NUMBER_OF_ADC2_CHANNELS))
|
#define NUMBER_OF_ADC_CHANNELS ((NUMBER_OF_ADC1_CHANNELS+NUMBER_OF_ADC2_CHANNELS))
|
||||||
|
|
||||||
@ -33,8 +37,8 @@
|
|||||||
#define ADC_AIN3 (3)
|
#define ADC_AIN3 (3)
|
||||||
#define ADC_TS (4)
|
#define ADC_TS (4)
|
||||||
#define ADC_VREF (5)
|
#define ADC_VREF (5)
|
||||||
#define ADC_AIN4 (6)
|
#define ADC_VDRIVE (6)
|
||||||
#define ADC_AIN5 (7)
|
#define ADC_VFIVE (7)
|
||||||
// starting index of ADC2
|
// starting index of ADC2
|
||||||
#define ADC2START (9*NUMBER_OF_ADC1_CHANNELS)
|
#define ADC2START (9*NUMBER_OF_ADC1_CHANNELS)
|
||||||
|
|
||||||
|
|||||||
@ -22,6 +22,9 @@
|
|||||||
#include "hardware.h"
|
#include "hardware.h"
|
||||||
#include "strfunc.h"
|
#include "strfunc.h"
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
|
#ifdef EBUG
|
||||||
|
#include "proto.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// PD1 - Tx, PD0 - Rx !!!
|
// PD1 - Tx, PD0 - Rx !!!
|
||||||
|
|
||||||
@ -53,7 +56,11 @@ CAN_status CAN_get_status(){
|
|||||||
static int CAN_messagebuf_push(CAN_message *msg){
|
static int CAN_messagebuf_push(CAN_message *msg){
|
||||||
//MSG("Try to push\n");
|
//MSG("Try to push\n");
|
||||||
#ifdef EBUG
|
#ifdef EBUG
|
||||||
USB_sendstr("push\n");
|
USB_sendstr("push: ");
|
||||||
|
for(int i = 0; i < msg->length; ++i){
|
||||||
|
printuhex(msg->data[i]); USB_putbyte(' ');
|
||||||
|
}
|
||||||
|
newline();
|
||||||
#endif
|
#endif
|
||||||
if(first_free_idx == first_nonfree_idx){
|
if(first_free_idx == first_nonfree_idx){
|
||||||
#ifdef EBUG
|
#ifdef EBUG
|
||||||
@ -80,6 +87,13 @@ CAN_message *CAN_messagebuf_pop(){
|
|||||||
first_nonfree_idx = -1;
|
first_nonfree_idx = -1;
|
||||||
first_free_idx = 0;
|
first_free_idx = 0;
|
||||||
}
|
}
|
||||||
|
#ifdef EBUG
|
||||||
|
USB_sendstr("pop: ");
|
||||||
|
for(int i = 0; i < msg->length; ++i){
|
||||||
|
printuhex(msg->data[i]); USB_putbyte(' ');
|
||||||
|
}
|
||||||
|
newline();
|
||||||
|
#endif
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,8 +318,7 @@ uint32_t CAN_speed(){
|
|||||||
return oldspeed;
|
return oldspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void formerr(CAN_message *msg, errcodes err){
|
TRUE_INLINE void formerr(CAN_message *msg, errcodes err){
|
||||||
if(msg->length < 4) msg->length = 4;
|
|
||||||
msg->data[3] = (uint8_t)err;
|
msg->data[3] = (uint8_t)err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,15 +330,16 @@ static void formerr(CAN_message *msg, errcodes err){
|
|||||||
* [CMD][PAR][errcode][VALUE]
|
* [CMD][PAR][errcode][VALUE]
|
||||||
* CMD - uint16_t, PAR - uint8_t, errcode - one of CAN_errcodes, VALUE - int32_t
|
* CMD - uint16_t, PAR - uint8_t, errcode - one of CAN_errcodes, VALUE - int32_t
|
||||||
* `errcode` of incoming message doesn't matter
|
* `errcode` of incoming message doesn't matter
|
||||||
|
* all answers have 8 bytes length; incoming data may have variable length
|
||||||
*/
|
*/
|
||||||
TRUE_INLINE void parseCANcommand(CAN_message *msg){
|
TRUE_INLINE void parseCANcommand(CAN_message *msg){
|
||||||
int N = 1000;
|
|
||||||
// we don't check msg here as it cannot be NULL
|
// we don't check msg here as it cannot be NULL
|
||||||
#ifdef EBUG
|
#ifdef EBUG
|
||||||
DBG("Get data");
|
DBG("Get data: ");
|
||||||
for(int i = 0; i < msg->length; ++i){
|
for(int i = 0; i < msg->length; ++i){
|
||||||
USB_sendstr(uhex2str(msg->data[i])); USB_putbyte(' ');
|
USB_sendstr(uhex2str(msg->data[i])); USB_putbyte(' ');
|
||||||
}
|
}
|
||||||
|
for(int i = msg->length-1; i < 8; ++i) msg->data[i] = 0;
|
||||||
newline();
|
newline();
|
||||||
#endif
|
#endif
|
||||||
if(msg->length == 0) goto sendmessage; // PING
|
if(msg->length == 0) goto sendmessage; // PING
|
||||||
@ -356,10 +370,10 @@ TRUE_INLINE void parseCANcommand(CAN_message *msg){
|
|||||||
errcodes ec = cancmdlist[Index](par, val);
|
errcodes ec = cancmdlist[Index](par, val);
|
||||||
if(ec != ERR_OK){
|
if(ec != ERR_OK){
|
||||||
formerr(msg, ec);
|
formerr(msg, ec);
|
||||||
}else{
|
|
||||||
msg->length = 8;
|
|
||||||
}
|
}
|
||||||
sendmessage:
|
sendmessage:
|
||||||
|
msg->length = 8;
|
||||||
|
int N = 1000;
|
||||||
while(CAN_BUSY == CAN_send(msg->data, msg->length, the_conf.CANID))
|
while(CAN_BUSY == CAN_send(msg->data, msg->length, the_conf.CANID))
|
||||||
if(--N == 0) break;
|
if(--N == 0) break;
|
||||||
}
|
}
|
||||||
@ -369,7 +383,8 @@ static void can_process_fifo(uint8_t fifo_num){
|
|||||||
CAN_FIFOMailBox_TypeDef *box = &CAN->sFIFOMailBox[fifo_num];
|
CAN_FIFOMailBox_TypeDef *box = &CAN->sFIFOMailBox[fifo_num];
|
||||||
volatile uint32_t *RFxR = (fifo_num) ? &CAN->RF1R : &CAN->RF0R;
|
volatile uint32_t *RFxR = (fifo_num) ? &CAN->RF1R : &CAN->RF0R;
|
||||||
#ifdef EBUG
|
#ifdef EBUG
|
||||||
USB_sendstr(u2str(*RFxR & CAN_RF0R_FMP0)); USB_sendstr(" messages in FIFO\n");
|
USB_sendstr(u2str(*RFxR & CAN_RF0R_FMP0)); USB_sendstr(" messages in FIFO #");
|
||||||
|
USB_sendstr(u2str(fifo_num)); newline();
|
||||||
#endif
|
#endif
|
||||||
// read all
|
// read all
|
||||||
while(*RFxR & CAN_RF0R_FMP0){ // amount of messages pending
|
while(*RFxR & CAN_RF0R_FMP0){ // amount of messages pending
|
||||||
|
|||||||
@ -42,8 +42,12 @@ static errcodes cu_nosuchfn(uint8_t _U_ par, int32_t _U_ *val){
|
|||||||
|
|
||||||
errcodes cu_abspos(uint8_t _U_ par, int32_t _U_ *val){
|
errcodes cu_abspos(uint8_t _U_ par, int32_t _U_ *val){
|
||||||
uint8_t n; CHECKN(n, par);
|
uint8_t n; CHECKN(n, par);
|
||||||
stopmotor(n);
|
errcodes ret = ERR_OK;
|
||||||
return ERR_OK;
|
if(ISSETTER(par)){
|
||||||
|
ret = setmotpos(n, *val);
|
||||||
|
}
|
||||||
|
getpos(n, val);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
errcodes cu_accel(uint8_t _U_ par, int32_t _U_ *val){
|
errcodes cu_accel(uint8_t _U_ par, int32_t _U_ *val){
|
||||||
@ -56,10 +60,13 @@ errcodes cu_accel(uint8_t _U_ par, int32_t _U_ *val){
|
|||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const uint8_t extADCchnl[NUMBER_OF_EXT_ADC_CHANNELS] = {ADC_AIN0, ADC_AIN1, ADC_AIN2, ADC_AIN3};
|
||||||
|
// V*10
|
||||||
errcodes cu_adc(uint8_t par, int32_t *val){
|
errcodes cu_adc(uint8_t par, int32_t *val){
|
||||||
uint8_t n = PARBASE(par);
|
uint8_t n = PARBASE(par);
|
||||||
if(n > NUMBER_OF_ADC_CHANNELS-1) return ERR_BADPAR;
|
if(n > NUMBER_OF_EXT_ADC_CHANNELS - 1) return ERR_BADPAR;
|
||||||
*val = getADCval(n);
|
float v = getADCvoltage(extADCchnl[n])*10.f;
|
||||||
|
*val = (int32_t)v;
|
||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,12 +116,8 @@ errcodes cu_eswreact(uint8_t _U_ par, int32_t _U_ *val){
|
|||||||
|
|
||||||
errcodes cu_goto(uint8_t _U_ par, int32_t _U_ *val){
|
errcodes cu_goto(uint8_t _U_ par, int32_t _U_ *val){
|
||||||
uint8_t n; CHECKN(n, par);
|
uint8_t n; CHECKN(n, par);
|
||||||
errcodes ret = ERR_OK;
|
if(ISSETTER(par)) return motor_absmove(n, *val);
|
||||||
if(ISSETTER(par)){
|
return getpos(n, val);
|
||||||
ret = setmotpos(n, *val);
|
|
||||||
}
|
|
||||||
getpos(n, val);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
errcodes cu_gotoz(uint8_t _U_ par, int32_t _U_ *val){
|
errcodes cu_gotoz(uint8_t _U_ par, int32_t _U_ *val){
|
||||||
@ -328,6 +331,20 @@ errcodes cu_usartstatus(uint8_t _U_ par, int32_t _U_ *val){
|
|||||||
return ERR_BADCMD;
|
return ERR_BADCMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// V*10
|
||||||
|
errcodes cu_vdrive(uint8_t par, int32_t _U_ *val){
|
||||||
|
NOPARCHK(par);
|
||||||
|
float v = getADCvoltage(ADC_VDRIVE)*100.f;
|
||||||
|
*val = (int32_t)v;
|
||||||
|
return ERR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
errcodes cu_vfive(uint8_t par, int32_t *val){
|
||||||
|
NOPARCHK(par);
|
||||||
|
float v = getADCvoltage(ADC_VFIVE)*20.f;
|
||||||
|
*val = (int32_t)v;
|
||||||
|
return ERR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
const fpointer cancmdlist[CCMD_AMOUNT] = {
|
const fpointer cancmdlist[CCMD_AMOUNT] = {
|
||||||
// different commands
|
// different commands
|
||||||
@ -368,6 +385,13 @@ const fpointer cancmdlist[CCMD_AMOUNT] = {
|
|||||||
[CCMD_ENCPOS] = cu_nosuchfn,
|
[CCMD_ENCPOS] = cu_nosuchfn,
|
||||||
[CCMD_SETPOS] = cu_abspos,
|
[CCMD_SETPOS] = cu_abspos,
|
||||||
[CCMD_GOTOZERO] = cu_gotoz,
|
[CCMD_GOTOZERO] = cu_gotoz,
|
||||||
|
[CCMD_MOTMUL] = cu_motmul,
|
||||||
|
[CCMD_DIAGN] = cu_diagn,
|
||||||
|
[CCMD_ERASEFLASH] = cu_eraseflash,
|
||||||
|
[CCMD_UDATA] = cu_udata,
|
||||||
|
[CCMD_USARTSTATUS] = cu_usartstatus,
|
||||||
|
[CCMD_VDRIVE] = cu_vdrive,
|
||||||
|
[CCMD_VFIVE] = cu_vfive
|
||||||
// Leave all commands upper for back-compatability with 3steppers
|
// Leave all commands upper for back-compatability with 3steppers
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -399,5 +423,12 @@ const char* cancmds[CCMD_AMOUNT] = {
|
|||||||
[CCMD_REINITMOTORS] = "motreinit",
|
[CCMD_REINITMOTORS] = "motreinit",
|
||||||
[CCMD_MOTORSTATE] = "state",
|
[CCMD_MOTORSTATE] = "state",
|
||||||
[CCMD_SETPOS] = "abspos",
|
[CCMD_SETPOS] = "abspos",
|
||||||
[CCMD_GOTOZERO] = "gotoz"
|
[CCMD_GOTOZERO] = "gotoz",
|
||||||
|
[CCMD_MOTMUL] = "motmul",
|
||||||
|
[CCMD_DIAGN] = "diagn",
|
||||||
|
[CCMD_ERASEFLASH] = "eraseflash",
|
||||||
|
[CCMD_UDATA] = "udata",
|
||||||
|
[CCMD_USARTSTATUS] = "usartstatus",
|
||||||
|
[CCMD_VDRIVE] = "vdrive",
|
||||||
|
[CCMD_VFIVE] = "vfive"
|
||||||
};
|
};
|
||||||
|
|||||||
@ -86,6 +86,13 @@ enum{
|
|||||||
,CCMD_MOTORSTATE // motor state
|
,CCMD_MOTORSTATE // motor state
|
||||||
,CCMD_ENCPOS // position of encoder (independing on settings)
|
,CCMD_ENCPOS // position of encoder (independing on settings)
|
||||||
,CCMD_SETPOS // set motor position
|
,CCMD_SETPOS // set motor position
|
||||||
|
,CCMD_MOTMUL
|
||||||
|
,CCMD_DIAGN
|
||||||
|
,CCMD_ERASEFLASH
|
||||||
|
,CCMD_UDATA
|
||||||
|
,CCMD_USARTSTATUS
|
||||||
|
,CCMD_VDRIVE
|
||||||
|
,CCMD_VFIVE
|
||||||
// should be the last:
|
// should be the last:
|
||||||
,CCMD_AMOUNT // amount of common commands
|
,CCMD_AMOUNT // amount of common commands
|
||||||
};
|
};
|
||||||
@ -129,3 +136,5 @@ errcodes cu_stop(uint8_t par, int32_t *val);
|
|||||||
errcodes cu_tmcbus(uint8_t par, int32_t *val);
|
errcodes cu_tmcbus(uint8_t par, int32_t *val);
|
||||||
errcodes cu_udata(uint8_t par, int32_t *val);
|
errcodes cu_udata(uint8_t par, int32_t *val);
|
||||||
errcodes cu_usartstatus(uint8_t par, int32_t *val);
|
errcodes cu_usartstatus(uint8_t par, int32_t *val);
|
||||||
|
errcodes cu_vdrive(uint8_t par, int32_t *val);
|
||||||
|
errcodes cu_vfive(uint8_t par, int32_t *val);
|
||||||
|
|||||||
@ -114,6 +114,10 @@ int fn_udata(_U_ uint32_t hash, _U_ char *args) WAL; // "udata" (2736127636)
|
|||||||
|
|
||||||
int fn_usartstatus(_U_ uint32_t hash, _U_ char *args) WAL; // "usartstatus" (4007098968)
|
int fn_usartstatus(_U_ uint32_t hash, _U_ char *args) WAL; // "usartstatus" (4007098968)
|
||||||
|
|
||||||
|
int fn_vdrive(_U_ uint32_t hash, _U_ char *args) WAL; // "vdrive" (2172773525)
|
||||||
|
|
||||||
|
int fn_vfive(_U_ uint32_t hash, _U_ char *args) WAL; // "vfive" (3017477285)
|
||||||
|
|
||||||
static uint32_t hashf(const char *str){
|
static uint32_t hashf(const char *str){
|
||||||
uint32_t hash = 5381;
|
uint32_t hash = 5381;
|
||||||
uint32_t c;
|
uint32_t c;
|
||||||
@ -291,6 +295,12 @@ int parsecmd(const char *str){
|
|||||||
case CMD_USARTSTATUS:
|
case CMD_USARTSTATUS:
|
||||||
return fn_usartstatus(h, args);
|
return fn_usartstatus(h, args);
|
||||||
break;
|
break;
|
||||||
|
case CMD_VDRIVE:
|
||||||
|
return fn_vdrive(h, args);
|
||||||
|
break;
|
||||||
|
case CMD_VFIVE:
|
||||||
|
return fn_vfive(h, args);
|
||||||
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
return RET_CMDNOTFOUND;
|
return RET_CMDNOTFOUND;
|
||||||
|
|||||||
@ -65,3 +65,5 @@ int parsecmd(const char *cmdwargs);
|
|||||||
#define CMD_TMCBUS (1906135955)
|
#define CMD_TMCBUS (1906135955)
|
||||||
#define CMD_UDATA (2736127636)
|
#define CMD_UDATA (2736127636)
|
||||||
#define CMD_USARTSTATUS (4007098968)
|
#define CMD_USARTSTATUS (4007098968)
|
||||||
|
#define CMD_VDRIVE (2172773525)
|
||||||
|
#define CMD_VFIVE (3017477285)
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
"absposN* - GS absolute position (in steps, setter just changes current value)\n"
|
"absposN - GS absolute position (in steps, setter just changes current value)\n"
|
||||||
"accelN* - GS accel/decel (steps/s^2)\n"
|
"accelN - GS accel/decel (steps/s^2)\n"
|
||||||
"adcN* - G ADC value (N=0..3)\n"
|
"adcN - G ADC value (N=0..3)\n"
|
||||||
"button[N]* - G all or given (N=0..6) buttons' state\n"
|
"button[N] - G all or given (N=0..6) buttons' state\n"
|
||||||
"canerrcodes - G print last CAN errcodes\n"
|
"canerrcodes - G print last CAN errcodes\n"
|
||||||
"canfilter - GS can filters, format: bank# FIFO# mode(M/I) num0 [num1 [num2 [num3]]]\n"
|
"canfilter - GS can filters, format: bank# FIFO# mode(M/I) num0 [num1 [num2 [num3]]]\n"
|
||||||
"canflood - send/clear flood message: ID byte0 ... byteN\n"
|
"canflood - send/clear flood message: ID byte0 ... byteN\n"
|
||||||
"canfloodT - GS flood period (>=0ms)\n"
|
"canfloodT - GS flood period (>=0ms)\n"
|
||||||
"canid* - GS CAN ID of device\n"
|
"canid - GS CAN ID of device\n"
|
||||||
"canignore - GS ignore list (max 10 IDs), negative to delete\n"
|
"canignore - GS ignore list (max 10 IDs), negative to delete\n"
|
||||||
"canincrflood - send incremental flood message (ID is last for 'flood', stop by 'flood')\n"
|
"canincrflood - send incremental flood message (ID is last for 'flood', stop by 'flood')\n"
|
||||||
"canpause - pause IN packets displaying\n"
|
"canpause - pause IN packets displaying\n"
|
||||||
@ -15,42 +15,40 @@
|
|||||||
"cansend - send data over CAN: send ID byte0 .. byteN (N<8)\n"
|
"cansend - send data over CAN: send ID byte0 .. byteN (N<8)\n"
|
||||||
"canspeed - GS CAN speed (reinit if setter)\n"
|
"canspeed - GS CAN speed (reinit if setter)\n"
|
||||||
"canstat - G CAN status\n"
|
"canstat - G CAN status\n"
|
||||||
"delignlist* - delete ignore list\n"
|
|
||||||
"diagn[N]* - G DIAG state of motor N (or all)\n"
|
"diagn[N]* - G DIAG state of motor N (or all)\n"
|
||||||
"dumperr* - dump error codes\n"
|
"dumperr - dump error codes\n"
|
||||||
"dumpcmd* - dump command codes\n"
|
"dumpcmd - dump command codes\n"
|
||||||
"dumpconf* - dump current configuration\n"
|
"dumpconf - dump current configuration\n"
|
||||||
"emstop[N]* - emergency stop motor N or all\n"
|
"dumpmotflags - dump motor flags' bits\n"
|
||||||
"encposN* - GS encoder's position\n"
|
"emstop[N] - emergency stop motor N or all\n"
|
||||||
"encrevN* - GS max encoder's pulses per revolution\n"
|
"eraseflash - erase flash data storage\n"
|
||||||
"encstepmaxN* - GS maximal encoder ticks per step\n"
|
"esw[N] - G end-switches state\n"
|
||||||
"encstepminN* - GS minimal encoder ticks per step\n"
|
"eswreactN - GS end-switches reaction (0 - ignore, 1 - stop@any, 2 - stop@zero)\n"
|
||||||
"eraseflash* - erase flash data storage\n"
|
"gotoN - GS move motor to given absolute position\n"
|
||||||
"esw[N]* - G end-switches state\n"
|
"gotozN - find zero position & refresh counters\n"
|
||||||
"eswreactN* - GS end-switches reaction (0 - ignore, 1 - stop@any, 2 - stop@zero)\n"
|
|
||||||
"gotoN* - GS move motor to given absolute position\n"
|
|
||||||
"gotozN* - find zero position & refresh counters\n"
|
|
||||||
"gpioconfN* - GS GPIO configuration (0 - PUin, 1 - PPout, 2 - ODout), N=0..2\n"
|
"gpioconfN* - GS GPIO configuration (0 - PUin, 1 - PPout, 2 - ODout), N=0..2\n"
|
||||||
"gpioN* - GS GPIO values, N=0..2\n"
|
"gpioN* - GS GPIO values, N=0..2\n"
|
||||||
"maxspeedN* - GS max speed (steps per sec)\n"
|
"maxspeedN - GS max speed (steps per sec)\n"
|
||||||
"maxstepsN* - GS max steps (from zero ESW)\n"
|
"maxstepsN - GS max steps (from zero ESW)\n"
|
||||||
"mcut* - G MCU T\n"
|
"mcut - G MCU T\n"
|
||||||
"mcuvdd* - G MCU Vdd\n"
|
"mcuvdd - G MCU Vdd\n"
|
||||||
"microstepsN* - GS microsteps settings (2^0..2^9)\n"
|
"microstepsN - GS microsteps settings (2^0..2^9)\n"
|
||||||
"minspeedN* - min speed (steps per sec)\n"
|
"minspeedN - min speed (steps per sec)\n"
|
||||||
"motflagsN* - motorN flags\n"
|
"motflagsN - motorN flags\n"
|
||||||
"motmul* - GS external multiplexer status (<0 - disable, 0..7 - enable and set address)\n"
|
"motmul* - GS external multiplexer status (<0 - disable, 0..7 - enable and set address)\n"
|
||||||
"motreinit* - re-init motors after configuration changed\n"
|
"motreinit - re-init motors after configuration changed\n"
|
||||||
"ping* - echo given command back\n"
|
"ping - echo given command back\n"
|
||||||
"relposN* - GS relative move (get remaining)\n"
|
"relposN - GS relative move (get remaining)\n"
|
||||||
"relslowN* - GS like 'relpos' but with slowest speed\n"
|
"relslowN - GS like 'relpos' but with slowest speed\n"
|
||||||
"reset - software reset\n"
|
"reset - software reset\n"
|
||||||
"saveconf* - save current configuration\n"
|
"saveconf - save current configuration\n"
|
||||||
"screen* - GS screen enable (1) or disable (0)\n"
|
"screen* - GS screen enable (1) or disable (0)\n"
|
||||||
"speedlimit* - G limiting speed for current microsteps setting\n"
|
"speedlimit - G limiting speed for current microsteps setting\n"
|
||||||
"stateN* - G motor state (0-relax, 1-accel, 2-move, 3-mvslow, 4-decel, 5-stall, 6-err)\n"
|
"stateN - G motor state (0-relax, 1-accel, 2-move, 3-mvslow, 4-decel, 5-stall, 6-err)\n"
|
||||||
"stopN* - stop motor with deceleration\n"
|
"stopN - stop motor with deceleration\n"
|
||||||
"time - G time from start (ms)\n"
|
"time - G time from start (ms)\n"
|
||||||
"tmcbus* - GS TMC control bus (0 - USART, 1 - SPI)\n"
|
"tmcbus* - GS TMC control bus (0 - USART, 1 - SPI)\n"
|
||||||
"udata* - GS data by usart in slave mode (text strings, '\\n'-terminated)\n"
|
"udata* - GS data by usart in slave mode (text strings, '\\n'-terminated)\n"
|
||||||
"usartstatus* - GS status of USART1 (0 - off, 1 - master, 2 - slave)\n"
|
"usartstatus* - GS status of USART1 (0 - off, 1 - master, 2 - slave)\n"
|
||||||
|
"vdrive - G approx voltage on Vdrive\n"
|
||||||
|
"vfive - G approx voltage on 5V bus\n"
|
||||||
|
|||||||
@ -15,16 +15,12 @@ canresume
|
|||||||
cansend
|
cansend
|
||||||
canspeed
|
canspeed
|
||||||
canstat
|
canstat
|
||||||
delignlist
|
|
||||||
diagn
|
diagn
|
||||||
dumperr
|
dumperr
|
||||||
dumpcmd
|
dumpcmd
|
||||||
dumpconf
|
dumpconf
|
||||||
|
dumpmotflags
|
||||||
emstop
|
emstop
|
||||||
encpos
|
|
||||||
encrev
|
|
||||||
encstepmax
|
|
||||||
encstepmin
|
|
||||||
eraseflash
|
eraseflash
|
||||||
esw
|
esw
|
||||||
eswreact
|
eswreact
|
||||||
@ -54,3 +50,5 @@ time
|
|||||||
tmcbus
|
tmcbus
|
||||||
udata
|
udata
|
||||||
usartstatus
|
usartstatus
|
||||||
|
vdrive
|
||||||
|
vfive
|
||||||
|
|||||||
Binary file not shown.
@ -547,7 +547,7 @@ static int canusb_function(uint32_t hash, char *args){
|
|||||||
}
|
}
|
||||||
USB_sendstr("KEY"); USB_putbyte('0'+PARBASE(par));
|
USB_sendstr("KEY"); USB_putbyte('0'+PARBASE(par));
|
||||||
USB_putbyte('='); USB_sendstr(kstate);
|
USB_putbyte('='); USB_sendstr(kstate);
|
||||||
USB_sendstr("KEYTIME="); USB_sendstr(u2str(val));
|
USB_sendstr("\nKEYTIME="); USB_sendstr(u2str(val));
|
||||||
newline();
|
newline();
|
||||||
return RET_GOOD;
|
return RET_GOOD;
|
||||||
break;
|
break;
|
||||||
@ -635,6 +635,12 @@ static int canusb_function(uint32_t hash, char *args){
|
|||||||
case CMD_USARTSTATUS:
|
case CMD_USARTSTATUS:
|
||||||
e = cu_usartstatus(par, &val);
|
e = cu_usartstatus(par, &val);
|
||||||
break;
|
break;
|
||||||
|
case CMD_VDRIVE:
|
||||||
|
e = cu_vdrive(par, &val);
|
||||||
|
break;
|
||||||
|
case CMD_VFIVE:
|
||||||
|
e = cu_vfive(par, &val);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
e = ERR_BADCMD;
|
e = ERR_BADCMD;
|
||||||
break;
|
break;
|
||||||
@ -690,6 +696,8 @@ int fn_stop(uint32_t _U_ hash, char _U_ *args) AL; //* "stop" (17184971)
|
|||||||
int fn_tmcbus(uint32_t _U_ hash, char _U_ *args) AL; //* "tmcbus" (1906135955)
|
int fn_tmcbus(uint32_t _U_ hash, char _U_ *args) AL; //* "tmcbus" (1906135955)
|
||||||
int fn_udata(uint32_t _U_ hash, char _U_ *args) AL; //* "udata" (2736127636)
|
int fn_udata(uint32_t _U_ hash, char _U_ *args) AL; //* "udata" (2736127636)
|
||||||
int fn_usartstatus(uint32_t _U_ hash, char _U_ *args) AL; //* "usartstatus" (4007098968)
|
int fn_usartstatus(uint32_t _U_ hash, char _U_ *args) AL; //* "usartstatus" (4007098968)
|
||||||
|
int fn_vdrive(uint32_t _U_ hash, char _U_ *args) AL; // "vdrive" (2172773525)
|
||||||
|
int fn_vfive(uint32_t _U_ hash, char _U_ *args) AL; // "vfive" (3017477285)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -26,6 +26,7 @@
|
|||||||
#define printu(x) do{USB_sendstr(u2str(x));}while(0)
|
#define printu(x) do{USB_sendstr(u2str(x));}while(0)
|
||||||
#define printi(x) do{USB_sendstr(i2str(x));}while(0)
|
#define printi(x) do{USB_sendstr(i2str(x));}while(0)
|
||||||
#define printuhex(x) do{USB_sendstr(uhex2str(x));}while(0)
|
#define printuhex(x) do{USB_sendstr(uhex2str(x));}while(0)
|
||||||
|
#define printf(x) do{USB_sendstr(float2str(x, 2));}while(0)
|
||||||
|
|
||||||
extern uint8_t ShowMsgs; // show CAN messages flag
|
extern uint8_t ShowMsgs; // show CAN messages flag
|
||||||
|
|
||||||
|
|||||||
@ -110,7 +110,7 @@ errcodes setmotpos(uint8_t i, int32_t position){
|
|||||||
if(state[i] != STP_RELAX) return ERR_CANTRUN;
|
if(state[i] != STP_RELAX) return ERR_CANTRUN;
|
||||||
if(position > (int32_t)the_conf.maxsteps[i] || position < -(int32_t)the_conf.maxsteps[i])
|
if(position > (int32_t)the_conf.maxsteps[i] || position < -(int32_t)the_conf.maxsteps[i])
|
||||||
return ERR_BADVAL; // too big position or zero
|
return ERR_BADVAL; // too big position or zero
|
||||||
if(position == stppos[i]) return ERR_OK;
|
stppos[i] = position;
|
||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
#define BUILD_NUMBER "54"
|
#define BUILD_NUMBER "56"
|
||||||
#define BUILD_DATE "2023-02-20"
|
#define BUILD_DATE "2023-02-21"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user