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

新手如何使用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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版