首先需要wiringPi,我自己的系统有,如果你没有,自行下载,很简单,可以看看 /usr/include/wiringPi.h,有的话就是OK,
其次介绍几个pwm相关的主要设置函数
1:pwmSetClock(int divisor),设置pwm分频系数,默认是32,pwm的时钟输入是19.2MHz,因此默认是600KHz
2:pwmSetRange(unsigned int range),设置pwm输出周期,默认是1024,不调用的话周期 freq = 600KHz / range,大约为600hz,精确的话应该是585.9hz
3:pwmSetMode(int mode)设置pwm输出模式,此处我们设置为PWM_MODE_MS
4:pwmWrite() 设置占空比,范围是0~range,比如默认range=1024,这里取512就是50%的占空比
从上面我们可以算出来pwm频率,也就是得出来周期,也就是一个脉冲的时间,一个脉冲走一个步进角,步进角电机上有,比如我的配置全是默认配置,range=1024,系数32,步进角是1.8,那我转一圈是200个步进角,也就是200个周期。我的pwm频率是600KHz/1024 ,在乘以200,细分数是100,在乘以100,大概转一圈是34秒,下面给出转速公式
步进电机转速=频率60/200x
单位是 转/分 ,x是细分数,如果你想精确控制转多少圈或者多少度的话实跟上述文字叙述差不多,简单理解就是在细分为1时,一个脉冲一个步进脚,细分为N时就是N个脉冲一个步进脚,一个脉冲就是一个PWM周期,周期就是频率的倒数,这样就很容易精确控制了,只要控制好PWM的输出时间,就能算出来到底走了多少个步进脚,如果你想控制转速的话你可以用公式计算转速,总的来说原理还是很简单的,下面放出树莓派的代码
#include #define pwmpin 1
#define mode PWM_MODE_MS
int main(void)
{
wiringPiSetup();
pinMode(pwmpin,PWM_OUTPUT);
pwmSetMode(mode);
pwmWrite(pwmpin,512);
delay(34000);
pwmWrite(pwmpin,0);
return 0;
}
编译是加上 -lwiringPi,注意我这里是转一圈,想要更精确的话可以用定时器,可以改频率凑整数方便计算,另外我这里是硬件PWM,如果想软件PWM的话可以任意选择gpio,但是需要一个软件库softPwm.h,具体稍有不同