gerador senoidal com look-up table 8 bit

Dependencies:   mbed SeeedShieldBot BluetoothSerial

Committer:
afm76
Date:
Mon Jun 07 16:27:58 2021 +0000
Revision:
0:66bb2be784c0
Gerador senoidal com Look-up table

Who changed what in which revision?

UserRevisionLine numberNew contents of line
afm76 0:66bb2be784c0 1 //--------------------------------------------------------------------------
afm76 0:66bb2be784c0 2 // 2021-06
afm76 0:66bb2be784c0 3 // Esse programa gera uma senoide com um conversor R2R e uma tabela de senos
afm76 0:66bb2be784c0 4 // a tabela foi construida no Excel para 90 passos de 1 grau, assim o valor
afm76 0:66bb2be784c0 5 // dos senos de 0 a 90 graus sera rebatido para 90 a 180, bem como 180 a 270
afm76 0:66bb2be784c0 6 // e 270 a 360 graus
afm76 0:66bb2be784c0 7 // -------------------------------------------------------------------------
afm76 0:66bb2be784c0 8
afm76 0:66bb2be784c0 9 #include "mbed.h"
afm76 0:66bb2be784c0 10
afm76 0:66bb2be784c0 11 float sinus[]{
afm76 0:66bb2be784c0 12 0,
afm76 0:66bb2be784c0 13 0.017452406,
afm76 0:66bb2be784c0 14 0.034899497,
afm76 0:66bb2be784c0 15 0.052335956,
afm76 0:66bb2be784c0 16 0.069756474,
afm76 0:66bb2be784c0 17 0.087155743,
afm76 0:66bb2be784c0 18 0.104528463,
afm76 0:66bb2be784c0 19 0.121869343,
afm76 0:66bb2be784c0 20 0.139173101,
afm76 0:66bb2be784c0 21 0.156434465,
afm76 0:66bb2be784c0 22 0.173648178,
afm76 0:66bb2be784c0 23 0.190808995,
afm76 0:66bb2be784c0 24 0.207911691,
afm76 0:66bb2be784c0 25 0.224951054,
afm76 0:66bb2be784c0 26 0.241921896,
afm76 0:66bb2be784c0 27 0.258819045,
afm76 0:66bb2be784c0 28 0.275637356,
afm76 0:66bb2be784c0 29 0.292371705,
afm76 0:66bb2be784c0 30 0.309016994,
afm76 0:66bb2be784c0 31 0.325568154,
afm76 0:66bb2be784c0 32 0.342020143,
afm76 0:66bb2be784c0 33 0.35836795,
afm76 0:66bb2be784c0 34 0.374606593,
afm76 0:66bb2be784c0 35 0.390731128,
afm76 0:66bb2be784c0 36 0.406736643,
afm76 0:66bb2be784c0 37 0.422618262,
afm76 0:66bb2be784c0 38 0.438371147,
afm76 0:66bb2be784c0 39 0.4539905,
afm76 0:66bb2be784c0 40 0.469471563,
afm76 0:66bb2be784c0 41 0.48480962,
afm76 0:66bb2be784c0 42 0.5,
afm76 0:66bb2be784c0 43 0.515038075,
afm76 0:66bb2be784c0 44 0.529919264,
afm76 0:66bb2be784c0 45 0.544639035,
afm76 0:66bb2be784c0 46 0.559192903,
afm76 0:66bb2be784c0 47 0.573576436,
afm76 0:66bb2be784c0 48 0.587785252,
afm76 0:66bb2be784c0 49 0.601815023,
afm76 0:66bb2be784c0 50 0.615661475,
afm76 0:66bb2be784c0 51 0.629320391,
afm76 0:66bb2be784c0 52 0.64278761,
afm76 0:66bb2be784c0 53 0.656059029,
afm76 0:66bb2be784c0 54 0.669130606,
afm76 0:66bb2be784c0 55 0.68199836,
afm76 0:66bb2be784c0 56 0.69465837,
afm76 0:66bb2be784c0 57 0.707106781,
afm76 0:66bb2be784c0 58 0.7193398,
afm76 0:66bb2be784c0 59 0.731353702,
afm76 0:66bb2be784c0 60 0.743144825,
afm76 0:66bb2be784c0 61 0.75470958,
afm76 0:66bb2be784c0 62 0.766044443,
afm76 0:66bb2be784c0 63 0.777145961,
afm76 0:66bb2be784c0 64 0.788010754,
afm76 0:66bb2be784c0 65 0.79863551,
afm76 0:66bb2be784c0 66 0.809016994,
afm76 0:66bb2be784c0 67 0.819152044,
afm76 0:66bb2be784c0 68 0.829037573,
afm76 0:66bb2be784c0 69 0.838670568,
afm76 0:66bb2be784c0 70 0.848048096,
afm76 0:66bb2be784c0 71 0.857167301,
afm76 0:66bb2be784c0 72 0.866025404,
afm76 0:66bb2be784c0 73 0.874619707,
afm76 0:66bb2be784c0 74 0.882947593,
afm76 0:66bb2be784c0 75 0.891006524,
afm76 0:66bb2be784c0 76 0.898794046,
afm76 0:66bb2be784c0 77 0.906307787,
afm76 0:66bb2be784c0 78 0.913545458,
afm76 0:66bb2be784c0 79 0.920504853,
afm76 0:66bb2be784c0 80 0.927183855,
afm76 0:66bb2be784c0 81 0.933580426,
afm76 0:66bb2be784c0 82 0.939692621,
afm76 0:66bb2be784c0 83 0.945518576,
afm76 0:66bb2be784c0 84 0.951056516,
afm76 0:66bb2be784c0 85 0.956304756,
afm76 0:66bb2be784c0 86 0.961261696,
afm76 0:66bb2be784c0 87 0.965925826,
afm76 0:66bb2be784c0 88 0.970295726,
afm76 0:66bb2be784c0 89 0.974370065,
afm76 0:66bb2be784c0 90 0.978147601,
afm76 0:66bb2be784c0 91 0.981627183,
afm76 0:66bb2be784c0 92 0.984807753,
afm76 0:66bb2be784c0 93 0.987688341,
afm76 0:66bb2be784c0 94 0.990268069,
afm76 0:66bb2be784c0 95 0.992546152,
afm76 0:66bb2be784c0 96 0.994521895,
afm76 0:66bb2be784c0 97 0.996194698,
afm76 0:66bb2be784c0 98 0.99756405,
afm76 0:66bb2be784c0 99 0.998629535,
afm76 0:66bb2be784c0 100 0.999390827,
afm76 0:66bb2be784c0 101 0.999847695,
afm76 0:66bb2be784c0 102 1,
afm76 0:66bb2be784c0 103 };
afm76 0:66bb2be784c0 104
afm76 0:66bb2be784c0 105 float VCC,t,T,tos;
afm76 0:66bb2be784c0 106 int f,freq; //, T;
afm76 0:66bb2be784c0 107 BusOut saida(D4, D5, D6, D7, D8, D9, D10, D11);
afm76 0:66bb2be784c0 108
afm76 0:66bb2be784c0 109 int main()
afm76 0:66bb2be784c0 110 {
afm76 0:66bb2be784c0 111 VCC = 3.3; //used for determing offset voltage
afm76 0:66bb2be784c0 112 freq = 60; //freq. in Hz
afm76 0:66bb2be784c0 113 tos = 15.5; //time off-set in us (5.6ms / 350 = 15.5us)
afm76 0:66bb2be784c0 114 t = 30;
afm76 0:66bb2be784c0 115 T = t - tos; //T = 30; //(1/freq)/360; //time slice in seconds for the sinusoid routine
afm76 0:66bb2be784c0 116
afm76 0:66bb2be784c0 117 while (true)
afm76 0:66bb2be784c0 118 {
afm76 0:66bb2be784c0 119 for (int i=0; i < 90; i++) //0 to 90 degree
afm76 0:66bb2be784c0 120 {
afm76 0:66bb2be784c0 121 f=74*((sinus[i]*VCC/2)+VCC/2)+10; //59 and 60 are adj for 1/4 of the FFh range(8bit) according to Vref
afm76 0:66bb2be784c0 122 saida = f;
afm76 0:66bb2be784c0 123 // printf("%1.3f", j);
afm76 0:66bb2be784c0 124 wait_us(T);//wait(T);
afm76 0:66bb2be784c0 125 }
afm76 0:66bb2be784c0 126
afm76 0:66bb2be784c0 127 for (int i=90; i > 0; i--) //90 to 180 degree
afm76 0:66bb2be784c0 128 {
afm76 0:66bb2be784c0 129 f=74*((sinus[i]*VCC/2)+VCC/2)+10;
afm76 0:66bb2be784c0 130 saida = f;
afm76 0:66bb2be784c0 131 // printf("%1.3f", j);
afm76 0:66bb2be784c0 132 wait_us(T);//wait(T);
afm76 0:66bb2be784c0 133 }
afm76 0:66bb2be784c0 134
afm76 0:66bb2be784c0 135 for (int i=0; i < 90; i++) //180 to 270 degree
afm76 0:66bb2be784c0 136 {
afm76 0:66bb2be784c0 137 f=74*((-sinus[i]*VCC/2)+VCC/2)+10;
afm76 0:66bb2be784c0 138 saida = f;
afm76 0:66bb2be784c0 139 // printf("%1.3f", j);
afm76 0:66bb2be784c0 140 wait_us(T);//wait(T);
afm76 0:66bb2be784c0 141 }
afm76 0:66bb2be784c0 142
afm76 0:66bb2be784c0 143 for (int i=90; i > 0; i--) //270 to 360 degree
afm76 0:66bb2be784c0 144 {
afm76 0:66bb2be784c0 145 f=74*((-sinus[i]*VCC/2)+VCC/2)+10;
afm76 0:66bb2be784c0 146 saida = f;
afm76 0:66bb2be784c0 147 // printf("%1.3f", j);
afm76 0:66bb2be784c0 148 wait_us(T);//wait(T);
afm76 0:66bb2be784c0 149 }
afm76 0:66bb2be784c0 150
afm76 0:66bb2be784c0 151 }
afm76 0:66bb2be784c0 152 }