新手如何使用STM32两个月内做出自己的空心杯小四轴(4)
(接上一篇)
前面说到那个板子问题很多,那就只好自己画了,把前面提到的原理图中所有错误都修改了。修改之后的电路图如下:
但是同时,也考虑到这个板子的形状有问题。四轴的原理是靠四个空心杯带动桨叶,桨叶转动的时候把风往下排,同时也就给自己一个向上的反冲力。而这个四轴板子,大家可以再次看看:
它的问题在哪儿呢?
安装电机的位置的圆盘太大了,导致桨叶把风排下来之后都撞击在这个圆盘上了,这就相当于对自己在做工。好比你抱着自己的腿想把自己抱起来,但是那是不可能的,因为你做的功都是对一个系统做功,而不是在克服地球引力做功。
所以需要将这个圆盘的尺寸减小。
同时,考虑到720空心杯带动55mm的桨叶,可能四个桨叶同时转动,并不能提供太大的升力,而我想要做一个比较暴力的四轴,那就需要使用稍微大点的桨叶,这里我选择了75mm的桨叶。
75mm桨叶的一半是37.5mm,那么两个电机的距离就应该是2*37.5mm+余量,这个余量就是桨叶转起来的时候所形成的圆面的边缘的距离,如果没有这个距离显然两个桨叶可能会撞击,所以我选择了留10mm的余量。那么最终确定下来两个电机的轴心距就是85mm。
根据上面的原理图和对板子形状的构思,布局出来的板子如下:
有人问我这个板子形状怎么画的,有两种画法:
1、直接使用AD,在板子的KEEPOUT LAYER 绘制板子形状,然后选中画好的板子外形的线,点【设计】--【板子形状】--【按照选择对象定义】。就可以做成上面这样的图。里面要注意的细节是,线条之间要平滑过渡,整个外形要由一笔画成。
2、使用CAD绘制板子外形轮廓,然后导入到AD的pcb文件中,之后选中画好的板子外形的线,点【设计】--【板子形状】--【按照选择对象定义】。也可以生成对应的图。里面要注意的细节是导入的时候要选择好尺寸对应关系。
两种方法各有优劣。如果平时不用CAD,而且也不想为了一个板子外形就安装一个CAD的话,那就直接使用AD去画。只不过AD里面提供的画图软件并没有那么好用,尤其是绘制直线和圆平滑过渡的地方。如果没有很好的尺规作图的功底的话。操作起来很困难。如果自己懂一点CAD或者想借机学习一下CAD绘图,那就可以使用CAD去画这个板子的外形,优点是做图及其方便,大概十分钟就可以绘制好这个板子的外形, 而且是不用左手键的前提,如果用左手键,可能几分钟就画好了。
布好线之后检查无误就可以出加工文件送PCB厂加工制作了。整个操作过程有时间会在摩尔吧开一个直播来和大家共同讨论学习。目前我所有的课程与视频如下:
1、18G四轴散件焊接调试视频百度云链接: 密码:unx2
2、3G手柄散件焊接调试教程百度云链接: 密码:68vh
3、四轴相关技术讨论QQ群1:419203944,群2:604047647,群3:560572155
4、美拍四轴焊接直播id:1097057461
5、四轴PCB板及成品官方唯一淘宝店地址:
6、STM32四轴课程系列直播-第一讲(原理图讲解):
7、STM32四轴课程系列直播-第二讲(四轴软件知识体系梳理):
8、STM32四轴课程系列直播-第三讲(软件入门一):
9、STM32四轴课程系列直播-第四讲(软件入门二):
10、STM32四轴课程系列直播-第五讲(软件入门三):
11、STM32四轴课程系列直播-第六讲(软件进阶一I2C协议,数据通讯时序讲解):
12、STM32四轴课程系列直播-第七讲(软件进阶二I2C协议软件实现):
13、STM32四轴课程系列直播-第八讲(中断系统):
14、STM32四轴课程系列直播-第九讲(MPU6050原理讲解):
15、STM32四轴课程系列直播-第十讲(MPU6050原始数据获取):
16、STM32四轴课程系列直播-第十一讲(MPU6050 官方DMP库的移植):
17、STM32四轴课程系列直播-第十二讲(MPU6050获取姿态角的代码实现):
18、STM32四轴课程系列直播-第十三讲(MPU6050姿态角的使用):
交付打样之后就需要等了。
大概过了一个世纪,自己的板子终于回来了。
撸起袖子就焊接,整个焊接好了,然后上电池,漂亮,电源指示灯亮了。
然后简单的写了点灯的代码来点LED灯:
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
复制代码
<blockquote>#include "led.h"
复制代码
也没有问题,灯按照1S闪烁1次的频率在闪烁。
那就驱动电机呗:
//电机驱动定时器
void TIM1_Config(void){
TIM_TimeBaseInitTypeDef TIM_timeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
TIM_timeBaseInitStructure.TIM_ClockDivision = 0;
TIM_timeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_timeBaseInitStructure.TIM_Period = SystemCoreClock/36000-1;
TIM_timeBaseInitStructure.TIM_Prescaler = 0;
TIM_timeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1,&TIM_timeBaseInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_Pulse = pulse;
TIM_OC1Init(TIM1,&TIM_OCInitStructure);
TIM_OC2Init(TIM1,&TIM_OCInitStructure);
TIM_OC3Init(TIM1,&TIM_OCInitStructure);
TIM_OC4Init(TIM1,&TIM_OCInitStructure);
TIM_ARRPreloadConfig(TIM1,ENABLE);
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_Cmd(TIM1,ENABLE);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
复制代码
#include "tim.h"
volatile u16 pulse;
int main()
{
u8 i;
pulse = 0;
TIM1_Config();
for(i=0;i<170;i++)
{
pulse+=10;
复制代码
这一测试完犊子了,什么情况呢,电机没转吗?
不是,电机也转起来了,但是电机转起来大概三四秒,刚刚速度比较快了就会停下,然后又重新开始转,就这样周而复始。
但是很明显程序不是这样写的啊,究竟是出什么问题了?电池都是刚刚充满电的啊,大概有4.2V左右。点灯的时候也没看出有啥问题啊,所以单片机应该是没问题的啊。
这个问题真是把我困扰了,于是我开始苦苦思索。。大家也开动自己聪明的小脑瓜想想这是什么原因吧。当然我群里的人大概都知道是什么情况导致的,因为我曾今不止一次在群里说过这个问题。
这个蹊跷的事情,我们下次更新的时候继续探索。希望在更新前能看到大家的答案。
想看大家在STM32社区盖楼讨论,请点击左下角阅读原文,或者直接电脑浏览器搜索打开STM32社区即可看到。