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

新手两个月做出STM32四轴(四)——系统无限次重启

[复制链接]
jiuwangbujiu 发布时间:2017-3-28 09:31
本帖最后由 jiuwangbujiu 于 2017-3-29 08:30 编辑
: Z4 n& D, c4 H& Z- @
8 k8 a/ q4 I$ i6 Z2 V. Y4 K新手两个月做出STM32四轴(一)——初版原理图的致命问题
. l5 h) n* O9 M新手两个月做出STM32四轴(二)——点亮MOS管' D* i. l9 D) x
新手两个月做出STM32四轴(三)——MOS管驱动720空心杯原理
# w; k5 P  j1 m2 U; j5 t* u# r9 {9 ?

- s% j0 v, E) U" E9 q$ d5 u前面说到那个板子问题很多,那就只好自己画了,把前面提到的原理图中所有错误都修改了。修改之后的电路图各部分如下:4 u% `7 W! J; ~4 j% J1 M

# X  b% W1 T4 V! _' \3 q0 L# ]1 S * I. C3 M& F3 o0 A
1 W, A' q3 n' n5 ]1 d9 I4 b

1 V+ B4 S0 _2 y0 `( H4 w; }/ R% |6 A' f2 G
        但是同时,也考虑到这个板子的形状有问题。四轴的原理是靠四个空心杯带动桨叶,桨叶转动的时候把风往下排,同时也就给自己一个向上的反冲力。而这个四轴板子,大家可以再次看看:* `! F* P5 |& L/ C8 a+ [6 P) K
2 L. v% ^% s# y, M% e/ P, ~- @
        它的问题在哪儿呢?5 l2 |) k7 @" J% f: ~: ?9 X1 |
, y+ I( v3 t; a7 l
        安装电机的位置的圆盘太大了,导致桨叶把风排下来之后都撞击在这个圆盘上了,这就相当于对自己在做工。好比你抱着自己的腿想把自己抱起来,但是那是不可能的,因为你做的功都是对一个系统做功,而不是在克服地球引力做功。
2 T' \7 `7 g+ v) s, F
) y6 A/ X3 I2 d0 k- G        所以需要将这个圆盘的尺寸减小。/ Y0 x+ @& Q) v- ^4 a

8 B5 u$ L9 i: f2 K        同时,考虑到720空心杯带动55mm的桨叶,可能四个桨叶同时转动,并不能提供太大的升力,而我想要做一个比较暴力的四轴,那就需要使用稍微大点的桨叶,这里我选择了75mm的桨叶。2 @6 \; H/ j5 k; y

3 P! a9 c+ l( n1 _3 I# G        75mm桨叶的一半是37.5mm,那么两个电机的距离就应该是2*37.5mm+余量,这个余量就是桨叶转起来的时候所形成的圆面的边缘的距离,如果没有这个距离显然两个桨叶可能会撞击,所以我选择了留10mm的余量。那么最终确定下来两个电机的轴心距就是85mm。+ _4 S# t9 y! U" R" Y8 @# n

% X+ |: w, ]3 i% O' Z        根据上面的原理图和对板子形状的构思,布局出来的板子如下:
# S6 ~! S( v+ e1 J! d& C8 z
6 p, r' P" O- S" C( M
( L+ ^) y# N4 k$ R+ X         有人问我这个板子形状怎么画的,有两种画法:( Y3 @- ^% H. {& P
         1、直接使用AD,在板子的KEEPOUT LAYER 绘制板子形状,然后选中画好的板子外形的线,点【设计】--【板子形状】--【按照选择对象定义】。就可以做成上面这样的图。里面要注意的细节是,线条之间要平滑过渡,整个外形要由一笔画成。
; p: X" d% h8 d         2、使用CAD绘制板子外形轮廓,然后导入到AD的pcb文件中,之后选中画好的板子外形的线,点【设计】--【板子形状】--【按照选择对象定义】。也可以生成对应的图。里面要注意的细节是导入的时候要选择好尺寸对应关系。
( }2 O1 T- q1 Q  L' K
+ A7 x  K1 g% @; `' q. H9 Y         两种方法各有优劣。如果平时不用CAD,而且也不想为了一个板子外形就安装一个CAD的话,那就直接使用AD去画。只不过AD里面提供的画图软件并没有那么好用,尤其是绘制直线和圆平滑过渡的地方。如果没有很好的尺规作图的功底的话。操作起来很困难。如果自己懂一点CAD或者想借机学习一下CAD绘图,那就可以使用CAD去画这个板子的外形,优点是做图及其方便,大概十分钟就可以绘制好这个板子的外形, 而且是不用左手键的前提,如果用左手键,可能几分钟就画好了。
/ s. W6 V- x) w: C1 c: Y' s4 `- V1 T$ M& y+ J
         布好线之后检查无误就可以出加工文件送PCB厂加工制作了。整个操作过程有时间会在摩尔吧开一个直播来和大家共同讨论学习。目前我所有的课程与视频如下:
, S- O; s, ^+ k% o7 T$ h' w' [" m) @) X. M2 M, ]
1、18G四轴散件焊接调试视频百度云链接:https://pan.baidu.com/s/1pLPiIAR 密码:unx2( @6 f7 B4 B; }) e7 h& Y
2、3G手柄散件焊接调试教程百度云链接:https://pan.baidu.com/s/1mhZOH6K 密码:68vh
+ y$ v  H1 |6 C" f3、四轴相关技术讨论QQ群1:419203944,群2:604047647,群3:5605721551 x2 B1 {, s: N2 Z6 v) _, D
4、美拍四轴焊接直播id:1097057461- X5 ^, U0 r7 J7 p2 R/ k, O" n
5、四轴PCB板及成品官方唯一淘宝店地址:http://shop113218572.taobao.com ... 97079397.228.scEVsB6 u! o; `* B$ R3 W: O. U1 ~# M
6、STM32四轴课程系列直播-第一讲(原理图讲解):https://www.moore8.com/courses/1308' j' W0 \9 K0 s* S
7、STM32四轴课程系列直播-第二讲(四轴软件知识体系梳理):https://www.moore8.com/courses/1338( V/ d5 X+ @7 k: p4 _* v3 C( c
8、STM32四轴课程系列直播-第三讲(软件入门一):https://www.moore8.com/courses/13364 H( W- s9 A. N% H9 ?2 _7 ?
9、STM32四轴课程系列直播-第四讲(软件入门二):https://www.moore8.com/courses/1337
) f( k& t6 e5 n10、STM32四轴课程系列直播-第五讲(软件入门三):https://www.moore8.com/courses/1339# E3 Y! E  C1 y+ X" p/ }
11、STM32四轴课程系列直播-第六讲(软件进阶一I2C协议,数据通讯时序讲解):https://www.moore8.com/courses/13415 Y0 }; y% [, j$ h' t
12、STM32四轴课程系列直播-第七讲(软件进阶二I2C协议软件实现):https://www.moore8.com/courses/1343
, z& X4 Q% \6 r' b13、STM32四轴课程系列直播-第八讲(中断系统):https://www.moore8.com/courses/13650 R4 z3 g' M( m0 \" v8 T
14、STM32四轴课程系列直播-第九讲(MPU6050原理讲解):https://www.moore8.com/courses/1385
/ v* x! O8 r+ }& R  E15、STM32四轴课程系列直播-第十讲(MPU6050原始数据获取):https://www.moore8.com/courses/1404
& N) ~) A) q1 g" z16、STM32四轴课程系列直播-第十一讲(MPU6050 官方DMP库的移植):https://www.moore8.com/courses/1405
, V3 k2 D7 O, f  t17、STM32四轴课程系列直播-第十二讲(MPU6050获取姿态角的代码实现):https://www.moore8.com/courses/1406$ I" W: S2 e3 G, |
18、STM32四轴课程系列直播-第十三讲(MPU6050姿态角的使用):https://www.moore8.com/courses/1413+ Z$ \0 [  O) k

* L3 C+ g* m4 D" f! n6 l  Q! o; z' T7 c0 K4 u
         交付打样之后就需要等了。8 y" r8 a& A( j- y. c

* b5 t4 w$ @% W. U% @         大概过了一个世纪,自己的板子终于回来了。
) O) `- i  }6 X3 J$ R; ]7 U
, c* T7 N% I: J; w+ g: d) Y: |& B* U7 x         撸起袖子就焊接,整个焊接好了,然后上电池,漂亮,电源指示灯亮了。
( m1 x1 d1 Q$ Q! }5 n6 ?9 `5 }1 S# m. R3 r7 I
         然后简单的写了点灯的代码来点LED灯:
6 M' A- n6 g  g, n: g
  • 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);
  • }2 f, ], W# v6 I

3 @6 V. h7 F0 }7 K[color=rgb(51, 102, 153) !important]复制代码

3 w7 [: |' F5 J1 f$ M# F9 r( K' v2 P$ T8 G
  • <blockquote>#include "led.h"
    4 r4 ?7 }2 H$ n  b2 c
6 q- T4 |- r7 s5 m) y
[color=rgb(51, 102, 153) !important]复制代码

- s. e: Y' h$ H) H* O1 j   
9 E: q1 `, g" `9 Q0 |$ K        也没有问题,灯按照1S闪烁1次的频率在闪烁。& L, W" _0 `( |8 P" w) ]
6 N$ j8 Q* g% x: [2 U  @# }
       那就驱动电机呗:
2 |- I& z+ e( K( K  Z2 u3 s
  • //电机驱动定时器
  • 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);
  • }
    $ w4 e; v5 m9 j

! V9 M7 A$ N; B( P[color=rgb(51, 102, 153) !important]复制代码
1 J. [; G- D4 Z1 v6 p- K
  1. #include "tim.h"
    ; Z9 a/ ~" B) `

  2. ' }" [0 D% E) |$ f; j
  3. int main()0 v) U2 Y! u8 Q  X/ X
  4. {
    5 Y" \4 s$ t: K5 g: b# U: i, \7 c
  5.             u8 i;
    5 n# X" ^2 n6 t6 ~! E. G  y
  6. ( g# J4 K* m% z
  7.             pulse = 0;
    9 r8 a+ \) W4 G7 E4 [
  8.         : Z- {) P+ [5 }0 t, r/ `
  9.             TIM1_Config();
    ; d% S* j( t6 X. q9 O9 I- }
  10. : R! I5 i5 F) u
  11.             for(i=0;i<170;i++)% a1 H1 k" Y/ `$ u* z0 n* z
  12.             {
    3 T8 L5 t+ u6 Y+ ~7 M: Q
  13.                         pulse+=10;
复制代码

* C' q. L4 ?+ y3 n+ P) F        这一测试完犊子了,什么情况呢,电机没转吗?
- a) W% O- k  j% p% N& Z6 u* U6 c; L7 r
        不是,电机也转起来了,但是电机转起来大概三四秒,刚刚速度比较快了就会停下,然后又重新开始转,就这样周而复始。( D  s  A) g9 [+ [. g

: R2 Z8 `& }0 `. `/ g% y9 m        但是很明显程序不是这样写的啊,究竟是出什么问题了?电池都是刚刚充满电的啊,大概有4.2V左右。点灯的时候也没看出有啥问题啊,所以单片机应该是没问题的啊。
$ V" R8 ]0 q8 `9 B4 u, p* [4 F9 K; j1 W! v/ B/ g1 [, _) f# }! r3 [
        这个问题真是把我困扰了,于是我开始苦苦思索。。大家也开动自己聪明的小脑瓜想想这是什么原因吧。当然我群里的人大概都知道是什么情况导致的,因为我曾今不止一次在群里说过这个问题。; K& v+ `0 O1 S2 V& q9 x
* p/ ~/ R7 v" Z* h9 r. g9 x% Z" q
        这个问题我大概花了一周时间去探索,但是等我探索清楚之后竟然发现是一个很简单的原理导致的,这个原理涉及的知识点尽然是初中学过的。但就是这么一个简单的问题大概花了我一周的时间去绞尽脑汁的思考加上多打一次板和一批元器件的经济成本。
9 F  k% m/ l5 G7 Z
0 X1 @# H" M0 |3 r# u/ Z/ K  o        这个问题在下一个帖子详细讲解。" x- J, M3 k0 c: G5 O
: R4 L9 J$ F. X3 n! `# }1 l

6 M1 l1 y% [) V) L  w' x8 B. ~+ b2 i/ {, k! l) v0 g. ^8 y* W
收藏 3 评论17 发布时间:2017-3-28 09:31

举报

17个回答
斜阳 回答时间:2017-3-29 09:09:08
:lo去看下期详解
jiuwangbujiu 回答时间:2017-3-29 12:18:30
峰回路转8811 发表于 2017-3-29 11:116 F0 S; Z3 X" K! E& N: U$ D
小马哥 ,这 从1117出来后的电源是数字电压吗?是不是刚开始的电压是模拟电压后面的就是数字电压了 ...

  {7 R5 S" S, P- d电池出来直接接到空心杯,这个回路是模拟变化的,然后用1117稳出来一路供控制系统用,应该就是你说的数字电压了吧
sssdd 回答时间:2017-4-10 09:20:56
jiuwangbujiu 发表于 2017-4-8 15:51  |3 ?) `0 D' Y( K! T9 C
求指点,哪儿溢出了??我的定时器设置的周期是多少?

- E" V1 F6 T8 n& x7 P再仔细一看,你代码没贴完。
# J4 k4 L; h- K0 e; j/ q我本来以为你的For循环里面pulse+=10;没做边界检查。那么溢出之后就会有同样的效果。
Paderboy 回答时间:2017-3-28 12:40:54
主控系统供电波动太大。。。
五哥1 回答时间:2017-3-29 10:54:27
为了减轻重量,哪怕是一克也是好的,建议把晶振换成,四角贴片的,除了自小系统和必要的部分,其他的能不放就不放。
峰回路转8811 回答时间:2017-3-29 11:11:07
小马哥 ,这 从1117出来后的电源是数字电压吗?是不是刚开始的电压是模拟电压后面的就是数字电压了
sssdd 回答时间:2017-4-8 10:42:34
别下期了,你数据溢出了吧。++都要做边界检查,习惯不好哦。。" d, V3 j6 g1 R$ u; w, h" z
然后,人家画的板子其实也没那么烂啦。。把人家的板子改改不是就节省了一个世纪?
3 Y4 E* ^) b- [+ H: N难度都在算法里面。上天之后才是真考验。1 c2 F& S( f  X, P) i
继续努力!!!
jiuwangbujiu 回答时间:2017-4-8 15:49:53
五哥1 发表于 2017-3-29 10:54" V7 n" W' c8 |; Y2 B- X$ X# H; l  I
为了减轻重量,哪怕是一克也是好的,建议把晶振换成,四角贴片的,除了自小系统和必要的部分,其他的能不放 ...
" N* M8 r, w3 J2 b5 b$ ~' j
晶振已经换成三脚的了,尺寸非常小
jiuwangbujiu 回答时间:2017-4-8 15:50:30
五哥1 发表于 2017-3-29 10:54
+ y8 p, j) t  Z+ D* A2 o为了减轻重量,哪怕是一克也是好的,建议把晶振换成,四角贴片的,除了自小系统和必要的部分,其他的能不放 ...

7 i5 Z' A$ Q2 i/ t' H. a* ]晶振已经换成三脚的了,尺寸非常小
jiuwangbujiu 回答时间:2017-4-8 15:51:02
峰回路转8811 发表于 2017-3-29 11:11) z) Z+ V3 x/ @. p: y6 H/ \& q( v
小马哥 ,这 从1117出来后的电源是数字电压吗?是不是刚开始的电压是模拟电压后面的就是数字电压了 ...

9 c1 y3 |- g. `我中间用了一个0欧姆电阻隔离的
jiuwangbujiu 回答时间:2017-4-8 15:51:36
sssdd 发表于 2017-4-8 10:42
$ T5 q' X4 ]" Q. j$ V* a别下期了,你数据溢出了吧。++都要做边界检查,习惯不好哦。。( A: Q. }& l! c1 W8 U: _
然后,人家画的板子其实也没那么烂啦。。把 ...
/ O( f) i0 B, ^5 x$ a. N8 m% E
求指点,哪儿溢出了??我的定时器设置的周期是多少?
jiuwangbujiu 回答时间:2017-4-8 15:51:54
sssdd 发表于 2017-4-8 10:429 D/ G0 f. ^7 {6 `
别下期了,你数据溢出了吧。++都要做边界检查,习惯不好哦。。
+ ^, ?+ \% ?9 S7 q* M然后,人家画的板子其实也没那么烂啦。。把 ...
5 Q+ B! g) y6 A+ v" b/ [
求指点,哪儿溢出了??我的定时器设置的周期是多少?
jiuwangbujiu 回答时间:2017-4-8 15:52:09
sssdd 发表于 2017-4-8 10:42) F, f. o3 N5 g$ i) i
别下期了,你数据溢出了吧。++都要做边界检查,习惯不好哦。。  S$ S1 u* O* t0 y- {8 U1 J
然后,人家画的板子其实也没那么烂啦。。把 ...
- P* d' U, b; v2 N$ H
求指点,哪儿溢出了??我的定时器设置的周期是多少?
zbber 回答时间:2017-4-8 15:56:14
别下期了,你数据溢出了吧
12下一页

所属标签

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