项目使用了HAL库,所以可以很方便的移植。
- 开发板芯片:STM32F103VCT6
- 遥控芯片: 蓝牙HC-05
- 电机: 4个步进电机
(坑死人了)理论可用0-100kHz,建议8-16kHz - 电机驱动: 每个轮子输入1路PWM信号,1路方向信号
- 配置生成:STM32CubeMX
- 代码编写:Jetbrains CLion
- 调试:ST-Link V2, Keil μVision5
- Core: STM32CubeMX生成的代码,也是需要完成的代码。
- MDK-ARM: MDK-ARM工程文件
- 电机驱动:TIM3_CH1(PA6), TIM3_CH2(PA7), TIM3_CH3(PB0), TIM3_CH4(PB1)
- 电机方向控制:PE7, PE9, PE11, PE13
- 光电传感器:PE3, PC3, PA1
- 与蓝牙模块通讯(也可以换成Wifi模块或上位机):UART4, Baud rate 9600: TX(PC10), RX(PC11) 启用了DMA
使用HEX发送,最大长度为17个字节(usart.h
中指定的rx_data_length
),第0字节为指令前缀,第1-4字节每个字节代表一个轮子的方向,第5-16字节表示速度。
命令前缀:
M
:持续移动(Move);H
:停止(Halt,默认状态);E
:回传(Echo);P
:已打包的命令(Packaged)
正反转:0:正转;1:反转
⚠ 注意,轮子的正反转是相对电机的,不是相对于整车的
PWM范围:0-9 数值越大转的越快
发送0011 9999
(无空格),
意为持续移动命令 1号轮子正转, 2号轮子正转, 3号轮子反转, 4号轮子反转, 速度9,速度9,速度9,速度9
,
发送E
(无空格),
意为回复消息
,会回复接收缓冲区的后16字节(rx_data + 1)。
发送H
(无空格),
意为停止
,会停止所有电机。
注意,P
指令需要根据不同的小车进行更改
PQ
向前移动PH
向后移动PZ
原地逆时针旋转PY
原地顺时针旋转PL
向左前方行驶PR
向右前方行驶
外部高速时钟 时钟频率 7210241024=75497472Hz
令预设 CCR=9,ARR=18 => PSC=4194304 又因为PSC最大65536,取PSC=16
所以CCR=964=576, ARR=1864=1152
所以频率为75497472/16/1152=4096Hz