1) hacer un programa que mida la temperatura de 0-300 C de un sensor que da de 0.5-2.
5 voltios por las entradas
analgicas ADCB5, ADCB3 y ADCA2 (utilizar el promedio), para hacer un controlador PID con un periodo de muestreo de 800 microsegundos con el timer 4 para mantener estable la temperatura de acuerdo a una variable de referencia. Entregar la seal de control en forma de PWM simple con un periodo de muestreo de 250 microsegundos con el timer 3, en donde se necesita 0.7-2.3 voltios para cerrar totalmente abrir totalmente la valvula de vapor. Los coeficientes del controlador deben ser configurables a travs de variables. La seal HSPCLK es 130 Mhz. El control se debe realizar cuando se presiona un botn conectado al pin A0. Usar un led para indicar que est conectado el sistema (controlado con el pin B3), y otro para indicar que est funcionando el controlador (controlado con el pin B6). SOL: #include DSP281X_Device.h #include DSP281X_Examples.h #include Examen_Parcial.h Long int pra1,ki1,dt,kd,ed;
Nuevo ADCO=0,5+(2,5-0,5)*(RESULTADC0-342)//(1706-342); Nuevo ADC1=0,5+(2,5-0,5)*(RESULTADC1-342)//(1706-342); Nuevo ADC2=0,5+(2,5-0,5)*(RESULTADC2-342)//(1706-342); Prom_ADC=(Nuevo ADC0+NUEVO ADC1+NUEVO ADC2)/3; e1=ref1-prom_ADC; sci1=pia1+ki1*e1+dt; scd1=kd+(e1-ea)/dt; Sref=scp1+sci1+scd1;
Valor final=(sref-0,7)*5/(2.3-0.7) Valor comparador=valor final*65535/ Evb.Regs.T4CMPR=Valor comparador; EvbRegS.EVBIMRB.bit.T4PINT=1; EvbRegS.EVBIFRB.bit.all=BIT7; Pie ctrlRegs.PIEACK.all=DIEACK_GROUP2: }
2) Hacer un porama para que lea las entradas analgicas ADCA3, ADCB6, ADCA2, ADCB2, calcule el promedio y escriba en binario las salidas digitales GPIOA0-GPIO11. #include DSP281x_Device.h #include DSP281x_Examples.h #include lab5.h longintI,k,z; unsignedintsc, ResultADC0,ref,e; floatkp; voidini_adc(void); sc=0; ref=2048; kp=100; DINT; DRTM; InitSysCtrl(); InitPieCtrl(); IER=0x0000; IFR=0x0000; InitPieVecTable(); EALLOW; //PieVecTable.TPINT=&/eva_timerT1PER_isr; GpioMuxRegs.GPAMUX.all=0x0000; GpioMuxRegs.GPADIR.all=0Xffff; EDIS; //PieCtrlRegs.PIEIER2.all=M_INT4 | M_INT; //IER=IER|M_INT2; //i=0; //ini_eva_timer1(); //ini_pwm_timer2(); ini_adc(); //EINT; //ERTM; do{ GpioDataRegs.GPADAT=(AdcRegs.ADCRESULT3>>4+AdcRegs.ADCRESULT13>>4+AdcRegs.ADCRESULT2>>4+AdcRegs.ADCRESULT 10>>4)/4; }while(1); } voidini_adc(void){ //Specific ADC setup for this example; AdcRegs.ADCTRL1.bit.RESET=1; asm(NOP); asm(NOP); AdcRegs.ADCTRL1.bit.ACQ_PS=15; AdcRegs.ADCTRL3.bit.ADCCLKPS=1; AdcRegs.ADCTRL3.bit.ADCBGRFDN=3; AdcRegs.ADCTRL3.bit.ADCEXTREF=0; DSP28x_usDelay(((((long double) 5000L*1000.0L)/(long double)CPU_RATE)-9.0L)/5.0L); AdcRegs.ADCTRL3.bit.ADCPWDN=1; DSP28x_usDelay(((((long double)5000L*1000.0L)/(long doubleCPU_RATE-9.0L)/5.0L); AdcRegs.ADCTRL1.bit.RESET=0; AdcRegs.ADCTRL1.bit.SEQ_CASC=1; //1 cascaded mode AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x3; AdcRegs.ADCCHSELSEQ1.bit.CONV01=0xD; AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2; AdcRegs.ADCCHSELSEQ1.bit.CONV03=0xA; //AdcRegs.ADCCHSELSEQ1.all=0x0128; //AdcRegs.ADCCHSELSEQ2.all=0xABCD; //AdcRegs.ADCCHSELSEQ3.all=0x9572; //AdcRegs.ADCCHSELSEQ4.all=0x4444; AdcRegs.ADCMAXCONV.bit.MAX_CONV=3; AdcRegs.ADCTRL1.bit.CONT_RUN=1; //Setup continuos run AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; }
3) Hacer un programa que genere PWMs dobles con los PWM1, PWM2 con period de 2345 y una zona muerta de 5 cuentas y los PWM7, PWM8, con un period de PWM de 45375 y una zona muerta de 43234 cuentas.
4) Hacer un programa que mida la temperatura de 0-40 C por la entrada analgica ADCB6, hacer un controlador PID con un periodo de muestreo de 3 milisegundos para mantener estable la temperatura en 18 C, entregar la seal de control en forma de PWM simple con un periodo de muestreo de 500 microsegundos. Los coeficientes del controlador deben ser configurables a travs de variables. La seal HSPCLK es 40 Mhz.