|
本帖最后由 oyingzi007 于 2013-6-28 23:38 编辑
潜水已久,最近做了一款遥控器,跟大家分享下过程。
一:遥控器介绍:
先来段视频,看看遥控器怎么工作的。
http://v.youku.com/v_show/id_XNTc2MjcxNzY4.html
二、硬件介绍:
拨盘电位器:
可用于如速度控制、位置控制。十分灵活。拨盘电位器选用阻值为10K。
拨码开关:
可用于设定状态,如调试模式、正常模式、极限模式等。拨上为导通。
按键:
可用于参数设定、紧急按钮等作用。可通过软件识别触发、或者常按。
3D摇杆:
作用:可获得操控的力度及方向,实质是两个垂直摆放的电位器来获得的。通过电位器的线性变化,可以获得对应的摇杆坐标值。可用于方向遥控、速度遥控、姿态遥控等。
nRF24L01:
2.4G通信,可用于发送我们遥控器的数据。操作简单易上手。采用SPI通信方式。
预留MPU6050以及AK8975.
MPU6050集成陀螺仪和加速度计,AK8975是磁力计。通过这三样可以进行融合,获取Yaw、Pitch以及Roll。
采用IIC通信方式。
UART接口:
数据不仅可以通过2.4G无线通信,也可以通过串口进行数据通信。
三、原理讲解:
AD部分:
外设基本情况就上面介绍的那样。遥控器上有2个摇杆、2个拨盘电位器,也就是说控制器至少要有6路AD对其进行采样。控制器M054,是ARM 32-bit Cortex-M0内核。
AD采样计算:
AD基准电压是Vref(这个电压一般就是VDD),那么AD口的电压和AD值的关系就是:
V = Vref * (AD / MAX);
AD是12位,所以MAX = 2^12 – 1 也就是4095,系统的参考电压是3.3V
Vx处电压值: 单位:V
这样可以算出通过测量得出的电压值与系统AD采集完计算的值是否正确。
以上AD部分适用于拨盘电位器、3D摇杆以及锂电池电压测量。
按键及拨码开关:
按键触发时,电平被拉低。单片机进行周期性采集可以获得按键的状态。但是由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动:
可用软件滤波的方法来去除这些干扰。常见的为软件延时、或者隔10ms以上的间隔进行采样。以此进行消抖。
拨码开关常处以常开或者常闭状态,故方便处理。程序上将拨码开关的状态认为是按键一直按住或者断开来处理。十分方便。
电源处理:
锂电池充满电为4.2V左右,释放完电量大概在3.7V。遥控器的电压为3.3V,也就是说没电时候的压差大概在0.4V或者更低。根据ASM1117-3.3 这款芯片压差范围在0.4V底下是无法工作提供3.3V电压(实际测量也是无法正常工作中极低压差)。因为稳压器的选择选用XC6206P332MR,这款芯片可以提供3.3V电压,也能正常工作在这么低的压差。
OLED12864显示屏:
OLED显示自发光,无需背光源,无论白天夜晚显示明亮锐利!全屏点亮显示 整机耗电约22.75mA;全黑不显示不休眠,耗电1.2mA;普通汉字整屏显示,耗电约5mA;休眠状态约几百uA。如何显示将在软件篇介绍。
2.4G通信模块:
采用nRF24L01,SPI通信接口。非常方便存数据,短距离通信是否方便。
单片机选择:
NuMicro M054是以ARM® Cortex™-M0为内核的32位微控制器,价格合适。可以用J-Link V8、ST-Link、Nu-Link进行仿真调试。调试接口是SWD。以上三种仿真器都测试过,可以完美下载仿真。程序底层代码与STM32库的使用方法类似,一些驱动已完成编写,利用C语言模块化编程,可以比较快的上手。
NuMicro M054资源如下:
Memories:
- SRAM: 4K
- App Flash: 16K
- ISP Flash: 4K
- Data Flash: 4K
Features:
- I/O: up to 40
- Timer: 4x32bit
- UART: 2
- SPI: 2
- I2C: 1
- Comp.: 2
- PWM: 8
- ADC: 8x12bit
- EBI: Supported
- ISP/ICP: Supported
- Package: LQFP48
相互学习,献丑了。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|