搜索
bottom↓
回复: 34

为什么这样调速调不了

[复制链接]

出0入0汤圆

发表于 2014-9-8 20:09:28 | 显示全部楼层 |阅读模式
/********************
* 文件名:L298N.c
* ******************/
#include <stc12C5A60S2.H>
#include "LN298.h"

sbit OUTA_1 = P2^0;   //控制左轮
sbit OUTA_2 = P2^1;
sbit OUTB_1 = P2^2;   //控制右轮
sbit OUTB_2 = P2^7;
/**********PWM控制速度*********/
void PWM_INIT(void)
{
        CCON = 0;
        CMOD = 0x02;
        CL = 0x00;
        CH = 0x00;
  CCAPM0 = 0x42;
  CCAPM1 = 0x42;       
}
/*
* 函数名:STOP_CAR
* 描述  :小车停止
* 输入  :无
* 输出  :无       
*/
void CAR_STOP(void)
{   
    OUTA_1 = 0;
          OUTA_2 = 0;
          OUTB_1 = 0;
          OUTB_2 = 0;  
}

/*
* 函数名:CAR_Go_Forward
* 描述  :小车前进
* 输入  :无
* 输出  :无       
*/
void CAR_Go_Forward(void)
{
   
    OUTA_1 = 1;
          OUTA_2 = 0;
          OUTB_1 = 0;
          OUTB_2 = 1;
         
}

/*
* 函数名:CAR_Left
* 描述  :小车向左走
* 输入  :无
* 输出  :无       
*/
void CAR_Left(void)
{
    OUTA_1 = 0;
          OUTA_2 = 0;
          OUTB_1 = 0;
          OUTB_2 = 1;
}

/*
* 函数名:CAR_Right
* 描述  :小车向右走
* 输入  :无
* 输出  :无       
*/
void CAR_Right(void)
{
    OUTA_1 = 0;
          OUTA_2 = 1;
          OUTB_1 = 0;
          OUTB_2 = 0;
}

/*******右轮后退*********/
void Right_back(void)
{
                OUTA_1 = 0;
          OUTA_2 = 0;
          OUTB_1 = 1;
          OUTB_2 = 0;
}
void Left_back(void)
{
    OUTA_1 = 1;
          OUTA_2 = 0;
          OUTB_1 = 0;
          OUTB_2 = 0;
}
void main()
{
while(1)
{
  PWM_INIT();
  CCAP1L=0xC0;
  CCAP1H=0xC0;  //pwm1,P1.4
        CCAP0L=0x40;  //pwm0,p1.3
  CCAP0H=0x40;  //越大低电平时间越久
  CR = 1;
  CAR_Go_Forward();
}
}
这是我用来测试调速的,为什么调不了速度呢?
四轮驱动,但是左边的两个电机是并联的,右边的两个电机也是并联的,用的是一个L298N驱动模块,求问为什么调速调不了,

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2014-9-8 20:16:14 | 显示全部楼层
总感觉少了些什么。

出0入0汤圆

发表于 2014-9-8 20:17:43 | 显示全部楼层
你的波形在哪里产生

出0入0汤圆

 楼主| 发表于 2014-9-8 20:26:55 | 显示全部楼层
foxcase 发表于 2014-9-8 20:17
你的波形在哪里产生

stc12c5a60s2有两路的pwm输出,设置占空比就可以了

出0入0汤圆

 楼主| 发表于 2014-9-8 20:27:41 | 显示全部楼层
shishine 发表于 2014-9-8 20:16
总感觉少了些什么。

少了啥?调了好久了没调出来

出0入4汤圆

发表于 2014-9-8 20:32:18 | 显示全部楼层
本帖最后由 oner 于 2014-9-8 20:33 编辑

“这是我用来测试调速的,为什么调不了速度呢? ”
粗略一看你的程序,好像你是固定占空比了吧。既然固定了占空比,速度就固定了啊。

出0入0汤圆

 楼主| 发表于 2014-9-8 20:37:05 | 显示全部楼层
oner 发表于 2014-9-8 20:32
“这是我用来测试调速的,为什么调不了速度呢? ”
粗略一看你的程序,好像你是固定占空比了吧。既然固定了 ...

是固定了,但是两路的pwm的占空比是不同的,所以应该是左右两路的速度应该是不一样的

出0入0汤圆

 楼主| 发表于 2014-9-8 20:37:42 | 显示全部楼层
oner 发表于 2014-9-8 20:32
“这是我用来测试调速的,为什么调不了速度呢? ”
粗略一看你的程序,好像你是固定占空比了吧。既然固定了 ...

可是现在虽然占空比不一样,但是左右的速度还是一样的

出0入0汤圆

发表于 2014-9-8 20:38:53 | 显示全部楼层
CCAP0H=0x40;  //越大低电平时间越久???
这个是调占空比的吗?后面一直都没用上

出0入4汤圆

发表于 2014-9-8 20:44:03 | 显示全部楼层
搁浅的风度 发表于 2014-9-8 20:37
是固定了,但是两路的pwm的占空比是不同的,所以应该是左右两路的速度应该是不一样的 ...

当然,你说的没错。
但是看你的代码
void main()
{
while(1)
{
  PWM_INIT();
  CCAP1L=0xC0;
  CCAP1H=0xC0;  //pwm1,P1.4
        CCAP0L=0x40;  //pwm0,p1.3
  CCAP0H=0x40;  //越大低电平时间越久
  CR = 1;
  CAR_Go_Forward();
}
}
根本就是一样的占空比~

出0入0汤圆

 楼主| 发表于 2014-9-8 20:59:38 | 显示全部楼层
tabing 发表于 2014-9-8 20:38
CCAP0H=0x40;  //越大低电平时间越久???
这个是调占空比的吗?后面一直都没用上 ...

占空比不是设定了就可以么?后面还要怎么用?

出0入0汤圆

 楼主| 发表于 2014-9-8 21:00:17 | 显示全部楼层
oner 发表于 2014-9-8 20:44
当然,你说的没错。
但是看你的代码
void main()

那要怎么调整?

出0入0汤圆

发表于 2014-9-8 21:02:59 | 显示全部楼层
搁浅的风度 发表于 2014-9-8 20:59
占空比不是设定了就可以么?后面还要怎么用?

看你前面说的是通过占空比来调速的,现在你占空比固定了怎么调速?

出0入0汤圆

发表于 2014-9-8 21:07:18 | 显示全部楼层
        CCAP0L=0x40;  //pwm0,p1.3
  CCAP0H=0x40;  //越大低电平时间越久

lz复制粘贴了?
还是前面的网友提示得对

出0入4汤圆

发表于 2014-9-8 21:08:05 | 显示全部楼层

其实你思路还是清晰的。你说过改变占空比来调速。正确。那就改变占空比就达到目的了。
举个简单“栗子”,逐步减小占空比,速度原来越慢:
for(i=0;i<255;i++)
{
        CCAP0H = i ;
}
其他的自己发挥去吧

出0入0汤圆

发表于 2014-9-8 21:11:53 | 显示全部楼层
占空比固定了,当然调不了

出0入0汤圆

 楼主| 发表于 2014-9-8 21:21:44 | 显示全部楼层
bccuje_love 发表于 2014-9-8 21:11
占空比固定了,当然调不了

好吧,难道我用词不准确?我说的调速是调左右的速度不一样,把左右的占空比设置不一样不就是左右的速度不一样么,你们说的调速是通过按键来调么?

出0入0汤圆

发表于 2014-9-8 21:22:25 | 显示全部楼层
明显代码问题

出0入0汤圆

 楼主| 发表于 2014-9-8 21:32:30 | 显示全部楼层

哪里的问题?

出0入0汤圆

发表于 2014-9-8 22:08:17 | 显示全部楼层
调速时pwm应该是变化的呀

出0入0汤圆

 楼主| 发表于 2014-9-9 07:42:35 | 显示全部楼层
lxa0 发表于 2014-9-8 22:08
调速时pwm应该是变化的呀

我只是在转弯的时候调速,调左右的速度不一样,使得小车转弯,

出0入0汤圆

发表于 2014-9-9 08:24:04 | 显示全部楼层
会不会电机并联的线焊错了?

出0入0汤圆

发表于 2014-9-9 13:58:37 | 显示全部楼层
搁浅的风度 发表于 2014-9-9 07:42
我只是在转弯的时候调速,调左右的速度不一样,使得小车转弯,

我说的就是在转弯的时候pwm要变化
比如向左转的话
左边的轮子速度要慢甚至要倒转
右边的轮子速度要快
这样才能向左传

而走直线的时候两边的轮子速度要一样

出0入0汤圆

发表于 2014-9-9 14:25:34 来自手机 | 显示全部楼层
你还是上示波器看一下出来的波形吧

出0入0汤圆

发表于 2014-9-9 14:27:17 来自手机 | 显示全部楼层
lxa0 发表于 2014-9-9 13:58
我说的就是在转弯的时候pwm要变化
比如向左转的话
左边的轮子速度要慢甚至要倒转

看你的代码,转弯的时候没有调pwn
只是在init里面设置了一下

出0入0汤圆

发表于 2014-9-9 23:43:06 | 显示全部楼层
tabing 发表于 2014-9-9 14:27
看你的代码,转弯的时候没有调pwn
只是在init里面设置了一下

我的代码是以呼吸灯形式做的试验呀
你要用的话得做改动
不可直接用

出0入0汤圆

 楼主| 发表于 2014-9-10 10:58:28 | 显示全部楼层
oner 发表于 2014-9-8 21:08
其实你思路还是清晰的。你说过改变占空比来调速。正确。那就改变占空比就达到目的了。
举个简单“栗子” ...

好吧,我明白了,谢谢!

出0入0汤圆

 楼主| 发表于 2014-9-10 10:58:55 | 显示全部楼层
lxa0 发表于 2014-9-9 23:43
我的代码是以呼吸灯形式做的试验呀
你要用的话得做改动
不可直接用

嗯,好的,谢谢

出0入0汤圆

 楼主| 发表于 2014-9-10 10:59:27 | 显示全部楼层
tabing 发表于 2014-9-9 14:27
看你的代码,转弯的时候没有调pwn
只是在init里面设置了一下

哦,好吧,我明白了,受益匪浅!

出0入0汤圆

 楼主| 发表于 2014-9-10 10:59:53 | 显示全部楼层
lxa0 发表于 2014-9-9 13:58
我说的就是在转弯的时候pwm要变化
比如向左转的话
左边的轮子速度要慢甚至要倒转

         嗯,我知道怎么用了,谢谢

出0入0汤圆

发表于 2014-9-10 11:11:34 | 显示全部楼层
嘿嘿,顶一下顶一下

出0入0汤圆

发表于 2014-9-10 11:33:09 | 显示全部楼层
难道不应该先用示波器看PWM波形?

出0入0汤圆

发表于 2014-9-10 16:13:46 | 显示全部楼层
没有改变占空比 哪有波形呢

出0入0汤圆

发表于 2014-9-12 22:37:24 | 显示全部楼层
差速转向

出0入0汤圆

发表于 2014-9-13 07:33:08 | 显示全部楼层
应该通过占空比来调速的,占空比固定了速度如何调
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 00:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表