test

Committer:
tanabe2000
Date:
Thu Mar 01 00:46:05 2018 +0000
Revision:
0:56b10b0c7db4
tekito; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tanabe2000 0:56b10b0c7db4 1 #include "a4960.h"
tanabe2000 0:56b10b0c7db4 2
tanabe2000 0:56b10b0c7db4 3 a4960::a4960() : spi(PB_15,PB_14,PB_13), _cs_pin(PB_1), _blink_pin(LED1), _PWM_pin(PA_11)
tanabe2000 0:56b10b0c7db4 4 {
tanabe2000 0:56b10b0c7db4 5 PWM_freq = 20000.0;
tanabe2000 0:56b10b0c7db4 6 PWM_duty = 0.5;
tanabe2000 0:56b10b0c7db4 7 motor_started = true;
tanabe2000 0:56b10b0c7db4 8
tanabe2000 0:56b10b0c7db4 9 _config[0] = 0b0000000000000000; // 50 us comm blank time, 2.4 us blank time, 200 ns deadtime
tanabe2000 0:56b10b0c7db4 10 _config[1] = 0b0010000000000000; // Vri = 100% Vref, Vdsth = 800mV
tanabe2000 0:56b10b0c7db4 11 _config[2] = 0b0100000000000000; // 35.6 us current control time
tanabe2000 0:56b10b0c7db4 12 _config[3] = 0b0110000000000000; // current limited, 50% current for hold, 18ms hold time
tanabe2000 0:56b10b0c7db4 13 _config[4] = 0b1000000000000000; // 0.8ms min comm time, 24 ms start comm time
tanabe2000 0:56b10b0c7db4 14 _config[5] = 0b1010000000000000; // 16.875deg phase adv, 100% ramp current, 0.4ms ramp rate
tanabe2000 0:56b10b0c7db4 15 _config[6] = 0b1100000000000000; // fault detection all on
tanabe2000 0:56b10b0c7db4 16 _config[7] = 0b1110000000000100;
tanabe2000 0:56b10b0c7db4 17 // auto BEMF hyst, 3.2us zx det window, no stop on fail, DIAG pin = fault, restart on loss of sync, brake off, forward, coast
tanabe2000 0:56b10b0c7db4 18
tanabe2000 0:56b10b0c7db4 19 SPI_init();
tanabe2000 0:56b10b0c7db4 20 }
tanabe2000 0:56b10b0c7db4 21
tanabe2000 0:56b10b0c7db4 22 void a4960::SPI_init()
tanabe2000 0:56b10b0c7db4 23 {
tanabe2000 0:56b10b0c7db4 24 // initialize pins
tanabe2000 0:56b10b0c7db4 25 _cs_pin = 1;
tanabe2000 0:56b10b0c7db4 26 _blink_pin = 1;
tanabe2000 0:56b10b0c7db4 27 _PWM_pin.period(1/PWM_freq);
tanabe2000 0:56b10b0c7db4 28 _PWM_pin.write(PWM_duty);
tanabe2000 0:56b10b0c7db4 29 spi.format(16,3);
tanabe2000 0:56b10b0c7db4 30 spi.frequency(1000000);
tanabe2000 0:56b10b0c7db4 31 // initialize SPI connection
tanabe2000 0:56b10b0c7db4 32 //SPI.begin(P0_8, P0_9, P0_11);//SCK, MOSI, MOSI
tanabe2000 0:56b10b0c7db4 33 // set registers to default config
tanabe2000 0:56b10b0c7db4 34 for (int i = 0; i < 8; i++) {
tanabe2000 0:56b10b0c7db4 35 write_to_a4960(_config[i]);
tanabe2000 0:56b10b0c7db4 36 }
tanabe2000 0:56b10b0c7db4 37 // turn off pin to indicate initialization complete
tanabe2000 0:56b10b0c7db4 38 _blink_pin = 0;
tanabe2000 0:56b10b0c7db4 39 }
tanabe2000 0:56b10b0c7db4 40 void a4960::write_to_a4960(uint16_t msg)
tanabe2000 0:56b10b0c7db4 41 {
tanabe2000 0:56b10b0c7db4 42 // split 16-bit message to a4960 into two 8-bit messages
tanabe2000 0:56b10b0c7db4 43 uint8_t ms_half;
tanabe2000 0:56b10b0c7db4 44 uint8_t ls_half;
tanabe2000 0:56b10b0c7db4 45
tanabe2000 0:56b10b0c7db4 46 // ---- 1st message (bits 15 - 8)
tanabe2000 0:56b10b0c7db4 47 // 3 bit address
tanabe2000 0:56b10b0c7db4 48 // 12 bit message
tanabe2000 0:56b10b0c7db4 49 // shift message to get rid of 8 LSB on the end and OR
tanabe2000 0:56b10b0c7db4 50 // the write bit and the
tanabe2000 0:56b10b0c7db4 51 // 4 remaining bits into the first-half msg
tanabe2000 0:56b10b0c7db4 52 ms_half = 1 << 4 | (uint8_t)(msg>>8);
tanabe2000 0:56b10b0c7db4 53 // ---- 2nd message (bits 7 - 0)
tanabe2000 0:56b10b0c7db4 54 ls_half = (uint8_t)(msg);
tanabe2000 0:56b10b0c7db4 55
tanabe2000 0:56b10b0c7db4 56 // pull to active low
tanabe2000 0:56b10b0c7db4 57 _cs_pin = 0;
tanabe2000 0:56b10b0c7db4 58 wait_us(200);
tanabe2000 0:56b10b0c7db4 59
tanabe2000 0:56b10b0c7db4 60 // transfer the to messages halves, MSB first
tanabe2000 0:56b10b0c7db4 61 printf("test %d :%d\n\r",spi.write(ms_half<<8 | ls_half),(ms_half<<8 | ls_half));
tanabe2000 0:56b10b0c7db4 62 printf("test2 :%d",spi.write(0));
tanabe2000 0:56b10b0c7db4 63
tanabe2000 0:56b10b0c7db4 64 // wait and pull CS line back to inactive high
tanabe2000 0:56b10b0c7db4 65 wait_us(200);
tanabe2000 0:56b10b0c7db4 66 _cs_pin = 1;
tanabe2000 0:56b10b0c7db4 67 }
tanabe2000 0:56b10b0c7db4 68
tanabe2000 0:56b10b0c7db4 69 void a4960::write_run(void)
tanabe2000 0:56b10b0c7db4 70 {
tanabe2000 0:56b10b0c7db4 71 write_to_a4960(_config[7] | 1);
tanabe2000 0:56b10b0c7db4 72 }
tanabe2000 0:56b10b0c7db4 73
tanabe2000 0:56b10b0c7db4 74 void a4960::write_brake(void)
tanabe2000 0:56b10b0c7db4 75 {
tanabe2000 0:56b10b0c7db4 76 write_to_a4960(_config[7]);
tanabe2000 0:56b10b0c7db4 77 }
tanabe2000 0:56b10b0c7db4 78
tanabe2000 0:56b10b0c7db4 79 int a4960::read()
tanabe2000 0:56b10b0c7db4 80 { _cs_pin = 0;
tanabe2000 0:56b10b0c7db4 81 uint8_t h;
tanabe2000 0:56b10b0c7db4 82 wait_us(200);
tanabe2000 0:56b10b0c7db4 83 h = spi.write(0b1110000000000000);
tanabe2000 0:56b10b0c7db4 84 //h = spi.write(0);
tanabe2000 0:56b10b0c7db4 85 wait_us(200);
tanabe2000 0:56b10b0c7db4 86 _cs_pin = 1;
tanabe2000 0:56b10b0c7db4 87 return h;
tanabe2000 0:56b10b0c7db4 88 }