STM32--PWM呼吸灯、驱动舵机以及直流电机

本节主要学习定时器的输出比较功能,首先先看实验结果以及部分代码:

在上一节时基单元的代码基础上增加部分代码,第一个是增加灯的GPIO口的初始化代码:

然后就是输出比较部分的初始化代码:

此外增加一个PWM的值的输入函数:

在主函数中使用for循环实现灯从暗到亮再到暗,彷佛在呼吸

结果如下所示:

VID_20240727_175652

这个是通过PWM输出来模拟灯的亮度变化,主要由CCR的变化来决定

接下来就是本节的理论部分:

在上节也说过,这里的OC在基本定时器中没有,因此需要在通用或者高级中使用,当CNT在计数时,与CCR进行比较,当两者的值小于、等于、大于时,分别输出不同的结果为0或1,形成波形。

PWM的主要功能就是通过调节一定的占空比来实现不同的亮度、速度等变量,前提调节是惯性系统,即不会马上开启或者停下某一任务,过一段时间才会停或者开始。相当于在数字系统中等效输出模拟量。(个人理解就是可以实现将离散量变成近似的连续量)

占空比类似于模拟电压,例如,高电平5V,低电平0V,占空比此时是50%,则等效于电压2.5V;占空比为20%,则等效于1V。以此类推。

采用通用定时器作为示例:

输入条件为CNT>或者=CCR时,输入信号,之后是OC1REF参考信号,输出是REF的高低电平,之后分为两路,一路到主模式控制器,即可以映射到TRGO口,主要一路是下边的到CCE极性选择处,为0则输入什么输出什么,为1则输入什么进行反转,然后到输出使能通道决定是否输出信号。

之后是输出模式控制器的几种模式:

最常用的是向上计数,其中PWM1和PWM2是刚好相反的,等效于这一部分的一个极性选择。

接下来是本节重点:

右上角中蓝色是CNT,黄色是ARR,红色是CCR,而绿色就是PWM的输出REF的值,CCR决定的,REF是频率可调、极性可调的PWM波形,之后再经过极性选择是否输出使能,传到GPIO口输出可视化结果

接下来是参数计算:

其中PWM频率其实就是计数器溢出频率,占空比就是CCR的值比ARR的值+1,分辨率取决于ARR的值,相当于ARR越大,CCR越大。

如果此时输出一个1KHz,分辨率为1%的PWM波形,那么ARR的值为99,PSC的值为719。

之后就是用到的东西介绍:

实验如下:

VID_20240728_190132

可以看出,随着按键的变化,驱动舵机发生改变,使得输出为0——180°,每次变化30°,到了180后返回到0°。

之后是直流电机的介绍:

以上芯片的H桥,以TB6612电路图举例,当电路的左半部分的上边导通时,下边就断开,这样就接在了PGND的负极,(不能上下级同时导通,会导致电路短路,也不能同时断开,会导致出现高阻态),有两个这样的电路就构成了H桥,一般是左上+右下导通,电流就是从左流向右边,反之左下+右上,电流从右流向左边。H桥可以控制电流流过的方向,从而控制电机的正反转。

类比于上面的电路图,当输入都为高电平或者低电平时,电路不动,当左边IN1输入高电平,右边IN2输入低电平时,此时PWM控制输出电流,”高转低不转“,此时当PWN为高电平,输出O1为高电平,O2为低电平发生正传,PWM为低电平时制动,但当频率足够大时,就能保证其稳定的正转,反之依然。

今天在跑驱动直流电机代码的时候发现,软件运行后显示屏是正常输出的,但是驱动电机一点不转,然后就仔细检查了一遍线,后来发现,原来我的芯片是DRV8833,没有VCC和PWMN这两个口,就是没有直接输出PWM结果的口,而视频用的是TB6612,搜了半天这两个芯片的转换方式,没有找到,最终立马下单一个TB6612芯片,等待芯片回来再尝试驱动直流电机。

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hssfscv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值