We are always excited when we see [Hamster] post an FPGA project, because it is usually something good. His latest post doesn’t disappoint and shows how he uses the CORDIC algorithm to generate very precise sine and cosine waves in VHDL. CORDIC (Coordinate Rotation Digital Computer; sometimes known as Volder’s algorithm) is a standard way to compute hyperbolic and trigonometric functions. What’s nice is that the algorithm only requires addition, subtraction, bit shifts, and a lookup table with an entry for each bit of precision you want. Of course, if you have addition and negative numbers, you already have subtraction. This is perfect for simple CPUs and FPGAs.
[Hamster] not only has the VHDL code but also provides a C version if you find that easier to read. In either case, the angle is scaled so that 360 degrees is a full 24-bit word to allow the most precision. Although it is common to compute the result in a loop, with the FPGA, you can do all the math in parallel and generate a new sample on each clock cycle.
Continue reading “CORDIC Brings Math To FPGA Designs”
Obviously the wavelength of a laser can’t be measured with a scale as large as that of a carpenter’s tape measure. At least not directly and that’s where a Compact Disc comes in. [Styropyro] uses a CD as a diffraction grating which results in an optical pattern large enough to measure.
A diffraction grating splits a beam of light up into multiple beams whose position is determined by both the wavelength of the light and the properties of the grating. Since we don’t know the properties of the grating (the CD) to start, [Styropyro] uses a green laser as reference. This works for a couple of reasons; the green laser’s properties don’t change with heat and it’s wavelength is already known.
It’s all about the triangles. Well, really it’s all about the math and the math is all about the triangles. For those that don’t rock out on special characters [Styropyro] does a great job of not only explaining what each symbol stands for, but applying it (on camera in video below) to the control experiment. Measure the sides of the triangle, then use simple trigonometry to determine the slit distance of the CD. This was the one missing datum that he turns around and uses to measure and determine his unknown laser wavelength.
Continue reading “Measure Laser Wavelength With A CD And A Tape Measure”
If you’re familiar with using a compass (the tool that points to magnetic north, not the one that makes circles) the concept of holding the device level makes sense. It must be level for the needle to balance and rotate freely. You just use your eyes to make sure you’re holding the thing right. Now think of a digital compass. They work by measuring the pull of a magnetic field, and have no visual method of showing whether they’re level or not. To ensure accurate readings you might use an accelerometer to compensate for a tilted magnetometer.
The process involves taking measurements from both an accelerometer and a magnetometer, then performing calculations with that data to get a true reading. Luckily the equations have been figured out for us and we don’t need to get too deep into trigonometry. You will, however, need to use sine, cosine, and arctangent in your calculations. These should be available in your programming language of choice. Arduino (used here) makes use of the avr-libc math library to perform the calculations.