PWM Sin Modulate Full Scale

Dependencies:   mbed mbed-rtos

Committer:
oguro
Date:
Wed Nov 11 01:25:14 2020 +0000
Revision:
0:01b47504efd4
Sin modulate Full Scale

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oguro 0:01b47504efd4 1 #include "mbed.h"
oguro 0:01b47504efd4 2 #include "rtos.h"
oguro 0:01b47504efd4 3 #include <math.h>
oguro 0:01b47504efd4 4 #define TS1 0.2
oguro 0:01b47504efd4 5 int q=0,START=15; //10
oguro 0:01b47504efd4 6 float ut1=0,ut2=0,usi=0;
oguro 0:01b47504efd4 7 float vt1=0,vt2=0,vsi=0;
oguro 0:01b47504efd4 8 float wt1=0,wt2=0,wsi=0;
oguro 0:01b47504efd4 9 float ui=0,vi=0,wi=0;
oguro 0:01b47504efd4 10 float su,sv,sw;
oguro 0:01b47504efd4 11 float PI=3.141592;
oguro 0:01b47504efd4 12 float t=2.06E-4; //2.26E-4
oguro 0:01b47504efd4 13 float Speed;
oguro 0:01b47504efd4 14 PwmOut mypwmA(PA_8); //PWM_OUT 8
oguro 0:01b47504efd4 15 PwmOut mypwmB(PA_9); //9
oguro 0:01b47504efd4 16 PwmOut mypwmC(PA_10);//10
oguro 0:01b47504efd4 17
oguro 0:01b47504efd4 18 DigitalOut EN1(PC_10);
oguro 0:01b47504efd4 19 DigitalOut EN2(PC_11);
oguro 0:01b47504efd4 20 DigitalOut EN3(PC_12);
oguro 0:01b47504efd4 21
oguro 0:01b47504efd4 22 InterruptIn HA(PA_15);
oguro 0:01b47504efd4 23 InterruptIn HB(PB_3);
oguro 0:01b47504efd4 24 InterruptIn HC(PB_10);
oguro 0:01b47504efd4 25
oguro 0:01b47504efd4 26 AnalogIn V_adc(PC_2); //Potention
oguro 0:01b47504efd4 27 //AnalogIn V_adc(PB_1); // gaibu Volume
oguro 0:01b47504efd4 28 Timer uT;
oguro 0:01b47504efd4 29 Timer vT;
oguro 0:01b47504efd4 30 Timer wT;
oguro 0:01b47504efd4 31 AnalogOut SWAVE(PA_4);
oguro 0:01b47504efd4 32
oguro 0:01b47504efd4 33 Serial pc(USBTX,USBRX);
oguro 0:01b47504efd4 34
oguro 0:01b47504efd4 35 DigitalOut myled(LED1);
oguro 0:01b47504efd4 36
oguro 0:01b47504efd4 37 float Vr_adc=0.0f;
oguro 0:01b47504efd4 38
oguro 0:01b47504efd4 39 void HAH(){
oguro 0:01b47504efd4 40 ut1=uT.read_us();
oguro 0:01b47504efd4 41 ui=0;
oguro 0:01b47504efd4 42 }
oguro 0:01b47504efd4 43 void HAL(){
oguro 0:01b47504efd4 44 ut2=uT.read_us();
oguro 0:01b47504efd4 45 uT.reset();
oguro 0:01b47504efd4 46 }
oguro 0:01b47504efd4 47 void HBH(){
oguro 0:01b47504efd4 48 vt1=vT.read_us();
oguro 0:01b47504efd4 49 vi=0;
oguro 0:01b47504efd4 50 }
oguro 0:01b47504efd4 51 void HBL(){
oguro 0:01b47504efd4 52 vt2=vT.read_us();
oguro 0:01b47504efd4 53 vT.reset();
oguro 0:01b47504efd4 54 }
oguro 0:01b47504efd4 55 void HCH(){
oguro 0:01b47504efd4 56 wt1=wT.read_us();
oguro 0:01b47504efd4 57 wi=0;
oguro 0:01b47504efd4 58 }
oguro 0:01b47504efd4 59 void HCL(){
oguro 0:01b47504efd4 60 wt2=wT.read_us();
oguro 0:01b47504efd4 61 wT.reset();
oguro 0:01b47504efd4 62 }
oguro 0:01b47504efd4 63
oguro 0:01b47504efd4 64 void CPLT(){
oguro 0:01b47504efd4 65 pc.printf("%.3f , %.3f \r" ,Speed ,Vr_adc);
oguro 0:01b47504efd4 66 }
oguro 0:01b47504efd4 67
oguro 0:01b47504efd4 68 void timerTS1(void const*argument){
oguro 0:01b47504efd4 69 CPLT();
oguro 0:01b47504efd4 70 }
oguro 0:01b47504efd4 71
oguro 0:01b47504efd4 72
oguro 0:01b47504efd4 73 int main() {
oguro 0:01b47504efd4 74
oguro 0:01b47504efd4 75 pc.baud(128000);
oguro 0:01b47504efd4 76
oguro 0:01b47504efd4 77 EN1=1;
oguro 0:01b47504efd4 78 EN2=1;
oguro 0:01b47504efd4 79 EN3=1;
oguro 0:01b47504efd4 80
oguro 0:01b47504efd4 81 mypwmA.period_us(20);
oguro 0:01b47504efd4 82
oguro 0:01b47504efd4 83 mypwmB.period_us(20);
oguro 0:01b47504efd4 84
oguro 0:01b47504efd4 85 mypwmC.period_us(20);
oguro 0:01b47504efd4 86
oguro 0:01b47504efd4 87 uT.start();
oguro 0:01b47504efd4 88 vT.start();
oguro 0:01b47504efd4 89 wT.start();
oguro 0:01b47504efd4 90
oguro 0:01b47504efd4 91
oguro 0:01b47504efd4 92 RtosTimer RtosTimerTS1(timerTS1);
oguro 0:01b47504efd4 93 RtosTimerTS1.start((unsigned int)(TS1*3000));
oguro 0:01b47504efd4 94 Thread::wait(100);
oguro 0:01b47504efd4 95
oguro 0:01b47504efd4 96 while(1) {
oguro 0:01b47504efd4 97
oguro 0:01b47504efd4 98 Vr_adc=V_adc.read();
oguro 0:01b47504efd4 99
oguro 0:01b47504efd4 100 if((Vr_adc>0.15f)&&(q==0)){
oguro 0:01b47504efd4 101
oguro 0:01b47504efd4 102 while(q<50){ //30
oguro 0:01b47504efd4 103
oguro 0:01b47504efd4 104 mypwmA.write(0.5f); //0.5
oguro 0:01b47504efd4 105 mypwmB.write(0);
oguro 0:01b47504efd4 106 mypwmC.write(0);
oguro 0:01b47504efd4 107 wait_ms(START);
oguro 0:01b47504efd4 108
oguro 0:01b47504efd4 109 mypwmA.write(0);
oguro 0:01b47504efd4 110 mypwmB.write(0.5f);
oguro 0:01b47504efd4 111 mypwmC.write(0);
oguro 0:01b47504efd4 112 wait_ms(START);
oguro 0:01b47504efd4 113
oguro 0:01b47504efd4 114 mypwmA.write(0);
oguro 0:01b47504efd4 115 mypwmB.write(0);
oguro 0:01b47504efd4 116 mypwmC.write(0.5f);
oguro 0:01b47504efd4 117 wait_ms(START);
oguro 0:01b47504efd4 118 q++;
oguro 0:01b47504efd4 119
oguro 0:01b47504efd4 120 }
oguro 0:01b47504efd4 121 // q=31;
oguro 0:01b47504efd4 122 }
oguro 0:01b47504efd4 123
oguro 0:01b47504efd4 124 HA.rise(&HAH);
oguro 0:01b47504efd4 125 HC.fall(&HCL);
oguro 0:01b47504efd4 126 HB.rise(&HBH);
oguro 0:01b47504efd4 127 HA.fall(&HAL);
oguro 0:01b47504efd4 128 HC.rise(&HCH);
oguro 0:01b47504efd4 129 HB.fall(&HBL);
oguro 0:01b47504efd4 130
oguro 0:01b47504efd4 131 if(Vr_adc < 0.05f){
oguro 0:01b47504efd4 132 q=0;
oguro 0:01b47504efd4 133
oguro 0:01b47504efd4 134 }
oguro 0:01b47504efd4 135
oguro 0:01b47504efd4 136 ui=ui+1;
oguro 0:01b47504efd4 137 vi=vi+1;
oguro 0:01b47504efd4 138 wi=wi+1;
oguro 0:01b47504efd4 139
oguro 0:01b47504efd4 140 usi=ut2-ut1;
oguro 0:01b47504efd4 141 vsi=vt2-vt1;
oguro 0:01b47504efd4 142 wsi=wt2-wt1;
oguro 0:01b47504efd4 143
oguro 0:01b47504efd4 144 if(q>=31){
oguro 0:01b47504efd4 145
oguro 0:01b47504efd4 146 su=sin(2*PI*((1/(2*usi*1E-6))*ui*t));
oguro 0:01b47504efd4 147 sv=sin(2*PI*((1/(2*vsi*1E-6))*vi*t));
oguro 0:01b47504efd4 148 sw=sin(2*PI*((1/(2*wsi*1E-6))*wi*t));
oguro 0:01b47504efd4 149
oguro 0:01b47504efd4 150 }
oguro 0:01b47504efd4 151
oguro 0:01b47504efd4 152 mypwmA.write((su)*Vr_adc+0.5);
oguro 0:01b47504efd4 153 mypwmB.write((sv)*Vr_adc+0.5);
oguro 0:01b47504efd4 154 mypwmC.write((sw)*Vr_adc+0.5);
oguro 0:01b47504efd4 155
oguro 0:01b47504efd4 156 SWAVE=(su)*Vr_adc+0.5;
oguro 0:01b47504efd4 157 Speed=60*(1/(7.0*2.0*usi*1E-6));
oguro 0:01b47504efd4 158
oguro 0:01b47504efd4 159 myled = !myled;
oguro 0:01b47504efd4 160
oguro 0:01b47504efd4 161 }
oguro 0:01b47504efd4 162 }