linux控制pwm输出个数,树莓派精确控制pwm输出,控制步进电机,记录下我磕磕碰碰的三个月找工作经历

56 阅读3分钟

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

首先需要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秒,下面给出转速公式

c675e43415e5bfca02c723afade518fb.png                                           步进电机转速=频率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);

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取