本文共 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路为例:
不同的组合控制方式会导致直流电机运转方向不同,同时某些组合的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,MSDN和微软中文技术论坛专门开辟了.NET Micro Framework栏目。
转载地址:http://nnxbz.baihongyu.com/