Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
WaveGen.cpp
00001 #include "mbed.h" 00002 #include "WaveGen.h" 00003 00004 using namespace mbed; 00005 00006 WaveGen::WaveGen(PinName WaveForm):_WaveForm(WaveForm) 00007 { 00008 _WaveForm.write(0); 00009 } 00010 00011 int WaveGen::TCalc(int div,float Freq) 00012 { 00013 float temp = 0; 00014 if(div == 0) 00015 { 00016 temp = 1 / Freq; 00017 temp *= 1000000; 00018 } 00019 else 00020 { 00021 temp = 1 / Freq; 00022 temp *= 1000000; 00023 temp /= div; 00024 } 00025 return (int)temp; 00026 } 00027 00028 float WaveGen::VCalc(float Volt) 00029 { 00030 float temp = Volt / 3.30; 00031 temp /= 2; 00032 return temp; 00033 } 00034 00035 float WaveGen::RadCalc(float Ang) 00036 { 00037 float temp = 0; 00038 temp = Ang * 0.0174532925; 00039 return temp; 00040 } 00041 00042 void WaveGen::SineWave(float Frequency,float Amplitude) 00043 { 00044 float temp = 0; 00045 int T1 = TCalc(6,Frequency);//porzione 30° 00046 int T2 = TCalc(12,Frequency);//porzione 120° 00047 float V = VCalc(Amplitude) * 2; 00048 for(int a = 0; a <= 30; a += 5) 00049 { 00050 temp = 0.5 + V * sin(RadCalc((float)a)); 00051 _WaveForm = temp; 00052 wait_us(T1); 00053 } 00054 for(int b = 30; b <= 150; b += 10) 00055 { 00056 temp = 0.5 + V * sin(RadCalc((float)b)); 00057 _WaveForm = temp; 00058 wait_us(T2); 00059 } 00060 for(int c = 150; c <= 210; c += 5) 00061 { 00062 temp = 0.5 + V * sin(RadCalc((float)c)); 00063 _WaveForm = temp; 00064 wait_us(T1); 00065 } 00066 for(int d = 210; d <= 330; d += 10) 00067 { 00068 temp = 0.5 + V * sin(RadCalc((float)d)); 00069 _WaveForm = temp; 00070 wait_us(T2); 00071 } 00072 for(int e = 330; e <= 360; e += 5) 00073 { 00074 temp = 0.5 + V * sin(RadCalc((float)e)); 00075 _WaveForm = temp; 00076 wait_us(T1); 00077 } 00078 } 00079 00080 void WaveGen::SquareWave(float Frequency,float Amplitude,float DutyCycle) 00081 { 00082 float V = VCalc(Amplitude); 00083 float temp = 0; 00084 int Ton,Toff = 0; 00085 int Temp = TCalc(0,Frequency); 00086 if(DutyCycle != 50) 00087 { 00088 temp = DutyCycle / 100; 00089 temp *= (float)Temp; 00090 Ton = (int)temp; 00091 Toff = Temp - Ton; 00092 } 00093 else 00094 { 00095 Ton = TCalc(0,Frequency); 00096 Toff = Ton; 00097 } 00098 _WaveForm = V; 00099 wait_us(Ton); 00100 _WaveForm = 0; 00101 wait_us(Toff); 00102 } 00103 00104 void WaveGen::TriangularWave(float Frequency,float Amplitude) 00105 { 00106 float temp = 0; 00107 int T = TCalc(50,Frequency); 00108 float V = VCalc(Amplitude); 00109 int min,max,pass; 00110 //Calcola gli intervalli di tensione 00111 temp = V * 1000; 00112 min = 500 - (int)temp; 00113 max = 500 + (int)temp; 00114 pass = (max - min) / 50; 00115 for(int a = min; a <= max; a += pass) 00116 { 00117 temp = (float)a; 00118 temp /= 1000; 00119 _WaveForm = temp; 00120 wait_us(T); 00121 } 00122 for(int b = max; b >= min; b -= pass) 00123 { 00124 temp = (float)b; 00125 temp /= 1000; 00126 _WaveForm = temp; 00127 wait_us(T); 00128 } 00129 } 00130 00131 void WaveGen::SawToothWave(float Frequency,float Amplitude) 00132 { 00133 float temp = 0; 00134 int T = TCalc(50,Frequency); 00135 float V = VCalc(Amplitude); 00136 int min,max,pass; 00137 temp = V * 100; 00138 min = 50 - (int)temp; 00139 max = 50 + (int)temp; 00140 pass = (max - min) / 50; 00141 for(int a = min; a <= max; a += pass) 00142 { 00143 temp = (float)a; 00144 temp /= 100; 00145 _WaveForm = temp; 00146 wait_us(T); 00147 } 00148 }
Generated on Mon Jul 18 2022 18:31:26 by
1.7.2