I2C PWM MOTOR Control for DRV8830

Dependencies:   mbed

Committer:
oguro
Date:
Thu Mar 09 02:34:25 2017 +0000
Revision:
0:7d2d296b12e6
I2C  PWM Motor Control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oguro 0:7d2d296b12e6 1 #include "mbed.h"
oguro 0:7d2d296b12e6 2
oguro 0:7d2d296b12e6 3 // Read temperature from LM75BD
oguro 0:7d2d296b12e6 4 Serial pc(USBTX,USBRX);
oguro 0:7d2d296b12e6 5 I2C i2c(PB_9, PB_8);
oguro 0:7d2d296b12e6 6 AnalogIn V_adc(PB_1);
oguro 0:7d2d296b12e6 7
oguro 0:7d2d296b12e6 8 const int addr = 0xC8;
oguro 0:7d2d296b12e6 9 int i0=1,i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0,i9=0;
oguro 0:7d2d296b12e6 10 float Vr_adc;
oguro 0:7d2d296b12e6 11
oguro 0:7d2d296b12e6 12 DigitalIn H1(PA_15);
oguro 0:7d2d296b12e6 13 DigitalIn H2(PB_3);
oguro 0:7d2d296b12e6 14 DigitalIn H3(PB_10);
oguro 0:7d2d296b12e6 15 unsigned short U,V,W;
oguro 0:7d2d296b12e6 16
oguro 0:7d2d296b12e6 17 int main() {
oguro 0:7d2d296b12e6 18 pc.baud(128000);
oguro 0:7d2d296b12e6 19 char cmd[2];
oguro 0:7d2d296b12e6 20 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 21 cmd[1] = 0x65;
oguro 0:7d2d296b12e6 22
oguro 0:7d2d296b12e6 23 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 24
oguro 0:7d2d296b12e6 25 cmd[0] = 0x1;
oguro 0:7d2d296b12e6 26 cmd[1] = 0x80;
oguro 0:7d2d296b12e6 27
oguro 0:7d2d296b12e6 28 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 29
oguro 0:7d2d296b12e6 30 while(1){
oguro 0:7d2d296b12e6 31 cmd[0] = 0x1;
oguro 0:7d2d296b12e6 32 cmd[1] = 0x80;
oguro 0:7d2d296b12e6 33 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 34
oguro 0:7d2d296b12e6 35 Vr_adc=V_adc.read();
oguro 0:7d2d296b12e6 36 if((Vr_adc>0.05f)&&(Vr_adc<=0.1f)&&(i0==1)){
oguro 0:7d2d296b12e6 37 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 38 cmd[1] = 0x25; //0.72V
oguro 0:7d2d296b12e6 39 i0=0;
oguro 0:7d2d296b12e6 40 i1=1;
oguro 0:7d2d296b12e6 41 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 42 }
oguro 0:7d2d296b12e6 43 if((Vr_adc>0.1f)&&(Vr_adc<=0.2f)&&(i1==1)){
oguro 0:7d2d296b12e6 44 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 45 cmd[1] = 0x35; //1.04V
oguro 0:7d2d296b12e6 46 i0=1;
oguro 0:7d2d296b12e6 47 i1=0;
oguro 0:7d2d296b12e6 48 i2=1;
oguro 0:7d2d296b12e6 49 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 50 }
oguro 0:7d2d296b12e6 51 if((Vr_adc>0.2f)&&(Vr_adc<=0.3f)&&(i2==1)){
oguro 0:7d2d296b12e6 52 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 53 cmd[1] = 0x4D; //1.53V
oguro 0:7d2d296b12e6 54 i1=1;
oguro 0:7d2d296b12e6 55 i2=0;
oguro 0:7d2d296b12e6 56 i3=1;
oguro 0:7d2d296b12e6 57 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 58 }
oguro 0:7d2d296b12e6 59 if((Vr_adc>0.3f)&&(Vr_adc<=0.4f)&&(i3==1)){
oguro 0:7d2d296b12e6 60 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 61 cmd[1] = 0x65; //2.01V
oguro 0:7d2d296b12e6 62 i1=1;
oguro 0:7d2d296b12e6 63 i2=1;
oguro 0:7d2d296b12e6 64 i3=0;
oguro 0:7d2d296b12e6 65 i4=1;
oguro 0:7d2d296b12e6 66 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 67 }
oguro 0:7d2d296b12e6 68 if((Vr_adc>0.4f)&&(Vr_adc<=0.5f)&&(i4==1)){
oguro 0:7d2d296b12e6 69 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 70 cmd[1] = 0x7D; //2.48V
oguro 0:7d2d296b12e6 71 i1=1;
oguro 0:7d2d296b12e6 72 i2=1;
oguro 0:7d2d296b12e6 73 i3=1;
oguro 0:7d2d296b12e6 74 i4=0;
oguro 0:7d2d296b12e6 75 i5=1;
oguro 0:7d2d296b12e6 76 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 77 }
oguro 0:7d2d296b12e6 78 if((Vr_adc>0.5f)&&(Vr_adc<=0.6f)&&(i5==1)){
oguro 0:7d2d296b12e6 79 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 80 cmd[1] = 0x99; //3.05V
oguro 0:7d2d296b12e6 81 i1=1;
oguro 0:7d2d296b12e6 82 i2=1;
oguro 0:7d2d296b12e6 83 i3=1;
oguro 0:7d2d296b12e6 84 i4=1;
oguro 0:7d2d296b12e6 85 i5=0;
oguro 0:7d2d296b12e6 86 i6=1;
oguro 0:7d2d296b12e6 87 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 88 }
oguro 0:7d2d296b12e6 89 if((Vr_adc>0.6f)&&(Vr_adc<=0.7f)&&(i6==1)){
oguro 0:7d2d296b12e6 90 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 91 cmd[1] = 0xB1; //3.53V
oguro 0:7d2d296b12e6 92 i1=1;
oguro 0:7d2d296b12e6 93 i2=1;
oguro 0:7d2d296b12e6 94 i3=1;
oguro 0:7d2d296b12e6 95 i4=1;
oguro 0:7d2d296b12e6 96 i5=1;
oguro 0:7d2d296b12e6 97 i6=0;
oguro 0:7d2d296b12e6 98 i7=1;
oguro 0:7d2d296b12e6 99 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 100 }
oguro 0:7d2d296b12e6 101 if((Vr_adc>0.7f)&&(Vr_adc<=0.8f)&&(i7==1)){
oguro 0:7d2d296b12e6 102 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 103 cmd[1] = 0xC9; //4.02V
oguro 0:7d2d296b12e6 104 i1=1;
oguro 0:7d2d296b12e6 105 i2=1;
oguro 0:7d2d296b12e6 106 i3=1;
oguro 0:7d2d296b12e6 107 i4=1;
oguro 0:7d2d296b12e6 108 i5=1;
oguro 0:7d2d296b12e6 109 i6=1;
oguro 0:7d2d296b12e6 110 i7=0;
oguro 0:7d2d296b12e6 111 i8=1;
oguro 0:7d2d296b12e6 112 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 113 }
oguro 0:7d2d296b12e6 114 if((Vr_adc>0.8f)&&(i8==1)){
oguro 0:7d2d296b12e6 115 cmd[0] = 0x0;
oguro 0:7d2d296b12e6 116 cmd[1] = 0xE1; //4.50V
oguro 0:7d2d296b12e6 117 i1=1;
oguro 0:7d2d296b12e6 118 i2=1;
oguro 0:7d2d296b12e6 119 i3=1;
oguro 0:7d2d296b12e6 120 i4=1;
oguro 0:7d2d296b12e6 121 i5=1;
oguro 0:7d2d296b12e6 122 i6=1;
oguro 0:7d2d296b12e6 123 i7=1;
oguro 0:7d2d296b12e6 124 i8=0;
oguro 0:7d2d296b12e6 125 i2c.write(addr,cmd, 2);
oguro 0:7d2d296b12e6 126 }
oguro 0:7d2d296b12e6 127
oguro 0:7d2d296b12e6 128 U=H1; V=H2; W=H3;
oguro 0:7d2d296b12e6 129 pc.printf("%d,%d,%d \r" ,U,V,W);
oguro 0:7d2d296b12e6 130 }
oguro 0:7d2d296b12e6 131
oguro 0:7d2d296b12e6 132
oguro 0:7d2d296b12e6 133 }