use*_*697 9 c raspberry-pi pwm
我尝试使用wiringPi库用softPwm控制伺服,但这使得伺服卡顿.因此,我想使用Raspberry Pi(GPIO18)上的硬件PWM引脚和wiringPi库.但我不明白如何将频率设置为50 Hz并将占空比更改为脉冲宽度范围为0.8 ms至2.5 ms.
我在互联网上找到了以下关系(我不知道它是否正确):
pwmFrequency in Hz = 19.2e6 Hz / pwmClock / pwmRange.
Run Code Online (Sandbox Code Playgroud)
我知道时钟除数最大值约为4000,Raspberry Pi PWM时钟的基频为19.2 MHz.所以这给了我~4,8KHz.
我已经有这些设置,应该给我~50Hz使用以下关系:
//put PWM in mark-space mode, which will give you
//the traditional (and easily predictable) PWM
pwmSetMode(PWM_MODE_MS);
//setting ping GPIO 18 as a pwm output
pinMode(18,PWM_OUTPUT);
//Set clock divisor to 4000
pwmSetClock(4000);
pwmSetRange (10) ;
Run Code Online (Sandbox Code Playgroud)
我没有示波器来测试输出信号以检查什么设置改变了什么.这让我很难自己找到它.
长话短说:任何人都可以告诉我如何使用Raspberry Pi上的硬件PWM控制伺服,脉冲宽度为0.8毫秒到2,1毫秒的占空比.
小智 8
我是Pi和Servo的完全新手.但是我让它与wiringPi一起工作.
它在这里说我们正在寻找长度为1ms到2ms的脉冲,每20ms左右.假设这个19.2Mhz的基本时钟确实是正确的,将pwm时钟设置为400并且pwm范围设置为1000,应该给出48Hz或每20.8ms的脉冲.然后将pwm值设置为48应该给你一个1ms长的脉冲,pwm值为96应该给你一个2ms长的脉冲.但您需要将芯片设置为pwm-ms模式.(这里有很多应有的,因为我也没有示波器)
所以要设置它:
然后你可以通过左转到右转
(实际上,伺服我从28到118工作;可能是伺服)(设置顺序似乎很重要;可能是一个bug)
if (wiringPiSetup () == -1) //using wPi pin numbering
exit (1) ;
pinMode(1, PWM_OUTPUT);
pwmSetMode(PWM_MODE_MS);
pwmSetClock(384); //clock at 50kHz (20us tick)
pwmSetRange(1000); //range at 1000 ticks (20ms)
pwmWrite(1, 75); //theretically 50 (1ms) to 100 (2ms) on my servo 30-130 works ok
return 0 ;
Run Code Online (Sandbox Code Playgroud)
确保使用正确的gpio引脚!
型号A和B在引脚18 BCM(1 wPi)上具有一个硬件PWM.
型号A +和B +可以在引脚13和19 BCM(23,24 wPi)上输出第二个硬件pwm
使用 RPIO 来代替怎么样?这是该库的链接: http: //pythonhosted.org/RPIO/index.html
这是 PWM 示例:http://pythonhosted.org/RPIO/pwm_py.html 您也可以直接使用 C 源代码: https: //github.com/metachris/RPIO/tree/master/source/c_pwm
| 归档时间: |
|
| 查看次数: |
24197 次 |
| 最近记录: |