Updated for the next revision of the motor board

Committer:
adimmit
Date:
Fri Sep 16 01:20:50 2022 +0000
Revision:
8:e8985e8e9146
Parent:
7:e3a2ade56b79
updated for the new board;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elijahsj 0:f2ede00aed8a 1 /* Library to interface with 2.74 Motor Shield
elijahsj 3:2f46953e7c8b 2 ** Uses low level HAL libraries to enable high speed PWM
elijahsj 4:2b45973bdc67 3 ** Use as follows:
elijahsj 4:2b45973bdc67 4 ** - Create shield object and specify PWM period for the motors
elijahsj 4:2b45973bdc67 5 ** - Set the duty cycle and direction for each motor
elijahsj 0:f2ede00aed8a 6 */
elijahsj 0:f2ede00aed8a 7
elijahsj 0:f2ede00aed8a 8 #include "mbed.h"
elijahsj 0:f2ede00aed8a 9 #include "MotorShield.h"
elijahsj 1:4c3c2b7337a6 10 #include "HardwareSetup.h"
elijahsj 1:4c3c2b7337a6 11
adimmit 8:e8985e8e9146 12 //MotorA pins
adimmit 8:e8985e8e9146 13 DigitalOut enableA(PG_7);
adimmit 8:e8985e8e9146 14 DigitalOut disableA(PG_4);
adimmit 8:e8985e8e9146 15 //MotorB pins
adimmit 8:e8985e8e9146 16 DigitalOut enableB(PE_4);
adimmit 8:e8985e8e9146 17 DigitalOut disableB(PE_2);
adimmit 8:e8985e8e9146 18 //MotorC pins
adimmit 8:e8985e8e9146 19 DigitalOut enableC(PB_13);
adimmit 8:e8985e8e9146 20 DigitalOut disableC(PB_4);
adimmit 8:e8985e8e9146 21 //MotorD pins
adimmit 8:e8985e8e9146 22 DigitalOut enableD(PA_14);
adimmit 8:e8985e8e9146 23 DigitalOut disableD(PA_15);
adimmit 8:e8985e8e9146 24
adimmit 8:e8985e8e9146 25
elijahsj 3:2f46953e7c8b 26 MotorShield::MotorShield(int periodTicks) {
elijahsj 3:2f46953e7c8b 27 periodTickVal = periodTicks;
elijahsj 0:f2ede00aed8a 28 init();
elijahsj 0:f2ede00aed8a 29 }
elijahsj 0:f2ede00aed8a 30
elijahsj 0:f2ede00aed8a 31 void MotorShield::init() {
elijahsj 0:f2ede00aed8a 32 /** Initial config for the STM32H743 **/
elijahsj 1:4c3c2b7337a6 33
elijahsj 3:2f46953e7c8b 34 initHardware(periodTickVal); // Setup PWM
elijahsj 3:2f46953e7c8b 35 wait_us(100);
adimmit 8:e8985e8e9146 36
adimmit 8:e8985e8e9146 37 //enable the motor A driver
adimmit 8:e8985e8e9146 38 enableA.write(1);
adimmit 8:e8985e8e9146 39 disableA.write(0);
adimmit 8:e8985e8e9146 40 //enable the motor B driver
adimmit 8:e8985e8e9146 41 enableB.write(1);
adimmit 8:e8985e8e9146 42 disableB.write(0);
adimmit 8:e8985e8e9146 43 //enable the motor C driver
adimmit 8:e8985e8e9146 44 enableC.write(1);
adimmit 8:e8985e8e9146 45 disableC.write(0);
adimmit 8:e8985e8e9146 46 //enable the motor D driver
adimmit 8:e8985e8e9146 47 enableD.write(1);
adimmit 8:e8985e8e9146 48 disableD.write(0);
adimmit 8:e8985e8e9146 49 wait_us(100);
elijahsj 0:f2ede00aed8a 50 }
elijahsj 0:f2ede00aed8a 51
elijahsj 5:d2dffc88e94d 52 void MotorShield::motorAWrite(float duty_cycle, int direction) {
elijahsj 5:d2dffc88e94d 53 int tick = (int)(periodTickVal * duty_cycle);
elijahsj 5:d2dffc88e94d 54
elijahsj 3:2f46953e7c8b 55 if (direction){
elijahsj 5:d2dffc88e94d 56
elijahsj 5:d2dffc88e94d 57 TIM15->CCR2 = tick;
adimmit 8:e8985e8e9146 58 TIM15->CCR1 = tick;
elijahsj 3:2f46953e7c8b 59 }
elijahsj 3:2f46953e7c8b 60 else {
elijahsj 5:d2dffc88e94d 61 TIM15->CCR2 = 0;
adimmit 8:e8985e8e9146 62 TIM15->CCR1 = tick;
elijahsj 3:2f46953e7c8b 63 }
elijahsj 3:2f46953e7c8b 64
elijahsj 0:f2ede00aed8a 65 }
elijahsj 0:f2ede00aed8a 66
elijahsj 5:d2dffc88e94d 67 void MotorShield::motorBWrite(float duty_cycle, int direction) {
elijahsj 5:d2dffc88e94d 68 int tick = (int)(periodTickVal * duty_cycle);
elijahsj 5:d2dffc88e94d 69
elijahsj 3:2f46953e7c8b 70 if (direction){
elijahsj 5:d2dffc88e94d 71 TIM12->CCR2 = tick;
adimmit 8:e8985e8e9146 72 TIM12->CCR1 = tick;
elijahsj 3:2f46953e7c8b 73 }
elijahsj 3:2f46953e7c8b 74 else {
elijahsj 5:d2dffc88e94d 75 TIM12->CCR2 = 0;
elijahsj 5:d2dffc88e94d 76 TIM12->CCR1 = tick;
elijahsj 3:2f46953e7c8b 77 }
elijahsj 5:d2dffc88e94d 78
elijahsj 0:f2ede00aed8a 79 }
elijahsj 0:f2ede00aed8a 80
elijahsj 5:d2dffc88e94d 81 void MotorShield::motorCWrite(float duty_cycle, int direction) {
elijahsj 5:d2dffc88e94d 82 int tick = (int)(periodTickVal * duty_cycle);
elijahsj 5:d2dffc88e94d 83
elijahsj 3:2f46953e7c8b 84 if (direction){
adimmit 8:e8985e8e9146 85 TIM13->CCR1 = tick;
elijahsj 5:d2dffc88e94d 86 TIM14->CCR1 = tick;
elijahsj 0:f2ede00aed8a 87 }
elijahsj 3:2f46953e7c8b 88 else {
elijahsj 5:d2dffc88e94d 89 TIM13->CCR1 = tick;
elijahsj 5:d2dffc88e94d 90 TIM14->CCR1 = 0;
elijahsj 0:f2ede00aed8a 91 }
elijahsj 0:f2ede00aed8a 92 }
elijahsj 5:d2dffc88e94d 93 void MotorShield::motorDWrite(float duty_cycle, int direction) {
elijahsj 5:d2dffc88e94d 94 int tick = (int)(periodTickVal * duty_cycle);
elijahsj 5:d2dffc88e94d 95
elijahsj 3:2f46953e7c8b 96 if (direction){
adimmit 8:e8985e8e9146 97 TIM17->CCR1 = tick;
elijahsj 5:d2dffc88e94d 98 TIM16->CCR1 = tick;
elijahsj 3:2f46953e7c8b 99 }
elijahsj 3:2f46953e7c8b 100 else {
adimmit 8:e8985e8e9146 101 TIM17->CCR1 = tick;
elijahsj 3:2f46953e7c8b 102 TIM16->CCR1 = 0;
elijahsj 3:2f46953e7c8b 103 }
elijahsj 3:2f46953e7c8b 104 }
elijahsj 3:2f46953e7c8b 105
elijahsj 7:e3a2ade56b79 106 uint32_t MotorShield::readCurrentA() {
elijahsj 7:e3a2ade56b79 107 return readADC1(0);
elijahsj 7:e3a2ade56b79 108 }
elijahsj 7:e3a2ade56b79 109 uint32_t MotorShield::readCurrentB() {
elijahsj 7:e3a2ade56b79 110 return readADC1(1);
elijahsj 7:e3a2ade56b79 111 }
elijahsj 7:e3a2ade56b79 112 uint32_t MotorShield::readCurrentC() {
elijahsj 7:e3a2ade56b79 113 return readADC2(1);
elijahsj 7:e3a2ade56b79 114 }
elijahsj 7:e3a2ade56b79 115 uint32_t MotorShield::readCurrentD() {
elijahsj 7:e3a2ade56b79 116 return readADC2(0);
elijahsj 7:e3a2ade56b79 117 }
elijahsj 7:e3a2ade56b79 118
elijahsj 3:2f46953e7c8b 119 void MotorShield::changePeriod(int periodTicks){
elijahsj 3:2f46953e7c8b 120 periodTickVal = periodTicks;
elijahsj 3:2f46953e7c8b 121 init();
elijahsj 3:2f46953e7c8b 122 }