
新手两个月做出STM32四轴(一)——初版原理图的致命问题9 _% z1 o$ |9 w/ s/ B 新手两个月做出STM32四轴之(二)-- 点亮MOS管" n; m. m( {8 I. Y1 ^/ J& E 5 X( Q8 R$ x2 z& H E: O 2016年到今年,经济低迷,金融市场紧缩,互联网金融横冲直撞让人有点摸不到头脑。找工作、换工作都比较难、而且大多数行业的从业人员收入萎缩。在这样的情况下,我认为要让自己有一个好的出路,那就是增加自己的个人价值。增加价值的方式有很多种。但是首先要考虑的一个问题是,你所增加的价值,是否是一个可以轻易被机器、人工智能等所取代。举个例子像司机,是否会在自动驾驶发展到一定程度被取代呢。我不对当前主流言论进行附和或者批判,我只是想万一有这种情况出现,我们能提前做一个预案也是好的。所以我们可以选择很难被机器、人工智能所替代的技能,例如需要一些系统思维能力的工作,可能会比较稳当。举个例子,产品经理这种角色,做一个产品要考虑产品的市场需求、考虑营销方式等等,这样的工作暂时应该不会被一些机器智能所取代,另外项目经理这样的角色,可能更多的是沟通协调各部门、利益相关方,项目参与人之间的关系,并且要把控交期、质量、成本这些因素,在不同的环境因素下选择不同的决策,这种能力是不会被机器智能取代的。 所以我一直从一个完整的项目角度出发去考虑让我群里的人学一些东西,比如我想通过组织一些群友一起做一个物联网平台、或者是做一个四轴开源项目,或者是其他的一些项目,只要是能锻炼到综合能力的,那就是比较好的项目。并不是像在大学参加某些比赛那样只是干巴巴的调一些参数,然后同样的赛道重复无数遍(当然或许参赛的人能从中体会到对现在的我而言是一种奢望的那种乐趣)。想想我大学的时候也参加过什么搬运机器人大赛,而且拿过不错的名次。但是去年年底,有一次我去大学看一个赛事,依然看到我大学参加过的那个搬运机器人也是一个项目。而且几乎没有任何改变,唯一不一样的地方就是那些拿着小车,一脸期许一脸喜悦一脸失落的大学生们换了面孔而已。 6 G+ M7 i+ r9 r. L: o) m# @ 现在也经常有一些学生把自己比赛的项目代码发给我看,然而 我发现那几乎就不能看,据说是他们从前面好几届学长学姐那里代代流传下来的项目代码,尽然只有一个main文件,大概有几千行,,,,,所有的声明、定义、函数体、主函数、中断、全部放在一个main.c里面,没有做任何文件分治,甚至居然不懂.h是什么文件。当然我说的只是部分情况,并不是全部,我相信大多数人写的代码还是很厉害的,而且学校里也不乏大牛存在。但是我所看到的这些项目真的就是那些天天泡实验室的,看起来很勤奋的在学习,而且在周围的人眼里是大神的人所维护的赛事代码。。。。。 ! Y/ [" m: R/ t- ? 我相信这不是企业需要的人。9 ~' ]- r \) m8 }9 L& o 我创业期间也想过招人。但是一个刚刚创业的团队,是没有多余的精力去培养初入职场的学生的,尤其是养成错误的开发习惯的学生。纠正起来比教会啥都不会的人更难。毕竟在这个纷乱的时代,能够在一起协作的前提是达成共识。如果没有共识,那么要协作首先要达成共识,但我相信改变一个人的认识很困难。例如习惯了免费的人他不愿意为杀毒软件付费,他认为杀毒软件就应该是免费的。但是他忘了,免费的东西,别人开发它的意图是什么。改变共识很难,那就找有共识的,所谓的有共识,我认为就是有经验,毕竟电子开发这个行业,大家都这么做的一些事情,只要在这个圈子里工作几年就会掌握。所以直接找有工作经验的人就好了,但是毕竟这样的话你又要为他付出很高的薪水,虽然他值得很高的薪水,但是对于一个没有任何外力支持的创业团队,是养不起这样的人的。so,我只好自己做所有的事情了。。。当然说这个的主题是,学生在认识到一定要掌握技能之后,一定要去把自己的认识和企业的认识达成一致。于是你就不得不了解一个产品开发的完整周期、如何降低成本等等这些比较关键的东西,当然如果你有创业的雄心壮志,也可以看看经济金融股权公司法等相关的东西。: U) C# g; T. s+ k. R0 a $ A: _; G0 a5 q( Z: z 那么我自己在这个过程中能为大家早日走进工作岗位提供什么呢?1 N- U; r' K1 ]! _2 z / o- A4 c8 W$ Y/ i8 l 我想我只有把自己的这点微不足道的经验分享给大家,当然不一定对,毕竟不管学什么每个人都有有选择的去学习。我所能做的就是提供一点方向和思路。- |/ D5 w$ a7 {! b& c, s ! |9 g" z+ \! l 所以我们继续来分享一下如何使用STM32在两个月内做出一个空心杯四轴的故事。 这个帖子的第26楼我分享了关于之前那个错误的板子上的一些错误分析,应该有人会觉得我说的太唐突,毕竟为啥用一个MOS管就可以驱动空心杯电机这个事情我从来没说,原理都不知道分析半天有点让人丈二和尚了。。。。 那就分析一下MOS管驱动空心杯电机的原理。 C9 f% G+ C7 y/ B( s + d& O2 s6 b4 I# F5 Y 首先说明这个720空心杯电机的参数: ![]() 根据上图明显可以看出,所谓的720空心杯电机,就是指直径是7mm,长度为20mm的电机,这样大家也就理解820,614这些电机是多粗多长了。 另外,电机除了尺寸还要有电气参数,这个电机的电气参数为:6 Q0 a0 B# G- d+ c5 v2 u, E2 g 电压:3.7V3 a( f- U% s0 J5 T9 K b8 s! J 转速:45000转/分钟 轴径:1mm' V3 g; S' c8 _ 3 x {. A5 C3 X `# ]# \ 那简单,既然要求是3.7的电压,那我直接找个3.7V的电池直接把空心杯的两根线怼在电池的正负极不就好了。。。这样电机就能转了。正好之前买的电池就是3.7V的,所以直接拿一个怼上,果然转起来了,,,,安装上桨叶继续通电发现升力很大。。。这就意味着ok了,我可以直接把四个电机安装在四轴板子上,然后把电池的电引过去就可以让四轴飞起来了啊。。。。* x, X* c( s- A- U& ?8 d 但是事实上并没那么简单。假如四轴的重量不在几何中心,是不是就会飞偏了,或者在气流不稳定的情况下就会乱飞? 这都不是最关键的,最关键的是,我直接把电机接在电池上,就没办法控制它的转速啊。。。也就没办法控制四轴的飞行速度啊(即使这个时候四轴可以自稳)。 所以需要控制转速。 & k" ^2 j/ p" E% ^ 那么转速怎么控制呢? $ f- p* G0 F' ~0 s8 h9 j 想必能看到这个文章的,都最起码知道用单片机点LED灯的方法吧。LED灯的电路如下: ![]() 我想让这个LED1变亮,那就需要让这个灯的两端有一个电压差,也就是说只要IO这个位置是低电平就可以,而刚好IO这个位置接的是单片机的一个口,那就可以通过编程让这个口变成低电平,这样灯就亮了。,如果通过编程给这个IO口高电平,那么灯就不亮。 同理,我想让这个灯闪烁,那就是先让他亮一秒钟,然后不亮一秒钟,这样不断循环,我们就看到这个灯不断闪烁。 & W" Z+ L+ B* V1 h5 E 那如果亮0.5S,再灭0.5,秒呢,你会觉得这个灯闪烁的比刚才快了。 如果是0.05S的间隔呢?人的眼睛刚刚能看到这个灯是闪烁的。/ m' c N! E* F' u& [5 } S , F1 v1 _9 h2 b0 E 再快的话,会出现什么情况呢?就是看到这个灯是一直亮的。但是仔细的人可能会看到亮度并没与不闪烁的时候亮。6 Y |6 C# T3 I2 x2 q( b7 A 同样的道理,我们用在电机上。( w- z8 j* I6 Q9 r( K- i 我把电机怼在电池上一秒钟,拿开一秒钟,就会发现电机转一下停一下。: b8 p) J' q; t: T/ ?2 }5 p 然后我加快手速,怼0.5S,拿开0.5秒,发现电机转一下停一下的频率更快了。9 e4 O# ~8 w* ~ Q8 D# b5 q ; f6 D( s1 W! M6 e 发挥单身二十年的优势,拿出麒麟臂已0.05秒的频率去用电机怼电池,发现电机貌似一直在转。 % g, y) _ v. S* @- L, R: H 但是这是不可能的,毕竟单纯的我并没有练就麒麟臂,以上纯属意淫。$ R* v) M# y$ l. z3 P2 \ 1 f; o7 Z$ f. l4 s1 @5 n 那么手速没有io扣改变LED灯亮灭的那种频率,是不是我就会与童年的纸飞机的梦想失之交臂??? 非也。有一种东西叫做电子开关。4 A; h6 ]" R3 G& c8 T) i 为了让大家形象理解电子开关这个东西,我画个草图: ![]() F: N5 p2 c" l! q; n# U' @; C 其中AB是一根导线,把这个导线剪短然后给中间接了一个门,也就是刚才说的电子开关,这个电子开关就像我们每天都摸到的灯的开关一样,伸出了一个G,就是这个门的开关,当这个G是高电平的时候,这个门就被打开了,然后AB导线就连起来了,电流可以从A流向B了。当G给低电平的时候,这个门就断开了,电流不能从A流向B了。这个电子开关的优势就是比我们手去开关这个门的速度快很多。) g5 q' S# D- F" M3 {, ^ 然后我把这个门加载电池和电机之间不就可以了吗。 ' G5 T( i+ o6 \) i" k, ^ 原来电池和电机的电路是这样的: ![]() 这个时候我们只有用20年单身练就的麒麟臂才能控制电机的转速。这个方法不可取啊,毕竟营养跟不上。 ! b4 i- T1 _+ u& C$ N 那我们给这个电路加一个电子开关: ![]() 现在好了,加上这个电子开关之后我们就可以快速控制这个电机的开断了。当我们频繁的切换开断状态,就会让电机不断转动和停止,表现在宏观的层面就和LED闪烁过快之后你看起来是常亮的一样了(但是亮度和常亮不一样)。3 B$ @5 L% q9 y' m 那之前我们是不断让这个IO口切换高低电平的,那么如果说切换高低电平的时间是不一样长的会怎么样? 这就要说到下一个概念了------PWM(脉冲宽度调制)。 6 a8 K$ p9 W( C4 B9 g( I5 i 对于这个概念,网上资料一大堆,我就不解释了,总之一句就是通过控制上图中IO口的高电平和低电平所持续时间的比例,去调整宏观上电机转速这个概念。而在调整这个高电平和低电平的时间的时候,要保证一高一低电平持续的总时间是固定的。这样的话就引出了本次更新第三个概念,占空比。占空比就是在一高一低电平持续的总时间中高电平所持续的时间长度占这个总时间的比例是多少,是一个比例值,0%到100%。; R/ B6 Q3 q& a2 W6 t n9 X, I p . l. Z" R$ v; @/ Z7 n0 ?, R 回到电子开关的话题,我们四轴上用的MOS管SI2302就是上面所谓的电子开关。其实mos管的作用并不只是简单的一个电子开关功能,但我们在这简化概念是为了方便理解。 % v$ V5 Y5 I. p* T2 R ] 我们理想的电子开关是导通之后电阻为0,但实际上不可能,即便是纯银导线也在正常状况下是有电阻的,所以电子开关也一样,导通后由一个电阻,这个电阻就是我第26楼说的0.04欧姆。。。! u2 |5 j1 V0 v9 i$ R9 X 8 o8 ]! X( t5 F& M9 B+ z* m9 g 而且要让这个电子开关导通,我们需要给他建立一个高低电平的状态,所以真实的电路就比上面的图复杂一点,应该是这样的:/ d& ~$ `; ~3 V; a ![]() 当然上面的R8的作用是匹配两端电压,R12就是为mos管的门的开关建立一个工作电压。而二极管的作用就是泄放电机在电流通断的过程中产生的电动势(但是这个二极管我并没有得出准确的结论是加上好还是不加好,至少从波形上看没啥大的区别,这个后议)。6 D: _$ T* c. ] 这就是这个MOS管的工作原理。当大家明白这个之后也就知道当这个二极管直接接通会产生怎样的风险了。2 j" l. W6 W6 A0 M3 t; Y |
点评
当然是定频调宽啦。。这才是正宗的PWM。
而且大多数单片机才支持。不然你只能自己苦逼拿定时器来做了。. s7 A: J, T' F* |2 ~9 A7 F
而且,定频调宽比较稳。+ E% ]) P3 |8 z# R5 a
调频调宽,实际周期不稳定。电机扭矩非线性可能大幅增加。不好做控制。
对于风机类负载来说电机控制方式调频和调幅都可以,但是对于重负载、大惯量的系统来说,启动必须要用调频的方式控制。
看目标设备是什么了
谢谢指导
正是不才
你说的是那一部分难度突然上去了