网站系统建设需要什么资质,女生学市场营销好吗,公司网站建设案例教程,制作企业网站价格每日一言 你拥有的此刻#xff0c;是未来的你回不去的珍贵时光#xff0c;全力绽放吧。 案例#xff1a;PWM差速小车
什么叫做差速小车呢#xff1f;就是我们之前左转和右转我们之前不是 对于左转的logic是当左转的时候#xff0c;左轮子直接让他不动#xff0c;右轮子直… 每日一言 你拥有的此刻是未来的你回不去的珍贵时光全力绽放吧。 案例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波形的只有前进后退配置得当我们才可以得到想要的差速效果