你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2496|回复: 7

[STM32F072 Nucleo]开发笔记(五) 接上航模控制器的四个模拟轴

[复制链接]

16

主题

46

回帖

0

蝴蝶豆

中级会员

最后登录
2019-11-14
发表于 2014-12-12 21:56:25 | 显示全部楼层 |阅读模式
本帖最后由 king-388328 于 2014-12-12 21:56 编辑

为了更好的测试控制器的各个轴,特意找了一个以前的旧航模遥控器

IMG_20141211_232505.jpg

打开后盖根据四个轴电位器的连线找到板子上对应的焊点,找来一根网线焊上四个轴的引出点和电位器的GND以及供电端,我是用的开发板上的3.3V给它供电,具体接法如下:
IMG_20141211_230745.jpg

放大看看

IMG_20141211_230803.jpg


接好后盖上盖子,接下来找来洞洞板把做一个AD输入的滤波电路滤除毛刺以及抗干扰,如下:

IMG_20141212_204054.jpg

四个轴的模拟量串联一个1K电阻,近点看看:

IMG_20141212_204104.jpg

再在后端,也就是MCU的ADC输入引脚并联一个0.1uF的电容组成RC低通滤波电路消除输入的毛刺,如下

IMG_20141212_204040.jpg

只用了上面四个AD通道,对应开发板的A0-A3模拟量输入通道,A0对应左X轴,A1对应左Y轴,A2对应右X轴,A3对应右Y轴,放大看看

IMG_20141212_204123.jpg

现在插到板子上:

IMG_20141212_203943.jpg

六个按钮对应控制器的按钮1到6。

IMG_20141212_203954.jpg

现在修改代码,在主线程里采集各轴电压并上报给电脑

QQ截图20141212214006.jpg
其中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
};


编译运行,看看效果:
IMG_20141212_203932.jpg

模拟轴操作果然不一样,可以精确的控制方向的角度,油门的大小和刹车的强度。

接下来就要加入数字滤波算法,消除各个轴的抖动。


代码见附件:
Nucleo_F072RB_Car.rar (3.97 MB, 下载次数: 47)
<
回复

使用道具 举报

307

主题

3125

回帖

0

蝴蝶豆

论坛元老

最后登录
2020-7-17
发表于 2014-12-15 17:27:53 | 显示全部楼层
点个赞!!
回复 支持 反对

使用道具 举报

93

主题

2449

回帖

4

蝴蝶豆

论坛元老

最后登录
2020-6-28
发表于 2014-12-25 20:40:57 | 显示全部楼层
高手啊,读书不如看示例
回复 支持 反对

使用道具 举报

26

主题

845

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-9-27
发表于 2015-2-1 13:05:46 | 显示全部楼层
不错,好详细,感谢分享!
回复 支持 反对

使用道具 举报

25

主题

446

回帖

0

蝴蝶豆

中级会员

最后登录
2019-12-10
发表于 2015-2-1 18:54:21 | 显示全部楼层
这东西好啊
回复 支持 反对

使用道具 举报

17

主题

314

回帖

0

蝴蝶豆

金牌会员

最后登录
2019-12-29
发表于 2015-2-2 08:54:24 来自手机 | 显示全部楼层
收藏了。。。。。
回复 支持 反对

使用道具 举报

6

主题

44

回帖

0

蝴蝶豆

中级会员

最后登录
2020-3-9
发表于 2015-2-6 15:22:27 | 显示全部楼层
高啊,好好学习一下
回复 支持 反对

使用道具 举报

1

主题

10

回帖

0

蝴蝶豆

初级会员

最后登录
2019-9-4
发表于 2017-11-2 21:08:22 | 显示全部楼层
感谢分享!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版