博客
关于我
【STM32 .Net MF开发板学习-13】用PWM驱动智能小车
阅读量:469 次
发布时间:2019-03-06

本文共 1828 字,大约阅读时间需要 6 分钟。

基于.NET Micro Framework系统的远程医疗系统开发已经占用了大部分时间,近一个月后才有精力重新开始PWM驱动智能小车的研究。之前对步进电机和直流电机的控制了解有限,以为只有步进电机才能实现PWM控制,直到购买驱动板和步进电机后才发现,控制步进电机方向和速度需要通过IO控制。相关内容可以参考之前写的博文。

在介绍具体控制代码之前,为了更好地理解PWM控制直流电机的机制,我们需要先了解H桥驱动直流电机的原理。H桥式电机驱动电路包括4个三极管和一个电机,具体包括Q1和Q4导通时,电流从Q1经电机流到Q4,电机顺时针转动;Q3和Q2导通时,电流从Q3经电机流到Q2,电机逆时针转动。电流的大小决定了电机转速,通过PWM的占空比(电流通断比)来控制转速。

为了提高驱动能力,三级管会被换为MOS管,但原理是一样的。实际使用中,H桥电路通常采用封装好的集成电路芯片,如L293B、L293D、L298N、TA7257P等。

更多关于H桥驱动电机的知识可以参考相关文章。

我们选用的四路直流电机驱动器的核心芯片是L293B芯片,每个芯片集成了两个H桥电路,可以同时控制两路直流电机。L293B芯片的原理图显示其内含两路H桥,四路输入,两路方向控制,两路PWM控制。

实际应用中,发现让直流电机正反转需要不同的组合控制。以A路为例:

  • A向高电平输入,PWMA输入PWM方波,直流电机正向旋转。
  • A向低电平输入,PWMA输入PWM方波,直流电机反向旋转。
  • A向和PWMA交换,A向输入PWM方波,PWMA保持高电平或低电平。
  • 不同的组合控制方式会导致直流电机运转方向不同,同时某些组合的PWM占空比高反而转速低,而有些组合占空比高则转速高。

    智能小车的选型上,我们选择了相对低价且安装容易的底盘,有两种组装方案,比较倾向推荐第二种方案。小车底盘散件安装后的小车,开发板固定到小车底盘上(蓝色区为固定位置),驱动板供电可以选择9V电池,开发板需要另行购买5V左右电池。此外可选6节普通5号充电电池(3节供开发板,3节供驱动板)。

    底层已经封装了PWM驱动库,用C#开发小车控制代码将非常容易。以下是示例代码:

    public static void Main(){PWM pwm = new PWM(PWM.Timer.T3, 1000, 100);OutputPort Lc = new OutputPort(Cpu.Pin.GPIO_NAMES.PA4, false);pwm.Start(PWM.Channels.CH1, 50, PWM.Mode.PWM1); //PA6OutputPort Rc = new OutputPort(Cpu.Pin.GPIO_NAMES.PA5, false);pwm.Start(PWM.Channels.CH2, 90, PWM.Mode.PWM1); //PA7

    while (true){    Thread.Sleep(1000);}

    }

    我们选用Timer3进行PWM输出,查看开发板原理图,Timer3的第一路PWM输出脚为PA6,第二路为PA7,PA4和PA5作为方向控制。

    PWM声明:public PWM(PWM.Timer timer, uint f, ushort count)

    timer - 芯片时钟,可选Timer2、Timer3、Timer4、Timer5f - PWM输出频率,一般建议1000以上,但几百也可以,网友可以自行测试count - 计数(可看成占空比的分母)

    PWM.Start方法:public int Start(PWM.Channels ch, ushort dutyCycle, PWM.Mode mode)

    ch - PWM通道,可有四路通道dutyCycle - 占空比的分子mode - pwm输出方式,可是方波,也可以强制为高或低

    public int Stop(PWM.Channels ch)

    需要注意的是,红牛开发板固件必须在V0.9.9以上。

    本文相关模块或组件:

  • 小车底盘
  • 四路直流电机驱动器
  • .NET Micro Framework开发板
  • 双排电阻
  • 电池盒
  • 电源插头
  • 杜邦线
  • 此外,值得一提的是,微软官方越来越重视.NET Micro Framework,MSDN和微软中文技术论坛专门开辟了.NET Micro Framework栏目。

    转载地址:http://nnxbz.baihongyu.com/

    你可能感兴趣的文章
    opencv Hog Demo
    查看>>
    opencv Mat push_back
    查看>>
    OpenCV Python围绕特定点将图像旋转X度
    查看>>
    opencv resize
    查看>>
    opencv SVM分类Demo
    查看>>
    OpenCV VideoCapture.get()参数详解
    查看>>
    opencv videocapture读取视频cap.isOpened 输出总是false
    查看>>
    opencv waitKey() 函数理解及应用
    查看>>
    OpenCV 中的图像转换
    查看>>
    OpenCV 人脸识别 C++实例代码
    查看>>
    OpenCV 在 Linux 上的 python 与 anaconda 无法正常工作.收到未实现 cv2.imshow() 的错误
    查看>>
    Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)上
    查看>>
    opencv 模板匹配, 已解决模板过大程序不工作的bug
    查看>>
    OpenCV 错误:(-215)size.width>0 &&函数imshow中的size.height>0
    查看>>
    opencv&Python——多种边缘检测
    查看>>
    opencv&python——高通滤波器和低通滤波器
    查看>>
    OpenCV-Python接口、cv和cv2的性能比较
    查看>>
    opencv1-加载、修改、保存图像
    查看>>
    opencv10-形态学操作
    查看>>
    opencv11-提取水平直线和垂直直线
    查看>>