¡Diseño de cursos de matemáticas y electrónica avanzado! ! ! ¡Esperando en línea! ! !
Resumen: Diseñe un programa de control de semáforo, use el diodo emisor de luz en el ICETEK-CTR para simular señales de tráfico y use su matriz de visualización para simular la pantalla; use el temporizador en chip TMS320VC5509DSP para; genere conteos de reloj regularmente; use ICETEK: el teclado del CTR genera interrupciones externas para simular el control del semáforo en las intersecciones en la vida real.
Palabras clave: control de semáforo, diodo emisor de luz ICETEK-CTR, temporizador, teclado
Contenidos:
1. Requisitos de diseño del sistema
2. Diseño del esquema general
3. Programación
4. Pasos experimentales y depuración
5. Resumen de diseño
(1)
Requisitos de diseño del sistema
Utilice el equipo proporcionado por la caja experimental ICETEK-EDU para diseñar y simular el control del semáforo de la intersección en vida real Los requisitos específicos son los siguientes:
Los semáforos se dividen en tres colores: rojo, amarillo y verde, y se utilizan un grupo en el este, sur, oeste y norte. Controle el tráfico: las señales de luz verde indican el paso, las luces amarillas indican advertencia y las señales de luz roja indican el paso. Las luces están cerradas al tráfico y las luces intermitentes indican que la señal está a punto de cambiar.
Visualización de tiempo: la matriz de puntos de 8*8 muestra dos conteos, que es una cuenta regresiva, y la visualización del conteo cambia cada segundo.
Las señales normales del semáforo cambian automáticamente:
(1) Luz verde en dirección norte-sur, luz roja en dirección este-oeste (
20 segundos)
( 2) La luz verde parpadea en dirección norte-sur
(3) La luz amarilla en dirección norte-sur
(4) Roja luz en dirección norte-sur, luz amarilla en dirección este-oeste
(5) Dirección este-oeste Luz verde en dirección (
20 segundos)
(6) Luz verde parpadeando en dirección este-oeste
(7) Luz amarilla en dirección este-oeste
(8 ) Regresar (
1) Control de bucle
Situación de emergencia;
Utilice el teclado en ICETEK-CTR para generar interrupciones externas, interrumpir la secuencia normal de la señal y simular emergencias.
(2
) Diseño del esquema general
(1) Simulación de semáforo:
Utilice un juego de luces luminosas en ICETEK- CTR La iluminación de diodos (máximo 12, divididos en cuatro grupos, este, oeste, norte, sur y tres colores, rojo, amarillo y verde) realiza la simulación de señales de tráfico.
(2) Visualización de tiempo:
Utilice la matriz de pantalla LED en ICETEK-CTR para simular la pantalla.
Bienvenido, visítenos en: www.eepw.com.cn
Para mostrar el conteo, se requiere una cuenta regresiva cuando está en el estado 1, 5, *, y debe calcularse en este estado. El incremento del valor del recuento se utiliza para determinar si se actualiza la visualización del recuento en función del incremento.
(3) Temporización:
Utilice el temporizador en chip TMS320VC5509DSP para generar recuentos de reloj con regularidad y luego utilice este recuento para corresponder al tiempo específico.
Bienvenido, visítenos en: www.eepw.com.cn estadoNSRedEWAmarillo 4 luces rojas norte y sur, luces amarillas este y oeste durante 4 segundos (16, 200, 215) 20
Estado del estado de la luz de señal del número de estado Defina el tiempo de espera (valor de conteo, hora de inicio, hora de finalización) Pantalla de conteo
1 Estado de las luces verdes del norte y del sur, luces rojas del este y del oesteNSGreenEWRed 20 segundos (160, 0, 159 ) 20-0
2 Luces verdes norte y sur parpadean, estado de luces rojas este y oesteNSFlashEWRed 6 segundos (24, 160, 183) 0
3 Luces amarillas norte y sur, este y estado de las luces rojas del oesteNSYellowEWRed 4 segundos (16, 184, 199) 20
5 estado de las luces rojas del norte y del sur, estado de las luces verdes del este y del oesteNSRedEWGreen 20 segundos (160, 216, 375) 20-1
6 luces rojas norte y sur, luces verdes este y oeste parpadean estadoNSRedEWFlash 6 segundos (24, 376, 399) 0
6 p>
7 luces rojas norte y sur, este y Estado de las luces amarillas del oesteNSRedEWYellow 4 segundos (16, 400, 415) 20
8 Estado de las luces amarillas del norte y del sur, estado de las luces rojas del este y del oesteNSYellowEWRed 4 segundos (16, 416, 431) 20
* Luz roja norte-sur, luz roja este-oeste EstadoMantener 20 segundos (160, 0, 159) 20-1
Entre ellos, la secuencia normal es uno cada 112 segundos (valor de conteo día 448) Bucle, el estado "*" es un estado no secuencial.
De esta manera, el estado actual se puede determinar en función del valor del recuento y la situación se puede procesar según el estado.
(4) Emergencia:
Manejo de emergencias; cuando ocurren emergencias simuladas (paso de convoyes importantes, paso de ambulancias, etc.), la policía de tránsito controla manualmente
< pag >1.Cuando el tiempo restante para el tráfico en cualquier dirección sea superior a 10 segundos, cambie el tiempo a 10 segundos.
2.
Transición normal a luces rojas en todos los lados (20 segundos)
3.
Regrese directamente al siguiente semáforo en la secuencia normal (saltándose el estado de luz verde intermitente y luz amarilla).
(3) Diagrama de flujo general del programa
Bienvenido, visítenos en: www.eepw.com.cn
Entrada al programa de servicio de interrupción del temporizador
Sumar 1 al valor original de la variable de trabajo de conteo
Salir de la rutina de servicio de interrupción del temporizador
Iniciar
Inicialización: EMIF, CPU, frecuencia, ICETEK - CTR, temporizador, registro de control de interrupciones, variable de trabajo
Determina el estado actual según el recuento del temporizador
Establece el estado de la luz indicadora según el estado actual
Establecer según el estado actual del conjunto de pantallas LED
Leer entrada del teclado
¿Fin?
Fin
Bienvenido, visítenos en: www.eepw.com.cn
(4)
Programación
De acuerdo con los requisitos de diseño, dado que el control ocurre secuencialmente desde diferentes estados, podemos usar el método de control del mecanismo de estado para resolver este problema. El método específico es: primero enumerar todos los estados posibles; luego numerar estos estados y generarlos en orden; la duración del estado está controlada por el programa; Para emergencias, se pueden insertar secuencias de control especiales en la secuencia normal de controles.
Nota: El programa se adjunta en las siguientes páginas
(5) Pasos experimentales y depuración
1. Conecte el enchufe PS2 del teclado adjunto a la caja experimental a la interfaz de teclado P8 de ICETEK-CTRR
2. Gire el interruptor de alimentación de la placa ICETEK-CTR a la posición "on".
3. Configure Code Composer Studio2.21 para que se ejecute en modo de emulación de hardware.
4. Inicie Code Composer Studio2.21:
Seleccione el menú Depurar->Restablecer CPU.
5. Compile y descargue el programa programado.
6. Ejecute el programa y observe los resultados.
7. Control de emergencia.
Presione las teclas excepto la tecla "Enter" en el pequeño teclado adjunto a ICETEK-CTR para observar si la señal cumple con los requisitos.
8. Finalice el programa y salga.
Presione la tecla "Enter" en el teclado provisto con ICETEK-CTR.
9. Salir de CCS
(6) Resumen de diseño
A través del diseño de este curso, tengo una mejor comprensión del control de semáforos; también domino el uso del temporizador TMS320VC5509DST y la programación e interrupción externa. . Al diseñar el sistema de control, al comprender el concepto de diseño general, se debe tener en cuenta la existencia de circunstancias especiales. Al escribir este programa de control, uno de los aspectos más difíciles es considerar las emergencias de tráfico, qué tan rápidos deben ser los semáforos.
(7) Referencias
Hu Qingming Li Xiaogang Wu Yuchun EMS320C55X Principio, aplicación y diseño del DSP Beijing Machinery Press, 2005
Colaboradores:
p>
(8) Programa:
Entrada de rutina de servicio de interrupción de teclado
Establecer indicador de evento de emergencia
Salir de la rutina de servicio de interrupción de teclado
p>Bienvenido, visítenos en: www.eepw.com.cn
#include "c5509.h"
#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
#define nStatusNSGreenEWRed 160
#define nStatusNSFlashEWRed 184
#define nStatusNSYellowEWRed 200
#define nTotalTime 448
#define nStatusHold 160
#define statusNSGreenEWRed 0
#define statusNSFlashEWRed 1
#definir estadoNSRedEWRed 2
#definir estadoNSRedEWYellow 3
#definir estadoNSRedEWGreen 4
#definir estadoNSRedEWFlash 5
#definir estadoHold 6
p>void InitDSP();
void InitTimer();
void InitICETEKCTR()
void INTR_init(); ;
tiempo de interrupción nulo(void);
interrupción nula xint2(void);//rutina de servicio de interrupción XINT2
void SetLEDArray1(int nNumber); / Modificar el contenido de la pantalla
void RefreshLEDArray1(); // Actualizar la pantalla
void EndICETEKCTR();
unsigned int uWork,nTimeCount,nTimeMS <; /p>
unsigned int uLightStatusEW,uLightStatusSN;
unsigned int bHold;
unsigned char ledbuf[8],ledx[8]; char led[40]=
{
0x7E,0x81,0x81,0x7E,0x00,0x02,0xFF,0x00,
0xE2,0x91,0x91, 0x8E,0x42,0x89
,0x89,0x76,
0x38,0x24,0x22,0xFF,0x4F,0x89,0x89,0x71,
0x7E,0x89,0x89,0x72,0x01,0xF1,0x09,0x07 ,
Bienvenido, visítenos en: www.eepw.com.cn
0x76,0x89,0x89,0x76,0x4E,0x91,0x91,0x7E
}
int www=0;
main()
{
int nWork1,nWork2,nWork3,nWork4
int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus;
unsigned int nScanCode
nTimeCount=nTimeMS=0; uLightStatusEW=uLightStatusSN=0;
nNowStatus=0; nOldStatus=1; nOldTimeCount=0
InitDSP() // Inicializa DSP y configura la velocidad de ejecución
<; p >InitICETEKCTR(); // Inicializa el módulo de visualización/controlInitTimer(); // Establece la interrupción del temporizador
// Cambia el estado según el recuento del temporizador
//Establece el conteo y el estado del semáforo según el estado
while ( 1 )
{
if ( bHold && nNowStatus==statusHold )
{
if ( nTimeCount>=nStatusHold )
{
nNowStatus=nSaveStatus
nTimeCount=nSaveTimeCount;
p>
bHold=0;
}
}
else if ( nTimeCount else if ( nTimeCount else if ( nTimeCount else if ( nTimeCount else if ( nTimeCount else if; ( nTimeCount edEWYellow; Bienvenido, visítenos en: www.eepw.com.cn else if ( nTimeCount if ( nNowStatus= =nOldStatus ) { cambiar ( nNowStatus ) { estado del casoNSFlashEWRed: nWork1=nTimeCount -nStatusNSGreenEWRed;//-160 nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed;//200-184=16 nWork3=nWork2/3 nWork4=nWork3; /2; if ( nWork1>=0 && nWork2>0 && nWork3>0 && nWork4>0 ) uLightStatusSN=( (nWork1%nWork3)<=nWork4 )?( 0x49):(0x40); romper; estado del casoNSRedEWFlash: nWork1=nTimeCount-nStatusNSRedEWGreen nWork2=nStatusNSRedEWYellow1-; nStatusNSRedEWFlash; nWork3=nWork2/3 nWork4=nWork3/2 if ( nWork1>=0 && nWork2>0 && nWork3>0 && nWork4>0 ) uLightStatusEW=( (nWork1%nWork3)<=nWork4 )?(0x09):(0x00); romper estado del casoNSGreenEWRed; : nWork1=nStatusNSGreenEWRed/20; if ( nWork1>0 ) { nWork2=20-nTimeCount/nWork1; if ( bHold ) { if ( nWork2>10 ) { nTimeCount=nWork1 *10; nWork2=10 } } si (nOldTimeCount!=nWork2 ) { nOldTimeCount=nWork2; SetLEDArray1(nWork2); } Bienvenido a visitarnos en: www.eepw.com .cn } romper; estado del casoNSRedEWGreen: nWork1=(nStatusNSRedEWGreen-nStatusNSRedEWYel bajo)/20; if ( nWork1>0 ) { nWork2=20-(nTimeCount-nStatusNSRedEWYellow)/nWork1 if ( bHold ) { if ( nWork2>10 ) { nTimeCount=nStatusNSRedEWYellow+nWork1*10; nWork2=10; } } if ( nOldTimeCount!=nWork2 ) { nOldTimeCount=nWork2 SetLEDArray1(nWork2 } } romper; > estado del casoHold: nWork1=nStatusHold/20 if ( nWork1>0 ) { nWork2= 20-nTimeCount/nWork1; if ( nOldTimeCount!=nWork2 ) { nOldTimeCount=nWork2 SetLEDArray1(nWork2) } } romper } } más; { if ( bHold ) { Bienvenido, visítenos en: www.eepw.com.cn nSaveStatus=nNowStatus; nSaveTimeCount=nTimeCount; nNowStatus=estadoHold nTimeCount=0 if (nSaveStatus; ==estadoNSFlashEWRed || nSaveStatus==statusNSYellowEWRed ) { nSaveStatus=statusNSRedEWGreen nSaveTimeCount=nStatusNSRedEWYellow } p> p> else if ( nSaveStatus==statusNSRedEWFlash || nSaveStatus==statusNSRedEWYellow ) { nSaveStatus=statusNSGreenEWRed nSaveTimeCount=0; } } nOldStatus=nNowStatus cambiar ( nNowStatus ) { estado del casoNSGreenEWRed: uLightStatusEW=0x24; uLightStatusSN=0x49 SetLEDArray1(20); estado del casoNSFlashEWRed: uLightStatusEW=0x24; =0x49; SetLEDArray1(0); romper; estado del casoNSYellowEWRed: uLightStatusEW=0x24; /p> SetLEDArray1(20); romper; estado del casoNSRedEWYellow: uLightStatusEW=0x12; p>SetLEDArray1(20); romper; estado del casoNSRedEWGreen: uLightStatusEW=0x09; uLightStatusSN=0x64; 20); romper; estado del casoNSRedEWFlash: uLightStatusEW=0x09; uLightStatusSN=0x64; /p> Bienvenido, visítenos en: www.eepw.com.cn descanso; estado del casoHold: uLightStatusEW=0x24; 0x64; SetLEDArray1(20); romper } } CTRLR=uLightStatusEW; CTRLR=uLightStatusSN; // Establece el estado del semáforo RefreshLEDArray1(); // Actualiza la pantalla LED nScanCode=CTRKEY // Lee el código de escaneo del teclado nScanCode&=0x0ff; if ( nScanCode==SCANCODE_Enter ) romper } EndICETEKCTR(); (0 ); } //Rutina de servicio de interrupción del temporizador para el conteo del reloj tiempo de interrupción nulo(void) { nTimeMS++; if ( nTimeMS>=5 ) { nTimeMS=0 nTimeCount++; nTimeCount%=nTotalTime }