文章主要是个人的笔记,所以很多地方可能是根据自己的情况来写的
驱动器
使用的是L298N
CubeMX的配置
基本的配置略过(时钟源等)
我们使用定时器1
1
![在这里插入图片描述](https://img-blog.csdnimg.cn/cafb0ff2b838499e9a6a9ae4f1a7d640.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2YzNzE2NjY=,size_16,color_FFFFFF,t_70)
选择内部时钟 通道1 PWM互补通道
2
![在这里插入图片描述](https://img-blog.csdnimg.cn/51b64524c7c649439e258e043ab42b47.png)
这里我们后面把预分频的值改为了3,计数值改为4000,使得输出频率达到了10k
1 预分频的值 分频后得到的值才是定时器1的时钟
2 这个主要是死区和滤波器的时钟
auto-reload preload 是用于设置定时器的ARR自动重装寄存器是更新事件产生时写入有效还是立即写入有效。如果使能了表示更新事件产生时写入有效,否则反之。
![在这里插入图片描述](https://img-blog.csdnimg.cn/be67de75352a4445bb9d81c396aca127.png)
这个主要是主从模式的配置,一般感觉用不到。
![在这里插入图片描述](https://img-blog.csdnimg.cn/3f8999f570fe41ed8bbfce2415de8231.png)
死区时间设置为20 这个是为了避免驱动的损坏
![在这里插入图片描述](https://img-blog.csdnimg.cn/57486d5f6534419ca63e44fb9c313e3c.png)
Pulse 的值除以我们总的计数值得到占空比
占空比控制的原理
我觉得L298N使用PWM一共有两种方法,一种是取掉驱动上面的使能跳冒,输出PWM波来控制 第二种也就是我现在学习的这种方法,使用互补输出来控制。
![在这里插入图片描述](https://img-blog.csdnimg.cn/b74a0279ee5840b7bb4c8be76ad20d4d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2YzNzE2NjY=,size_16,color_FFFFFF,t_70)
这里的占空比设定是30%,根据驱动器的表我们可以知道,前三分之一的时间电机转动的方向与后面的时间不同(我们假设前面时间使电机正转,后面时间使电机反转),由于这个输出信号周期短(我现在使用的是TT电机,一般需要几k的波去驱动。),我们从整体上看到的是反转,只是前面时间的正转削弱了反转。当占空比为50%的时候,电机不转,而占空比与50%的绝对值大小决定了电机的转速。
代码
HAL_TIM_Base_Start(&htim1);开启定时器1
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);//开启定时器Pwm通道1
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);//开启定时器Pwm通道1互补通道
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
是一个宏定义,它改变了CCR寄存器中的值,不用对寄存器进行操作。