学习STC51单片机36(芯片为STC89C52RCRC)智能小车3(PWM差速小车)

每日一言

        你拥有的此刻,是未来的你回不去的珍贵时光,全力绽放吧。

案例:PWM差速小车

什么叫做差速小车呢?就是我们之前左转和右转我们之前不是 对于左转的logic是当左转的时候,左轮子直接让他不动,右轮子直接全速,那么确实是左转了,但是给我们展示的效果是向左边螺旋旋转,比较抽象,不符合实际   

那么我们要解决这个问题,当然这个也可以单独设置成一个功能,可以保留起来,可以叫做左旋转陀螺丸

我们想要实现正常的左转的话我们不是可以想一下:

我们分别对左轮和右轮分别用定时器中断,就像之前的调速一样,只不过我现在分别控制两个电机,一个转的快一个转的慢实现左右转的平滑性,那么这个就叫做差速

怎么实现??

OK我们来写代码:

我将会将每一段代码的下方进行代码块解释

这个是main.c的代码,那么我们可以看到extern char speedLeft  extern char speedRight  对比我们之前的调速小车的代码,有异曲同工之妙,就是我们之前是将控制一组电机speed,变成了左右电机分别控制,所以需要两个, speedLeft代表左轮的高电平占空比,speedRight  代表右轮的高电平占空比,所以呀,那么我们也需要两个定时器,详情看定时器代码部分

   这个extern char speedLeft 和 extern char speedRight  就是之前讲过的就是用time0.c里面的speedLeft和speedRight的数据,主函数里面先调用定时器0和定时器1,为什么要先调用定时器0,那是因为我定时器0的TMOD写死了,不是用的按位与和按位或的方式,所以先调用定时器0,

while里面就是可以这样理解,在同一时间左轮给18的高电平,右轮给40的高电平,经过一段时间延时后互相切换,那么就形成了左右轮子的速度切换,一会左轮快,一会右轮快 

这个是time0.c部分的代码,因为我们需要对每个轮子分别进行控制快慢,那就是需要设置两个定时器,因为要同步的呀,我们设置定时器1和定时器2,这个两个配置应该不用说了吧我就讲一下这个定时器1的TMOD = 0x1<< 4这个就是0000 0001 这个向左边移4个位置 那就变成了0001 0000 (往左边移动时候空位会补零的哈)

然后我们定义定时器0中断的时候 interrupt  1   定时器1中断的时候 interrupt 4  每个定时器中断有自己的序列号(自己看自己的芯片的手册我是STC89C52RC)

中断函数的话就需要我们定义一个countLeft和countRight函数 这个是在最上面全局变量那边定义就好了,我对左电机进行讲解这个中断函数是怎么写的右电机是一样的写法

首先我们不是定义的0.5ms就中断一次嘛,那我们需要进行一个count++ 计算count的次数,如果count <speedLeft那么就持续高电平  多久呢比如speed在main函数里面写的15,那么这个count就会到第15次中断之前都是高电平,其他的就是都是低电平了,最后到40个count的时候就该清0了,因为我们设计的是20ms一个周期,那么这个PWM波形我们就画出来了,那么这边我们涉及到几个函数也需要提一下这个在mortor.c代码区

原始值  : 0000 0001 (十六进制 0x1)

左移4位: 0001 0000 (十六进制 0x10)

Time0.h的头文件

Motor.h头文件声明函数

Delay.h头文件声明函数

Motor.c文件

这边我们保留了很多没有用的代码,没有关系,我们主要是讲解我们差速小车的函数,我们这边设计了左轮前进函数,左轮停止函数,右轮前进函数,右轮停止函数

左轮函数的前进                                     右电机也是只让前进

左轮函数的停止                                   右轮函数的停止

这个函数是用于定时器中断函数用的,是为了配置PWM波形的,只有前进后退配置得当我们才可以得到想要的差速效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

热爱嵌入式的涛涛同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值