hi
my friend another question
tx an rx have more than 5khz frequency. so how it is covert to 400hz.
Announcement
Collapse
No announcement yet.
IDX-PRO+VDI
Collapse
X
-
hi my friend.i have not scope to set my dd coils.Originally posted by Koala View Postmohandes Have you got a problem with ground balance or discrimination. If so the problem maybe with you coil. If the RX phase is too far out your detector will not ground balance or discrimination correctly.
By the way there is a performance advantage using LF347 instead of LM324
but i really decide to do this and solve my problem.
if not problem ask another question here( just for improve my knowledge )
first analysis TX :
i see 2 bc237, what do these?(say better for why?)
and then lm393 do disc and GB.then 4066 (is switch) how work? Rx when amplifier by ne5534 go to 4066.how 4066 switch?(what parameter is important to switch)
excuse for my English
Leave a comment:
-
mohandes Have you got a problem with ground balance or discrimination. If so the problem maybe with you coil. If the RX phase is too far out your detector will not ground balance or discrimination correctly.
By the way there is a performance advantage using LF347 instead of LM324
Leave a comment:
-
@scrungy_doolittle, you are extremely lucky not to be my geometry pupil, as I'd flank you with most graceful ease. IDX is a traditional VLF motion metal detector. I explained how such a detector sorts out what targets need to produce a sound, and a mechanism of exclusion. a target between the boundaries will produce a simple sound - nothing more, and nothing less.
However it is quite possible to do exactly the same in a micro, there are constraints that say - don't do it.
With a micro and a display, and perhaps a DAC to make sound indication, the last thing you may wish to do is to revert to a compulsory simplicity of analogue VLF. Because of time-discrete operation, you simply can't produce a stimulus at any desired phase. You just can't. What you can do instead is play with I and Q values, and reach to any degree imaginable by math. That's the detail you flanked.
In analogue you can get to any phase imaginable, but in the very IDX you don't do that. Instead you apply addition to reach a desired discrimination angle, just as you'd do with a micro.
Because you can distinguish an exact angle of any target response by observing I and Q ratio, you do not have to pay any attention to a classical detector mode of discrimination. You simply map phase to a desired sound representation, and display indication, The VDI that is paired with IDX does half of that job.
I suggest you to take a piece of paper and draw it. A little trigonometry will help a lot. Once you are able to visualise things that way, you'd be able to convert it into code, but not sooner than that. There are many things you can do to enhance signal detection with a micro, but mimicking a traditional VLF will surely not get you anywhere.
Hope I did not burst any bubbles with this post.
Leave a comment:
-
Much appreciate your time for the short tutorial. It is said that most things you learn in life are learned while trying to accomplish something else.. and programming Arduinos is apparently one of those.Originally posted by scrungy_doolittle View PostWell your code may run, but there is a difference between running and running correctly.... In the case that I pointed out, two of the bars will be wrong.
I started in 1976 with APL,basic and fortran, then moved to assembly. Moved on to C in 1985 from assembly. I've been programming for many years.
In general, you do not need goto's. In c, they are restricted to being within a function. You can write any program you want by using structured code.
for loops in C with breaks and continues. some might argue that breaks and continues are a form of goto. perhaps so. but they are managed by the compiler, and are always forward branches. Do while loops are also structured.
Look up principle of structured code.
So lets take a simple example:
c=0;
start:
c=c+1; // just some example code
if (c==5) goto end
// code
goto start
end:
c=0;
do
{
c=c+1;
// code
}
while (c !=5);
A do while loop always executes at least once, and the test is done at the bottom of the loop
for (c=0; c!= 5;c++)
{
// code
};
is the same thing, except the test is at the top of the loop, and if it fails the code is not executed.. C starts out at 0, and increments until it hits 5.
do
{
//
// loops for ever unless you do the following
break; // exits the loop because it exits the current scope
}
while(1);
for(i=0;i<10;i++)
{
if (condition == true) // we need to bail from the loop when this is true
{
break; // this will exit the loop
}
if(i==4) // we need to skip iteration 5
{
i=6; // sets i = 6 overriding the loop control
continue; // this will branch to the top of the loop resulting in iteration 5 being skipped.
}
}
// next block of code
in this case break will take you out of the loop to the next block of code, while continue will do an early branch to the test.
your code uses goto, for example, to transfer control to the top of the loop. But it can be re-written to avoid goto's all to gether.
Right now it is 10:30 p.m. and I needed to be in bed long ago.
I will tweak your code and repost it, but right now I am at company headquarters doing a hump week...
Leave a comment:
-
Hi my friend, trust me, it is not complicated.Originally posted by mohandes View Postmany thanks .i am amateur.but very well.it is very complete man .i understand every think you say.but have another question , if need i open new topic?
1-i see axis R and X in IGSl project(by dfbowers) but really hard to understand the axis diagram.(so sorry).
2- why in this frequency should we work, cant use higher frequency?
3-preamp (5534) how work in vlf, like PI or no?
regards
1-the R axis corresponds to GB channel. It has a zero response only for ground response, and ideally for objects underneath a coil it has positive response for all metal objects imaginable. X axis is equal to Disc channel, and it has positive response for non-ferrous, but negative for ferrous objects.
2-you can use any frequency you wish, and the same principle works, but the coils are well balanced for a range of frequencies, and some Tx oscillators are not working if coil Q-factor is below optimum for a given frequency. Many devices have audio synthesized from Tx frequency. So everything considered it is much easier making a device for a single frequency. Square wave Tx and somewhat different front end makes it possible to extend frequency range, but that is not IDX. IDX is a device optimal for relic hunting, and frequency is chosen accordingly. Changing a frequency within one octave will not make significant difference anyway.
3-preamps in VLF have a much easier, but completely equal role as in PI detectors. They are never turned into saturation as in PI, but everything else is equal - they have to improve input S/N
Leave a comment:
-
many thanks .i am amateur.but very well.it is very complete man .i understand every think you say.but have another question , if need i open new topic?Originally posted by Davor View PostYou have 3 channels in IDX: All metal, motion GB, and motion discrimination channels. Of these the All metal is used for pinpointing in a quasi non-motion way.
GB and discrimination channels provide actual discrimination. To grasp it you have to picture a diagram with metal targets responding to a sinus signal stimulus. All metals will have a response somewhere in between 0 and 180° from Tx phase, but ferrous will have it in 0 to 90°, and non-ferrous will have it in 90 to 180°. Both motion channels are used for discrimination which happens in comparators that perform AND logical operation. There is a beep when both GB channel and disc channel provide positive signal at the inputs of comparators.
How it goes? Say you adjust discrimination channel phase at 90° sharp. GB channel is aligned with the soil response which is in vicinity of 0° and it goes positive if response is in 0 to 180° range, and discrimination channel goes positive when response is in 90 to 270° range. It means that both channels will give positive responses only if a target response is in a range between 90 and 180°.
If you want to exclude aluminium foil from detection, you simply adjust discrimination a little over 90° (say 100°) and your discrimination range becomes 100 to 180°.
1-i see axis R and X in IGSl project(by dfbowers) but really hard to understand the axis diagram.(so sorry).
2- why in this frequency should we work, cant use higher frequency?
3-preamp (5534) how work in vlf, like PI or no?
regards
Leave a comment:
-
That is one of the most succinct and to the point explanations of how this works, that I have ever heard. Very nice. And it helps me as well..... Never could suse out the and function.Originally posted by Davor View PostYou have 3 channels in IDX: All metal, motion GB, and motion discrimination channels. Of these the All metal is used for pinpointing in a quasi non-motion way.
GB and discrimination channels provide actual discrimination. To grasp it you have to picture a diagram with metal targets responding to a sinus signal stimulus. All metals will have a response somewhere in between 0 and 180° from Tx phase, but ferrous will have it in 0 to 90°, and non-ferrous will have it in 90 to 180°. Both motion channels are used for discrimination which happens in comparators that perform AND logical operation. There is a beep when both GB channel and disc channel provide positive signal at the inputs of comparators.
How it goes? Say you adjust discrimination channel phase at 90° sharp. GB channel is aligned with the soil response which is in vicinity of 0° and it goes positive if response is in 0 to 180° range, and discrimination channel goes positive when response is in 90 to 270° range. It means that both channels will give positive responses only if a target response is in a range between 90 and 180°.
If you want to exclude aluminium foil from detection, you simply adjust discrimination a little over 90° (say 100°) and your discrimination range becomes 100 to 180°.
So in code, if you have the signal digitized, and the transmit digitized so you can sync, then your discrimination is simply looking for indexes corresponding to in the above example, 100 and 180, assuming that your sample buffer digitizes one sine wave in one degree increments.
Lets see at 6.59 khz a sine wave cycle takes: 1.5 e-4 seconds or 150 usec. 416 ns sample time would give you 360 samples across one cycle. 2.2msamples per second would be 450 ns per. In actuality 180 samples would give you 2 degree increments, or 180. The nyquist criteria would be to sample at least 13 khz. 2.4 msamples per second would give you 416 ns sample time.
Can you do that? With the STM32F411 you can get 2.2 with the pic24FJ128CG010 you can sample 10 msamples. Of course there are other ways to skin this cat so to speak. Apparently there are IQ formulas that would allow this.
Normal VLF detectors actually gate the signal into the analog processing at a phase angle set by a comparator, which essentially amounts to setting a voltage threshold such that at a point in the sinewave, the compartor will output a high, on the rising side of the sinewave. and then turn off on the falling side at the same point. Since the angle is related to time, if you set the trigger point such that it occurs at the dead center of the first hump, you are looking at the angle of 90 degrees relative to the entire sinewave being 360, and starting at 0.
If you consider the frequency to be x then x/4 = 90 degrees into the wave. X/8 would be 45 degrees into the sinewave. This is what Mr. Crockers arduino code does, he samples 8 times.The frequency is based on the adc sample time and a counter.
Davor tells me that you can examine any phase point that way, though I don't really understand that part of the math.
Leave a comment:
-
You have 3 channels in IDX: All metal, motion GB, and motion discrimination channels. Of these the All metal is used for pinpointing in a quasi non-motion way.
GB and discrimination channels provide actual discrimination. To grasp it you have to picture a diagram with metal targets responding to a sinus signal stimulus. All metals will have a response somewhere in between 0 and 180° from Tx phase, but ferrous will have it in 0 to 90°, and non-ferrous will have it in 90 to 180°. Both motion channels are used for discrimination which happens in comparators that perform AND logical operation. There is a beep when both GB channel and disc channel provide positive signal at the inputs of comparators.
How it goes? Say you adjust discrimination channel phase at 90° sharp. GB channel is aligned with the soil response which is in vicinity of 0° and it goes positive if response is in 0 to 180° range, and discrimination channel goes positive when response is in 90 to 270° range. It means that both channels will give positive responses only if a target response is in a range between 90 and 180°.
If you want to exclude aluminium foil from detection, you simply adjust discrimination a little over 90° (say 100°) and your discrimination range becomes 100 to 180°.
Leave a comment:
-
hi
who can explain me simple discrimination in schematic on IDX?(just know which parts work to this and how?)
regards
Leave a comment:
-
Well your code may run, but there is a difference between running and running correctly.... In the case that I pointed out, two of the bars will be wrong.Originally posted by dfbowers View PostYes, thanks for catching the errors. I get sloppy sometimes : / I did not keep it from running though.
Lot's of options available with the Arduino! I have written at least a dozen variations of this program but all contain the basic logic on sampling.
You will have to elaborate on the "goto" issue. It seems to work just fine though.
I grew up learning Basic and Fortran in school, 30-some years ago and just picked it up programming again from the Arduino website.
Also, thanks for the suggestions on enhancements. In reality, I'm still on a steep learning curve.
Don
I started in 1976 with APL,basic and fortran, then moved to assembly. Moved on to C in 1985 from assembly. I've been programming for many years.
In general, you do not need goto's. In c, they are restricted to being within a function. You can write any program you want by using structured code.
for loops in C with breaks and continues. some might argue that breaks and continues are a form of goto. perhaps so. but they are managed by the compiler, and are always forward branches. Do while loops are also structured.
Look up principle of structured code.
So lets take a simple example:
c=0;
start:
c=c+1; // just some example code
if (c==5) goto end
// code
goto start
end:
c=0;
do
{
c=c+1;
// code
}
while (c !=5);
A do while loop always executes at least once, and the test is done at the bottom of the loop
for (c=0; c!= 5;c++)
{
// code
};
is the same thing, except the test is at the top of the loop, and if it fails the code is not executed.. C starts out at 0, and increments until it hits 5.
do
{
//
// loops for ever unless you do the following
break; // exits the loop because it exits the current scope
}
while(1);
for(i=0;i<10;i++)
{
if (condition == true) // we need to bail from the loop when this is true
{
break; // this will exit the loop
}
if(i==4) // we need to skip iteration 5
{
i=6; // sets i = 6 overriding the loop control
continue; // this will branch to the top of the loop resulting in iteration 5 being skipped.
}
}
// next block of code
in this case break will take you out of the loop to the next block of code, while continue will do an early branch to the test.
your code uses goto, for example, to transfer control to the top of the loop. But it can be re-written to avoid goto's all to gether.
Right now it is 10:30 p.m. and I needed to be in bed long ago.
I will tweak your code and repost it, but right now I am at company headquarters doing a hump week...
Leave a comment:
-
Yes, thanks for catching the errors. I get sloppy sometimes : / I did not keep it from running though.Originally posted by scrungy_doolittle View Postdfbowers:
There is a bug in the code above, in the display bars....
if (b3 > 7)
{
b3 = 7;
}
lcd.write(b3);
if (b4 > 7)
{
b4 = 7;
lcd.write(b4);
}
if (b5 > 7)
{
b5 = 7;
lcd.write(b5);
}
lcd.write(b5);
if (b6 > 7)
{
b6 = 7;
}
lcd.write(b6);
if (b7 > 7)
{
b7 = 7;
}
lcd.write(b7);
In this section of code consider b3 is > 7 it gets set to 0 and then printed outside of the if statement. That is good
if b4 > 7 then you set it to 7 and write it INSIDE of the if. so the only time that B4 will be written is if it is >7.
The same error exists in the b5 >7
Second comment: Goto's are really a no no in C. I have rewritten the code to eliminate them, have not tested it, but while i
was doing so I discovered this bug.
There are a couple of things missing from this code in my opinion.
There should be in addition to the phase, an indication of what you see. is it in the Dime range? howabout a pull tab?
The second feature that would be nice, is a timer running showing how long you have had the unit on and running.
The third feature that would be nice, is a reject range array. If the vdi number is between certain ranges, you just don't show it.
And the user can set those.
make two display screens, one default, the other slectable by holding a button down.
The little 8 character bar graph is pretty cool. On a 16 character display, there is also enough room to display the signal intensity as well, so why not display the average of the
X and r channels.
Screen 1 where VIDKIND is a 7 character place for displaying the "guess", and XX:XX is the time since you turned it on, with a user option to be able to set the time and have it downcount
so you can go hunt for say 45 min and get an indication that it is time to pack up and go back to work
P= phase, and bb is the bar graph
VIDKIND XX:XX
P=xxxx bbbbbbbb
Screen 2 the pinpoint screen when you hold the pinpoint button down (call it a depth screen or whatever.)
Where mm is the depth in inches computed from the intensity averages. and bbbbbbbb is your graph, and X and R are the intensity averages that you computed the slope off of.
X=XXXX R=XXXX mm
P=XXXX bbbbbbbb
Lot's of options available with the Arduino! I have written at least a dozen variations of this program but all contain the basic logic on sampling.
You will have to elaborate on the "goto" issue. It seems to work just fine though.
I grew up learning Basic and Fortran in school, 30-some years ago and just picked it up programming again from the Arduino website.
Also, thanks for the suggestions on enhancements. In reality, I'm still on a steep learning curve.
Don
Leave a comment:
-
hello paku
which vdi (normal geotech vdi?) or arduino
for normal geotech vdi i have a double sided layout which fits direct under the 1602lcd, no cable Needed direct stick on
Leave a comment:
-
dfbowers:
There is a bug in the code above, in the display bars....
if (b3 > 7)
{
b3 = 7;
}
lcd.write(b3);
if (b4 > 7)
{
b4 = 7;
lcd.write(b4);
}
if (b5 > 7)
{
b5 = 7;
lcd.write(b5);
}
lcd.write(b5);
if (b6 > 7)
{
b6 = 7;
}
lcd.write(b6);
if (b7 > 7)
{
b7 = 7;
}
lcd.write(b7);
In this section of code consider b3 is > 7 it gets set to 0 and then printed outside of the if statement. That is good
if b4 > 7 then you set it to 7 and write it INSIDE of the if. so the only time that B4 will be written is if it is >7.
The same error exists in the b5 >7
Second comment: Goto's are really a no no in C. I have rewritten the code to eliminate them, have not tested it, but while i
was doing so I discovered this bug.
There are a couple of things missing from this code in my opinion.
There should be in addition to the phase, an indication of what you see. is it in the Dime range? howabout a pull tab?
The second feature that would be nice, is a timer running showing how long you have had the unit on and running.
The third feature that would be nice, is a reject range array. If the vdi number is between certain ranges, you just don't show it.
And the user can set those.
make two display screens, one default, the other slectable by holding a button down.
The little 8 character bar graph is pretty cool. On a 16 character display, there is also enough room to display the signal intensity as well, so why not display the average of the
X and r channels.
Screen 1 where VIDKIND is a 7 character place for displaying the "guess", and XX:XX is the time since you turned it on, with a user option to be able to set the time and have it downcount
so you can go hunt for say 45 min and get an indication that it is time to pack up and go back to work
P= phase, and bb is the bar graph
VIDKIND XX:XX
P=xxxx bbbbbbbb
Screen 2 the pinpoint screen when you hold the pinpoint button down (call it a depth screen or whatever.)
Where mm is the depth in inches computed from the intensity averages. and bbbbbbbb is your graph, and X and R are the intensity averages that you computed the slope off of.
X=XXXX R=XXXX mm
P=XXXX bbbbbbbb
Leave a comment:
Leave a comment: