树莓派3b+ 舵机驱动开发

Posted winhaus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派3b+ 舵机驱动开发相关的知识,希望对你有一定的参考价值。

设备:树莓派 3b+
操作系统:Raspbian
远程访问:SSH
舵机型号:MG90S
使用语言:C,使用wiringPi库。

遇到的难点:
1. PWM频率计算
2. 命令行参数传入C代码时,char向int转换

舵机控制主要用到的函数介绍:

wiringPiSetup();

pinMode(1,PWM_OUTPUT);	//only wiringPi pin 1 (BCM_GPIO 18) supports PWM

pwmSetMode(PWM_MODE_MS); // Set to mode: mark:space

pwmSetClock(192); //PWM clock: 19.2MHz, divisor 192:100KHz

pwmSetRange(2000); //period 20ms
	
pwmWrite(1,100);//go default position

  

舵机控制原理:
周期为20ms,占空比:1ms高电平(最小角度) - 2ms高电平(最大角度)。


从命令行传入的参数为字符串,需转为int类型,才能设置PWM。网上没有找到方便合适的转换函数,故自己编写int char2int(char *argv)。

本程序支持舵机从0 - 90度循环转动。(bash:sudo ./pwm)
本程序支持舵机设置固定角度。(bash:sudo ./pwm ##)
如: sudo ./pwm 90

#include "wiringPi.h"
#include "stdio.h"

void pwm_init();

int char2int(char *argv);

int main(int argc, char * argv[])
{

	int i;
	int Mode_inc;

	pwm_init();
    delay(1000);

	i = 100;
	Mode_inc = 1;

	if(argc == 1)
	{
		while(1)
		{
			if((i < 200) && (Mode_inc == 1))
			{
				pwmWrite(1,i);
			    delay(50);
			    i = i+1;
	        }
			else
			{
				Mode_inc = 0;
			}
		    
			if(Mode_inc == 0)
	         {
			    pwmWrite(1,i);
			    delay(50);
			    i = i-1;
			    if(i < 101)
				{
					Mode_inc = 1;
			    }
	        }

	    }
	}

	if(argc == 2)
	{
        i = char2int(argv[1]);
		printf("%d
", i);	
		pwmWrite(1,i);
	}


	
}

void pwm_init()
{
	wiringPiSetup();

	pinMode(1,PWM_OUTPUT);	//only wiringPi pin 1 (BCM_GPIO 18) supports PWM

	pwmSetMode(PWM_MODE_MS); // Set to mode: mark:space

    pwmSetClock(192); //PWM clock: 19.2MHz, divisor 192:100KHz

	pwmSetRange(2000); //period 20ms
	
    pwmWrite(1,100);//go default position
}

int char2int(char *argv)
{
	char * a;
	char * b;
	int cnt, cnt_tmp, i;
	
	a = argv;
    b = argv;
	cnt = 0;
	i = 0;
	
	while(*a != ‘‘)
	{
		a++;
		cnt++;	
	}
	//printf("%d
",cnt);
	
	for(int j = cnt; j > 0; j--)
	{
		cnt_tmp = 1;
		
	    for(int k = 0;k < (j-1); k++)
		{
			cnt_tmp = 10 * cnt_tmp;
		}
			 
		i = i + (*b - ‘0‘) * cnt_tmp;
		b++;	
	}

	
	return i;
}

  

  

以上是关于树莓派3b+ 舵机驱动开发的主要内容,如果未能解决你的问题,请参考以下文章

《树莓派项目实战》第十二节 使用PCA9685驱动板控制多个舵机

python代码实现树莓派3b+驱动步进电机

树莓派3B+使用0.96 oled 屏幕(附完整可运行代码)

树莓派控制mg995舵机如何控制

《树莓派项目实战》第十一节 学会使用舵机

《树莓派项目实战》第十一节 学会使用舵机