草庐IT

L298N驱动电机+pwm

茄一 2023-06-05 原文

目录

一、L298N驱动电机

二、pwm波输出——电机转动

pwm参数

pwm参数计算

输出比较

pwm基本结构:运行控制 → 时基单元 →捕获/输出比较通道

时基单元

捕获/输出通道的输出

STM32F103c8t6定时器:TIM1、TIM2、TIM3、TIM4

基本定时器

通用定时器

PWM输出


一、L298N驱动电机

 L298N驱动:输入:12V

  • 12V供电:将电源(2个18650电池)接入升压模块,用螺母旋转调到12V,接入L298N的驱动,给驱动提供12V供电
  • GND:将升压模块的输出端(out--)接入GND端
  • 5v供电:由于驱动输入电压是12V,5V的端口不用接
  • 通道A:ENA 和 通道B: ENB 使能 (驱动的跳帽不要拔,使能端默认高电平)
  • 逻辑输入(N1、N2、N3、N4):

               (电机1):N1、N2---------输出A

               (电机2):N3、N4---------输出B

  • 输出A、B:接入左右电机

        


注:(跳帽没拔掉,ENA、ENB默认高电平)

电机转动:

记得看:哪些端口给pwm输出脉冲波

不考虑电机调速:使能ENA、ENB置于高电平,直接对N1、N2、N3、N4接入高低电平

(电机以最快速度转动)---------------------------------没办法调整左右轮速度

考虑电机调速:使能ENA、ENB置于高电平

  •         (1)只进行调速,不控制轮子的转换方向(即同个轮子的正转or反转)

                2个pwm

                    接入两个端口:左电机(N1/N2) & 右电机:(N3/N4)

                例:

               左电机: IN2→PWM1, IN1→GND

               右电机:IN3→PWM2, IN4→GND

  •         (2)既进行调速,又控制轮子的转换方向(即同个轮子正转&反转)

                4个pwm   

                 左电机:IN1→PWM1,IN2→PWM2

                 右电机:IN3→PWM3,IN4→PWM4  

左轮:

(例:)

正转:PWM2输出占空比为0的波形(相当于置于低电平0),通过调节PWM1的占空比进行调速

反转:PWM1输出占空比为0的波形(相当于置于低电平0),通过调节PWM2的占空比进行调速

右轮:同理


二、pwm波输出——电机转动

pwm(脉冲宽度调制)

数字输出信号,高低电平组成 → 连续变化电平信号 → pwm波形

使用pwm波形可以在数字系统中等效输出模拟量==============电机控速


pwm参数

  • 频率:f = 1/ Ts
  • 占空比 = Ton / Ts   

                (高电平时间相对于整个周期时间的比例)→ 决定pwm等效出来的模拟电压大小

  • 分辨率 = 占空比变化步距 

pwm参数计算

PWM频率 = CK_PSC / (PSC + 1) / (ARR + 1)

PWM占空比= CCR / (ARR + 1)

PWM分辨率= 1 / (ARR + 1)


输出比较

                通过比较CNT与CCR(捕获/比较寄存器)值的关系

                                           ↓

                        对输出电平进行置1、置0或翻转的操作

                          (用于输出一定频率和占空比的PWM波形【驱动电机的必要条件】)


pwm基本结构:运行控制 → 时基单元 →捕获/输出比较通道

  • 时基单元

  ① ARR  自动重装器

  ②PSC  预分频器

  ③CNT  计数器

  • 捕获/输出通道的输出

  • 输入捕获电路:(用于测输入方波的频率)四个通道CH1-CH4
  • 捕获/比较寄存器:输入捕获和输出比较电路共用的
  • 输出比较电路:(用于输出PWM波形)四个通道CH1-CH4,驱动电机

            CCR 捕获/比较器 (CNT与CCR大小比较)

       →  输出模式控制器===发出REF信号(指:输出信号的高低电平)

       → 极性选择 (CNT与CCR大小比较)(输出比较模式配置:例:PWM模式1 向上计数)

       →输出到GPIO


STM32F103c8t6定时器:TIM1、TIM2、TIM3、TIM4

  • 1个高级定时器(TIM1)       总线:APB2     

                                拥有通用定时器全部功能

                                                 +

                        重复计数器+死区生成+互补输出+刹车输入  (三相无刷电机)

  • 3个通用定时器(TIM2、TIM3、TIM4)       总线:APB1

                               拥有基本定时器全部功能(定时中断、主模式触发DAC的功能)

                                                 +

                        内外时钟源选择+输入捕获+输出比较+编码器接口+主从触发模式


基本定时器

PSC 预分频器

CNT 计数器

ARR 自动重装寄存器

通用定时器

  • TIMx_ETR外部时钟(EXternal)-----ETR(外部输入引脚)接

               配置内部的极性选择、边沿检测、预分频器电路

①外部ETR触发脚信号
ETR:与外部管脚相连的触发定时器专用触发脚

②边沿预分频后ETR信号
ETRP:边沿预分频后ETR信号

③经过滤波后的ETR有效信号
ETRF:ETRP经过滤波,极性,边沿后的有效信号

  • 定时器的编码器接口------读取正交编码器的输出波形

PWM输出

输出脉宽可调的方波信号

影响因素(两个关键):

        1.信号频率由自动重装载寄存器(ARR)的值决定

        2.占空比由比较寄存器(CCR)的值决定


总结

第一次写博客,想把自己最近的学习心得记录下,相互学习,有错误的话,欢迎大佬指正。

有关L298N驱动电机+pwm的更多相关文章

  1. ruby-on-rails - 如何在 Ruby on Rails 中实现由 JSF 2.0 (Primefaces) 驱动的 UI 魔法 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道ruby​​onrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim

  2. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  3. ruby - 运行测试时静音 Chrome 驱动程序控制台输出 - 2

    我使用的是最新版本的Chrome(32.0.1700.107)和Chrome驱动程序(V2.8)。但是当我在Ruby中使用以下代码运行示例测试时:require'selenium-webdriver'WAIT=Selenium::WebDriver::Wait.new(timeout:100)$driver=Selenium::WebDriver.for:chrome$driver.manage.window.maximize$driver.navigate.to'https://www.google.co.in'defapps_hoverele_hover=$driver.find_

  4. node.js - 从未编写过任何自动化测试,我应该如何开始行为驱动开发? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。多年来,我一直在使用多种语言进行编程,并且认为自己总体上相当擅长。但是,我从未编写过任何自动化测试:没有单元测试,没有TDD,没有BDD,什么都没有。我已经尝试开始为我的项目编写适当的测试套件。我可以看到在进行任何更改后能够自动测试项目中所有代码的理论值(value)。我可以看到像RSpec和Mocha这样的测试框架应该如何使设置和运行所述测试变得相当容易

  5. ruby-on-rails - 在 Rails/Capybara/Poltergeist 规范中使用 url_for 将驱动程序发送到 example.com 而不是应用程序 - 2

    如果我在功能规范中调用url_for,它会返回一个以http://www.example.com/开头的绝对URL.Capybara会很乐意尝试加载该站点上的页面,但这与我的应用程序无关。以下是重现该问题的最少步骤:从这个Gemfile开始:source'https://rubygems.org'gem"sqlite3"gem"jquery-rails"gem"draper"gem"rails",'4.1.0'gem"therubyracer"gem"uglifier"gem"rspec-rails"gem"capybara"gem"poltergeist"gem"launchy"运行

  6. 驱动开发:内核无痕隐藏自身分析 - 2

    在笔者前面有一篇文章《驱动开发:断链隐藏驱动程序自身》通过摘除驱动的链表实现了断链隐藏自身的目的,但此方法恢复时会触发PG会蓝屏,偶然间在网上找到了一个作者介绍的一种方法,觉得有必要详细分析一下他是如何实现的进程隐藏的,总体来说作者的思路是最终寻找到MiProcessLoaderEntry的入口地址,该函数的作用是将驱动信息加入链表和移除链表,运用这个函数即可动态处理驱动的添加和移除问题。MiProcessLoaderEntry(pDriverObject->DriverSection,1)添加MiProcessLoaderEntry(pDriverObject->DriverSection,

  7. ruby - 事件/观察者驱动的 Ruby on Rails - 2

    我有一个适用于事件/监听器模型的应用程序。发布了几种不同类型的数据(事件),然后许多不同的事情可能需要也可能不需要对该数据(监听器)采取行动。监听器的发生没有特定的顺序,每个监听器将决定是否需要对事件采取行动。Rails应用程序有哪些工具可以完成此任务?我希望自己不必这样做(尽管我可以。这没什么大不了的。)编辑:观察者模式可能是更好的选择 最佳答案 查看EventMachine.它是一个非常流行的Ruby事件处理库。它看起来相当不错,而且很多其他库似乎都在利用它(Cramp)。这是一个很好的介绍:http://rubylearnin

  8. AT24C04、AT24C08、AT24C16系列EEPROM芯片单片机读写驱动程序 - 2

    一、概述在之前的一篇博文中,记录了AT24C01、AT24C02芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01/AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序本文记录分享AT24C04、AT24C08、AT24C16芯片的单片机C语言读写驱动程序。二、芯片对比介绍型号容量bit容量byte页数字节/页器件寻址位可寻址器件数WordAddress位数/字节数备注AT24C044k5123216A2A149/1WordAddress使用P0位AT24C088k1024

  9. ruby-on-rails - 测试驱动开发?精神 split 症?我糊涂了!我应该使用什么进行测试,为什么? - 2

    是的,我开始做这个测试了!但是我不知道该用什么=/Rspec+应该吗?Rspec+牛排?迷你测试?cucumber?capybara?可以吗?(cucumber与Shoulda混合)迷你应该吗?(Minitest与Shoulda混合)啊,这么多选择!我很困惑你们用什么,为什么? 最佳答案 如果您刚刚开始,您应该使用默认值并遵循theofficialguides.重要的是你要练习测试。您使用哪种测试库/框架并不重要——这是一种风格选择,在实际练习测试中是次要的——开始测试Rails应用程序的最简单方法是遵循“Golden官方指南布局的

  10. ruby - 有没有人想出一种方法来在多个浏览器/网络驱动程序上运行相同的 cucumber 场景? - 2

    我正在使用Cucumber+capybara进行一些网络自动化测试。我希望能够连接我自己的标签(类似于场景之前的@all_browsers)并让它针对我设置的网络驱动程序列表运行(celerity,firefox上的selenium,ie和chrome)。我不想在前面用4个不同的标签写4次不同的场景。我已经研究过尝试使用我通过以下方式注册的新驱动程序来执行此操作:Capybara.register_driver:all_browsersdo|app|#Whatwouldevenworkinhere?Idon'tthinkanythingwill.end然后跟进:Before('@all

随机推荐