完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
Github
功能简述 HTC Tracker背面的POGOpin 有6个引脚 如图: 可用的输入只有4个,也就是第3、4、5、6引脚,而且是数字输入,正常情况下一个Tracker只能接入4个按键,进行检测,而下面的方法,以牺牲低延迟为代价,换来更多的输入,甚至是模拟输入 (下面的设计为两个开关输入、一个模拟输入(2bit)、一个编码器输入(4bit)) 当然也可以只要一路12bit模拟输入,具体控制由代码实现 原理简述 HTC Tracker的硬件设计决定了他不可能采集模拟信号,但是我们可以用一个转接板,将Tracker的4路开关量信号当做通信接口,使用转接板采集模拟/数字信号,在经过POGO PIN传输到Tracker,这样一来,就是实现了模拟量的传输。 原理图 电路功能模块 供电 首先要解决的是供电问题,Tracker的第一引脚是控制马达的,本以为可以用于转接板的供电,但是使用示波器测量后发现,他是一个个的短脉冲,而且电压不高,也就没办法使用其当做供电了。 没办法,只能使用额外的锂电池供电了,正巧Tracker的第3引脚是充电与数据传输共用了,所以可以将转接板设计成Tracker的充电板,这样一来就不需要分别为Tracker与转接板充电了。 开关 不想使用一个硬开关来管理转接板的启动与关闭,因为会很不方便,所以将LDO的使能端接到MCU与一个开关上,这样一来当开关被触发时,LDO开始供电,MCU启动后立即拉住LDO的使能,使其不会因松开按键导致失效。关机的话,设计为长时间没有按键操作自动关机即可 采集 因为工作需要所以设计了两路开关(图中一路写的是led,但是可以复用成开关)、一个机械编码器输入、一个霍尔开关输入(也就是adc采集模拟量) PCB图 代码 使用STM32CUBEMX制作 贴了其中一部分,详细的在github中 while (1) { if(HAL_GPIO_ReadPin(POW_CHECK_GPIO_Port,POW_CHECK_Pin) == 1) { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = CLK_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_Delay(1000); HAL_GPIO_WritePin(POW_TRACKER_GPIO_Port,POW_TRACKER_Pin,0); while(HAL_GPIO_ReadPin(POW_CHECK_GPIO_Port,POW_CHECK_Pin)) { HAL_Delay(100); } HAL_GPIO_WritePin(POW_TRACKER_GPIO_Port,POW_TRACKER_Pin,1); HAL_Delay(100); GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } HAL_GPIO_WritePin(PAK_GPIO_Port,PAK_Pin,1); HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,0); HAL_GPIO_WritePin(DATA0_GPIO_Port,DATA0_Pin,HAL_GPIO_ReadPin(BUTTON_GPIO_Port,BUTTON_Pin)); HAL_GPIO_WritePin(DATA1_GPIO_Port,DATA1_Pin,HAL_GPIO_ReadPin(BUTTON_SW_GPIO_Port,BUTTON_SW_Pin)); HAL_Delay(50); HAL_GPIO_WritePin(PAK_GPIO_Port,PAK_Pin,0); HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,1); HAL_Delay(50); HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,0); HAL_GPIO_WritePin(DATA0_GPIO_Port,DATA0_Pin,adc_sw & 0x01); HAL_GPIO_WritePin(DATA1_GPIO_Port,DATA1_Pin,(adc_sw 》》 1) & 0x01); HAL_Delay(50); HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,1); HAL_Delay(50); HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,0); HAL_GPIO_WritePin(DATA0_GPIO_Port,DATA0_Pin,sw_sw & 0x01); HAL_GPIO_WritePin(DATA1_GPIO_Port,DATA1_Pin,(sw_sw 》》 1) & 0x01); HAL_Delay(50); HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,1); HAL_Delay(50); HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,0); HAL_GPIO_WritePin(DATA0_GPIO_Port,DATA0_Pin,(sw_sw 》》 2) & 0x01); HAL_GPIO_WritePin(DATA1_GPIO_Port,DATA1_Pin,(sw_sw 》》 3) & 0x01); HAL_Delay(50); HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,1); HAL_Delay(50); HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,0); } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1874 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1658 浏览 1 评论
1143 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
759 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
788浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
610浏览 3评论
628浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
590浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 05:32 , Processed in 0.697727 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号