I´m pretty new to using Arduino and coding, but I´m trying to run a Nidec 24h motor using an Arduino uno. According to the pinout sheet the motor needs a 20-30kHz PWM and duty cycle 20-100%.
How can I obtain a code to do that for me?
I´m pretty new to using Arduino and coding, but I´m trying to run a Nidec 24h motor using an Arduino uno. According to the pinout sheet the motor needs a 20-30kHz PWM and duty cycle 20-100%.
How can I obtain a code to do that for me?
Would 32KHz be OK? Pretty sure Uno can do that.
Moved to Programming Questions....Please don't post in Uncategorized again.
I´m not sure, its the motor that requires it, but I can try
Which PWM pin on Uno are you using?
Different PWM pins use different internal hardware timers, so its important to know which timer needs to be changed to a higher frequency.
If you are using pins 5 or 6, I would recommend changing to use a different PWM pin. If you change the frequency for those pins, it might affect how delay() and millis() work.
For pins 9 or 10, try adding this to setup():
// Pins D9 and D10 - 31.4 kHz
TCCR1A = 0b00000001; // 8bit
TCCR1B = 0b00000001; // x1 phase correct
For pins 3 or 11
// Pins D3 and D11 - 31.4 kHz
TCCR2B = 0b00000001; // x1
TCCR2A = 0b00000001; // phase correct
for now I use 11, but I have all of them available to change if necessary
It is done by "manipulating the chip's timer registers directly". Interesting to look into; google will give you everything you need.
Alternatively, there are a few different libraries that will do most of the work for you.
TimerOne comes to mind. This example in particular seems appropriate.
Note: as PaulRB was getting at, this library will only work for pins 9 and 10.
Follow up question, because I'm genuinely interested:
After setting TCCR1A / TCCR1B like that, can you adjust the duty with analogWrite(), or do you need to manually change OCR2A / OCR2B?
I think so, but test it. It might be necessary to set TCCR1A / TCCR1B each time after you use analogWrite().
I got the scope out and checked (UNO R3):
Calling analogWrite()
doesn't seem to affect the clock select bits; setting the clock select bits doesn't seem to change the duty set by analogWrite()
. Same behaviour on all pins, on all timers.
Which is neat!
The source of analogWrite() function is freely available, you can make sure that it doesn't affect a timer control registers.
That would have been, uh, a more intellectual way to go about it, yes..
Yes you can.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.