主体结构: 初始化上位机、遥控器(接收值,中断更新位置数值)、can(函数发送,中断接收)轮子控制及各种初始化;定时器3产生四路PWM波。
定时器1中定时中断(1ms):控制更新获取数据,计算控制速度、角度,并更新底盘数据。(主体)
舵机控制:高电平时间控制角度,低电平时间控制转动速度
![](https://note.wiz.cn/api/document/files/unzip/da2634aa-b6f4-4294-8908-6a636d805573/ad5fefa7-703d-f889-2e23-cf01bc51a9c1.1715/index_files/9b2c10590bfdba6c9a433c5dd5409e14.png)
遥控器信息:每个通道中间值1024,上下加减660.长度11位,无符号位。通道s1、s2发射机位置
程序信息:串口1(遥控数据接收),串口3(上位机数据),can总线(小车底部轮子控制),I2C(mpu6050读取),PID内外两环。
(3) 微分控制Td对系统性能的影响
微分作用可以改善动态特性,Td偏大时,超调量较大,调节时间较短。Td偏小时,超调量也较大,调节时间也较长。只有Td合适,才能使超调量较小,减短调节时间。
STM32时钟:系统初始化APB1的时钟是4分频,即42m,当APB1的时钟分频为1的时候,TIM2~7以及TIM12~14的时钟为APB1的时钟,而如果APB1的时钟分频不为1,那么以上时钟频率姜维APB1时钟的两倍,即84m
Tout=((arr+1)*(psc+1))/Tclk;(Tclk:TIM输入时钟频率,Tout溢出时间)
为了快速一般采用PLL作为SYSCLK的时钟源,以太网PTP时钟是使用SYSCLK系统时钟,APB1,APB2,AHB是由SYSCLK时钟分频而来。AHB时钟最大频率168mhz,APB2时钟最大频率84mhz,APB1时钟最大频率42mhz。
定时器时钟来源:
(1)内部时钟
(2)外部时钟模式1:外部输入脚(TIx)
(3)外部时钟模式2:外部触发输入(ETR),仅适用于TIM2/TIM2/TIM4
(4)内粗触发输入(ITRx):使用a定时器作为b定时器的预分频器。
@关闭stm32——PWM即关闭定时器,重新打开即使能寄存器。
@note TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);关闭PWM中的一路,全部关闭即关闭定时器
@note TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);不同貌似是关闭后的电平(互补通道)
在STM32串口通信程序中使用printf()函数发送数据非常方便,但是需要先进行简单的配置,下面介绍两种配置方法。
方法一、对工程属性进行配置
第1步:在main.c中包含"stdio.h” (标准输入输出头文件);
第2步:在main.c文件中重定义fput()这个C标准库函数(因为printf()在C标准库函数中实质上是一个宏,要调用到fputc()这个函数);
第3步:在工程属性的"Target" -> "Code Generation" 选项中勾选"Use MicroLIB";
注:mpu6050使用原子程序自检不通过时需要将mpu6050放平