STM32F103C8T6是ST2007年发布的一款MCU,截止目前ST已发布速度高达400MHz的STM32H7 (这个时候一定有人会说6000MHz我知道,不用提醒),我自己也用。STM32F1,STM32F4,STN32F都做过各种四轴,但我还是选择了这个开源四轴STM32F103C8T6.主要考虑三点:一是封装大,方便初学者焊接;第二,价格低,学习成本低;第三,网上有很多初学者学习使用的信息。
选择姿态传感器MPU6050,主要考虑的是包装比较大,可以直接用烙铁焊接,价格比较低,资料丰富。而且还有自己的DMP库,姿态结算完成后,可直接将姿态角输出到主控芯片。我们2016年的第一个四轴是使用的DMP图书馆输出姿态角。
使用气压计FBM320个人认为这个气压计性能一般。但优点是这个包装和BMP280、SPL06的引脚都是兼容的,方便更换。但是小四轴上放气压计,有一个比较麻烦的地方就是要想办法排除桨叶的风对它的干扰。可以使用海绵等其他东西进行隔离。
无线芯片用的是SI24R1.国产的,这个不用的原因NRF2401,因为我测试了这个,性能还可以,引脚完全兼容NRF2401,无线发射可达7dB,陶瓷天线用于发射和接收端,可达50m通信距离。如果加上AP,100米应该没问题。电源通过两个低成本的0欧姆电阻单点接地,防止电机电路的电流波动串进射频电路干扰射频。
文章比较长,字数也比较多。可以先打开头像关注我,然后慢慢看,////插播一个:今年年初录制了一套比较系统的入门单片机教程。想要的同学可以免费找我拿,私信我可以~点击我头像左下角的黑色字体,我也可以得到。最近比较闲,带学生参加省级或以上比赛/////
对于供电方案中的先升压再降压方案,这是我做第一台四轴飞机时发现的。S锂离子电池,当四个空心杯供电时,如果四个空心杯电机没有叶片,即没有负载,启动没有问题。
但如果四个空心杯都带负载,瞬间加速到满速,电池输出电压会瞬间降低到3V下面,我的测试甚至低到2.8V,此时,如果不升压,直接用电池给电池LDO供电,那LDO就会失效。因此,在升压和降压后向单片机系统供电是一个可行的方案。另一个方案是在电机启动时缓慢启动,这样电池的电压就不会立即降低,但这样的缺点是小四轴不能非常暴力,飞行不够清爽。
作者希望督促自己每周写一篇类似的文章,分享自己的想法.
如果对读者有益,那就太好了。如果没用,就要督促自己思考学习!
本周的主题是分享我对单片机如何执行程序和包装的理解。
1.单片机如何执行程序?
我痴迷于计算机是如何执行程序的。我希望能理解底层的真相。我在单片机设备上找到了一点影子。
对单片机执行程序的理解,我读了《汇编语言》这本书, 然后结合自己的想法。
我认为
程序执行 = 不断写不同的寄存器。
最后一篇文章写道,嵌入式软件开发最常见的操作是控制类似的操作P0OUT与实际底层相关的寄存器。编写嵌入式软件代码实际上是编写一系列操作底层寄存器的句子。
一般会将P0OUT这样的寄存器映射到某个地址,这个地址是实际的寄存器物理地址。
单片机通用.h文件将定义他的物理地址。
比如作者用的MSP在430系列单片机中,他定义了每个寄存器的物理地址,通常由制造商提供。
#define P1OUT_ (0x0021u) /* Port 1 Output */DEFC( P1OUT , P1OUT_)
此段代码,定义了P11OUT关键词与0x0021u连接地址。
那么,希望P1口输出全是高电平C代码
P1OUT=0XFF;
那汇编怎么写呢?
# mov 00 ff 00 21
//把00ff数据移动到0021物理地址
所以此时的底层硬件将是00 ff 放入00 在地址寄存器中,三极管动作,切换底部硬件电路,实现需求功能。
(嵌入式开发实际上可以理解这层代码的汇编。再往下看,这是一个非常深刻的电路原理,即如何实现电路 ff移动到0021地址寄存器,寄存器是如何工作的,等等)
嵌入式软件开发还有一个最一般的操作——数值数学运算
那么数值的数学运算也是底层寄存器的配置吗?
通过对数字电路的研究,我学习了加法器等逻辑电路,其底层的操作原理已经与寄存器的知识联系系。
计算机中有一个概念叫做算术逻辑单元
算术逻辑单元_百度百科
该单元集成了许多算术电路。我们可以通过操作寄存器来使用它。
例如 加法操作,a b 返回结果 c
定义 a 物理地址为 0x0000
b 物理地址为 0x0001
C的物理地址为 0x0002
那么
#mov a 0000 ///放入数据a 0000#mov b 0001//将数据b放入0001#read c 0002 //读取0002寄存器的数据放入c中,这里的read我瞎写了指令,汇编一定有这样的指令
因此c是加法器的结果输出,得到输出,完成计算。
嵌入式软件开发还有一个最常见的操作-数值比较,参考数字比较器的逻辑电路原理
对应程序if操作,比较a和b的大小。
例如,if(a>b) 语句,或者 if(a)句子实际上是a和和b将数字比较器的两端放入比较器输出!
数字比较器
因此,嵌入式软件最基本的三个操作(算术操作、硬件电路切换、数值比较
)都是对寄存器的操作。
因此,我得出结论,计算机程序执行就是不断地写入寄存器数据,并取出值得过程的寄存器。
对单片机感兴趣的朋友可以来找我。我录制了一些关于单片机的入门教程。如果我需要童鞋,我可以免费拿。我可以通过私人信件获得~点击打开我的头像