查看: 488|回复: 9

树莓派多旋翼无人机制作:航模电池与电机驱动

[复制链接]

38

主题

668

帖子

1343

积分

金牌飞友

Rank: 6Rank: 6

积分
1343
飞币
666
注册时间
2017-9-5
发表于 2022-10-28 08:47:07 | 显示全部楼层 |阅读模式
一、电源与降压模块
       细心的你可能会发现树莓派、光耦隔离器、电调、电机都有了,可还是没有电源。没电当然不行了,我们的四轴动力靠的就是电池。对于锂电池的选择也是多种多样的,但是我们将在稍后说明。现在我们要说的是树莓派的供电。我们还要使用一个DCDC降压模块来对锂电池的电源稳压:

树莓派多旋翼无人机制作:航模电池与电机驱动-1.jpg

由航模电池的电源引出5条线,其中4条为4个电调供电,另外一条接DCDC降压模块的IN端,其OUT端为树莓派供电。接入时暂时不要接树莓派,先用万用表测量OUT端电压, 用螺丝刀旋转金属旋钮逆时针为减小,顺时针为增大(刚开始旋转时电压可能不变,要逆时针旋转七到八圈,电压才会发生变化)并调整到5V,接入时要注意正负极不能接反。最后再接入树莓派的5v和GND。         接下来,看看我们的四轴飞机器供电电池,通常我们使用3节锂电池或4节锂电池为四轴供电,也有使用更多节的比如6节、8节或更多。电源中有几节锂电池,我们就称这样的电源为几S。例如3S表示有3节锂电池,4S有4节锂电池等等。每一节锂电池的电压为3.7v,3S的电压就是11.1v;4S的电压就是14.8;6S的电压就是22.2v。这样的锂电池电源,我们也通常称作“航模电池”。
        另外,对于航模电池还有两个重要的参数:电量和放电倍率。电量就是我们所常用的3000mah、4000mah、5300mah或10000mah等等。它表示了电源能够存储的电能的多少。而放电倍率通常是有15C、20C、25C或30C等等。它的意思是说放电的速率。例如:我们手机有一块10000mah 20C的电池。
        1、按每小时10000毫安的放电速度持续放电1个小时;
        2、以5倍速度放电,即以每小时50000毫安的放电速度持续放电12分钟(60 / 5);
        3、以10倍速度放电,即以每小时100000毫安的放电速度持续放电6分钟(60 / 10);
        4、以20倍速度放电,即以每小时200000毫安的放电速度持续放电3分钟(60 / 20)。
        至于在实际飞行过程中它按多少的倍率放电,主要取决于电调和电机的功率。关于这些功率计算和放电时间的计算不是我们的讨论范畴(如果你有兴趣可以自己查阅相关资料)。我们推荐使用2200mah 3S航模电池:

树莓派多旋翼无人机制作:航模电池与电机驱动-2.jpg

       值得一提的是,不是电池容量越大就越适合四轴,电池的容量大,重量也就大,四轴飞行时的承重也就大,需要的负载也就大。如果你的电池非常重,那四轴能不能飞起来都是个问题,所以还是选择一款适合你的航模电池。

二、无刷电机驱动
       接下来我们就来一起编写无刷电机的驱动程序,在前面章节中我们已经学习了如何通过树莓派产生PWM信号,而在本节中我们就来实际操作一下,将电机接入电调,将电调的信号线接入树莓派的GPIO引脚上,通过航模电池为电调和树莓派(加入DCDC降压模块输出5V给树莓派)供电,在这里我们使用wiringPi的1号引脚,接线图如下:

树莓派多旋翼无人机制作:航模电池与电机驱动-3.jpg

       在接线过程中有一处需要注意,电调中的信号线有3根,颜色为红、黑、白。红色为信号电源,黒色为地,白色为PWM信号线,我们只需要接电调的信号线(白色)至树莓派的WiringPi 1号引脚,并将地线(黑色)接入到树莓派的GND引脚即可,电源(红色)不需要接入树莓派。如果你采用了光耦隔离器的话同样只需要接WiringPi 1和GND即可。
       关于无刷电调控制电机时,有两个地方需要关注:
1.电调最大行程校准。电调在出厂后如果没有做最大行程校准,我们就需要对其做校准。这样可以保证我们的四轴中4个电机速基本一致,从最低速度到最大速度的基本相同。做电调的最大行程校准的步骤如下:

  • 按上图接线,注意不要为电调上电(暂时不为电调接入电源)。
  • 使用树莓派生成最大PWM占空比值,即产生100%占空比信号,此时高电平持续2ms,低电平0ms,注意要有高低电平变化,如果电平一直是高则此PWM信号无效。
  • 为电调上电,此时电机会发出两声短促的“嘀”声,在3秒之内将PWM信号由100%变为0%,随后电机会发出一声长鸣“嘀”。此时电调最大行程校准完成。
2.电调信号初始化。电调信号初始化相对来说比较简单。为了保证使用安全,电调在上电后是处于保护状态的,此时如果直接为电调发送100%的信号电机是不会转动的。在使用电调之前,首先要对其发送超过3秒的0%的PWM信号,电调才会认为使用者初始化了电调,随后才可以根据PWM信号值来调整电机的转速。电调初始化的过程如下:

  • 按上图接线,并为电调上电,此时电调先会产生一次“do ra mi”,随后每两秒会发出一声短促的“嘀”声,表示未收到任何PWM信号。
  • 使用树莓派生成最小的PWM占空比值,即产生0%占空比信号,持续3秒以上,此时电调会产生3短1长的“嘀”声(3短表示是3S锂电池),此时电调初始化完成。
       最后我们来编写一个可以对GPIO引脚产生PWM信号的程序:
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <wiringPi.h>
#include <wiringSerial.h>

int port = 1;
int run = 1;
int speed = 0;

void motor_run()
{
        while (run)
        {
                digitalWrite(port, HIGH);
                usleep(1000 + speed);
                digitalWrite(port, LOW);
                usleep(1000 - speed);
        }
}

void set_speed()
{
        while (run)
        {
                printf("SPEED = %4d, Enter new speed:\n", speed);
                int tmp = 0;
                scanf("%d", &tmp);
                if (tmp >= 0 && tmp <= 1000)
                {
                        speed = tmp;
                        continue;
                }
                speed = 0;
                usleep(10 * 1000);
                run = 0;
        }
}

int main(int argc, char *argv[])
{
        wiringPiSetup();
        pinMode(port, OUTPUT);

        pthread_t p_run;
        pthread_t p_set;
        pthread_create(&p_run, (const pthread_attr_t*) NULL, (void* (*)(void*)) &motor_run, NULL);
        pthread_create(&p_set, (const pthread_attr_t*) NULL, (void* (*)(void*)) &set_speed, NULL);
        pthread_join(p_set, NULL);
        pthread_join(p_run, NULL);

        return 0;
}
注意,这里我们产生的PMW信号是一个0~1000的数值,其实就是千分比0‰~1000‰。这样我们就可以用最简单的0~1000来表示一个比较精确的PWM信号,如果使用百分比来表示的话我们就需要使用浮点数来表示0%、0.10%、12.8%、93.5%这样的数值,而使用千分比则只需要用整型数值0、10、128、935即可表示。
       程序中我们创建了两个线程,第一个线程motor_run用于产生PWM信号,第二个线程set_speed用于接收用户输入的值从而修改PWM的值。
SPEED = 0, Enter new speed: 100
SPEED = 100, Enter new speed: 200
SPEED = 200, Enter new speed: 400
SPEED = 400, Enter new speed: 1000
SPEED = 1000, Enter new speed: 0
SPEED = 0, Enter new speed:
       到这里,我们的电机驱动部分就完成了,程序非常简单,在我们使用四轴飞控程序时只需要产生4个线程分别对4个GPIO引脚分别产生4路PWM。

        注意,树莓派供电模块由原来的7805稳压器修改为DC-DC电源模块,使用DC-DC电源模块效果更好,发热更小,支持的电压范围更大。
        使用DC-DC时,输入端接入充满电的航模电池,输出端先不要接线,而需要一边调整DC-DC的旋钮,一边用万用表测量OUT端电压,直到OUT端电压为5V时停止。

欢迎关注公众号:编译外星人

21

主题

616

帖子

1220

积分

金牌飞友

Rank: 6Rank: 6

积分
1220
飞币
612
注册时间
2017-9-14
发表于 2022-10-28 08:52:54 | 显示全部楼层
应该是升压模块吧

18

主题

595

帖子

1168

积分

金牌飞友

Rank: 6Rank: 6

积分
1168
飞币
571
注册时间
2017-9-14
发表于 2022-10-28 09:03:47 | 显示全部楼层
油门行程校准用接收机不是更好?

224

主题

243

帖子

691

积分

高级飞友

Rank: 4

积分
691
飞币
446
注册时间
2017-7-6
发表于 2022-10-28 09:09:42 | 显示全部楼层
请问,现在一般的飞行器能突破30分钟续航吗?

22

主题

651

帖子

1276

积分

金牌飞友

Rank: 6Rank: 6

积分
1276
飞币
616
注册时间
2017-8-30
发表于 2022-10-28 09:20:31 | 显示全部楼层
不能

22

主题

707

帖子

1396

积分

金牌飞友

Rank: 6Rank: 6

积分
1396
飞币
687
注册时间
2017-8-13
发表于 2022-10-28 09:35:27 | 显示全部楼层
请问,自动避障,还有自动转向,自动升降是如何实现的?

21

主题

628

帖子

1228

积分

金牌飞友

Rank: 6Rank: 6

积分
1228
飞币
598
注册时间
2017-8-17
发表于 2022-10-28 09:42:58 | 显示全部楼层
这30分钟航限是怎么算出来的

216

主题

250

帖子

683

积分

高级飞友

Rank: 4

积分
683
飞币
431
注册时间
2017-7-26
发表于 2022-10-28 09:51:57 | 显示全部楼层
电池效费比

21

主题

675

帖子

1331

积分

金牌飞友

Rank: 6Rank: 6

积分
1331
飞币
647
注册时间
2017-9-28
发表于 2022-10-28 10:05:17 | 显示全部楼层
找不到这个公众号了

239

主题

268

帖子

746

积分

高级飞友

Rank: 4

积分
746
飞币
476
注册时间
2017-8-2
发表于 2022-10-28 10:14:59 | 显示全部楼层
用的什么型号的降压模块?
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表