Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
On parle des Pics, sans rapport avec le langage ou la programmation

Modérateur : Jérémy

Exploitation capteur de pression avec un PIC
pspic
Passioné
Passioné
Messages : 357
Âge : 77
Enregistré en : septembre 2017
Localisation : 68

#1 Message par pspic » dim. 9 déc. 2018 14:00

Bonjour à tous,
Je souhaite utiliser un capteur de pression (esclave) avec un PIC 18F2420 (maître) en SPI.
Je recherche la Data Sheet de ce capteur afin de pouvoir étudier le protocole de communication.
Ou une personne ayant déjà utilisé ce capteur.
Détail du capteur:
Barometric Pressure Sensor Module
Voltage: 3.3-5V
Pressure: 0-40KPa
This module adopts high precision AD sampling chip and 0-40KPa air pressure sensor. And it can connect 2.5mm soft tube and detect the water level and other air pressure
Adopt 5K ohm resistor bridge sensor, and specific air pressure value needs calculating

J'ai déjà essayé chez le Chinois, mais il ne répond pas.
CaptPres.JPG
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Exploitation capteur de pression avec un PIC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#2 Message par Jérémy » dim. 9 déc. 2018 14:09

Bonjour pspic,

Désolé , je n'ai jamais utilisé ce style de capteur encore .

Pour avoir sa DS il faut absolument trouvé le nom de la puce ou essayé de le lire.

Peut etre qu'un membre du forum pourra t'aider
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Exploitation capteur de pression avec un PIC
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » dim. 9 déc. 2018 15:32

bonjour,


bien gentils, ces chinois avec materiel RPC SANS DATASHEET
Attention : probablement parce que le capteur est HORS SPECIFICATION !

ce capteur semble etre un
MPS20N0040D-D sphygmomanomètre capteur de pression 0-40kPa DIP-6 pour Arduino I
Specifications:
- Measuring medium: air
- Measuring range: 0-40kPa
- Operating temperature range: -40 ℃ ~ + 125 ℃
- Storage Temperature: -40 ℃ ~ + 150 ℃
- Humidity: (50% ± 10%) RH
- Ambient temperature: (25 ± 1) ℃
- Medium temperature: (25 ± 1) ℃
- Output impedance: 4kΩ ~ 6kΩ
- Zero output: -15mV~+15mV
- Hysteresis: +-0.7%F.S.
- Power supply: ≤10V DC or ≤2.0mA DC
- Insulation resistance: 100MΩ, 100VDC

recoupement avec AMAZON
AMAZON
Pressure Range: 0-5.8 psi. (40 kpa)
?Range: 40kpa
Output: mV signal.
Power Supply: 5VDC or constant current 1 ma.
?Linear Precision: 0.25% FS.
Works great when used with a LM358 Dual Op-Amp and an microcontroller.

2 liens sur ce capteur
http://langster1980.blogspot.com/2014/1 ... -with.html


https://bsfrance.fr/capteurs/509-Capteu ... 0-KPa.html
capteur de pression differentiel utlisant la techolgie solid state MEMS,
haute fiabilité, applicable dans une large plage de température simple
d'utilisation.
Gamme : 40 KPa, sortie tension 0-25 mV.
VCC : 5.0V
conso : 1 mA.
Linéarité: 0,25% FS (pleine echelle).
Ce capteur peut etre utilisé pour la mesure continue du niveau
d'une citerne ou autre contenant du meme type.

ATTENTION AUSSI
1 bar => 100KPa
40KPa => 0,4 Bar

Que veux-tu mesurer avec ce capteur ?
:!!: ensuite, il faudra aussi penser comment l'etalonner ...

il faudrait pouvoir lire la reference du circuit qui est derriere
Probablement un ampli OP programmable avec sortie SPI
pour ampliifer le faible delta mV en sortie du capteur

voir par exemple
Microchip Ampli OP PGA MCP6S21 ou du meme acabit

pour info, un test sur un MCP6S22
Aide toi, le ciel ou FantasPic t'aidera

Exploitation capteur de pression avec un PIC
pspic
Passioné
Passioné
Messages : 357
Âge : 77
Enregistré en : septembre 2017
Localisation : 68

#4 Message par pspic » lun. 10 déc. 2018 09:34

Bonjour Paul,
Merci pour ces précisions.
Entre temps j'ai réussi à lire et afficher sur LCD la valeur retournée par le capteur.
La prochaine étape sera de mesurer différentes colonnes d'eau.
Comme actuellement j'ai un bras dans le plâtre ces essais vont être décalés.
Je rendrai compte ici quand j'aurai réalisé ces manipulations.
La destination finale sera une mesure de niveau.

Exploitation capteur de pression avec un PIC
pspic
Passioné
Passioné
Messages : 357
Âge : 77
Enregistré en : septembre 2017
Localisation : 68

#5 Message par pspic » dim. 23 déc. 2018 15:57

Bonjour,
Voici le fruit de mes cogitations:
Le module capteur est constitué d'un capteur de pression MPS 20N 0- 40 KPa suivi d'un ampli HX710B.
La broche CLK du module va sur RC3 d'un PIC18F2420 et la broche OUT du module va sur RC4 du PIC.
Le code coté PIC est traduit du code C de la datasheet du HX710B page 7.
Ampli_HX710B.pdf


Code : Tout sélectionner

program Test_Capt_Pres1
'Test capteur de pression MPS20N0040D-D + HX710B le 21/12/2018
Symbol Pk = PORTC.3                'SCK capteur --> RC3
Symbol Pd = PORTC.4                'OUT capteur --> RC4

'Déclaration LCD________________________________________________________________
dim LCD_RS as sbit at RB4_bit
    LCD_EN as sbit at RB5_bit
    LCD_D4 as sbit at RB0_bit
    LCD_D5 as sbit at RB1_bit
    LCD_D6 as sbit at RB2_bit
    LCD_D7 as sbit at RB3_bit
    LCD_RS_Direction as sbit at TRISB4_bit
    LCD_EN_Direction as sbit at TRISB5_bit
    LCD_D4_Direction as sbit at TRISB0_bit
    LCD_D5_Direction as sbit at TRISB1_bit
    LCD_D6_Direction as sbit at TRISB2_bit
    LCD_D7_Direction as sbit at TRISB3_bit
'Declaration des variables_________________________
  RecStr as string[6]
  i as byte
  Som as LongInt
  Moy as float

sub function RdPr() as longint 'Lecture du capteur
dim Cnt as LongInt
dim i as byte
  Pd = 1
  Pk = 0
  Cnt = 0
  while not(Pd)
   for i = 0 to 23
    Pk = 1
    Cnt = Cnt << 1
    Pk = 0
     if Pd then Cnt = Cnt + 1 end if
   next i
   Pk = 1
   Cnt = Cnt XOR $800000
   Pk = 0
  Wend
  Result = Cnt
end sub

main: 'Init programme_________________________________________________________________
'Uart1_Init(9600)    'Init Usart
Delay_ms(100)
CMCON = 7
ADCON1 = $0F        'RA0 -> RA5 en digital
LATA = $0
LATB = $0 
LATC = $0
TRISA = $0
TRISB = $0
TRISC = %00010000

'Ecran Lcd Initial______________________________________________________________
  Lcd_Init()
  Lcd_Cmd(_LCD_CURSOR_OFF)
  LCD_Cmd(_LCD_CLEAR) 
  Lcd_out(1,2, "CAPTEUR MSP 20N")
'_______________________________________________________________________________
  while true
   Som = 0
   for i = 1 to 4                 '4 mesures
   Som = Som + RdPr()             'Lecture capteur
   delay_ms(100)
   next i
   Moy =  Som / 40000             'Valeur pression
    FloatToStr_FixLen(Moy,RecStr, 6)
    Lcd_out(2,4,RecStr + " hPa" )
  ' Uart1_write_text(RecStr)
   delay_ms(1000)
  Wend
end.

La valeur affiché au repos (1020.5) est proche de la pression atmosphérique de mon baromètre (1018.8 hPa)
En chargeant le capteur avec une colonne d'eau la courbe se casse la figure au dessus de 800 mm.
Graph1.JPG

Vue la provenance de ce capteur, je pense qu'il est défaillant.

Une autre énigme: Le code C indique while(ADDO) alors qu'il faut écrire while not(Pd) dans la fonction de lecture en Basic, il est probable qu'il s'agit d'une erreur dans la datasheet.
Transmission des 24 Bits entre le HX710b et le PIC.
Trace1.JPG
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Exploitation capteur de pression avec un PIC
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » dim. 23 déc. 2018 17:26

bonsoir,

la figure 2 timing montre que la conversion doit debuter avec Dout à Zero
donc
while (Pd) ; me parait plutot OK ..
avec While(Not Pd) tu risques de perdre le bit de MSB
de plus cette boucle englobe toute le code ?

Code : Tout sélectionner


sub 
function RdPr() as longint 'Lecture du capteur
 dim Cnt as LongInt
 dim i as byte
  '   
Pd 1   ' on ne peut pas forcer une entree à 1
  Pk = 0
  Delay_us(5)  ' 
pour sortir d'un eventuel mode power off
  Cnt = 0
  while (Pd)   ' 
boucle tant que  Dout=1  
  wend
  
for 0 to 23
    Pk 
1
    Cnt 
Cnt << 1
    Pk 
0
     
if Pd then Cnt Cnt 1 end if
   
next i
   Pk 
1
   Cnt 
Cnt XOR $800000
   Pk 
0
 Result 
Cnt
end sub
Aide toi, le ciel ou FantasPic t'aidera

Exploitation capteur de pression avec un PIC
pspic
Passioné
Passioné
Messages : 357
Âge : 77
Enregistré en : septembre 2017
Localisation : 68

#7 Message par pspic » lun. 24 déc. 2018 16:35

Post effacé par pspic, car inutile.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par pspic le lun. 24 déc. 2018 17:31, modifié 1 fois.

Exploitation capteur de pression avec un PIC
pspic
Passioné
Passioné
Messages : 357
Âge : 77
Enregistré en : septembre 2017
Localisation : 68

#8 Message par pspic » lun. 24 déc. 2018 17:17

Merci Paul pour ton expertise et joyeux Noël à tous.
Une autre version en MikroBasic plus logique et qui fonctionne:

Code : Tout sélectionner

sub function RdPr() as longint
dim Cnt as LongInt
dim i as byte
  Pk = 0
  delay_us(5)
  Cnt = 0
 while Pd 'Boucle tant que Pd = 1 <------------------------------
 wend     '<---------------------------------------------------------
   for i = 0 to 23
    Pk = 1
    Cnt = Cnt << 1
    Pk = 0
     if Pd then Cnt = Cnt + 1 end if
   next i
   Pk = 1
   Cnt = Cnt XOR $800000
   Pk = 0
  Result = Cnt
end sub

Le C me fera toujours mal à la tête


Retourner vers « Généralités sur les PICs »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 28 invités