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

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

[复制链接]
jiuwangbujiu 发布时间:2017-3-24 08:37
阅读主题, 点击返回1楼
1 收藏 20 评论127 发布时间:2017-3-24 08:37
127个回答
jiuwangbujiu 回答时间:2017-3-26 20:23:26
Hidden_Light 发表于 2017-3-26 19:49
是经过R8和R12流向地吧,然后开启电压就是R8和R12中间的那个电压
但是没有R8也可以吧、不是很能理解R8的 ...

没有也可以,但是在前后两个器件的电压不一样的时候可以用一个电阻匹配
jiuwangbujiu 回答时间:2017-3-26 20:23:56
yanxu 发表于 2017-3-26 20:10
刚刚开始入电子的大坑,跟小马哥学习,少走了不少弯路,跟小马哥学习,并不是屯资料是真的能做的 ...

屯资料没用,把资料学到脑子里
jiuwangbujiu 回答时间:2017-3-26 20:24:12
&鎏星吻 发表于 2017-3-26 20:16
谢谢小马哥,学习了很多东西

互相学习
BEYOND3210123 回答时间:2017-3-26 21:32:56
入门晚,希望来得及
微风, 回答时间:2017-3-26 21:56:53
学习,学习
微风, 回答时间:2017-3-26 22:20:31
写的不错嗷,嘿嘿!
jiuwangbujiu 回答时间:2017-3-26 22:20:38
BEYOND3210123 发表于 2017-3-26 21:32
入门晚,希望来得及

当你觉得为时已晚的时候,恰恰是最早的时候
jiuwangbujiu 回答时间:2017-3-26 22:21:24
微风, 发表于 2017-3-26 22:20
写的不错嗷,嘿嘿!

谢谢
原田夜舞love 回答时间:2017-3-27 00:21:05
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左右。点灯的时候也没看出有啥问题啊,所以单片机应该是没问题的啊。

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

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







所属标签

STM32团队

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


最新内容

相似技术帖

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