Moteur pas à pas et caméra

Postby hlaidet » Mon Dec 01, 2008 12:00 am

Bonjour à tous,


---(1)--- Moteur pas à pas ------------
J'avais besoin d'un moteur de positionnement ( de la camera ).

Voici la methode que j'ai utilisée:
- 1 moteur pas à pas unipolaire ( vieux lecteur de disquettes )
- Ajout d'un réseau de darlington ULN2803A connecté derrière un MCP23S17 ( voir sujet IO TOR )
Le soft de gestion dans "IO\Motor.c"
La procédure de positionnement "Control_Motor()" est appelée par "IO\IO_SPI.c->IO_Update()" avant de mettre à jour le MCP23S17.
La période d'appel étant de 5ms, on a une vitesse de 200 pas/sec.

Cette vitesse est réduite mais elle convient car l'utilisation est le positionnement de la caméra C328R.
on utilise que 180 degrés de déplacement.
Comme référence, j'ai accoulpé un potentiomètre connecté à une entrée ANA.

Il y a dans "IO\IO_SPI.h" quelques defines des bits du MCP23S17 utilisés IO_EXT_BIT_MOTOR_COIL[1,2,3,4].
Nous avons dans "IO\Motor.c" tous les defines nécessaires au positionnement:
- numéro d'entrée ana utilisée
- nombre de pas du moteur
- diamètre des poulies d'accouplement
- tolérance de positionnement
- ...
Il y a 2 procédures utiles:
MOTOR_SetPosition() qui reçoit la position en degrés
MOTOR_GetStatus() qui indique si le moteur est ou non en position

Le controle est en pas entier car une fois le moteur en position,
on coupe les phases.
Cette solution réduit le courant.
la caméra est très légère pas besoin de couple de maintien.

Le schéma est dans "Doc\Hardware.pdf"

Test:
Dans "site\*.*" les pages html de test (22 fichiers)
qui permettent de positionner la camera avant la capture.


---(2)--- a suivre --------------------
La caméra utilisée en mode JPEG est longue à la capture.
Aussi, j'envisage d'utiliser le mode preview 160x120 en 16 niveaux de gris.
Je pense utiliser une RAM tampon de 8ko FM25CL64(Ramtron).
Ce qui permettra le stockage de 102 lignes ( ce qui devrait etre suffisant en mode preview ).
Cela devrait permettre au client http de faire des lectures périodiques à la seconde
###
tout en bougeant la caméra ( sans attendre la capture ).

---------------------------------------
Le projet est CodeWarrior 6.3



zip du projet: http://pagesperso-orange.fr/HLaidet/Digibutler.htm

Salut
Henri
hlaidet
 
Posts: 61
Joined: Thu Jan 02, 2014 10:44 am

Postby hlaidet » Sun Dec 07, 2008 12:00 am

Bonjour à tous,

C'est opérationnel, mode preview 80x60 en 16 niveaux de gris.

Pas de hard ajouté.

2518 bytes necessaires pour le stockage du bitmap
récupération de bytes:
* 512 suppression de gFile dans FMS.c
* 1280 en réduisant le stack d'amorçage de 0x800 à 0x300 dans mcf5223evb_iflash.lcf
* 640 dans http_tunnel_ftp.c
* 1552 en réduisant NUMBIGBUFS de 8 à 7 dans ipport.h

Ajout du mode preview dans CAMERA_StateMachine
Lécriture dans le bmp est faite dans le driver uart2_isr().
Ce qui permet la lecture asynchrone du bmp par le client http
les 2 procédures FMS.c->FMS_ReadFileInfo() et FMS.c->FMS_read_bloc()
testent si le fichier traité est "C328.bmp"
si oui alors lecture dans le buffer ram.

Lecture et ecriture sont asynchrone.
Pas besoin dattendte en lecture que l'écriture soit achevée.


---------------------------------------
Le projet est toujours en CodeWarrior 6.3



sources: http://pagesperso-orange.fr/HLaidet/Digibutler.htm

Salut
Henri
hlaidet
 
Posts: 61
Joined: Thu Jan 02, 2014 10:44 am

Postby hlaidet » Sat Dec 13, 2008 12:00 am

Bonjour à tous,

---(1)--- CodeWarrior 7.1 -------------

J'ai passé le projet en CodeWarrior 7.1

hic, ça ne fonctionnait plus.
CW7.1 ne protège pas les registres d'un _asm{} alors que CW6.3 le faisait.
Il a juste été necessaire de protéger les registres dans
spiSend(), spiSendNoCS() et IOspiSend() ( 3 procédures avec un _asm{} )

J'ai augmenté la stack d'amorçage à 0x400 (tache "Main").
Et réduit celle de la tache "clock tick".
La consommation de chacune n'était pas équitable.

"elektor.mcp" est toujours en CW6.3
"elektor7.1.mcp" est en CW7.1

---(2)--- uarts -----------------------
Pour récupérer un peu de RAM, j'ai supprimé l'uart1 (inaccessible de toute façon).
J'en ai profité pour passer l'uart0 en mode irq
"iuart.c" commentaire de //#define POLLED_UART
De cette façon, on a un affichage rapide en mode console.

---(3)--- a suivre --------------------
J'ai téléchargé du site Freescale la stack ColdFire_Lite de nov 2008.
Elle est annoncée comme V3.0 (idem à celle de DigiButler)
mais en regardant un peu le code, elle semble améliorée.
Je suis en phase de portage (authentification, SD, camera ....)
Quand j'aurai fait quelques tests, je ferai un nouveau topic.


sources: http://pagesperso-orange.fr/HLaidet/Digibutler.htm

Salut
Henri
hlaidet
 
Posts: 61
Joined: Thu Jan 02, 2014 10:44 am


Return to DigiButler (04&05-2008)

Who is online

Users browsing this forum: No registered users and 1 guest