这次边做边写,基本上把做proj的整个步骤记录下来,包括中间的思考过程,也挺有意思的
小车主控板思路
主控板需要完成的功能:
1.接受传输过来的数据
2.根据数据控制电机PWM
3.根据数据控制舵机PWM控制电机的PWM实现:
1.一个函数,两个参数:move(dir,speed)
2.dir控制前后,speed控制pwm.
3.如果方向改变需要延迟一定时间控制舵机的pwm实现:
1.一个函数,两个参数:turn(dir,value)
2.dir控制左右,value是设定值控制pwm
3.value需要配合PID算法写好
两个电机控制需要两个tim的pwm,需要四个管脚输出控制正反转.
PID算法实现的时候,舵机有反馈线反馈现在所在的角度.反馈用ADC采样读取
PS: 未测试NRF24L01通信模块前自己留一个串口,使用蓝牙调PID
程序步骤
- 开启时钟(GPIO,TIM, ADC,USART,AFIO)
- 写move函数
- 写PID算法
- 写turn函数
- 配置蓝牙串口
- 调试PID
开启时钟
ABP1和APB2对应的外设见下表
使用TIM生成PWM波
这里使用TIM生成的PWM是为了让PWM更加稳定可靠
原理解释
通用定时器可以利用GPIO引脚进行脉冲输出,在配置为比较输出、PWM输出功能时,捕获/比较寄存器TIMx_CCR被用作比较功能,下面把它简称为比较寄存器。这里直接举例说明定时器的PWM输出工作过程:若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR被配置为N,即TIMx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。
而在TIMxCNT计数的同时,TIMxCNT的计数值X会与比较寄存器TIMx_CCR预先存储了的数值A进行比较,当脉冲计数器TIMx_CNT的数值X小于比较寄存器TIMx_CCR的值A时ÿ