(以下内容均来自:bilibili江协科技)
OC输出比较
输出比较可以通过CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
每个高级定时器和通用定时器都拥有4个输出比较通道
高级定时器的前3个通道额外拥有死区生成和互补输出的功能
PWM脉冲宽度调制
在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得模拟参量,常应用于电机控速等领域
PWM参数:
频率:频率 = 1 / TS 占空比 = TON / TS 分辨率 = 占空比变化步距
占空比决定了PWM等效出来的模拟电压的大小,占空比越大,那等效的模拟电压就越趋近于高电平;占空比越小,那等效的模拟电压就越趋近于低电平;(线性的)
舵机简介
舵机是一种根据输入PWM信号占空比来控制输出角度的装置
输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms
舵机的内部工作流程大概的执行逻辑:PWM信号输入到控制板,给控制板一个指定的目标角度,然后这个电位器检测输出轴的当前角度,如果大于目标角度,电机就会反转;如果小于目标角度,电机就会正转;最终使输出轴固定在指定角度。
直流电机及驱动简介
直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电极正转,当电极反接时,电机反转;
直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作;
TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向;
H桥的基本电路(由两路推挽电路组成)
STBY引脚(待机控制脚),如果接GND芯片处于待机状态,如果接VCC,芯片就正常工作
初始化PWM:
第一步:RCC开启时钟,把我们要用的TIM外设和GPIO外设的时钟打开
第二步:配置时基单元,包括这前面的时钟源选择
第三步:配置输出比较单元,里面包括CCR的值,输出比较模式,极性选择,输出使能这些参数,在库函数里也是统一来配置的
第四步:配置GPIO,把PWM对应的GPIO口,初始化为复用推挽输出的配置,这个PWM和GPIO的对应关系是怎样的,可以参考引脚定义表
第五步:运行控制,启动计数器,这样就可以输出PWM了
输出比较函数:
这四个函数就是用来配置输出比较模块的;(重要)
用来输出比较结构体赋一个默认值的
用来配置强制输出模式的(如果在运行中想要暂停输出波形并且强制输出高或低电平,可以用此函数)(了解即可)
用来配置CCR寄存器的预装功能的(这个预装功能就是影子寄存器,即你写入的值,不会立即生生效,而是在更新事件才会生效)
用来配置快速使能的
(在功能手册,外部事件时清楚REF信号,这一节有介绍)(无需掌握)
用来单独设置输出比较的极性,有N的是高级定时器里互补通道的配置
用来单独修改输出使能参数的
选择输出比较模式,用来单独更改输出比较模式的函数
用来单独更改CCR寄存器值的函数(比较重要,更改占空比就要用到这些函数)
//
引脚重映射 需要用到AFIO
引脚重映射配置
如果想让PA15、PB3、PB4这三个引脚当做GPIO来使用的话,就加上:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
先打开AFIO时钟,再用AFIO将JTAG复用解除掉;
如果想重映射定时器或者其他外设的复用引脚,就加上:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2 ,ENABLE);
先打开AFIO时钟,再用AFIO重映射外设复用的引脚;
如果重映射的引脚正好是调试端口,则加上:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2 ,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
打开AFIO时钟,重映射引脚,解除调试端口;