... rgl
Testeur simple pour
récepteur de radio commande
RX Impulsiomètre / Voltmètre
(c) Rg. LEGAT
|
SOMMAIRE:
01 - Introduction - Présentation - Généralités
02 - Testeur d'impulsions
1 - Programme Picaxe 08M2 vers afficheur Série Axe134 (OLED 4x 20#)
2 - Programme Picaxe 08M2 vers afficheur TM1637, (4x LED digit - 7 segments)
3 - Programme PIC12F675 vers afficheur TM1637
03 - Réalisation pratique
04 - Choix du mini voltmètre (Module à 2 ou 3 fils)
Introduction - Présentation - Généralités |
En cas de dysfonctionnement d'un servo ou d'un module d'extension placé sur nos récepteurs de radio-commande, on a rarement un oscilloscope sur le terrain pour vérifier les signaux reçus sur les diverses sorties.
Le petit montage décrit ci-dessous consiste en un petit testeur à connecter sur la voie du récepteur incriminé.
Sans grande prétention, il vous donnera la tension de la batterie du RX et la longueur d'impulsion présente sur la voie mesurée.
A défaut de disposer d'un oscilloscope, ce montage peut être utile pour vérifier et corriger la valeur du neutre présent au niveau du RX en allant ajuster la position du potentiomètre adhoc sur la platine du TX.
Testeur d'impulsions d'un RX de radiocommande |
Nous allons réaliser un petit testeur qui pourra rendre service sur le terrain en indiquant la valeur des impulsions présentes en sortie du RX ainsi que la tension d'alimentation de celui-ci.
1. Picaxe 08M2 vers afficheur AXE134
La lecture des impulsions se fera grâce à un petit µC PICAXE 08M2.
Pour le voltmètre, on aurait pu utiliser l'ADC du Picaxe 08M2 mais inutile de "réinventer la roue" !
En effet, on trouve ainsi, pour quelques EuroCents, des petits modules tout faits et munis d'un afficheur à 3 digits.
; To display a voltage (in ADC Value: 0 to 255), change the "Pulsin" instruction to "ReadADC"
; and place a 10K potentiometer between Vcc/Gnd on C.4.
Pour la mise au point du programme, on utilisera un afficheur série Axe134 ainsi qu'un générateur d'impulsions conformes au standard des radiocommandes classiques. (Testeur de servos)
Platine de mise au point
Sur le module de test, nous afficherons la valeur lissée de Pulsin par la moyenne de 10 mesures successives.
Nous afficherons alors le résultat du calcul final pour exprimer la valeur des impulsions en micro-secondes.
Afin de réduire l'erreur de calcul, on cadence le picaxe à 16Mhz interne, donnant une unité de mesure PULSIN de 2,5µsec
On aurait été plus précis en utilisant la vitesse maximale de 32Mhz qui donnerait alors une unité de mesure de 1,25 uSec.
Mais le calcul devant ensuite être effectué (*125 /100) entraînerait le dépassement de la valeur d'un Word.
En effet pour une impulsion de 2,2msec, la valeur de Pulsin serait de 1760.
Or 1760 x 125 = 220.000 ! On dépasse ici la capacité d'un Word fixée à 65.536 !
A 16Mhz, l'unité de mesure de la commande PULSIN est de 2,5 µsec.
Il faudra donc multiplier la moyenne des valeurs PULSIN par 2,5 pour obtenir un affichage en microsecondes.
Mais comme le Picaxe ne calcule qu'en valeurs entières, on multipliera par 25 pour ensuite diviser par 10.
Donc, pour une impulsion max de 2,2 msec, PULSIN = 880, à multiplier par 2,5 pour obtenir 2.200 (uSec).
Soit 880 * 25 = 22.000 (OK on ne dépasse pas 65.536) à diviser ensuite par 10 pour afficher 2.200 microsecondes.
Ainsi, pour une variation d'une unité de PULSIN, on aura un précision finale de 2 à 3 microsecondes... ce qui est largement suffisant.
Valeurs de PULSIN en fonction de la vitesse d'horloge du µC Picaxe
PROGRAMME TEST sur afficheur Série OLED AXE134
;****************************************************
;Pulsin AXE134.bas
;Roger LEGAT 07/10/2020
;Display Pulsin value on LCD/OLED Serial Display
;(0.8msec=800uS to 2.2msec=2200uS)
;Picaxe 08M2 + Serial OLED Axe134
;*****************************************************
;*** Programming Directives ***********************
;#SimSpeed 500
;#Terminal 4800
#Picaxe 08M2
; __ __
; Vcc o| U |o Gnd
; C.5 x|Rx Tx|x C.0
;_Pulse C.4 >|ADC |x C.1
; C.3 x| PWM|> C.2 _Display (Serial Axe134)
; -----
;
; Setfreq Setting (all internal)
; 08M2 => k31, k250, k500, m1, m2, m4, m8, m16, m32
;
; PULSIN MAX to be measured = 2200 usec (2,2 msec)
; m4 Unit = 10 uSec 2,2msec = 220 (*10 for 2200 uS)
; m8 Unit = 5 uSec 2,2msec = 440 (*5 for 2200 uS)
;> m16 Unit = 2,5 uSec 2,2msec = 880 (*25/10 for 2200 uS) 880*25=22000 (<Word 65536 OK)
; m32 Unit = 1,25 uSec 2,2msec = 1760 (*125/100 for 2200 uS) BUT 1760*125 = 220000 OverWord!
;Pins I/O ********************************************************
Symbol _Pulse = C.4 : Input C.4
Symbol _Display = C.2 : Output C.2
;Words ***********************************************************
Symbol Value = w0 ; b0-b1 Value to display on 4 digit (average of 10 measurements
Symbol Measure = w1 ; b2-b3 Successive Measurements for the average
Symbol i = b8 ;working vaiable
Symbol OffSet = b9
Offset = 18 ; Eventual compensation of the precision error of the Picaxe
;Bytes ***********************************************************
Symbol DIGIT1 = b4
Symbol DIGIT2 = b5
Symbol DIGIT3 = b6
Symbol DIGIT4 = b7
;**** Initialize AXE134 with OLED 4x20# ***********************
Pause 1500
Symbol BAUD = N2400_4 'For AXE134 Display
SETFREQ m4 'For AXE134 Display
Serout _Display,Baud,(254,1) : Pause 30 'Clear Display
Serout _Display,Baud,(254,192)'L2 C1
Serout _Display,Baud,(" Mesure Pulse RX")
Serout _Display,Baud,(254,212)'L4 C1
Serout _Display,Baud,("Pulsin AXE134.bas")
Pause 1500
Serout _Display,Baud,(254,1) : Pause 30 'Clear Display
Serout _Display,Baud,(254,128)'L1 C1
Serout _Display,Baud,("RX PULSIN MEASURE")
Serout _Display,Baud,(254,192)'L2 C1
Serout _Display,Baud,("********************")
Serout _Display,Baud,(254,148)'L3 C1
Serout _Display,Baud,("Average Value= ")
Serout _Display,Baud,(254,212)'L4 C1
Serout _Display,Baud,("PULSE= ")
Serout _Display,Baud,(254,224)'L4 C13
Serout _Display,Baud,("MicroSec")
'#Terminal 19200' (19200-16Mhz , 4800-4Mhz)
;== MAIN LOOP ===================================================
Setfreq m16 ; Range Pulsin: 0,8msec=320 to 2,2msec=880 ;Pulsin 2,5uS unit for PULSIN best resolution
DO
Value = 0
For i = 1 to 10 ' 10 successive measurements
Pulsin _Pulse,1,Measure
'sertxd ("Pulsin value: ", #Temp,lf,cr)
Value = Value+Measure
Next
Value = Value /10 'Average PULSIN value
'sertxd ("Average value: ", #Value,"-----------",lf,cr)
Gosub SetDigit
Gosub SendAverage
Value = Value *25 /10 +OffSet ; Average Value in uSec
'sertxd ("Pulse= ", #Value, cr,lf)
'sertxd ("*************************",cr,lf)
Gosub SetDigit
Gosub SendPulse
LOOP
End ; =============================================================
;=========================================================
;*** Sub-Routines ***************************************
;=========================================================
SetDigit:
DIGIT1 = Value / 1000
DIGIT2 = Value / 100 // 10
DIGIT3 = Value / 10 // 10
DIGIT4 = Value // 10
return
;=========================================================
SendAverage: ' Display the Average Pulsin value
SETFREQ m4
; Send this Value to Serial LCD/OLED display AXE134
If DIGIT1 >0 then ; Blank Digit1 if = zero (Value = 320 to 880)
Serout _Display,Baud,(254,155)'L3,C8
Serout _Display,Baud,(#DIGIT1)
Else
Serout _Display,Baud,(254,163)'L3,C16
Serout _Display,Baud,(" ")
Endif
Serout _Display,Baud,(254,164)'L3,C17
Serout _Display,Baud,(#DIGIT2)
Serout _Display,Baud,(254,165)'L3,C18
Serout _Display,Baud,(#DIGIT3)
Serout _Display,Baud,(254,166)'L3,C19
Serout _Display,Baud,(#DIGIT4)
SETFREQ m16
return
;=========================================================
SendPulse:
Setfreq m4
; Send Pulse Value in uSec to Serial LCD/OLED display AXE134
If DIGIT1 >0 then ; Blank Digit1 if = zero (Value = 800uSec to 2200uSec)
Serout _Display,Baud,(254,219)'L4,C8
Serout _Display,Baud,(#DIGIT1)
Else
Serout _Display,Baud,(254,219)'L4,C8
Serout _Display,Baud,(" ")
Endif
Serout _Display,Baud,(254,220)'L4 C9
Serout _Display,Baud,(#DIGIT2)
Serout _Display,Baud,(254,221)'L4 C10
Serout _Display,Baud,(#DIGIT3)
Serout _Display,Baud,(254,222)'L4 C11
Serout _Display,Baud,(#DIGIT4)
Setfreq m16
return
;=========================================================
2. Picaxe 08M2 vers afficheur TM1637
Pour l'affichage, nous allons maintenant utiliser un afficheur TM1637 étudié ici.
;************************************************
;Pulsin to TM1637.bas
;Roger LEGAT
;Rev:25/07/2023
;Display Pulsin value in usec, on 4 LED Digit
; 0,8msec=800 to 2,2msec=2200
;Picaxe 08M2 + TM1637 4Digits Led Driver
;*************************************************
;
;*** Programming Directives ***********************
;#SimSpeed 500 : #Terminal 19200 ; 19200 @16Mhz, 9400 @4Mhz
#Picaxe 08M2
; __ __
; Vcc o| U |o Gnd
; C.5 x|Rx Tx|x C.0
;_Pulse C.4 >| |> C.1 _Datas
; _Cfg C.3 >| |> C.2 _Ck
; -----
;
; Setfreq Setting (08M2 all internal OSC)
; 08M2 => k31, k250, k500, m1, m2, m4, m8, m16, m32
;
; PULSIN MAX to be measured = 2200 usec (2,2 msec)
; m4 Unit = 10 uSec 2,2msec = 220 (*10 for 2200 uS)
; m8 Unit = 5 uSec 2,2msec = 440 (*5 for 2200 uS)
;> m16 Unit = 2,5 uSec 2,2msec = 880 (*25/10 for 2200 uS)
; 880*25=22000 (<Word 65536 OK)
; m32 Unit = 1,25 uSec 2,2msec = 1760 (*125/100 for 2200 uS)
; BUT 1760*125 = 220000 OverWord!
Setfreq m16 'Pulsin 2,5uS unit for PULSIN best resolution
;Pins I/O ********************************************************
Symbol _Clk = C.2 : Output C.2 ;PullUp R. automatically deactived (because Output)
Symbol _Datas = C.1 : Output C.1 ;PullUp R. automatically deactived (because Output)
Symbol _Pulse = C.4 : Input C.4 ;PullUp R. not required
Symbol _Cfg = pinC.3 : Input C.3
Pullup %01000 ;Pull-Up on C.3 _Cfg
;*** Variables **********************
Symbol Pack=b0 ;Byte to send
Symbol Value=W1 ;Average Pulsin Value to display
Symbol Measure=W2 ;Intermediate and successives readings
Symbol Div=W3 ;For the calculation of the digits
Symbol i=b8 ;Working variable
Symbol j=b9 ;Working variable
;Symbol OffSet = b10 : OffSet = 0 ;18 ;Adjustment of the internal oscillator drift
;Initialize TM1637 *********************************************************
;Symbol TypeAddr=$40 ; Auto-increment Mode (Default)
Symbol StartAddr=$c0 ;1st Digit Address
Symbol Brightness=$8c ; Brighness Level
;Dirs = %100111 ; Switch all pins to outputs, except C.4-C.3 to input=0 1=Output
;Definition of the 10 characters in the EEPROM : 0-9 +Blank
; EEPROM( 0 1 2 3 4 5 6 7 8 9 10 )'Pos10 = Blank
' DATA 0, ($3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F,$00)
;The LOOKUP command will finally be used instead of the EEPROM
Gosub StartSeq '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Pack= Brightness
GoSub SendPack ;Set Brightness (Shiftout)
Gosub StopSeq '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;**** Main Programme Loop ********************************************
DO
Value = 0
Measure = 0 'Initialize Value and Measure
Pulsin _Pulse,1,Measure ; First PULSIN measure
If _Cfg=0 then 'Option Config for Calculating the Average PULSIN
Value = Value + Measure 'There is already an PULSIN executed
For i=1 to 19 'for 19 next successive measurements for display stabilisation
Pulsin _Pulse,1,Measure
Value = Value + Measure
Next
Value = Value /20 ;Average of the 20 PULSIN value
Endif
Value=Measure * 25 /10 ; + offset ;;Conversion of Pulsin Value to uS @m16Mhz
GoSub SetDigit ; To convert uSec Value to 4 Digits
LOOP
End
;=========================================
;*** Sub-Routines ***********************
;=========================================
SetDigit: ;Splitting of the Value in uSec into 4 separate digits
; Decomposition Method:
; ------------------------
; DIGIT1 = Value / 1000
; DIGIT2 = Value / 100 // 10
; DIGIT3 = Value / 10 // 10
; DIGIT4 = Value // 10
Gosub StartSeq '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Pack= StartAddr
GoSub SendPack ;Sending start address (Shiftout Substitute)
Div=1000 'Initialize Div
For j=1 to 4 ; For Digit 1 to Digit 4
Pack=Value/Div
If j=1 and Pack=0 then
Pack= 10 'Eventual Blank character for 1st Digit if Equal to Zero
Endif
;****** Conversion of numeral into segments *****************
'Read Pack, b0 ;Pack will contain the numeral description in segments in EEPROM
Lookup Pack,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,$00), Pack ; 0-9,+blank
IF j=1 and Pack<>0 Then 'Decimal Point after 1st Digit if > Zero
Pack= Pack + 128 'Decimal point ON after 1st Digit
Endif
GoSub SendPack '(Shiftout Substitute)
;Processing the next digit
Value=Value//Div ;Keep the rest of the division
Div=Div/10 ;Next divider
Next j
Gosub StopSeq '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Return
;----------------------------------------------------------------------------------
SendPack: ; Ignition of the display segments, Pack bit by bit
; The Picaxe 08M2 does not know the Shiftout instruction !
; It is therefore necessary to use a small SHIFTOUT substitute routine.
For i=0 to 7 ;Reading from b0, bit a bit, from bit0 to bit7 LOW weight First
Low _Clk
OutpinC.1 = bit0 'Datas=bit0 - The Datas pin takes the value of bit0
Pack = Pack/2 ;>>> Shift Right >>> bit1 becomes bit0
High _Clk
Next i
Gosub ACKSeq
Return
;----------------------------------------------------------------------------------
StartSeq: ;"I2C"Start
High _Clk
High _Datas
Low _Datas
Return
;----------------------------------------------------------------------------------
ACKSeq: ;Move to Next Digit Address after ACK
Low _Clk
High _Clk
Low _Clk
Return
;----------------------------------------------------------------------------------
StopSeq: ;"I2C"Stop
Low _Clk
Low _Datas
High _Clk
High _Datas
Return
;==== END of BAS Picaxe Programme ======================================================
3. PIC 12F675 vers afficheur TM1637
Nous allons maintenant finaliser notre projet avec un PIC12F675 en apportant les modifications nécessaires au programme précédent pour le compilateur PicBasic Pro Compiler.
Ce logiciel permettra de créer le fichier .HEX nécessaire à la programmation du PIC12F675.
A noter que nous pourrions également utilser un PIC12F629 qui est en tout point identique , sauf qu'il ne comporte pas de convertisseur ADC.
Mais comme on ne l'utilise pas, il pourrait donc faire parfaitement l'affaire.
Sans quartz extérieur ce PIC ne pourra cependant pas être cadencé à plus de 4MHz, ce qui nous donnera une résolution de 10µsec... qui reste encore parfairtement acceptable pour ce type d'application !
'*************************************************************************
'* Name : PULSIN to TM1637.pbp *
'* Author : Rg.LEGAT *
'* Date : 10/08/2023 *
'* Version : 1.0 *
'* Compiler : PICBASIC PRO Compiler 2.6 *
'* Target PIC : 8-pin 12F675 or 12F629 *
'* Hardware : AXE091 Experimenter Board *
'* Oscillator : 4MHz internal *
'* Keywords : PULSIN, TM1637 *
'* Description : Program to display PULSIN Value on TM1637 Display *
'*************************************************************************
'*** PIC Pinouts/Specifications
'------------------------------------
' PIC 12F675
' __ __
' Vcc +| U |- Gnd
' GP5 x| |< GP0
' Pulse GP4 >| |> GP1 SDA
' Cfg GP3 >| |> GP2 SCK
' -----
@ Device Pic12F675, intrc_osc, wdt_off, pwrt_on, mclr_off, protect_off
ANSEL = 0; Set Ports as Digital i/o, not analog input
ADCON0 =0; Shut OFF the A/D Converter
CMCON = 7; Shut OFF the Comparator
Option_reg = 0 'Pullup ON
'If R.PullUp are enabled, inputs concerned must be specified in WPU register.
'WPU = .%... 1=R.selected
'VRCON = 0; Shut OFF the Voltage Reference
DEFINE OSC 4 ' Pulsin/Pulsout Resolution =10µsec => 1ms=100 DEFAULT Value
'******* VARIABLES / CONSTANTS *****************************************
SDA VAR GPIO.1 'Serial Data pin OUTPUT
SCK VAR GPIO.2 'Serial Clock pin OUTPUT
Confg var GPIO.3 'Instant/Average INPUT
Pulse Var GPIO.4 'Pulsin pin INPUT
TRISIO= %011000 '0=Output
GPIO = 0 'Make all pins 0
Measure VAR Word 'Pulsin Measure
Value VAR Word 'Value to display
I VAR Byte 'Working variable (20 successive measurements)
CHR1 VAR Byte '4 digits to send and display
CHR2 VAR Byte
CHR3 VAR Byte
CHR4 VAR Byte
'These are the 3 commands used by the TM1637 controller:
'CMD1 CON $40 'CMD1=$40 (Facultative Default Command: Auto Increment Mode)
CMD2 CON $C0 'CMD2=$C0 Start first digit position(Left most)
CMD3 CON $8A 'CMD3=$8A End command: turns display ON and sets brightness
'(CMD3=$8F for max brightness - see TM1637 spec sheet)
'******* INCLUDE and ASSEMBLER ***********************************************
; * Write the OSCCAL Value at Last Address $3FF with the IC-Prog Editor
Asm
BSF STATUS,RP0 ; Set File Register Bank to 1
CALL 0x3FF ; Retrieve Factory Calibration Value *
MOVWF OSCCAL ; Update Register with factory CAL Value
BCF STATUS,RP0 ; Set File Register Bank to 0
Endasm
'******* 4 Display Auto Test ************************************************
'Activate all segments and decimal points "8.8.8.8"
CHR1 = $FF : CHR2 = $FF : CHR3 = $FF : CHR4 = $FF
Gosub SEND
Pause 2000
'******************************************************************************
INIT:
; EEPROM(0 1 2 3 4 5 6 7 8 9 10 ) Pos10 = Blank
DATA @0,$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F,$00 ; Write to Eeprom
MAINLOOP: '====== MAIN LOOP =================================================
Value = 0 'Reset Value
IF confg = 0 then 'AVERAGE
For i=1 to 20 '20 successive measurements for display stabilisation
Pulsin Pulse,1,Measure
Value = Value + Measure
Next
Value = Value /20 ;Average PULSIN value
Value = Value * 10 ;Conversion to uS @4Mhz
ELSE
Pulsin Pulse,1,Measure ;INSTANT
Value = Measure * 10
Endif
' Decomposition Method:
' ------------------------
CHR1 = Value / 1000
IF CHR1 = 0 then CHR1 = 10 'Blank Char.
Read CHR1,CHR1
IF CHR1>0 then CHR1 = chr1+$80 'Decimal Point
CHR2 = Value / 100 // 10
IF CHR2 = 0 and chr1=10 then CHR2 =10
Read CHR2,CHR2
CHR3 = Value / 10 // 10
IF CHR3 = 0 and chr3=10 then chr3 = 10
Read CHR3,CHR3
CHR4 = Value // 10
Read CHR4,CHR4
Gosub Send
Goto Mainloop
End
'***********************************************************
'***** SUBROUTINES ***************************************
'***********************************************************
Send: 'Standard Serie Transmission LSB First
'This subrountine outputs all 4 characters to the LED
'SHIFTOUT Mode 0 works - LSB first, clock normally low
'This shifts out the 8-bit write command character $40
' GosubB StartSeq
' SHIFTOUT SDA, SCK, 0, [CMD1] '$40 Default (So, facultative)
' Gosub AckSeq
' Gosub StopSeq
'Now, this shifts out the 8-bit command character $C0 that places
'the FIRST CHARACTER CHR1 in the leftmost digit location
Gosub StartSeq
SHIFTOUT SDA, SCK, 0, [CMD2] '$C0
Gosub AckSeq
' And then writes all 4 digits.
'SHIFTOUT CHR1-CHR4 to fill the display left to right
'TM1637 auto-increment mode because DEFAULT => CMD1= $40
SHIFTOUT SDA, SCK, 0, [CHR1]
Gosub AckSeq
SHIFTOUT SDA, SCK, 0, [CHR2]
Gosub AckSeq
SHIFTOUT SDA, SCK, 0, [CHR3]
Gosub AckSeq
SHIFTOUT SDA, SCK, 0, [CHR4]
Gosub AckSeq
Gosub StopSeq
'The output sequence ends with CMD3 which turns on the display
'and set the brightness duty cyle
Gosub StartSeq
SHIFTOUT SDA, SCK, 0, [CMD3] '$8A 25%
Gosub AckSeq
Gosub StopSeq
Return
'******************************************************************************
StartSeq:
High SCK
High SDA 'The Start sequence takes SDA low and then SCK low 5 uSec later
PauseUs 5
Low SDA
PauseUs 5
Return
'******************************************************************************
AckSeq:
Low SCK 'The ACK waits for the TM1637 to assert low on SDA
PauseUs 5 'and then replies with a 5 uSec ACK pulse on SCK
IF SDA = 0 THEN
High SCK
PauseUs 5
Low SCK
ENDIF
Return
'******************************************************************************
StopSeq:
Low SCK 'The stop sequence takes SCK high and then SDA high 5 uSec later
Low SDA
PauseUs 5
High SCK
PauseUs 5
HIGH SDA
PauseUs 5
Low SDA
Return
'==============================================================================
'=== END OF PBP ==============================================================
;These simplified routines are also valid !
StartSeq:
High sck
High sda
Low sda
Return
AckSeq:
Low SCK
High SCK
Low SCK
Return
StopSeq:
Low SCK
Low SDA
High SCK
High SDA
Return
'******************************************************************************
Afin de rendre ce petit montage totalement autonome, il sera alimenté par la tension d'alimentation du RX qui sera prélevée sur la sortie analysée.
Cependant, il faut veiller à ce que cette tension ne dépasse pas les 5V max que peut supporter le Picaxe!
De même, la tension à appliquer en entrée du µC Picaxe ne pourra dépasser cette tension d'alimentation.
Il ne sera donc pas inutile de limiter la tension du signal d'entrée par une diode Zener.
Sachant qu'un RX peut parfois être alimenté jusqu'à 6V il faudra donc absolument veiller à stabiliser la tension du montage à 5 Volts max et limiter la tension en entrée du µC.
|
Résultat de mes mesures:
Tension des impulsions délivrées par le Récepteur, en fonction de sa tension d'alimentation (VRX). |
Pour la limitation de tension en entrée du µC, nous allons utiliser une diode Zener et pour l'alimentation du µC, nous allons choisir un "Low Drop Voltage Regulator".
Nous avions déjà utilisé un tel régulateur pour le ralentisseur de servo et l'élargisseur de course de servo à la page montages pour Radios Vintage.
Contrairement aux régulateurs de la série 78XX qui exigent que la tension d'entrée soit au moins 2,5V supérieure à la tension de sortie, un "Low Drop" se contentera de moins d'un demi volt !
Je vais juste ici vous présenter deux de ces régulateurs:
1. LM2940CT-5.0
Disponible en boîtier TO220, il est compatible avec les régulateurs de la série 78xx.
Il existe en plusieurs versions suivant la tension de sortie nécessaire: 2.5V, 3V, 3.3V, 3.6V et 5V
Caractéristiques:
Vin Max = 26V I Out = 1A * Vdrop = 500mV
|
|
|
* Par l'adjonction d'un transistor de puissance le courant max peut être augmenté.
Il existe divers schémas dont celui du DataSheet officiel.
Deux capas sont nécessaires pour le bon fonctionnement: 0,47µF en entrée et au moins 22µF en sortie.
2. LP2950-5.0
Disponible en petit boîtier TO-92, il existe en plusieurs versions suivant la tension de sortie nécessaire: 2.5V, 3V, 3.3V, 3.6V et 5V
Le courant de sortie est cependant ici limité à 150 mA !
Caractéristiques:
Vin Max = 30V I Out = 150mA
Vdrop = 380 mV
|
|
Il est recommandé de placer une capa de 1µF à l'entrée et une autre d'au moins 2,2µF en sortie.
Attention à la configuration des broches qui sont inversées par rapport à la logique des 78xx !
L'entrée V.in se fait à la broche 3 !
Schéma et platine
Vu le besoin d'alimenter plusieurs segments LED, et bien que le driver TM1637 multiplexe probablement les 4 afficheurs, je vais opter pour un LM2940CT-5.0 (1Amp.en boîtier TO220)
Cette platine peut ainsi se souder sous le module TM1637.
Si on utilise un Picaxe 08M2 à la place d'un PIC 12Fxxx, il faut ajouter la résistance Pull-Down sur le port C.5-RX ou activer la commande "DISCONNECT"!
MODIFICATIONS
Après avoir réalisé le circuit de ci-dessus, j'ai trouvé nécessaire de lui apporter quelques modifications !
En effet, les régulateurs soit disant "LOW-DROP", (issus du marché chinois), ne m'ont pas donné satisfaction dans la mesure où ils provoquaient une chute de tension bien trop importante !
Cette chute de tension rendant inopérant les afficheurs et/ou le MCU ...
Le rôle du régulateur était de limiter la tension VDD du Pic, ou du Picaxe, dans le cas précis où le récepteur serait alimenté par sa tension maximale autorisée de 6 volts.
En effet les Data-Sheet de nos agréables petits MCU nous précisent que leur tension VDD Max est de 5,5 Volts.
Il existe alors deux moyens simples de réguler VDD du MCU (Pic ou Picaxe): Une diode Zener de 4v7 associée à sa résistance série, ou, une simple diode 1X4xxx en série sur la ligne VDD.
La solution retenue a alors été de placer une diode en série vers VDD.
Cette "simple" diode, par laquelle passe également le courant consommé par l'afficheur va provoquer une chute de tension de l'ordre de 0,7 volt.
Le port C.3 permettra la lecture d'une mesure instantanée ou une moyenne, plus stable, de 19 mesures.
La sérigraphie indique l'emplacement d'un Picaxe 08M2 mais c'est finalement un Pic 12F675 qui a étét utilisé.
Réalisation finale, double circuit, dans un boîtier incliné pour une lecture agréable
Nous voyons alors dans le tableau des mesures effectuées que même pour une alimentation du récepteur en 6 volts, VDD reste inférieur à 5,5 Volts.
Nous constatons aussi que la tension des impulsions appliquées à l'entrée du Microcontrôleur ne dépassent jamais son VDD.
Bien que les entrées des MCU soient protégées par des diodes de clamping, il vaut toujours mieux limiter le seuil des tensions d'entrée.
C'est la raison de la régulation par diode Zener qui est placée sur le signal à mesurer.
Enfin, l'entrée C.3 est ici utilisée pour configurer un l'affichage de la moyenne des impulsions mesurées pour une stabilisation de la lecture, si nécessaire.
Des pads sont également prévus sur les ports non utilisés (C.0 et C.5), permettant d'ajouter ultérieurement des fonctions additionnelles.
Il est donc aussi utile de prévoir quelques pads VCC et GND supplémentaires pour un éventuel besoin ultérieur...
Ne nous privons jamais de ce Luxe !
On trouve facilement des petits modules voltmètres pour des prix dérisoires.
Ils présentent généralement trois afficheurs 7 segments Led proposés en diverses couleurs. (rouge, vert, bleu, jaune, blanc).
Enfin, ils comportent souvent une petite résistance ajustable permettant de calibrer parfaitement le voltmètre.
Notons aussi qu'il en existe pour diverses plages de tensions à mesurer.
Ces modules se déclinent cependant en deux versions différentes: modules à 2 fils ou à 3 fils.
Module voltmètre à deux fils
Ce module ne nécessite pas d'alimentation indépendante de la tension mesurée.
En effet, il prélève sa tension d'alimentation directement sur la tension à mesurer.
Cela implique néanmoins un inconvénient !
Les leds des afficheurs ont besoin d'au moins 2,5 volts pour s'allumer...
Notons aussi que les leds s'alimentant sur la source mesurée, tireront du courant sur celle-ci.
Il ne sera donc jamais possible de mesurer et d'afficher des tensions inférieures à 2,5 volts !
Néanmoins, dans le cas présent, une telle basse tension ne suffirait pas non plus à alimenter le récepteur et ses servos.
Un module à deux fils pourrait donc parfaitement convenir pour notre usage dans ce testeur de récepteur, partant du principe
qu'un défaut d'allumage des afficheurs signifierait une tension d'alimentation du récepteur insuffisante.
La tension à mesurer (2,5 à 30v.) se prend ici simplement entre le fil rouge (+) et le fil noir (Gnd).
Module voltmètre à trois fils
Le module à trois fils présente: une masse commune (noir), une alimentation du module (rouge) et enfin le fil (jaune ou blanc) pour la tension à mesurer.
L'alimentation du module devra être assurée par une tension indépendante de 3 à 12 volts.
Nous pourrons ainsi effectuer des mesures pour des tensions inférieures à 1 volt sans consommer le moindre courant sur la source mesurée.
La plage de mesure est alors généralement de 0 à 30 volts.
Version imprimable de la page Page: Testeur_rx.htm
http://extremetracking.com/open?login=rglalpmn