Autor Tema: Dudas basicas sobre dsPIC  (Leído 5332 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pirate_x

  • PIC10
  • *
  • Mensajes: 24
    • Pirata, Inc Electronics
Dudas basicas sobre dsPIC
« en: 28 de Marzo de 2009, 23:45:45 »
Hola, estoy trabajando en mi tesis y necesito implementar un dispositivo que genere 3 señales senoidales con amplitud y fase ajustable. Por otro lado debo generar una señal triangular fija.
Ademas el sistema esta realimentado y debe implementarse un control P o PI (si es que resulta). ahhh y debo controlar un teclado y un LCD alfanumerico.

Bueno he buscado alternativas para implementar este asunto, y me he topado con los dsPIC y me llama la atencion que sea capaz de realizar operaciones tan rapido como la luz! jajaja (segun lo que dicen) y eso me ayudaria mucho a realizar los calculos que necesito en la implementacion.
Yo he trabajado hartooo ya con los pic de la serie 16F y algunos 18F, y realizando operaciones (divisiones y multiplicaciones) se quedan un pokito lentos, me he acostumbrado a trabajar con el compilador CCS y mi duda es la siguiente:

- ¿Las operaciones aritmeticas en el dsPIC debo realizarlas de la forma acostumbrada (el mismo codigo) ?¿o hay una nueva forma de tratar los operandos que sea con intervencion humana?

- El compilador CCS admite dsPIC, ¿Es eficiente en la compilacion? ya que este compilador es muy facil de usar.

- Que otra alternativa al dsPIC podria utilizar para este trabajo?

Saludos y gracias por su tiempo.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Dudas basicas sobre dsPIC
« Respuesta #1 en: 29 de Marzo de 2009, 15:00:13 »
Hola.

Porque no usas mejor un DDS? Genera formas de onda triangulares, senoidales, TTL y se puede configurar fase y frecuencia -esta ultima con resoluciones de 1Hz en 1MHz @ 25MHz-

Saludos
El papel lo aguanta todo

Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: Dudas basicas sobre dsPIC
« Respuesta #2 en: 29 de Marzo de 2009, 16:27:51 »
Hola! muy interesante tu proyecto y parece que es algo grande ... yo hice algo similar, debia generar señales senoidales, triangulares, rectangulares, ruido ... todo ajustable, frecuencia, amplitud, fase ... con todos los full extras ... controlador PID, funcion de transferencia, control con matriz de estados, filtros IIR y FIR, sumas, multiplicaciones, etc y pues claro comunicacion con la PC, entradas y salidas tando digitales como analogicas, PWM, encoder, comunicacion I2C y SPI ... y como plus para dejar a futuro proyecto modbus  :o ....  Todo este proyecto fue para un sistemita de adquisicion de datos y control para el laboratorio de control automatico de la universidad.

Ese proyecto fue mi proyecto de fin de carrera, al principio ni siquiera sabia por donde empezar; sin embargo y GRACIAS A DIOS ... tuve un profesor guia bastante sabio que me ayudo bastante. Lo principal de un proyecto son establecer sus bases, ya que si elegiste un camino equivocado resulta una perdida de tiempo y desmoraliza bastante saber que fue el equivocado ...

El me recomendó que usara un RTOS, ni él ni mucho menos yo sabiamos concretamente que era ... pero tuve la corazonada de hacerle caso. Pues investigue bastante y hasta compre un libro ... cree puede que te ayude bastante, Mi primera recomiendacion es:

- FreeRTOS
- MicroC/OS - II

Donde compre el libro fue en MicroC/OS - II, MicroC/OS-II de Jean J. Labrosse. Por ahi en internet anda una version ebook un poco mas simplificada.

Un RTOS te va hacer ver el mundo de los microcontroladores desde otro ángulo y te juro que te va a simplificar muchas cosas. Te lo digo, pues tenes un LCD, un teclado, control digital y generacion de señales. Puedes hecharle un ojo, entender como es y para que sirve ... no vas a gastar mucho tiempo, aqui hay una pequeña explicacion del porque un sistema embebido con un RTOS es mejor que sin un RTOS:

http://www.freertos.org/tutorial/index.html

yo al final utilice MicroC/OS-II es mas sencillo que FreeRTOS.

Como desventaja es que un RTOS te exige un poco mas de procesamiento y memoria; de hecho, los demos de esos RTOS estan montados sobre el dsPIC33FJ256GP710 .. que es quizá el dsPIC mas completo de la familia dsPIC. Si tienes presupuesto, te recomiendo:

- El kit de desarrollo Explorer 16 de Microchip con el ICD2 (o ICD3).

Esas son mis recomendaciones, Ahora contestaré tus preguntas:

¿Las operaciones aritmeticas en el dsPIC debo realizarlas de la forma acostumbrada (el mismo codigo) ?¿o hay una nueva forma de tratar los operandos que sea con intervencion humana?

Las podes hacer como tu quieras, usando ASM o el mismo codigo, por ejemplo:

Código: [Seleccionar]
salida = dato1*dato2;
Podes usar punto flotante pero el micro, en sí, no está optimizado para ello. El dsPIC tiene un multiplicador de 16x16 y acumulador de 40bits. Es decir, la forma "optimizada por hardware" de realizar operaciones aritmeticas son en punto fijo. De hecho, C30 utiliza un tipo de dato que se llama FRACTIONAL, y veras que se utiliza mucho en ejemplos, hojas de datos, manuales de referencia ... para ser claro este formato se conoce como Q1.15 o Q15 simplemente.

Q number format 

Todas las librerias de DSP para dsPIC utilizan este formato. Para hacer multiplicaciones hay que utilizar un poco de ASM, esta es mi rutina de multiplicacion:

Código: ASM
  1. _mult15:
  2.  
  3. MOV W0, W4
  4. MOV W1, W5
  5. MPY W4*W5, A
  6. SAC A, W0
  7.  
  8. return

y la llamo desde C30 como:

Código: C
  1. salida = mult15(dato1, dato2);

donde dato1, dato2 y salida son FRACTIONAL.

No he encontrado forma mas sencilla de hacerlo, la verdad desconozco si en las actualizaciones recientes haya mejoras. Como te dije, podes usar punto flotante o punto fijo. Punto flotante te da mucho mayor precision que punto fijo, sin embargo, punto flotante es mas lento y ocupa mas memoria pero es menos complicado.

Con las librerias de DSP, tenes una forma muy rápida de hacer filtros IIR, FIR, hacer FFT y hasta controladores PID. El detalle es que usan FRACTIONAL.

Al inicio los osciladores senoidales los hice con resonadores digitales.

http://www.phon.ucl.ac.uk/courses/spsci/dsp/resoncon.html

y use las librerias DSP, el problema fue que para frecuencias muy pequeñas ... 1Hz y menos, la forma de onda se convertia en triangular en vez de senoidal. El error fue presicion de las operaciones. La solucion fue utilizar la funcion _Q15sinPI de la libreria de matematicas; esta calcula el seno en formato fractional.

bueno con esto generé señales desde 0.1Hz hasta 500Hz. Te dire que hasta 500Hz pues la aplicacion era estimular sistemas mecánicos y crear reguladores de control en base a ello, de hecho, 500Hz es una alta frecuencia desde el punto de vista de control mecánico.

- El compilador CCS admite dsPIC, ¿Es eficiente en la compilacion? ya que este compilador es muy facil de usar.

Si admite dsPIC y es fácil de usar ... como todos los PIC ... sin embargo, parece que PICC de CCS no está del todo optimizado y da muchos fallos de compilacion, el peor de los casos es que compile bien y el proyecto no funcione. Te recomiendo C30 por el momento.

Que otra alternativa al dsPIC podria utilizar para este trabajo?

Se mas detallado respecto a los rangos de funcionamiento de tus señales. ¿Cual es la frecuencia maxima? ¿Cual es la tasa de muestreo de los controladores? ... con esos datos te podremos decir si un dsPIC es apto para tu proyecto; si no, hay que pensar en Texas o ARM.

Saludos!


 




   
« Última modificación: 29 de Marzo de 2009, 16:32:58 por blackcat »
Control Automático, DSP & Microcontroladores

Desconectado JOJOJORGE5

  • PIC16
  • ***
  • Mensajes: 167
Re: Dudas basicas sobre dsPIC
« Respuesta #3 en: 18 de Mayo de 2009, 21:53:43 »
Hola

Gracias blackcat por esta excelente explicación.
Nunca me plantee usar un RTOS porque nunca tuve que hacer un proyecto grande, pero investigare para que si un día tengo que hacer algo grande no me agarren en calzoncillos

salu2:)