第一课:什么是树莓派
第二课:基于树莓派的10个经典项目
第三课:购买您的第一个树莓派
第四课:如何安装树莓派系统
第五课:树莓派C语言编程手册
第六课:树莓派led控制
第七课:树莓派按键控制
第八课:树莓派PWM(脉宽调制)
第九课:树莓派数码管显示
第十课:树莓派如何读取温湿度传感器(dht11)数据
在学一个知识点的时候,特别是硬件相关的,选一个好的实验方式,是很不错的做法,如果一开始就要去控制一个大的设备(比如云台),机械手臂,智能小车,你可能早早被问题击垮了兴趣。
下面就是我们在学电机的时候,最开始应该做的实验,有两个,一个是驱动一个小风扇,另一个是驱动一个轮子。我建议都做,因为很便宜,每一个实验只需要十几块钱。两个都很好玩。
这个小标题,我都在犹豫要不要写,因为在淘汰里面一搜小风扇电机就可以了,但是我还是觉得给一个截图吧,隔行如隔山,也许有些人就是不知如何动手,但是又极其感兴趣。(不需要驱动板,也就是只要3.6元)
这里说的不用程序让电机转起来,是什么意思呢?
电机其实是不分正负的,只要给它电压(电压里面的电流要足够大),就可以让它转起来,然后电压反接,就是反转。这样的话,我们一开始并不需要写程序,直接用杜邦线把树莓派的电源和地与电机的正负极接起来就可以让小风扇转起来了。
我们最终是要用程序控制的,但是当我们用上面的方法,让小风扇转起来的时候,其实我们心情是激动的。
可能,甚至在想:我也可以做一个小风扇去卖,像这样:
所以,我们有点迫不及待了,想着看能否写程序自由控制,再找人开模,设计外形,市场推广,摆地摊,推广词是:
全手工,连代码都是自己敲的
我们计划的是这样的:
我们不用反转(如果是做鼓风机,就要反转), 电风扇是向外吹的,鼓风机是向里吹的,哈哈哈,鼓风机也可以设计了
靠,购买我专栏可以发财了,没想到,连我写这篇博客都激动起来,不想睡觉,忘记了窗外,全神贯注了…
于是,我们一根线接地,另一根线用IO口控制,如果我这个IO口打高电平就转动,打低电平就不转,如果要加速再研究我讲PWM那一段
https://blog.csdn.net/qq_27320195/article/details/107535749
代码就像这样:
pi@xiajiashan:~/iotek/xw1908/wiringPi$ cat motor_fan.c -n
1 //第一步:包含头文件
2 #include <wiringPi.h>
3 #include <string.h>
4 #include <stdlib.h>
5 #include <stdio.h>
6 #define MOTOR 7 //wiringPi编码模式 7号脚
7 int main()
8 {
9 //第二步:设置树莓派引脚编码模式
10 if(wiringPiSetup()<0)
11 {
12 exit(-1);
13 }
14 //第三步:定义引脚功能
15 pinMode(MOTOR,OUTPUT);//设置引脚为输出
16 //第四步:循环控制
17 char ch=' ';
18 while(1){
19 printf("请输入s启动小风扇,p停止小风扇,q退出:");
20 scanf("%c",&ch);
21 getchar();
22 if(ch=='s')
23 {
24 digitalWrite(MOTOR,1);//
25 }else if(ch=='p'){
26 digitalWrite(MOTOR,0);//
27 }else if(ch=='q'){
28 break;
29 }else{
30 printf("请输入正确的命令\n");
31 }
32 }
33 return 0;
34 }
但是,我们发现,不转,听到嗡嗡响——嗡嗡响一般是因为电流不够,转不起来
为什么呢?
电机不转的原因是:树莓派的IO口输出电流太小,带不动电机。
怎么办呢,为什么我们用3.3v或者5V电源可以,用程序IO口就不行呢?
因为,我们最开始做实验直接用的是电源,电源的英文单词是什么power啊,就是强大的意思啊,同样是3.3V,电源出来的3.3v,里面的电流就很强了,但是我们IO口出来的3.3v(树莓派的IO口不能出来5V),电流就很虚弱,这个怎么理解呢?
就相当于,同样大小的两根水管,一根里面的水流很急,另一根里面的水流很缓慢。
要解决这个问题,我们需要添加一个L298N的驱动板
这个驱动板的作用就是——四两拨千斤,我们只需要给IO口一个小的电流,通过L298N就可以产生很大的电流,电流大就会带来很大的热量,芯片容易发烫,所以,我们看到板子上有一个很大的散热片,这个小版主的面积比手掌小些。
L298N的接线很好懂,首先它可以带两个电机,那么我们这里就用一个,比如你用右边这个(只用一个,左边不接),然后找一个9V或者12V的电源,你可以用一组电池拼接起来,也可以用一个可充电电池组
现象就是,当我们在键盘输入s的时候,启动小风扇,输入p的时候停止转动,速度很快,很给力
但是,我们不能实现反转(也就是不能做鼓风机),因为我们把其中一个脚接到了地,这样这个脚上的电平就一直是低,然后另一个脚给高电平就转,低电平就停,无法实现反转,怎么办呢?
小风扇的加减速是通过pwm来实现的,而树莓派的PWM分硬件PWM和软件PWM功能,硬件PWM只支持第1脚,但是如果有多个引脚就无法实现硬件PWM,我们这里就用软件PWM实现。关于软件PWM和硬件PWM请参考:
https://blog.csdn.net/qq_27320195/article/details/107535749
完整代码:
pi@xiajiashan:~/pi_c_study/pwm$ cat -n my_moto_pwm.c
1 #include <wiringPi.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <string.h>
6 //软件pwm
7 #define m1 28 //wiringPi编码第28脚-----pwm
8 #define m2 29 //wiringPi编码第29脚-----pwm
9 int main()
10 {
11 //第一步:启动树莓派设置wiringPi编码模式
12 if(wiringPiSetup()<0)
13 {
14 perror("启动树莓派失败....");
15 exit(1);//退出进程
16 }
17 //第二步:设置软件PWM功能
18 softPwmCreate(m1,0,100);//设置m1为软件PWM输出功能
19 softPwmCreate(m2,0,100);//设置m2为软件PWM输出功能
20 //第三步:调制PWM
21 int i;
22 char buf[10]="";
23 while(1)
24 {
25 printf("请输入ac加速,dc减速(end退出):");fflush(stdout);
26 fgets(buf,10,stdin);//从键盘获取字符串
27 if(strncmp(buf,"ac",2)==0){
28 for(i=0;i<100;i+=5){
29 softPwmWrite(m1,i);//m2=0,m1从0~100加速
30 usleep(100000);
31 }
32 }
33 if(strncmp(buf,"dc",2)==0){
34 for(i=100;i>0;i-=5){
35 softPwmWrite(m1,i);//m2=0,m1从100~0加速
36 usleep(100000);
37 }
38 }
39 if(strncmp(buf,"end",3)==0) break;
40 memset(buf,0,10);
41 }
42 return 0;
43 }
pi@xiajiashan:~/pi_c_study/pwm$
初学者在学习电机的时候,会被五花八门的名字搞混淆,我们接下来进行一下梳理,仅作概念上的区别。
树莓派装上了电机,就相当于人有了两条腿(一般都是跑的),那装上什么就像两只手呢?
——机械手臂
那装上什么就有了翅膀呢?
——螺旋桨
(突然想到人的手,到底是手还是翅膀,或者说是翅膀退化成手,还是手进化成翅膀?总觉得人是鸟变的,我就是一个这样思想容易走神的人…)
电机——就是用利用电(流)让轴转起来的一种设备
(我竟然很长时间,才让轴这个字,在我脑海里面固定一个场景出来,我觉得这个跟我小时候的生活有关,我们那里很少有板车,所以对"车轱辘"这个词也没有意境,脑神经需要我主动激发它去找看过的一些北方电影和电视剧场景,而不能变成一种潜意识的东西,脑神经不需要激发,好像就存在头皮层,眼睛看到这个词,或者耳朵听到这个词就想到什么)
总体来说:
马达是电(动)机和发动机的统称,不是很精确的说法。
所以,在我们编程领域,电机跟马达是等同的,下面是在淘宝中搜马达的结果
直流电机是依靠直流工作电压运行的电机,广泛应用于收录机、录像机、影碟机、电动剃须刀、电吹风、电子表、玩具等。
功耗低,省电
噪音小
速度低,力矩小
我们上面做的小风扇就是直流电机的经典应用了
交流电机的样子和价格:
淘宝搜索舵机显示商品如下:在价格上交流电机比直流电机要贵
交流电机的工作原理:
交流电机和直流电机的原理相似,只不过是220V的交流电压,功率大,危险。
直流电机的应用行业:
船舶,飞机,工业,大型设备,加工业
步进电机的定义:
步进电机的样子和价格:
淘宝搜索步进电机显示商品如下:
步进电机工作原理:
参考博客:https://www.moons.com.cn/article/cn-techschool-stepmotor-00006-step-motor-basics
简单的脉冲信号控制
步进电机经典应用:
扫描仪(包括现在商务打印机里面的扫描仪)经常有一个动作,就是在真正扫描之前,扫描器要从滑轨一头先快速运动到另一头。其实那是系统在找位置零点。那里面用的是一个步进电机,它驱动扫描器运动。但是开始执行扫描任务时,系统并不知道那个扫描器的确切位置(因为没有反馈装置),所以它只能先驱动扫描器向滑轨另一边走。在滑轨的那个尽头,有一个触碰开关,一旦扫描器碰到它,就会产生电信号。这样系统就知道扫描器走到了尽头,这时候就确定了扫描器的位置,这样就可以开始扫描了。这个步进电机在执行完任务后会关闭(因为功耗不低),因此一旦有震动什么的,扫描器很容易移位。所以下一次步进电机上电以后,要重新执行一遍前面说的那个动作去确定扫描器的位置。
伺服电机的定义:
伺服电机的样子和价格:
淘宝搜索舵机显示商品如下:(很显然伺服电机要贵些,因为精度高)
伺服电机工作原理:
伺服系统(servomechanism)是使物体的位置、方位、状态等输出被控量能够跟随输入目标(或给定值)的任意变化的自动控制系统。伺服主要靠脉冲来定位,基本上可以这样理解,伺服电机接收到1个脉冲,就会旋转1个脉冲对应的角度,从而实现位移。
因为,伺服电机本身具备发出脉冲的功能,所以伺服电机每旋转一个角度,都会发出对应数量的脉冲,这样,和伺服电机接受的脉冲形成了呼应,或者叫闭环,如此一来,系统就会知道发了多少脉冲给伺服电机,同时又收了多少脉冲回来,这样,就能够很精确的控制电机的转动,从而实现精确的定位,可以达到0.001mm。
伺服电机典型应用:
https://www.ymgk.com/article/24539.html
这是一个数控机床的,机械臂,控制进度能够达到0.001mm。
越精密,越快的电机越复杂,我们这里只是给大家在概念上做一个归纳比较,希望对大家有帮助
有帮助就收藏吧
第一课:什么是树莓派
第二课:基于树莓派的10个经典项目
第三课:购买您的第一个树莓派
第四课:如何安装树莓派系统
第五课:树莓派C语言编程手册
第六课:树莓派led控制
第七课:树莓派按键控制
第八课:树莓派PWM(脉宽调制)
第九课:树莓派数码管显示
第十课:树莓派如何读取温湿度传感器(dht11)数据