你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

新手如何使用STM32两个月内做出自己的空心杯小四轴--小马哥  

[复制链接]
jiuwangbujiu 发布时间:2017-3-24 08:37
阅读主题, 点击返回1楼
1 收藏 20 评论127 发布时间:2017-3-24 08:37
127个回答
jiuwangbujiu 回答时间:2017-3-27 07:07:09
         前面说到那个板子问题很多,那就只好自己画了,把前面提到的原理图中所有错误都修改了。修改之后的电路图如下:
QQ图片20170327063013.png
QQ图片20170327063039.png
QQ图片20170327063104.png
QQ图片20170327063118.png

        但是同时,也考虑到这个板子的形状有问题。四轴的原理是靠四个空心杯带动桨叶,桨叶转动的时候把风往下排,同时也就给自己一个向上的反冲力。而这个四轴板子,大家可以再次看看:
IMG_6114.JPG
        它的问题在哪儿呢?

        安装电机的位置的圆盘太大了,导致桨叶把风排下来之后都撞击在这个圆盘上了,这就相当于对自己在做工。好比你抱着自己的腿想把自己抱起来,但是那是不可能的,因为你做的功都是对一个系统做功,而不是在克服地球引力做功。

        所以需要将这个圆盘的尺寸减小。

        同时,考虑到720空心杯带动55mm的桨叶,可能四个桨叶同时转动,并不能提供太大的升力,而我想要做一个比较暴力的四轴,那就需要使用稍微大点的桨叶,这里我选择了75mm的桨叶。

        75mm桨叶的一半是37.5mm,那么两个电机的距离就应该是2*37.5mm+余量,这个余量就是桨叶转起来的时候所形成的圆面的边缘的距离,如果没有这个距离显然两个桨叶可能会撞击,所以我选择了留10mm的余量。那么最终确定下来两个电机的轴心距就是85mm。

        根据上面的原理图和对板子形状的构思,布局出来的板子如下:
QQ图片20170327063426.png

         有人问我这个板子形状怎么画的,有两种画法:
         1、直接使用AD,在板子的KEEPOUT LAYER 绘制板子形状,然后选中画好的板子外形的线,点【设计】--【板子形状】--【按照选择对象定义】。就可以做成上面这样的图。里面要注意的细节是,线条之间要平滑过渡,整个外形要由一笔画成。
         2、使用CAD绘制板子外形轮廓,然后导入到AD的pcb文件中,之后选中画好的板子外形的线,点【设计】--【板子形状】--【按照选择对象定义】。也可以生成对应的图。里面要注意的细节是导入的时候要选择好尺寸对应关系。

         两种方法各有优劣。如果平时不用CAD,而且也不想为了一个板子外形就安装一个CAD的话,那就直接使用AD去画。只不过AD里面提供的画图软件并没有那么好用,尤其是绘制直线和圆平滑过渡的地方。如果没有很好的尺规作图的功底的话。操作起来很困难。如果自己懂一点CAD或者想借机学习一下CAD绘图,那就可以使用CAD去画这个板子的外形,优点是做图及其方便,大概十分钟就可以绘制好这个板子的外形, 而且是不用左手键的前提,如果用左手键,可能几分钟就画好了。

         布好线之后检查无误就可以出加工文件送PCB厂加工制作了。整个操作过程有时间会在摩尔吧开一个直播来和大家共同讨论学习。目前我所有的课程与视频如下:

1、18G四轴散件焊接调试视频百度云链接:https://pan.baidu.com/s/1pLPiIAR 密码:unx2
2、3G手柄散件焊接调试教程百度云链接:https://pan.baidu.com/s/1mhZOH6K 密码:68vh
3、四轴相关技术讨论QQ群1:419203944,群2:604047647,群3:560572155
4、美拍四轴焊接直播id:1097057461
5、四轴PCB板及成品官方唯一淘宝店地址:http://shop113218572.taobao.com/ ... 97079397.228.scEVsB
6、STM32四轴课程系列直播-第一讲(原理图讲解):https://www.moore8.com/courses/1308
7、STM32四轴课程系列直播-第二讲(四轴软件知识体系梳理):https://www.moore8.com/courses/1338
8、STM32四轴课程系列直播-第三讲(软件入门一):https://www.moore8.com/courses/1336
9、STM32四轴课程系列直播-第四讲(软件入门二):https://www.moore8.com/courses/1337
10、STM32四轴课程系列直播-第五讲(软件入门三):https://www.moore8.com/courses/1339
11、STM32四轴课程系列直播-第六讲(软件进阶一I2C协议,数据通讯时序讲解):https://www.moore8.com/courses/1341
12、STM32四轴课程系列直播-第七讲(软件进阶二I2C协议软件实现):https://www.moore8.com/courses/1343
13、STM32四轴课程系列直播-第八讲(中断系统):https://www.moore8.com/courses/1365
14、STM32四轴课程系列直播-第九讲(MPU6050原理讲解):https://www.moore8.com/courses/1385
15、STM32四轴课程系列直播-第十讲(MPU6050原始数据获取):https://www.moore8.com/courses/1404
16、STM32四轴课程系列直播-第十一讲(MPU6050 官方DMP库的移植):https://www.moore8.com/courses/1405
17、STM32四轴课程系列直播-第十二讲(MPU6050获取姿态角的代码实现):https://www.moore8.com/courses/1406
18、STM32四轴课程系列直播-第十三讲(MPU6050姿态角的使用):https://www.moore8.com/courses/1413


         交付打样之后就需要等了。

         大概过了一个世纪,自己的板子终于回来了。

         撸起袖子就焊接,整个焊接好了,然后上电池,漂亮,电源指示灯亮了。

         然后简单的写了点灯的代码来点LED灯:
  1. void LED_Init(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStruct;
  4.        
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  6.        
  7.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
  8.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  9.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  10.         GPIO_Init(GPIOA, &GPIO_InitStruct);
  11.        
  12.         GPIO_SetBits(GPIOA, GPIO_Pin_1);
  13. }
复制代码
  1. <blockquote>#include "led.h"
复制代码
   
        也没有问题,灯按照1S闪烁1次的频率在闪烁。

       那就驱动电机呗:
  1. //电机驱动定时器
  2. void TIM1_Config(void){
  3.        
  4.         TIM_TimeBaseInitTypeDef TIM_timeBaseInitStructure;
  5.         TIM_OCInitTypeDef TIM_OCInitStructure;
  6.         GPIO_InitTypeDef GPIO_InitStruct;

  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  9.        
  10.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
  11.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  12.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  13.         GPIO_Init(GPIOA,&GPIO_InitStruct);
  14.        

  15.         TIM_timeBaseInitStructure.TIM_ClockDivision = 0;
  16.         TIM_timeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  17.         TIM_timeBaseInitStructure.TIM_Period = SystemCoreClock/36000-1;
  18.         TIM_timeBaseInitStructure.TIM_Prescaler = 0;
  19.         TIM_timeBaseInitStructure.TIM_RepetitionCounter = 0;
  20.         TIM_TimeBaseInit(TIM1,&TIM_timeBaseInitStructure);
  21.        

  22.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  23.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  24.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  25.         TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
  26.         TIM_OCInitStructure.TIM_Pulse = pulse;
  27.         TIM_OC1Init(TIM1,&TIM_OCInitStructure);
  28.         TIM_OC2Init(TIM1,&TIM_OCInitStructure);
  29.         TIM_OC3Init(TIM1,&TIM_OCInitStructure);
  30.         TIM_OC4Init(TIM1,&TIM_OCInitStructure);


  31.         TIM_ARRPreloadConfig(TIM1,ENABLE);
  32.        
  33.         TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
  34.         TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
  35.         TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);
  36.         TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable);
  37.        
  38.         TIM_Cmd(TIM1,ENABLE);
  39.         TIM_CtrlPWMOutputs(TIM1,ENABLE);
  40.        
  41. }
复制代码
  1. #include "tim.h"

  2. volatile u16 pulse;

  3. int main()
  4. {
  5.              u8 i;
  6.              pulse = 0;
  7.              TIM1_Config();
  8.              for(i=0;i<170;i++)
  9.              {
  10.                           pulse+=10;
复制代码

        这一测试完犊子了,什么情况呢,电机没转吗?

        不是,电机也转起来了,但是电机转起来大概三四秒,刚刚速度比较快了就会停下,然后又重新开始转,就这样周而复始。

        但是很明显程序不是这样写的啊,究竟是出什么问题了?电池都是刚刚充满电的啊,大概有4.2V左右。点灯的时候也没看出有啥问题啊,所以单片机应该是没问题的啊。

        这个问题真是把我困扰了,于是我开始苦苦思索。。大家也开动自己聪明的小脑瓜想想这是什么原因吧。当然我群里的人大概都知道是什么情况导致的,因为我曾今不止一次在群里说过这个问题。

        这个蹊跷的事情,我们下次更新的时候继续探索。希望在更新前能看到大家的答案。







jiuwangbujiu 回答时间:2017-3-27 07:08:06
爆炸头脑 回答时间:2017-3-27 07:16:46
支持小马哥 ^
jiuwangbujiu 回答时间:2017-3-27 07:49:07

谢谢
adarly 回答时间:2017-3-27 08:16:27
是for循环170次就结束了吗
沉灵静语 回答时间:2017-3-27 08:34:21
我想请教一下,我自己弄个个小四轴,升压和降压都正常可是单片机不工作,给单片供电3.27v,为什么会不工作,求指教
rdzpy 回答时间:2017-3-27 08:53:21
我知道啥问题,但我不说
另外,一直没有搞明白AGND和GND的区别,在我看来都一样,小马哥能不能讲讲?(非科班出身是不是很麻烦
沉灵静语 回答时间:2017-3-27 08:54:40
rdzpy 发表于 2017-3-27 08:53
我知道啥问题,但我不说
另外,一直没有搞明白AGND和GND的区别,在我看来都一样,小马哥能不能讲讲?( ...

指点一下,大神
rdzpy 回答时间:2017-3-27 09:05:32

尴尬了。。。你真误会了,我是菜鸟一枚,我也是来问问题的
jiuwangbujiu 回答时间:2017-3-27 09:13:51
adarly 发表于 2017-3-27 08:16
是for循环170次就结束了吗

原先是直接给一个90%占空比的PWM,然后发现是不断重启,后来改成从0逐渐增加占空比的启动方式,结果还是一样,当速度达到一定值的时候就会停止,然后重启

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版