为什么这样调速调不了
/********************* 文件名: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驱动模块,求问为什么调速调不了, 总感觉少了些什么。 你的波形在哪里产生 foxcase 发表于 2014-9-8 20:17
你的波形在哪里产生
stc12c5a60s2有两路的pwm输出,设置占空比就可以了 shishine 发表于 2014-9-8 20:16
总感觉少了些什么。
少了啥?调了好久了没调出来 本帖最后由 oner 于 2014-9-8 20:33 编辑
“这是我用来测试调速的,为什么调不了速度呢? ”
粗略一看你的程序,好像你是固定占空比了吧。既然固定了占空比,速度就固定了啊。 oner 发表于 2014-9-8 20:32
“这是我用来测试调速的,为什么调不了速度呢? ”
粗略一看你的程序,好像你是固定占空比了吧。既然固定了 ...
是固定了,但是两路的pwm的占空比是不同的,所以应该是左右两路的速度应该是不一样的 oner 发表于 2014-9-8 20:32
“这是我用来测试调速的,为什么调不了速度呢? ”
粗略一看你的程序,好像你是固定占空比了吧。既然固定了 ...
可是现在虽然占空比不一样,但是左右的速度还是一样的 CCAP0H=0x40;//越大低电平时间越久???
这个是调占空比的吗?后面一直都没用上 搁浅的风度 发表于 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();
}
}
根本就是一样的占空比~ tabing 发表于 2014-9-8 20:38
CCAP0H=0x40;//越大低电平时间越久???
这个是调占空比的吗?后面一直都没用上 ...
占空比不是设定了就可以么?后面还要怎么用?
oner 发表于 2014-9-8 20:44
当然,你说的没错。
但是看你的代码
void main()
那要怎么调整?
搁浅的风度 发表于 2014-9-8 20:59
占空比不是设定了就可以么?后面还要怎么用?
看你前面说的是通过占空比来调速的,现在你占空比固定了怎么调速? CCAP0L=0x40;//pwm0,p1.3
CCAP0H=0x40;//越大低电平时间越久
lz复制粘贴了?
还是前面的网友提示得对 搁浅的风度 发表于 2014-9-8 21:00
那要怎么调整?
其实你思路还是清晰的。你说过改变占空比来调速。正确。那就改变占空比就达到目的了。
举个简单“栗子”,逐步减小占空比,速度原来越慢:
for(i=0;i<255;i++)
{
CCAP0H = i ;
}
其他的自己发挥去吧 占空比固定了,当然调不了 bccuje_love 发表于 2014-9-8 21:11
占空比固定了,当然调不了
好吧,难道我用词不准确?我说的调速是调左右的速度不一样,把左右的占空比设置不一样不就是左右的速度不一样么,你们说的调速是通过按键来调么?
明显代码问题 nade 发表于 2014-9-8 21:22
明显代码问题
哪里的问题? 调速时pwm应该是变化的呀 lxa0 发表于 2014-9-8 22:08
调速时pwm应该是变化的呀
我只是在转弯的时候调速,调左右的速度不一样,使得小车转弯, 会不会电机并联的线焊错了? 搁浅的风度 发表于 2014-9-9 07:42
我只是在转弯的时候调速,调左右的速度不一样,使得小车转弯,
我说的就是在转弯的时候pwm要变化
比如向左转的话
左边的轮子速度要慢甚至要倒转
右边的轮子速度要快
这样才能向左传
而走直线的时候两边的轮子速度要一样 你还是上示波器看一下出来的波形吧 lxa0 发表于 2014-9-9 13:58
我说的就是在转弯的时候pwm要变化
比如向左转的话
左边的轮子速度要慢甚至要倒转
看你的代码,转弯的时候没有调pwn
只是在init里面设置了一下 tabing 发表于 2014-9-9 14:27
看你的代码,转弯的时候没有调pwn
只是在init里面设置了一下
我的代码是以呼吸灯形式做的试验呀
你要用的话得做改动
不可直接用 oner 发表于 2014-9-8 21:08
其实你思路还是清晰的。你说过改变占空比来调速。正确。那就改变占空比就达到目的了。
举个简单“栗子” ...
好吧,我明白了,谢谢! lxa0 发表于 2014-9-9 23:43
我的代码是以呼吸灯形式做的试验呀
你要用的话得做改动
不可直接用
嗯,好的,谢谢 tabing 发表于 2014-9-9 14:27
看你的代码,转弯的时候没有调pwn
只是在init里面设置了一下
哦,好吧,我明白了,受益匪浅! lxa0 发表于 2014-9-9 13:58
我说的就是在转弯的时候pwm要变化
比如向左转的话
左边的轮子速度要慢甚至要倒转
嗯,我知道怎么用了,谢谢 嘿嘿,顶一下顶一下 难道不应该先用示波器看PWM波形? 没有改变占空比 哪有波形呢 差速转向 应该通过占空比来调速的,占空比固定了速度如何调
页:
[1]