静电容键盘开坑 - Arduino Mega2560和Teensy3.1开发板知识_jyqxerxes的博客-CSDN博客

         Arduino代码开源,库文件丰富,github上有许多现成代码。另外,Arduino IDE的官方自带的例程涵盖了各种模块的使用示例,当然library里也包括了各种例程所用模块的驱动程序,我们用的Si4464无线收发器就是在RadioHead库文件中的RH24.h头文件。

以前用过一些51单片机,当时没有认真学,不过还记得用Keil学习例程的时候,各种操作寄存器,或者自己编写一些功能简单的函数,虽然不难但开发效率不高,Arduino库文件基本都帮我们写好了常用的函数,就容易上手多了,但性能确实是不如stm32等单片机的。

1. Arduino Mega2560介绍

Arduino Mega 2560是基于ATmega2560的微控制板,核心处理器是avr,有54路数字输入/输出端口(其中15个可以作为PWM输出),16路模拟输入端口,4路UART串口,16MHz的晶振,USB连接口,电池接口,ICSP头和复位按钮。简单地用USB连接电脑或者用交直流变压器就能使用。

总结如下:

控制器

ATmega2560

工作电压

5V

输入电压(推荐)

7-12V

输入电压(限制)

6-20V

数字I/0口

54 (含15路PWM输出)

模拟输入口

16

每个I/0口直流电流

40 mA

3.3v口直流电流

50 mA

闪存(Flash Memory)

256 KB(其中8 KB用作bootloader)

静态存储器(SRAM)

8 KB

EEPROM

4 KB

时钟

16 MHz

下面对我所学到的新知识做一个简单介绍,在我看来每一部分都是大学问,值得我去更深入的学习。

1.1 PMW

PWM就是脉冲宽度调制,也就是占空比可变的脉冲波形,脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。

PWM是一种调制方式,那么为什么会有这种方式存在?大家可能知道Arduino有模拟输入引脚,这些引脚是通过A/D转换操作的,而一般的数字引脚却只能输入HIGH或LOW电平,那么中间电平可否输出呢?比如2v的电平如何输出?于是PWM应运而生。PWM的高明之处在于:它输出的仍然是HIGH或者LOW电平,但可以间歇性周期性输出,则利用取平均值的方法,可以达到满意的输出效果。一个简单的例子:在0~5s内输出5v的电平,那么0~5s的平均电压就是5v,而倘若我在0~2.5s输出5v,在2.5~5s输出0v(占空比50%),那么这5s内平均电平就是2.5v,显然可以达到我们想要的效果。但仍有问题:倘若你的周期很长,就像上面例子所说,周期5s,点亮一个LED灯(LOW亮,HIGH灭),那么LED灯显然是前2.5s灭,后2.5s亮,显然达不到调灯暗亮的效果。但当周期被缩小之后比如20ms,这时候亮与灭只是很短时间内的事,肉眼根本看不到亮灭的变化,因而LED灯表现的就是亮度变暗。于是我们知道:PWM调制的周期一般比较短。PWM只是用数字输出替代模拟量输出,因此单方面还是不行的,这就要求我们的设备还要支持PWM的调制。(比如舵机等)。因而PWM的周期也不能任意短,还需要满足我们设备的调制要求。更多PWM的内容参考

http://blog.csdn.net/yibu_refresh/article/details/40891627

1.2 SPI(串行外设接口):

50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)。使用SPI  library(点击看详细介绍)库实现,项目所用的RF24就是通过SPI驱动的。

SPI,是一种高速的, 全双工, 同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。
SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线: 串行时钟线(SCLK)、 主机输入/从机输出数据线MISO、 主机输出/从机输入数据线MOSI和 低电平有效的从机选择线CS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
(1)MOSI– SPI总线主机输出/ 从机输入(SPI Bus Master Output/Slave Input);
(2)MISO– SPI总线主机输入/ 从机输出(SPI Bus Master Input/Slave Output);
(3)SCLK –时钟信号,由主设备产生;
(4)CS – 从设备使能信号,由主设备控制(Chip select),有的IC此pin脚叫SS。
其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
例:现有1,2号设备支持SPI接口,则可以都挂到主控的SPI线上,之后如果要控制1号设备,则由主控发送CS=1号,选中1号设备,那么1号设备就可以通过MOSI,MISO两根线在SCLK时钟控制下和主机进行通信了。

1.3 ICSP(在线串行编程):

In-Circuit Serial Programming,这个可以查看arduino的原理图,六根线直接和MCU连着的,对应VCC,MISO,MOSI,SCK,GND和RESET,其实是烧写器利用串行接口给单片机烧写程序用的,因为arduino上面配了16U2等USB控制器,所以是通过USB口利用串口通信写程序,ICSP就很少用到。通道板上装的W5200以太网控制器,就是通过ICSP和Arduino互相通信的。

2. Teensy3.1介绍

图:teensy3.1

首先介绍一下AVR和ARM,其实我自己也不是很懂,百度的。

AVR单片机是1997年ATMEL公司挪威设计中心的A先生与V先生利用ATMEL公司的Flash新技术, 共同研发出RISC精简指令集的高速8位单片机,是一种新型单片机,简称AVR。是一种RISC的单片机。它与51单片机、PIC单片机相比运行效率高很多、芯片内部的Flsah、EEPROM、SRAM容量较大、全部支持在线编程烧写(ISP、每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强、内部资源丰富,一般都集成AD、DA模数转换器;PWM;SPI、USART、TWI、I2C通信口;丰富的中断源等。主要现在使用的型号是ATMEGA8/16。

ARM不是单片机,准确来讲ARM是一种处理器的IP核。ARM公司本身不生产MCU,授权其他IC厂家使用ARM内核来做MCU。英国ARM公司开发出处理器结构后向其他芯片厂商授权制造,芯片厂商可以根据自己的需要进行结构与功能的调整,因此实际中使用的ARM处理器有很多种类,主要有三星、飞利浦、ATMEL、INTEL制造的几大类,功能与使用上均不相同。ARM处理器核还可以嵌入其他专用芯片中作为中央处理单元使用,例如飞利浦的MP3解码芯片就是采用ARM7核心的。ARM系列处理器很少集成片上硬件资源,更接近今天的处理器范畴,基本不被认为是单片机。

ARM架构比AVR新一些。AVR相当于ARM系列里面的M0至M3的能力。

关于teensy3.1的详细文档及官方资料,详见PJRC。https://www.pjrc.com/teensy/teensy31.html

在此简单介绍选用Teensy的原因:teensy是Arduino官方库文件中推荐的一款,他与Arduino软件和库文件兼容,因此同样的Mega2560程序,可以稍作修改或不加修改就可以直接应用于Teensy。

使Arduino支持Teensy烧录的方法是从PJRC网站下载TeensyduinoInstall.exe,然后将其安装到Arduino1.8.3的安装目录下即可。

简单看一下Teensy3.1/3.2的硬件:微控制器采用ARM架构的Cortex-M4,主频提升到了72MHz,Mega2560仅为16MHz。闪存依旧是256Kbytes,其实我们的程序烧完之后仅仅花了13%左右的ROM空间,因此是足够的。内存提升到了64KB,其实内存不够用才是换板子的主要原因,因为Mega2560的8Kbytes实在太小了。

硬件条件到此介绍结束,注:文中Mega2560的部分内容摘自Arduino的详细介绍(基于Mega2560)


原网址: 访问
创建于: 2021-04-10 23:17:20
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论