Chafik Posted April 1, 2016 Posted April 1, 2016 Hi, I am currently using a PowerPMAC to control an amplifier with pulse and direction signals. My amplifier allows a maximum input frequency for pulses of 800kHz. I set Gate3[0].PfmClockDiv to 5 in order to have a PfmClock of 3.125MHz. I also set Gate3[0].Chan[0].PfmWidth to 5, which makes my pulses 5/3.125 = 1.6µs. The problem is I don't know what value to set for Motor[1].MaxDac in order to limit my pulses output to 800kHz. What I did for now is observe pulses on an oscilloscope and adjust MaxDac value so that "#1 out 100" command gives me 800Khz, #1 out 50" command gives me 400Khz etc... I found that Motor[1].MaxDac = 10 000 fits what I want but I would like to understand where this value comes from. Best Regards, Chafik
curtwilson Posted April 23, 2016 Posted April 23, 2016 In the SW Reference Manual, under the description for the output register Gate3.Chan[j].Pfm, it gives the formula for the output frequency as: Fout = (Gate3.Chan[j].Pfm / 4,294,483,648) * Fpfmclk This treats the Pfm element as a full 32-bit register. The servo algorithm only considers the high 16 bits to be integer values, so the effective formula becomes: Fout = (ServoCmd / 65,536) * Fpfmclk With your PfmClock frequency of 3.125 MHz (3125 kHz), a servo command of 10,000 would produce: Fout = (10,000 / 65,536) * 3125 = 476.9 kHz This is exactly what my system produces in this setting. Note that a pulse width of 1.6 usec cannot support a frequency of 800 kHz, as it would always saturate by 667 kHz. I would set the PfmWidth to 2 for a 0.64 usec pulse width, which would be about 50% duty cycle at 800 kHz.
Recommended Posts