Skip to content

Commit 0aa32ef

Browse files
author
DC
committed
Fix to pin assignment for magnetorquer connections
1 parent 90f800f commit 0aa32ef

File tree

3 files changed

+56
-36
lines changed

3 files changed

+56
-36
lines changed

boards/ORESAT_ADCS_V1_2/board.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@
9090
#define GPIOB_IMU_INT3 10U
9191
#define GPIOB_MT_X_PHASE 11U
9292
#define GPIOB_IMU_INT1 12U
93-
#define GPIOB_MT_X_PWM 13U
93+
#define GPIOB_MT_Z_PWM 13U
9494
#define GPIOB_MT_Y_PWM 14U
95-
#define GPIOB_MT_Z_PWM 15U
95+
#define GPIOB_MT_X_PWM 15U
9696

9797
//#define GPIOB_IMU_INT2 13U
9898
//#define GPIOB_IMU_INT4 14U
@@ -402,9 +402,9 @@
402402
PIN_MODE_INPUT(GPIOB_IMU_INT3) | \
403403
PIN_MODE_OUTPUT(GPIOB_MT_X_PHASE) | \
404404
PIN_MODE_INPUT(GPIOB_IMU_INT1) | \
405-
PIN_MODE_ALTERNATE(GPIOB_MT_X_PWM) | \
405+
PIN_MODE_ALTERNATE(GPIOB_MT_Z_PWM) | \
406406
PIN_MODE_ALTERNATE(GPIOB_MT_Y_PWM) | \
407-
PIN_MODE_ALTERNATE(GPIOB_MT_Z_PWM))
407+
PIN_MODE_ALTERNATE(GPIOB_MT_X_PWM))
408408

409409
#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_MT_Z_PHASE) | \
410410
PIN_OTYPE_PUSHPULL(GPIOB_IMU_INT2) | \
@@ -419,9 +419,9 @@
419419
PIN_OTYPE_PUSHPULL(GPIOB_IMU_INT3) | \
420420
PIN_OTYPE_PUSHPULL(GPIOB_MT_X_PHASE) | \
421421
PIN_OTYPE_PUSHPULL(GPIOB_IMU_INT1) | \
422-
PIN_OTYPE_PUSHPULL(GPIOB_MT_X_PWM) | \
422+
PIN_OTYPE_PUSHPULL(GPIOB_MT_Z_PWM) | \
423423
PIN_OTYPE_PUSHPULL(GPIOB_MT_Y_PWM) | \
424-
PIN_OTYPE_PUSHPULL(GPIOB_MT_Z_PWM))
424+
PIN_OTYPE_PUSHPULL(GPIOB_MT_X_PWM))
425425

426426
#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_HIGH(GPIOB_MT_Z_PHASE) | \
427427
PIN_OSPEED_HIGH(GPIOB_IMU_INT2) | \
@@ -436,9 +436,9 @@
436436
PIN_OSPEED_HIGH(GPIOB_IMU_INT3) | \
437437
PIN_OSPEED_HIGH(GPIOB_MT_X_PHASE) | \
438438
PIN_OSPEED_HIGH(GPIOB_IMU_INT1) | \
439-
PIN_OSPEED_HIGH(GPIOB_MT_X_PWM) | \
439+
PIN_OSPEED_HIGH(GPIOB_MT_Z_PWM) | \
440440
PIN_OSPEED_HIGH(GPIOB_MT_Y_PWM) | \
441-
PIN_OSPEED_HIGH(GPIOB_MT_Z_PWM))
441+
PIN_OSPEED_HIGH(GPIOB_MT_X_PWM))
442442
#define VAL_GPIOB_PUPDR (PIN_PUPDR_FLOATING(GPIOB_MT_Z_PHASE) | \
443443
PIN_PUPDR_FLOATING(GPIOB_IMU_INT2) | \
444444
PIN_PUPDR_FLOATING(GPIOB_MT_Y_PHASE) | \
@@ -452,9 +452,9 @@
452452
PIN_PUPDR_FLOATING(GPIOB_IMU_INT3) | \
453453
PIN_PUPDR_FLOATING(GPIOB_MT_X_PHASE) | \
454454
PIN_PUPDR_FLOATING(GPIOB_IMU_INT1) | \
455-
PIN_PUPDR_FLOATING(GPIOB_MT_X_PWM) | \
455+
PIN_PUPDR_FLOATING(GPIOB_MT_Z_PWM) | \
456456
PIN_PUPDR_FLOATING(GPIOB_MT_Y_PWM) | \
457-
PIN_PUPDR_FLOATING(GPIOB_MT_Z_PWM))
457+
PIN_PUPDR_FLOATING(GPIOB_MT_X_PWM))
458458
#define VAL_GPIOB_ODR (PIN_ODR_LOW(GPIOB_MT_Z_PHASE) | \
459459
PIN_ODR_HIGH(GPIOB_IMU_INT2) | \
460460
PIN_ODR_LOW(GPIOB_MT_Y_PHASE) | \
@@ -468,9 +468,9 @@
468468
PIN_ODR_HIGH(GPIOB_IMU_INT3) | \
469469
PIN_ODR_LOW(GPIOB_MT_X_PHASE) | \
470470
PIN_ODR_HIGH(GPIOB_IMU_INT1) | \
471-
PIN_ODR_LOW(GPIOB_MT_X_PWM) | \
471+
PIN_ODR_LOW(GPIOB_MT_Z_PWM) | \
472472
PIN_ODR_LOW(GPIOB_MT_Y_PWM) | \
473-
PIN_ODR_LOW(GPIOB_MT_Z_PWM))
473+
PIN_ODR_LOW(GPIOB_MT_X_PWM))
474474
#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_MT_Z_PHASE, 0U) | \
475475
PIN_AFIO_AF(GPIOB_IMU_INT2, 0U) | \
476476
PIN_AFIO_AF(GPIOB_MT_Y_PHASE, 0U) | \
@@ -484,9 +484,9 @@
484484
PIN_AFIO_AF(GPIOB_IMU_INT3, 0U) | \
485485
PIN_AFIO_AF(GPIOB_MT_X_PHASE, 0U) | \
486486
PIN_AFIO_AF(GPIOB_IMU_INT1, 0U) | \
487-
PIN_AFIO_AF(GPIOB_MT_X_PWM, 2U) | \
487+
PIN_AFIO_AF(GPIOB_MT_Z_PWM, 2U) | \
488488
PIN_AFIO_AF(GPIOB_MT_Y_PWM, 2U) | \
489-
PIN_AFIO_AF(GPIOB_MT_Z_PWM, 2U))
489+
PIN_AFIO_AF(GPIOB_MT_X_PWM, 2U))
490490

491491
/*
492492
* GPIOC setup:

common/mmc5983ma.c

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,15 @@ void mmc5983maStop(MMC5983MADriver *devp) {
246246
}
247247

248248

249+
int16_t saturate_int16_t(const int32_t v) {
250+
if (v >= INT16_MAX)
251+
return (INT16_MAX);
252+
253+
else if (v <= INT16_MIN)
254+
return (INT16_MIN);
255+
256+
return (v);
257+
}
249258

250259

251260
const char* msg_t_to_str(const msg_t v) {
@@ -318,9 +327,9 @@ bool mmc5983maReadData(MMC5983MADriver *devp, mmc5983ma_data_t *dest) {
318327

319328
if( r == MSG_OK ) {
320329
//Note The data sheet says this is 4096 counts/gauss
321-
dest->mx = saturate_int32_t(((uint32_t) (rx[0] << 8) | rx[1]) - 32768, INT16_MIN, INT16_MAX);
322-
dest->my = saturate_int32_t(((uint32_t) (rx[2] << 8) | rx[3]) - 32768, INT16_MIN, INT16_MAX);
323-
dest->mz = saturate_int32_t(((uint32_t) (rx[4] << 8) | rx[5]) - 32768, INT16_MIN, INT16_MAX);
330+
dest->mx = saturate_int16_t(((uint32_t) (rx[0] << 8) | rx[1]) - 32768);
331+
dest->my = saturate_int16_t(((uint32_t) (rx[2] << 8) | rx[3]) - 32768);
332+
dest->mz = saturate_int16_t(((uint32_t) (rx[4] << 8) | rx[5]) - 32768);
324333
ret = true;
325334

326335
if( devp->read_call_count > 20 ) {
@@ -342,9 +351,9 @@ bool mmc5983maReadData(MMC5983MADriver *devp, mmc5983ma_data_t *dest) {
342351
i2cStop(devp->config->i2cp);
343352

344353
mmc5983ma_data_t dest_temp;
345-
dest_temp.mx = saturate_int32_t(((uint32_t) (rx[0] << 8) | rx[1]) - 32768, INT16_MIN, INT16_MAX);
346-
dest_temp.my = saturate_int32_t(((uint32_t) (rx[2] << 8) | rx[3]) - 32768, INT16_MIN, INT16_MAX);
347-
dest_temp.mz = saturate_int32_t(((uint32_t) (rx[4] << 8) | rx[5]) - 32768, INT16_MIN, INT16_MAX);
354+
dest_temp.mx = saturate_int16_t(((uint32_t) (rx[0] << 8) | rx[1]) - 32768);
355+
dest_temp.my = saturate_int16_t(((uint32_t) (rx[2] << 8) | rx[3]) - 32768);
356+
dest_temp.mz = saturate_int16_t(((uint32_t) (rx[4] << 8) | rx[5]) - 32768);
348357

349358

350359
const int32_t delta_set_reset_x = dest_temp.mx - dest->mx;

src/f0/app_adcs/source/adcs.c

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ static const DACConfig dac_config = {
9292

9393
//FIXME these PWM channel mappings may be wrong? or the mod-wires on the dev board may be wrong. Either way, Z-axis in the firmware is controling X-axis magnetorquer in the hardware on the dev ADCS board
9494
//PB13
95-
#define MT_X_PWM_PWM_CHANNEL (1 - 1)
95+
#define MT_Z_PWM_PWM_CHANNEL (1 - 1)
9696
//PB14
9797
#define MT_Y_PWM_PWM_CHANNEL (2 - 1)
9898
//PB15
99-
#define MT_Z_PWM_PWM_CHANNEL (3 - 1)
99+
#define MT_X_PWM_PWM_CHANNEL (3 - 1)
100100

101101
/**
102102
* This PWM block is configured to enable the TRIGO output to start an ADC conversion batch when the PWM edge goes high.
@@ -255,18 +255,11 @@ int32_t saturate_int32_t(const int32_t v, const int32_t min, const int32_t max)
255255

256256
return (v);
257257
}
258-
//
259-
//int16_t saturate_int16_t(const int32_t v) {
260-
// if (v >= INT16_MAX)
261-
// return (INT16_MAX);
262-
//
263-
// else if (v <= INT16_MIN)
264-
// return (INT16_MIN);
265-
//
266-
// return (v);
267-
//}
268258

269259

260+
/**
261+
* return value is in the range of 0 to 10000
262+
*/
270263
int32_t map_current_uA_to_pwm_duty_cycle(const int32_t current_uA, const uint8_t axis) {
271264
int32_t ret = 0;
272265
if( axis <= 1 ) {
@@ -539,10 +532,10 @@ bool select_and_read_magnetometer(const end_card_magnetometoer_t ecm) {
539532
chThdSleepMilliseconds(5);
540533

541534
if( mmc5983maReadData(&g_adcs_data.magetometer_data[ecm].driver, &g_adcs_data.magetometer_data[ecm].data) ) {
542-
chprintf(DEBUG_SD, " mx=%d (%d mG), my=%d (%d mG), mz=%d (%d mG)\r\n",
543-
g_adcs_data.magetometer_data[ecm].data.mx, mmc5983maRawToMilliGauss(g_adcs_data.magetometer_data[ecm].data.mx),
544-
g_adcs_data.magetometer_data[ecm].data.my, mmc5983maRawToMilliGauss(g_adcs_data.magetometer_data[ecm].data.my),
545-
g_adcs_data.magetometer_data[ecm].data.mz, mmc5983maRawToMilliGauss(g_adcs_data.magetometer_data[ecm].data.mz));
535+
// chprintf(DEBUG_SD, " mx=%d (%d mG), my=%d (%d mG), mz=%d (%d mG)\r\n",
536+
// g_adcs_data.magetometer_data[ecm].data.mx, mmc5983maRawToMilliGauss(g_adcs_data.magetometer_data[ecm].data.mx),
537+
// g_adcs_data.magetometer_data[ecm].data.my, mmc5983maRawToMilliGauss(g_adcs_data.magetometer_data[ecm].data.my),
538+
// g_adcs_data.magetometer_data[ecm].data.mz, mmc5983maRawToMilliGauss(g_adcs_data.magetometer_data[ecm].data.mz));
546539
r = true;
547540
} else {
548541
chprintf(DEBUG_SD, "\r\nERROR Failed to read from %s\r\n", end_card_magnetometoer_t_to_str(ecm));
@@ -639,6 +632,24 @@ void set_pwm_output(void) {
639632
for(int i = 0; i < 3; i++ ) {
640633
const systime_t now_time = chVTGetSystemTime();
641634

635+
// if( i == 1 ) {
636+
// int mod = (now_time / 40000) % 4;
637+
// switch (mod) {
638+
// case 0:
639+
// g_adcs_data.mt_pwm_data[i].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(500000, i);
640+
// break;
641+
// case 1:
642+
// g_adcs_data.mt_pwm_data[i].target_pwm_percent = 0;
643+
// break;
644+
// case 2:
645+
// g_adcs_data.mt_pwm_data[i].target_pwm_percent = map_current_uA_to_pwm_duty_cycle(-500000, i);
646+
// break;
647+
// case 3:
648+
// g_adcs_data.mt_pwm_data[i].target_pwm_percent = 0;
649+
// break;
650+
// }
651+
// }
652+
642653
//Updates will come in periodically via CANOpen, this will apply those updates to the PWM outputs.
643654
if( g_adcs_data.mt_pwm_data[i].last_update_time == 0 || chTimeDiffX(g_adcs_data.mt_pwm_data[i].last_update_time, now_time) > 10 ) {
644655
if( g_adcs_data.mt_pwm_data[i].current_pwm_percent != g_adcs_data.mt_pwm_data[i].target_pwm_percent ) {

0 commit comments

Comments
 (0)