maj: 12/04/2013
V.O. 13 octobre 2004
catégorie : application microcontroleur PIC
Generateur
BF Sinus utilisant :
un PIC 16F84 ou PIC16F628 ou 18F252, 258
ou avec circuit specialisé AD9835
ou 18Fx6K22 (Multiformes d'ondes)
ou Mixte 18F + AD9835
Home Page ( Index )
Version 16F84 20Mhz (en Asm)
35 valeurs comprises entre 0,1Hz et 1500Hz
Version 16F84 25Mhz (en Asm)
35 valeurs
Version 16F628 40Mhz (en Asm)
35 valeurs comprises entre 1Hz et 20.000Hz
Version 18F252 20Mhz (en C)
valeur de 1 à 20000 Hz (par pas de 1Hz)
Version 18F258 10Mhz (en C)
24 valeurs predefinies
Version AD9835 avec 18F258 10Mhz
dialogue via RS232 (en C) n'importe
quelle valeur comprise entre 0,01Hz et 2.000.0000 Hz
Version autonome AD9835 avec
18F258 10Mhz dialogue via telecde IR RC5
et LCD nokia (sans PC).
Version autonome AD9835 avec
18F258 10Mhz version POTAR et LCD
nokia
Version 18F46K22 40Mhz (PLL) DAC
ext 8 bits dialogue RS232 (en C18) 1Hz à > 20000Hz
Sinus,Triangle,Carre,Rectangle,Dent de scie + ...
Version 18F46K22 40Mhz DAC
interne 5 bits , RS232 (en C18) 1Hz à >
20000Hz Sinus,Triangle,Carre,Rectangle,Dent de scie + ...
Version autonome 18F26K22 DAC5b
interne Clock 40MHz RS232 ( C18) 1Hz à >
20000Hz Sin,Tri,Car,Rect,Dent de scie + potars...
Version autonome
18F26K22 DAC5b interne Clock 40MHz 5
BP + LCD2X16 ( C18) 1Hz à > 20000Hz et
RS232.
Version autonome DOUBLE
DDS : 18F46K22 DAC5b + 5 BP + LCD2X16
et DDS AD9835 ( C18).
Version autonome DOUBLE
DDS : 18F46K22 DAC5b + JOYSTICK +
LCD2X16 et DDS AD9835 ( C18)
Version SIMPLE 16F84 sans circuit DDS
spécialisé
Fonctions:
Choix d'une frequence parmi
les 35 frequences prédéfinies dans le
programme via les touches + ou -
La limite de 35 est due à la taille programme limitée
à 1K pour le 16F84 et la taille page
l'adressage indirect doit rester à l'interieur d'une
page,sinon problemes!
35 x 4 octest pour la valeur sur 24 bits
35 x 4 octets pour la chaine ASCII de la valeur
indice 0
-> .0.1HZ ...... indice 34 -> 1500 Hz
Horloge PIC avec quartz de 20Mhz.
Liaison RS232 unidirectionnelle vers terminal PC pour
affichage d'un message d'invite et de la frequence en
cours.
Schéma
:
Prototype
1
Verification avec Oscilloscope
FLUKE et Frequencemetre à PIC16F84 !
avec indice consigne
=15 soit 450Hz
cliquez sur l'image ci-dessous pour detail
Analyse
de la pureté du signal (par FFT)
Test fait application Scope1241 incorporant
l'analyse FFT ! (capture sous DOS, ou Win98)
Circuit
imprimé :
miniDoc sur le convertisseur
de niveau TTL/RS232 MAX232 (Maxim)
miniDoc sur le DAC 8 Bits AD558 (Analog Device)
miniDoc sur l' oscillateur
25 ou 40Mhz SG8002 (EPSON)
TELECHARGER:
Programme source MPASM : Sinedd10.asm
circuit imprimé Circuit
LYT (areslite)
schéma:
version DSN
(Isislite)
Résultat test1.txt capturé sur
Terminal windows
Version 16F84 avec
oscillateur à 25MHz
=> résultat OK
(clik
image pour agrandir)
TELECHARGER:
source : DDS25Mhz.asm ( PIC16F84)
listing : DDS25Mhz.lst
Chargeable: DDS25Mhz.HEX
schéma au format ISIS lite: DDS25Mhz_PIC16F84_28mars06.DSN
Resultat avec VA
Version PIC16F628 avec
oscillateur 40MHZ
35
valeurs de Frequence sinus comprise entre 1Hz et 20.000Hz
Le 16F628 est un modele 16F628-20 donc, deja garanti à
20Mhz !
Il n'estpas certain que tous
les 16F628_20 puisse tourner à 40MHZ!
La liaison RS232 n'est pas indispensable , mais sert de
monitoring pour la valeur de frequence emise (en cours).
Un potar de 4,7K 3 tours est connecté sur la sortie pour
regler à un niveau acceptable (non ecretage) de l'entree
LIGNE de la carte SON
Relage indice frequence par touche +(rouge) ou (-) Jaune
Nota: la carte SON ne passe pas le 1Hz!!
Table de valeurs de frequences disponibles :
Tests realisés avec l' Application
"oscilloscope" VA.exe
On peut
remarquer la relative pureté du signal, et la precision
de la valeur de frequence fournie.
Resolution, definition de la frequence, via
increment de 0,0425 Hz
TELECHARGER:
source assembleur :
DDS40628_110612 (PIC16F628)
Chargeur: DDS40628.HEX
Listing : DDS40628_110612
Schema ISIS : DDS40Mhz_PIC16F628_110612
Feuille excel calcul index 24 bits pour
une frequence donnée: DDS_calculs.xls
Feuille excel calcul pour sinusoide : PIC_creation_table_sinus.xls
Mesure à l'oscilloscope Philips PM3200 (photos)
(sans filtrage du signal...
donc améliorable)
Historique since 2004...
Version PIC18F252 en "C" 100%
Q=20MHZ Sortie 1 à 20000Hz
07/07/2011
Gamme
de Frequence sinus de 1Hz à 20.000Hz par pas de 1Hz
La consigne FREQUENCE est emise par un terminal RS232 ,
valeur en ascii sur 5 digirts 00001 à 20000 suivit de CR
(carriage return= 0Dh=13)
La consigne n'est prise en compte QUE si les caracteres
sont biens DIGITAUX (compris entre 0 et 9) , au nombre de
6 caracteres : 5digits + CR
Le programme affiche la valeur saisie, si elle est
correcte, sinon message "erreur de saisie"
la consigne DDS correspondante est calculee et calibree
sur un ENTIER LONG 24 bits, puis affichée sur le
terminal
Cette valeur sert pour incrementer l'ACCUMULATEUR .
Sinon le programme n'affiche rien! car Trop occupé à
generer la boucle de l'Accumulateur.
A noter que la table de 256 valeurs contient 2
sinusoides, chacune est donc definie sur 128 pas.
Malgre que le programme soit ecrit en C (C18 Microchip
version non optimisee ? (apres periode d'essai 60 jours).
La compilation resultante en asm, montre un resultat de
35 cycles CPU pour la boucle de generation sinus. 18F25x_DDS_boucle_asm.txt
alors que j'obtiens 28 cycles avec le 16F628 en ASM. 100%
Apres avoir commencé mes tests avec Q=10Mhz, la version
finale est à 20Mhz.
Fiche de calculs : DDS_18F_C_calculs.xls
Montage
HARDWARE
18F252
Nota: il ne
m'est pas possible d'utiliser la PLL sur l'oscillateur du
18F252 à cause du Bootloader.
Du fait que le Bootloader
est prevu et installé! pour dialoguer à 19200bauds
@10Mhz
Je ne change le quartz qu'apres avoir chargé le
programme HEX via Tinybootloader.
Ce n'est pas genant avec une plaque de test! Je remet
ensuite le quartz de 20Mhz.
L'application chargée modifie le parametrage UART pour
rester à 19200 bauds @ 20Mhz,
sinon on resterait à 9600 bds! avec Q=10Mhz!
Les siganux obtenus sont relativement correct .. pour un
montage volant. !
derniere modif :
limite de l'excursion d'amplitude de la sinusoide à
+-120 points au lieu de +-128 afin de limiter au maximum
la distortion
(valeur des coefficients de la Table Sinus)
La fondamentale , = consigne de Frequence en Hz se
retouve à +- 0,2Hz avec l'analyse FFT
Analyse faite via la carte son , entree Ligne et usage du
programme VA.exe.
Nota: la bande passante de la carte son, constitue un bon
filtre passe-bande, mais BLOQUE trop les frequences
basses , en dessous de 25Hz.
en plus du couplage capacitif de la sortie DAC : 100µF
pour enlever la composante continue de 2.5V
La sortie DAC AD558
, à faible impedance de sortie via le booster Collecteur
coummun 2N2222 (ou BC109),
alimente le Potar de réglage niveau (4,7K).
A La Consigne Frequence demandée , correpond une
frequence de sortie obtenue à +- 0,2Hz et des
harmoniques en deçà de 40Db .
La liaison RS232 est indispensable dans ce
montage !.
Fichier Source en C18 : 18F252_DDS_110707_20Mhz.c
Fichier chargeur 18F252_DDS_20mhz.hex
Résultats
Analyses avec la version Q=10Mhz :
Freq | Analyse signal |
50Hz | DDS_18F_C_50Hz.jpg |
500 | DDS_18F_C_500Hz.jpg |
5.000 | DDS_18F_C_5000Hz.jpg |
10.000 | DDS_18F_C_10000Hz.jpg |
20.000 | DDS_18F_C_20000Hz.jpg |
Nota: la carte SON ne passe pas les tres basses
frequences <10Hz!!
Je pense reduire l'amplitude du sinus à +-2V, pour ne
pas atteindre les butees d'alim. +5V et 0V
et ainsi encore diminuer les harmoniques de distorsion.
Attention:
Probleme
de masse entre masse RS232 et masse entre "LINE
audio",
ne pas inverser le point froid et le point chaud Audio ,
sinon on court-cirtuite la sortie du signal DDS
Version PIC18F258 en "C" 100%
Q=10MHZ 24 valeurs predefinies
Source:
18F258_DDS_110811.c
Chargeur: 18F258_DDS_10Mhz.hex
Macro 24 touches Terminal Vbray : 24 frequence predefinies
Résultats
analyses :
Futur version
: reglage frequence via telecommande IRC5 ???
Rajout reglage volume
Version
DDS avec 18F46K22 en C18 (domaine BF )
29/04/2012
L'usage de ce microcontroler (MCU) donne beaucoup de
souplesse, vu ses grandes capacités en RAM, en EEPROM et
en code FLASH
L'usage de la PLL sur l'horloge basée sur un Quartz de
10Mhz donne un temps de cycle de 4/40MHz => 100nS
4 tables de forme d'ondes sont en ROM et definies pour 1
periode de signal:
+ 1 table de travail en RAM*.
Apres optimisation
au regard de l'ASM generé par C18, detail via MPLAB IDE
-> "View" -> "Dissambly
Listing" pour localiser la boucle DDS
On peut mesurer que la boucle DDS est parcourue en
27 cycles machine pour une Horloge de 40MHz .
Reporter cette valeur dans le tableur pour calculer le
coefficient de calibration .
Detail via MPLAB IDE -> "View" ->
"Dissambly Listing" pour localiser la boucle
DDS
Schema (Isis):
Une fois calibré, il suffit de taper au clavier la
frequence voulue sur 5 digits . 00001 à 40000. avec une
precision de 1/45 em de Hz
Quelques signaux obtenus
à 1000Hz :
SIGANUX BRUTS SANS AUCUN FILTRE !
![]() |
![]() |
![]() |
![]() |
sinus 1000Hz | Carre 1000 Hz | Triangle 1000Hz | Dent de scie 1000Hz |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Reverse Dent de Scie 1000Hz | Taux=1% 1000Hz | Taux =50% 1000 Hz | Taux=99% 1000Hz |
S=Sinus
une periode est definie dans une table de 256 valeurs
contenant les amplitudes. sinus de 0 à 2* PI
C=Carre
T=Triangle
D=Dent de scie. La descente est
sur 1/256 de la periode.
et une table de travail en RAM pour les signaux Dent de
scie Inverse et Rectangle à Rapport cyclique variable .
R Pour la fonction Reverse
dent de scie , la table originale est copiee à
l'envers dans la table de travail
X= Rapport cyclique
variable , l'entree analogique RA0 est utilisee
pour obtenir l'info de reglage
valeur 0 à 1024, recadrée sur 0-255 pour parcourir un
index dans la table SIGNAL de 256 valeur
Le taux varie de 1 (car 0 = pas de signal!) à 254 ( soit
99% du temps à 1) et affichage en % correspondant.
A chaque appui de X , la valeur du taux est raffraichie
et affichée en fonction dur reglage du potar sur RA0.
La frequence elle est celle fixee par la derniere valeur
envoyée via le terminal.,elle n'est pas modifie par le
Taux!
M= Marqueur , un signal est
placé au debut de la periode , de largeur 2/256, et +-48
points centre sur 48 pts en amplitude
pour utilisation sur voie B du scope : faciliter la
mesure de duree axe des temps X .
Je me sers du Terminal Vbray et affectation de valeurs
predefinies sur les touches
de fonctions
exemple de config : 18F46k22_DDS.tmf
L'amplitude du signal en sortie bufferisé est de 0.87V
efficae centre sur une composante continue de 1.4V
Carre : amplitude de 0,06V à l'etat bas (0) , et à 2.8V
à l'etat haut (1). avec alim 5V du DAC558.
L'analyse
FFT est faite en envoyant le signal DDS , via un diviseur
de tension constitué par 6,8K et 390 ohms , sur l'entree
LINE de la carte SON
L' excellent Logiciel "Spectrum
Laboratory V1.82" est utilisé pour effectuer la
FFT , F sampling=96000 , sur 65536 => points
resol=1.46Hz
*remarques
Tricks & Tips :
-Attention au cadrage des messages en EEPROM et donc
terminateur de string=0
-Attention EEPROM de 1024 bytes sur ce µC, modif
subroutines EEPROM en consequence!
-Bizarre :
SIGNAL[0]=48; // <- ne marche pas ????
i=0; SIGNAL[i]=48; <- OK
-Attention au placement du tableau SIGNAL[256] en RAM ,
ne doit pas etre à cheval sur une page ! sinon effet de
bords !
-Attention à traiter les erreurs de COM UART
Source C18 : 18F46K22_DDS_STCXDRM_120430_1hz_40Khz_C18.c
Chargeur : 18F46K22_DDS_120430_STCXDRM_1hz_40Khz_C18.hex
On obtient d'assez bons resultat jusqu'à 20000Hz , qui
se deteriore ensuite plus on monte en frequence !
normal!!!
Impossible de rivaliser avec un circuit DDS specialisé
pour les frequences au dela de 20Khz..
Mais au moins on a 4 formes d'ondes et d'autres
posibilites annexes! dans le DOMAINE B.F.
Interface
GUI sur tablette Archos via Bluetooth
developpement en cours ..
A SUIVRE :
Reste
à rajouter un etage de puissance ! pour sortir en basse
impedance , quelques volts.
et peut-etre un reglage de volume numerique ?
INTERFACE
operateur
avec tablette Archos 43it
Application sous RFO_Basic Android pour la partie
grafique et dialogue bluetooth avec PIC
Un module bluetooth RN41 mikroelectronika est utilisé à
la place du convertisseur TTL/RS23 DS275
On a donc plus besoin de RS232, afficheur ou telecommande
pour piloter le gne BF DDS
![]() |
selection de la forme, selection
de la frequence par touches + ou - , ou via un
keyboard, icone visu de la forme en mode rectangle : reglage du taux ON/OFF de 1% à 99% |
dommage
que le bluetooth n'est pas supporteé par le kit de
developpement android. => obligé d'utiliser l'Archos
en reel pour tester l'appli.
Variante
DDS avec 18F46K22 , usage du DAC interne 5 bits
Le PIC18F46K22 a la
particularité de contenir un DAC 5 bits avec
reference VDD ou 4.906V ou 2,048V ou 1,024V
d'ou cette variante pour eliminer le DAC558 8 bits
externe qui devient de moins en moins courant .
Le hardware est donc reduit* au seul microcontroller..+
interface RS232 (DS275 en Dip8)
Les resultats sont quand meme en dessous du DAC558 qui
est sur 8 bits et permet de mieux arrondir les formes ,
car 256 pas au lieu de 32 !
Mais cela peut etre suffisant pour quelques applications
ou tests.La reference de 4.096V est utilisée plutot que
VDD qui est moins stable..
*Par contre la sortie du DAC (RA2) necessitera de mettre
derriere un ampli buffer pour pouvoir l'utiliser sous
faible impedance.
Allure des signaux obtenus sur l'oscillo HAMEG 60Mhz
(donc sur Z=1Mohms // ~20pf) .
Les escaliers sont visibles à faible frequence et la
distorsion devient visible au dessus de 15Khz.
L'amplitude (1,3V eff) est constante de 1Hz
à 20000Hz à -0,4db pres , 36Khz à -1,2db (couplage via
C=100µF sur le multimetre Veff).
fichier source C18 : 18F46K22_DDS_STCXDRM_120705_ADC5b_C18.c
chargeur : 18F46K22_test_DAC5b.hex
Version autonome DDS avec 18F26K22 utilisant son
DAC5bits
Le PIC18F26K22 en DIP28 , contient aussi un DAC 5 bits
avec reference VDD ou 4.906V ou 2,048V ou 1,024V
au depart la
liaison interface 2T RS232 est conservée pour le developper des
modifications/ameliorations:
Version
TERMINAL RS232 :
Projet MC18 regroupant les dvers fichiers utilises
Rappel du mode de calcul consigne DDS => frequence
via le terminal VBRAY (RS232)
fichier macro : 18F26k22_DDS.tmf
Des frequences fixes sont affectées à des touches de fonctions,
mais à tout moment
on peut saisir n'importe quelle valeur au clavier, en respectant
le format sur 5 digits et terminé par Enter (CR)
ex: 15625<CR> pour 15625Hz ou 00008<CR> pour 8HZ
De meme on peut changer la forme d'onde :
SINUS,CARRE,TRIANGLE, Dent de SCIE, Reverse Dent de SCIE et
*Rectangle..
Rajout touche de fonction Amplitude :
A chaque appui on change la reference du DAC5bits, soit 1,024
2,048 ou 4,096 volts
ainsi que 2 ampli OP Rail to Rail montes en suiveur. Apres le 1er
suiveur , un potar de reglage fin est inseré pour
reglage de 0 à Amplitude maxi selectionnée, Le 2em Ampli OP
permet une sortie basse impedance (Zs >= 750 ohms).
A suivre .. ampli de puissance avec alim symetrique +-12V pour
sortir quelques volts sur 50 Ohms mini.
Rajout touche de fonction Potar pour reglage
valeur consigne DDS
On ne peut pas utiliser directement la valeur Analogique 0-1024
points pour definir une frequence entre 1Hz et 40000Hz!
donc usage specifique d'un potar lineaire classique , course de
270° :
Potar au milieu (zone morte de 45 à 55%) Pas d'
evolution de consigne et Led Stop allumée
Potar en dessous de 45% ,
- Diminution de la consigne avec un pas variant
exponentionnellement avec l'angle du potar.
- Led Down allumée.
Potar en dessus de 55% ,
-Augmentation de la consigne avec un pas variant
exponentionnellement avec l'angle du potar.
-Led UP allumée
Affichag de la consigne rafraichit en permanence
Touche Valid: pour sortir du mode potar et donc
utiliser la derniere consigne reglee
Touche Taux : permet le mode specifique
Rectangle
Un potar de reglage taux , delivrant 0 à 1024 points / 4 soit 0
à 255, permet de
regler le rapport ON/OFF de la periode , entre 1% et 99%.
L'appui sur Taux permet une lecture du potar et donc rafraichit
le mode Rectangle
Schema :
TRicks
& Tips (Problemes rencontres :
MPLAB IDE ne
sauvegarde pas tout le contexte dans un projet..
J'ai perdu 2H00 à rechercher pourquoii je n'avais plus la meme
relation consigne DDS et Frequence obtenue
j'avais 819Hz au lieu des 1000Hz prevus.. une coche de trop dans
l'option Compilateur C18 : Integer Promotion !
ce qui mettait, apres decorticage de l'ASM géneré pour la
boucle DDS , 35 cycles au lieu de 27 cycles..
Apres decochage de l'option,tout rentre dans l'ordre : boucle DDS
tourne en 27 cycles soit 2,7µS
avec Q=10MHz et PLL 4x activée.
Adaptation
d'impedance:
Le double ampli OP rail to rail utilisé TLC27M2, n'a pas un slew
rate suffisant pour le mode Rectangle ou Carre.
D'autre part , le niveau bas de la sinusoide est un peu emoussé,
et on ne peut pas utiliser une charge de sortie
inferieure à 750 ohms, sinon grosse distorsion prtie negative de
la sinusoide
soluces possibles :
- Trouver d'autre ampli avec meilleur Slew Rate (V/µS) et
Rajouter un offset DC sur l'entree -
- Utiliser directement un ampli de puissance DC-100KHz avec Zs=50
ohms mini, avec alim symetrique +-12V.
Je pensais pouvoir utiliser -REF du DAC pour imposer un niveau
bas de 0,5V,
mais probleme de datasheet, ou imcomprehension de ma part ?
question posée sur le forum futura....
A noter que l'interface
2T RS232 convient tres bien pour cette appli
(38400bauds) et ne coute quasiment rien.
testé OK aussi avec un cordon Trendnet RS232-USB TU-89.
Version 18F26K22 DDS autonome
avec interfaces LCD 2x16 cars + clavier 5 boutons poussoirs et RS232
versus 17/03/2013
En plus des commandes possibles via le terminal RS232, l'ajout de
5 boutons poussoirs et d'un ecran LCD 2x16 car
permet une utilisation autonome.(sans PC!)
![]() |
par defaut, au lancement programme : mode Sinus, Consigne 1000Hz, Amplitude Maxi 2,048 V Deplacement dans le menu par BP droit ou BP Gauche SINUS CARRE TRIANGLE Dent de SCIE Reverse Dent de SCIE Rectangle sous -menus : Reglage TAUX 2 à 98% avec BP - + Reglage max DAC 1, 2, ou 4V avec BP + ou - Choix de Frequence 1 parmi 64 avec BP + ou - Regalge FIN de frequence à 1Hz pres BP + ou - Touche Validation pour chaque reglage ou mode. gamme F=1Hz à 45 000 Hz Amplitude reglable de 0% à 100% de la sortie DAC 100% pour 1,024 ou 2,048 ou 4,096V Commande AUSSI via un terminal RS232 ! |
![]() |
![]() |
Affichage sur 1 LCD 2x16 cars :
La Ligne 1 du haut sert au libellé du MENU
La ligne 2 du bas, à afficher ou modifier des valeurs
2 BP (BP4 Gauche , BP5 Droite ) pour se deplacer horizontalement dans le menu ,
comportant 10 items.
2 BP (BP1 Haut , BP2 Bas)
pour se deplacer à l'interieur du sous menu ou pour modifier une
valeur par + ou -
1 BP( BP3 Valid) pour
valider l'action (et retour à la boucle infinie DDS)
![]() |
![]() |
Platine recevant les 5 BP + le "OU" à diodes vers RB0 | BP4 Gauche , BP5 Droite , BP1 Haut , BP2 Bas , BP3 Valid |
Merci à C.BERNARD
pour l'etude du Circuit imprimé.
La boucle DDS etant une boucle sans fin ,On ne peut pas faire en
plus du pooling, gaspillage de temps!
pour tester un eventuel appui sur un BP.
Il faut donc traiter la sortie de boucle DDS par un Event :
Les 5 BP sont relies par un "OU" à diodes sur l'entree
RB0, interruptible.
Ce qui permet un traitement immediat des BP,en sortant de la
boucle infine DDS
( nota : la boucle DDS est de 27 cycles à 10MHz x 4(PLL) soit en
2,7µS).
De plus, la laison RS232 reste toujours operationelle , via
L'interruption sur arrivée d'un caractere sur l'UART.
qui, elle aussi, permet de sortir de la boucle DDS , et traiter
la commande clavier.
Les fonctionalites du menu , resumée ici :
GeneDDS_Chart_Menu_LCD.pdf
Partie DDS PIC18F
Documents :
Signaux obtenus
Liste du materiel
Schema ISIS : DDS_18F26K22_DAC5b_LCD_Touches_130314.DSN
Chargeur : 18F26K22_DDS_DAc5b_RS232_BP_RB0_130316.hex
macro terminal Vbray :18F26k22_DDS.tmf
![]() |
La sortie DAC n'est pas
exploitable directement, c'est pourquoi un ampli OP suiveur, rail
to rail, est connecté sur cette sortie
Il alimente un potar de 10K pour le reglage fin d'amplitude , sur
lequel un autre suiveur est connecté pour delivrer le signal
sous faible
impedance , la charge doit etre ici >=750 ohms pour ne pas
perturber le signal
Le Menu permet 3 niveaux de sortie maxi 100% : 1,024 cr à cr,
2,048V cr à cr et 4,096V cr à Cr.
Version Double MIXTE 18F46K22 : avec DDS PIC18 +
DDS AD9835
,
gestion via LCD et 5BP +
RS232
Schema :
On peut donc avoir 2
sorties simultanees avec ce montage
La sortie Sinus ( ou autre forme) du DDS PIC18F de 1Hz à 20 000
Hz par pas de 1Hz
La sortie Sinus exclusivement ( ou Carré par hardware) du AD9835
de 1Hz à 20 000 000 Hz par pas de 0,1Hz
DDS_18F46K22_DAC5b_LCD_AD9835_Touches_130328.DSN
Evolution du Hardware :
Passage sur la version DIP 40 car trop juste en E/S avec le
modele 28 pins
Le circuit specialisé SPARKFUN AD9835 est
relié au PIC en liaison simili SPI Software
via les lignes RC3,RC4,RC5 pour initialiser l'AD9835 et lui
envoyer une consigne frequence
(Frequence #1 sous la forme d'un mot de 32 bits
Evolutions possibles : Choix Frequence #2 , envoi consigne de
dephasage ...avec lignes RC0,RC1,RC2
Le coefficent de calibration AD9835 ,immuable, est de 85,89934592
Ce qui signifie qu'il faut initialiser l'accumulateur à 85 899
pour avoir 1 000 Hz.
Evolution
du Programme :
Rajout de 2 items dans le menu horizontal (Gauche, droite)
Mode DDS AD9835 :
dans ce cas,On
ne pilote plus le DDS 18F.. la sortie DAC5b retombe à 0 !
rappel: la boucle DDS PIC18F demande 100% des ressources du PIC
et on se concentre alors sur l'AD9835 ,
qui ne voit sa sortie coupée QUE LORSQU'ON RAFRAICHIT LA
CONSIGNE FREQUENCE
vu qu'il est autonome , independant par rapport au PIC.
la ligne 2 du LCD affiche la frequence en cours delivree par
l'AD9835
des qu' on appui sur BP Up+ or BP Down -
Affichage ligne 1 LCD: " Reglage Freq AD9835
"
Usage de BP Up Incrementation ou BP Down ,decrementation du mot
32 bits accumulateur AD9835,
Cette incrementation correspond au pas choisi.
Affichage Ligne 2 LCD :
les BP G et BP D permettent alors un reglage du pas
d'incrementation
indice du pas , variant de 1 à 8 est affiché
à gauche de la ligne 2 , suivi du sigle > ou
< suivant increm. ou decrem
et de la FREQUENCE en Hz correspondante.( et non pas de
l'accumulateur).
Relation entre indice et pas :
de 4^0 à 4^7 soit un pas de 1 à 16384
Lorsque le pas est trop important, et risque de deborder le mini
ou le maxi
affichage à gauche de "? " , signifiant en
butée de reglage, reduire alors le pas pour pouvoir
aller jusqu'aux limites
min (86Hz) ou max (20Mhz)
![]() |
|
Evolution possible accumulateur et Freq | log sur RS232 Ecran terminal , toutes les modif via BP & LCD sont consignees |
Les potentiometres Freq
et Taux sont maintenant operationels
AUSSI avec le mode LCD.(et RS232)
Entrer via Menu "Reglag Freq Potar",
le potar centré on affiche la frequence (fixe) en cours avec le
signe =
Le potar au dela de 50 % on affiche > valeur de frequence ..
celle ci augmentant de facon exponentielle suivant l'angle du
potar au dela de 50%
Le potar en deca de 50 , on affiche < valeur de frequence..
qui diminue d efacon exponentielle suivant l'angle du potar en
deca de 50%
Traitement
associé:
Le
potentiometre Taux ( reglage Duty cycle du signal rectangulaire)
Traitement lineaire de la valeur issue du potar 0 à1023
points reduit à 0-255 pas
la periode du signal rectangulaire etant sur 8 bits
limite basse à 1 points ,limite haute à 254
on on a donc au mini du potar un taux de 1/255 etat ON et 254/255
etat OFF
à 50% du potar 127/255 etat ON et 127/255 etat OFF
à 100% du potar 254/255 etat ON et 1/255 etat OFF
nota: le signal carré est
toujours à 50% ON et 50% OFF
Nota: les 2
possibilites de reglage FREQ et TAUX co-existent avec les
reglages par BP+ ou BP-
Captures menu LCD
1ere ligne : item du Menu
2emligne : valeur de la frequence
fichiers associes : 18F46K22_DDS_AD9835_130328.zip
![]() |
![]() |
![]() |
AD9835 avec DAC sur 10bits et le PIC sur 5bits | 50Khz sortie AD9835 et 1Khz sur le PIC | le meme signal 50Khz dilaté |
On remarque la qualité
superieure de l'AD9835 , comportant un DAC de 10 bits soit 1024
pas ( au lieu de 5bits 63 pas)
de son accumulateur sur 32 bits ( 24 bits sur PIC) et de son
horloge à 50Mhz ( 10 Mhz effectif sur le PIC au niveau du cycle)
Modif pour la saisie de frequence AD9835 sur le terminal
RS232
La valeur de frequence pouvant atteindre (et depasser 20Mhz) il
faut 8 digits , au lieu de 5 pour le DDS 18F limité à 20Khz
Si on entre dans le mode AD9835 via la Touche macro
"AD9835" ( envoi "A" <CR>)
Celle ci est decodée et impose le "mode DDS AD9835"
sur la 1ere ligne LCD,
attend 8 cars pour definir et charger la frequence dans l'AD9835
puis celle ci est recopiée en ligne 2 du LCD et sur l'ecran.
Le terminal RS232 est
maintenant completement redondant avec l'interface LCD+5BP
fichier macro VBray : 18F46k22_DDS_AD9835.tmf
Usage
d'un mini-Joystick au lieu de 5 BP
La problematique reside dans le fait qu'il faut
conserver une interrupt permettant de sortir de la boucle de fond
infinie 'DDS PIC18F"
Comment generer une ou des interruptions avec une valeur
analogique : potar Horizontal , permettant d'appeler et se
deplacer dans le menu LCD
Via les Comparators !
Configuration des comparateurs :
Les 2 potars du joystick sont connectes respectivement sur RA0 et
RA1
La valeur ADC RA0 sert de Vin- pour les 2 comparateurs
On utilisera l'entree RA3 analogue pour fixer un seuil bas à 1/3
de Vcc=5V comme Vin+ pour le comparateur 2.
Le seuil haut sera definit par Vref interne de 4,096V sera
utilisé comme Vin+ pour le comparteur 1
de sorte , avec ces 2 comparateurs de declencher 2 evenements
C1IF = gauche C2IF=Droite.
RA1 entree ANA, recevra l'info du potar Vertical , qui servira,
en mode pooilng, (il n'y a que 2 comparateurs dans ce
PIC18F46K22!)
pour gerer la consigne frequence ou Taux.
Le bouton poussoir centrale du Joystick restant connecté sur
RB0, pour valider una action.
schema de
connection des 2 comparators PIC18F46K22.
Programme de test de la partie Joystick...
18F46k22_Joystick_ADC_test_Comparateur_130401.c
Schema:
Integration du Joystick
dans l'application PIC18 DDS et AD9835:
explicage:
Programme (C18) :
18F46K22_DDS_source
C18
18F46K22_DDS_chargeur
*.hex
Realisation Finale :
![]() |
|
Réalisation Circuit Imprimé / Christian BERNARD | photo , monté |
commentaires:
Ampli pour sortie
DDS AD9835 :
Etude theorique avec LT1363 Ampli High Speed 1000V/µS
Zs=100 ohms , niveau de sortie 5V cr à Cr, et Bande
Passante de 0 à 40MHz à +3db... en theorie !
![]() |
![]() |
Ampli_LB_LT1363.asc | Test reel : Job to do ! |
Ampli avec
composants discret : 3 transitors
Test Simulation :
![]() |
![]() |
![]() |
Ampli_3T_push_pull.asc | Signal In et Out | Bande passante |
TEST REEL
:
Une forte boucle de contre reaction (AC) et une compensation de
gain HF sur l'etage d'entree,
permet d'augmenter la bande passante , ainsi qu'une autre boucle
de contre reaction avec composante continue
pour stabiliser et faciliter le reglage du point de
fonctionnement.
On obtient un Gain en tension global de 6,66 (4V cr cr en sortie
avec 0,6V en sortie de l'AD9835), soit +16dB
Nota: l'AD9835 delivre 1,2V à vide (sur sa charge de 300 ohms)
mais seulement 0,6V connectée à l'ampli.
La resistance de 300 ohms sur l'entree de l'ampli evite la
degration du signal AD9835.
L'amplitude decroissant rapidement au dessus de 4MHz , on
limitera l'usage à 6Mhz correspondant à -6db
de la band passante. soit 2V cr cr en sortie.
Le gain en puissance permet de pouvoir connecter une charge de
100 ohms sans perte d'amplitude.
L'impedance de sortie reste inferieure à 50 ohms.
La bande passante limitée permet aussi de filtrer les
harmoniques , ainsi
Le signal de sortie à 10Mhz est bien meilleur que celui
d'entrée ..
en resumé: Bande passante à -3dB : 1hz à 4Mhz pour un
gain de +16dB en tension.
etude en cours ....
Tout aide ou
participation est la bienvenue !
Version
IRC5 avec circuit specialisé DDS et 18F25x
Au depart, prevision
sur un AD9850
...si j'arrive à
le souder sans le cramer !
Bref j'y rennonce et me jette sur un circuit precablé : Sparkfun DDS AD9835
Breakout !
avec pins au pas de 2,54mm
Disponible ici :
mini module générateur de signal 26 sparkfun Base "AD9835"
Référence : BOB-09169 32.29 TTC chez Lextronic
AD9835 moins performant , mais plus simple : Caracteristiques 10-bit DAC pour une bonne definition ( precision en anglais ?) 2 registres de frequences , accessibles via un bit de selection 4 Registres de phase , accessibles via 2 bits de selection SPI communication serielle 3 fils , via un simple jeu de commande Alimentation 5V Consommation de 5 à 40mA Interface SPI en niveaux 5V Dimensions: 3.048cm w 2.54cm Poids : 4.3 gr Selection de Frequence ou selection de Phase possible par Hardware via Pins disponibles ou via Software. Quartz de 50Mhz Signal de sortie de 1,2V centré sur 0.6V DC : - disponible sur sortie coaxiale - ou 2 trous disponible pour insertion de pins de sortie : OUT et GND |
![]() |
Test platine Sparkfun DDS 9835 avec 18F258
en C18 MPLAB
via terminal RS232
schema au format ISIS : DDS_AD9835_18F258_10Mhz_111006.DSN
Nota:
les pins (platine) 5,6,7 sont mises au 0V , car usage du soft
pour choix de registre frequence
Dans ce test, les registres Phases ne sont pas utilises
Le dialogue PIC - carte DDS se fait via 2+1 fils : 2 pour SPI :
SCLK et SDATA et 1 pour FSYNC (indispensable!)
le protocole est super simple .. voir data sheet
L'interface utilisateur se fait via le terminal VBRAY : il suffit
de taper la valeur de frequence comprise entre 0,01Hz et
10,000,000.0Hz et valider par "enter"
La constante 85.89934592 est utilisée pour faire correspondre la
frequence voulue et la valeur 32 bits Accumalateur transmise au
DDS.
voir le fichier AD9835_18F.xls
pour la comprenette.
Documents utilises :
AN-1108_Programming.pdf
AD9835_datasheet.pdf
Programme en C18 :
Source: 18F258_DDS_AD9835_Rs232
attention : 4 boulettes volontaires sont glissees dans le source
!
chargeur :
AD9835_18F_110928_ok.hex ... mais pas dans le *.hex
RESULTATS:
Avec cette carte , tout le boulot est fait en dehors du PIC , qui
n'a plus grand chose à faire !...
Facilité de mise en oeuvre.
Resolution de 0.0116 Hz. Tres grande dynamique de reglage , par
rapport à une soluce analogique MAX038 ou XR2206.
Amplitude TRES CONSTANTE jusqu'à 200KHZ puis l'amplitude diminue
de -1,74dB à 2MHz, -5.26dB à 4Mhz ..-14.8dB à 20Mhz
Le signal RESTE CORRECT jusqu'à 2MHZ,puis se
degrade rapidement.
Attention, le signal d'amplitude 1.2V cr à cr est centre sur une
composante continue de 10.6V.
Le Sinus passe via un trigger de scmitt 74LS14 , mais du fait de
la composante continue, il faut calibrer R12 (entre 2,7 à 3,9K)
pour obtenir en sortie un signal le plus carré possible sur le
collecteur du transistor BC109B (ou 2N2222A).
nota: un test avec un Mosfet IRLZ14 donne de moins bon resultats
au dessus de 50Khz.
Les signaux carres sont tres correct jusqu'à 100Khz ,s'arrondissent
ensuite et decrochement à 1Mhz .. car le niveau de sinus diminue
aussi !!!
reglage du seuil trigger à refaire !
Mesures avec la charge de 300 ohms en sortie de DAC (sur la
platine) et seulement l'oscilo (HAMEG 60Mhz) connecté sur la
sortie pin Out .
Je ne pense pas que la BP de l'oscillo soit en cause.
Conclusion de ce test:
Je suis donc un peu déçu de la baisse de
perfomance au dela de 2Mhz ..,
mais bon c'est mieux que les 20 000Hz obtenu avec le PIC18F SEUL
.
.
Rajout affichage sur Nokia 3310 LCD :
Source en C (C18) : 18F258_DDS_AD9835_LCD3310_Rs232_111003_bug.c avec 4 boulettes!
Chargeur
*.Hex AD9835_18F_LCD3310_Rs232_111003.hex testé OK!
Rajout
interface Telecommande IR RC5:
Permet
de s'affranchir de la connection avec un PC.
Le nokia affiche le code de commande IR et
son libellé de touche ex: cmd=23 pour la touche OK
ainsi que la frequence saisie : ex: 1200 Hz et la valeur 32 bits
envoyée au AD9835 ici 103147.
en cours de saisie la frequence est affichée en GRAS.
![]() |
![]() |
![]() |
Saisie et validation avec teleCde | detail mode saisie Frequence capturee sur RS232 | incrementation valeur |
exemple de codes cmd recu et touches associées
Source en C (C18) : 18F258_DDS_AD9835_LCD3310_Rs232_IRC5_111019.c
Chargeur
*.Hex 18F25x_DDS_IR_all_ok.hex testé OK!
Autre
version, sans telecommande IR ,
reglage frequence par potar sur entree ANA:
A l'init , la frequence de sortie est de
3000Hz.
-Un potar de 4,7K entre +5V et Gnd , curseur sur entree ANA0
(RA0) sert de commande pour faire varier la consigne Frequence.
- Les 10 bits de l'entree ANA sont nettement insuffisant pour une
large gamme, on se sert donc de plages de tensions pour faire
evouler la
consigne avec un pas de plus en plus croissant par rapport au
point milieu (50% de rotation de l'axe)
A mi course du potar on a 512 points, une bande morte de +-32
point est signalé par une led , signifiant Consigne STABLE
(n'evoluant pas).
En diminuant la valeur en deca de 50% on fait diminuer la
consigne, au dela de 50% on l'augmente.Plus l'ecart est grand
plus la variation est importante.
La valeur en point est affichée sur le nokia ainsi que 3 icones
possible : fleche gauche si on diminue, fleche droite si on
augmente, fleche vertical si stable.
La frequence est affichée en permanence. L'AD9835 est rafraichi
en permanence.
Il n'ya pas le mode Sweep dans cette version, car pas de gestion IR RC5!
Source en C (C18) : 18F258_DDS_AD9835_LCD3310_Rs232_Volt_111022_all.c
Chargeur
*.Hex 18F25x_DDS_Volt.hex testé OK!
A suivre:
- autres fonctionalites possibles...à SUIVRE :
-memorisation de 16 valeurs utiles (ex: 443Hz 455Khz
472Khz ) à la demande, en EEPROM du PIC
-Sweep reglable : definition du depart,Fin,Pas et vitesse de
variation
- vobulation par tension ana ADC10b
- Amplification sortie pour +-5V sur 600 ohms
-clavier, touches + et - pour le reglage de frequence ?
- realisation mini-telecommande IR specifique avec PIC12F683
- usage du port B pour generation signal DDS par le PIC : 2em
voie de modulation.exemple: pour moduler le 455Khz de l'AD9835
Autres suggestions ?
Top Page
Retour Home Page (index)