本帖最后由 king-388328 于 2014-12-12 21:56 编辑 为了更好的测试控制器的各个轴,特意找了一个以前的旧航模遥控器 打开后盖根据四个轴电位器的连线找到板子上对应的焊点,找来一根网线焊上四个轴的引出点和电位器的GND以及供电端,我是用的开发板上的3.3V给它供电,具体接法如下: 放大看看 接好后盖上盖子,接下来找来洞洞板把做一个AD输入的滤波电路滤除毛刺以及抗干扰,如下: 四个轴的模拟量串联一个1K电阻,近点看看: 再在后端,也就是MCU的ADC输入引脚并联一个0.1uF的电容组成RC低通滤波电路消除输入的毛刺,如下 只用了上面四个AD通道,对应开发板的A0-A3模拟量输入通道,A0对应左X轴,A1对应左Y轴,A2对应右X轴,A3对应右Y轴,放大看看 现在插到板子上: 六个按钮对应控制器的按钮1到6。 现在修改代码,在主线程里采集各轴电压并上报给电脑 其中GetADCValue函数用于启动ADC转换,为了提高稳定性我采取多次采样求平均值 static int GetADCValue(uint32_t Channel,uint32_t Count) { int i,val = 0; hadc.Instance->CHSELR = 0x1 << Channel; for(i = 0; i < Count; i++) { HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc,1); val += HAL_ADC_GetValue(&hadc); } return val / Count; } 由于072的ADC为12位分辨率(0 ~ 4095),因此对HID报告描述符也要进行相应修改 __ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x04, // USAGE (Joystick) 0xa1, 0x01, // COLLECTION (Application) 0x05, 0x02, // USAGE_PAGE (Simulation Controls) 0x09, 0xc8, // USAGE (Steering) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xff, 0x0f, // LOGICAL_MAXIMUM (4095) 0x75, 0x10, // REPORT_SIZE (16) 0x95, 0x01, // REPORT_COUNT (1) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x09, 0xc4, // USAGE (Accelerator) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xff, 0x0f, // LOGICAL_MAXIMUM (4095) 0x75, 0x10, // REPORT_SIZE (16) 0x95, 0x01, // REPORT_COUNT (1) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x09, 0xc5, // USAGE (Brake) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xff, 0x0f, // LOGICAL_MAXIMUM (4095) 0x75, 0x10, // REPORT_SIZE (16) 0x95, 0x01, // REPORT_COUNT (1) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x05, 0x09, // USAGE_PAGE (Button) 0x19, 0x01, // USAGE_MINIMUM (Button 1) 0x29, 0x10, // USAGE_MAXIMUM (Button 16) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x10, // REPORT_COUNT (16) 0x81, 0x02, // INPUT (Data,Var,Abs) 0xc0 // END_COLLECTION }; 编译运行,看看效果: 模拟轴操作果然不一样,可以精确的控制方向的角度,油门的大小和刹车的强度。 接下来就要加入数字滤波算法,消除各个轴的抖动。 代码见附件: |
点个赞!! |
高手啊,读书不如看示例 |
不错,好详细,感谢分享! |
这东西好啊 |
收藏了。。。。。 |
高啊,好好学习一下 |
感谢分享! |
【STM32F030开发日志/评测/笔记】+串口echo测试程序
【STM32F030开发日志/评测/笔记】从无到有
STM32F030F4 的 STOP 电流 不稳定
【活动】2013年末签到,赢STM32F0超值型探索套件(已公布结果)
[晒一晒]STM32F0 Discovery板卡
【说出你的故事】从对STM32白痴到入门+STM32F030R8 Boost MPPT
Nucleo STM32F072 FreeRTOS移植
【小“福”蝶赏灯展+DISCO-STM32F0308】
[STM32F072 Nucleo]开发笔记(四) 用按钮代替方向盘硬件测试
[STM32F072 Nucleo]开发笔记(二)扩展USB接口