Dependencies:   FastPWM mbed

Committer:
nlfischer
Date:
Fri Jan 05 18:01:17 2018 +0000
Revision:
0:9f283b4cbf6c
Luiz Fischer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nlfischer 0:9f283b4cbf6c 1 // Anexo 2: Programa para excitar o conversor e realizar a identificação do sistema
nlfischer 0:9f283b4cbf6c 2
nlfischer 0:9f283b4cbf6c 3 #include "mbed.h"
nlfischer 0:9f283b4cbf6c 4 #include "Sinal.h"
nlfischer 0:9f283b4cbf6c 5 #include "FastPWM.h"
nlfischer 0:9f283b4cbf6c 6
nlfischer 0:9f283b4cbf6c 7 Ticker aciona_interrupcao;
nlfischer 0:9f283b4cbf6c 8
nlfischer 0:9f283b4cbf6c 9 Serial pc(SERIAL_TX, SERIAL_RX, 1000000);
nlfischer 0:9f283b4cbf6c 10
nlfischer 0:9f283b4cbf6c 11 AnalogIn tensao_entrada(A4);
nlfischer 0:9f283b4cbf6c 12 AnalogIn tensao_saida(A5);
nlfischer 0:9f283b4cbf6c 13
nlfischer 0:9f283b4cbf6c 14 FastPWM fastpwm(PB_4,1);
nlfischer 0:9f283b4cbf6c 15
nlfischer 0:9f283b4cbf6c 16 DigitalOut carga(PB_5);
nlfischer 0:9f283b4cbf6c 17 DigitalOut L_8V(PB_3);
nlfischer 0:9f283b4cbf6c 18
nlfischer 0:9f283b4cbf6c 19 static int interrupt = 1, k=0, periodo_pwm = 1;
nlfischer 0:9f283b4cbf6c 20 float T = 0.001;
nlfischer 0:9f283b4cbf6c 21
nlfischer 0:9f283b4cbf6c 22 float le_tensao_vin(){
nlfischer 0:9f283b4cbf6c 23 return tensao_entrada.read()*11.5;
nlfischer 0:9f283b4cbf6c 24 }
nlfischer 0:9f283b4cbf6c 25
nlfischer 0:9f283b4cbf6c 26 float le_tensao_vout(){
nlfischer 0:9f283b4cbf6c 27 return tensao_saida.read()*11.5;
nlfischer 0:9f283b4cbf6c 28 }
nlfischer 0:9f283b4cbf6c 29
nlfischer 0:9f283b4cbf6c 30 void liga_8V(){
nlfischer 0:9f283b4cbf6c 31 L_8V = 1;wait(T/5);
nlfischer 0:9f283b4cbf6c 32 }
nlfischer 0:9f283b4cbf6c 33
nlfischer 0:9f283b4cbf6c 34 void interrupcao(){
nlfischer 0:9f283b4cbf6c 35 interrupt = 1;
nlfischer 0:9f283b4cbf6c 36 k=k+1;
nlfischer 0:9f283b4cbf6c 37 }
nlfischer 0:9f283b4cbf6c 38
nlfischer 0:9f283b4cbf6c 39 void inicio(){
nlfischer 0:9f283b4cbf6c 40 wait(0.5);
nlfischer 0:9f283b4cbf6c 41 aciona_interrupcao.attach(&interrupcao, T);
nlfischer 0:9f283b4cbf6c 42
nlfischer 0:9f283b4cbf6c 43 fastpwm.period_ticks (5000); // Ajusta o período do pwm para 20Khz (5000 system ticks)
nlfischer 0:9f283b4cbf6c 44 fastpwm.pulsewidth_ticks(0); // Ajusta o ciclo de trabalho
nlfischer 0:9f283b4cbf6c 45
nlfischer 0:9f283b4cbf6c 46 pc.printf("%% Inicio do programa");
nlfischer 0:9f283b4cbf6c 47 pc.printf("\nclear all; clc;");
nlfischer 0:9f283b4cbf6c 48 pc.printf("\ndados = [");
nlfischer 0:9f283b4cbf6c 49 }
nlfischer 0:9f283b4cbf6c 50
nlfischer 0:9f283b4cbf6c 51 void imprime_dados(float u, float vout){
nlfischer 0:9f283b4cbf6c 52 pc.printf("\n%d", k);
nlfischer 0:9f283b4cbf6c 53 pc.printf(" ");
nlfischer 0:9f283b4cbf6c 54 pc.printf("%f", u);
nlfischer 0:9f283b4cbf6c 55 pc.printf(" ");
nlfischer 0:9f283b4cbf6c 56 pc.printf("%f", vout);
nlfischer 0:9f283b4cbf6c 57 }
nlfischer 0:9f283b4cbf6c 58
nlfischer 0:9f283b4cbf6c 59 void fim(){
nlfischer 0:9f283b4cbf6c 60 pc.printf("];");
nlfischer 0:9f283b4cbf6c 61 pc.printf("\nfigure(1)");
nlfischer 0:9f283b4cbf6c 62
nlfischer 0:9f283b4cbf6c 63 pc.printf("\nsubplot(2,1,1)");
nlfischer 0:9f283b4cbf6c 64 pc.printf("\nstairs(dados(:,3),'k')");
nlfischer 0:9f283b4cbf6c 65 pc.printf("\ngrid on");
nlfischer 0:9f283b4cbf6c 66 pc.printf("\nylabel('Tensão de saida')");
nlfischer 0:9f283b4cbf6c 67 pc.printf("\naxis([0 5000 0 10])");
nlfischer 0:9f283b4cbf6c 68
nlfischer 0:9f283b4cbf6c 69 pc.printf("\nsubplot(2,1,2)");
nlfischer 0:9f283b4cbf6c 70 pc.printf("\nstairs(dados(:,2))");
nlfischer 0:9f283b4cbf6c 71 pc.printf("\ngrid on");
nlfischer 0:9f283b4cbf6c 72 pc.printf("\nylabel('controle')");
nlfischer 0:9f283b4cbf6c 73 pc.printf("\naxis([0 5000 0 5000])");
nlfischer 0:9f283b4cbf6c 74
nlfischer 0:9f283b4cbf6c 75 pc.printf("\nsave dados dados");
nlfischer 0:9f283b4cbf6c 76
nlfischer 0:9f283b4cbf6c 77 fastpwm.pulsewidth_ticks(0); // Ajusta o ciclo de trabalho
nlfischer 0:9f283b4cbf6c 78
nlfischer 0:9f283b4cbf6c 79 while(1){ }
nlfischer 0:9f283b4cbf6c 80 }
nlfischer 0:9f283b4cbf6c 81
nlfischer 0:9f283b4cbf6c 82 float seta_pwm(int x){
nlfischer 0:9f283b4cbf6c 83 if(x==0) x=1000;
nlfischer 0:9f283b4cbf6c 84 if(x==1) x=4000;
nlfischer 0:9f283b4cbf6c 85
nlfischer 0:9f283b4cbf6c 86 fastpwm.pulsewidth_ticks(x); // Ajusta o ciclo de trabalho
nlfischer 0:9f283b4cbf6c 87 return x;
nlfischer 0:9f283b4cbf6c 88 }
nlfischer 0:9f283b4cbf6c 89
nlfischer 0:9f283b4cbf6c 90
nlfischer 0:9f283b4cbf6c 91 int main() {
nlfischer 0:9f283b4cbf6c 92 int i = 0;
nlfischer 0:9f283b4cbf6c 93 float vin=0.0,vout=0.0, u=0.0;
nlfischer 0:9f283b4cbf6c 94
nlfischer 0:9f283b4cbf6c 95 inicio();
nlfischer 0:9f283b4cbf6c 96
nlfischer 0:9f283b4cbf6c 97 liga_8V();
nlfischer 0:9f283b4cbf6c 98
nlfischer 0:9f283b4cbf6c 99 while(1){
nlfischer 0:9f283b4cbf6c 100
nlfischer 0:9f283b4cbf6c 101 if(interrupt) {
nlfischer 0:9f283b4cbf6c 102
nlfischer 0:9f283b4cbf6c 103 u = seta_pwm(sinal_pwm[k]);
nlfischer 0:9f283b4cbf6c 104
nlfischer 0:9f283b4cbf6c 105 imprime_dados(u, le_tensao_vout());
nlfischer 0:9f283b4cbf6c 106
nlfischer 0:9f283b4cbf6c 107
nlfischer 0:9f283b4cbf6c 108 interrupt = 0;
nlfischer 0:9f283b4cbf6c 109
nlfischer 0:9f283b4cbf6c 110 if(k==tam-1) fim();
nlfischer 0:9f283b4cbf6c 111
nlfischer 0:9f283b4cbf6c 112
nlfischer 0:9f283b4cbf6c 113 }
nlfischer 0:9f283b4cbf6c 114
nlfischer 0:9f283b4cbf6c 115
nlfischer 0:9f283b4cbf6c 116 }
nlfischer 0:9f283b4cbf6c 117 }