智能车制作
标题:
如何使用两个 IO+两路 PWM 来控制两个轮子的正反向
[打印本页]
作者:
qyy1234567
时间:
2018-11-30 22:46
标题:
如何使用两个 IO+两路 PWM 来控制两个轮子的正反向
如何使用两个 IO+两路 PWM 来控制两个轮子的正反向
作者:
qyy1234567
时间:
2018-11-30 22:50
最好有代码让我看看 第一次做智能车 啥都不太会
补充内容 (2018-12-1 01:12):
AT89C51的板子
作者:
The-answer
时间:
2018-12-6 15:57
一把都是四路PWM才可以控制正反转,;两路只能控制往一个方向转,但是和你的驱动有关系,比如某些负电压驱动的,输入负的PWM就可以反转,又比如L298N这种有使能端的,可以用一路PWM加两个IO控制正反转。我感觉是这样,我是新手,如有说错请见谅
作者:
小白411
时间:
2018-12-17 19:38
我来说说我的解决方案 ,
首先我用的是德科技术大功率驱动板,驱动板的使用说明为:
“IN1和IN2控制左边的驱动,IN3和IN4控制右边的驱动。当IN1给PWM,IN2给0,即正转,当IN1给0,IN2给PWM,即反转。二边都给0,或者给反方向速度就刹车。”
淘宝详细网址为“
https://item.taobao.com/item.htm ... amp;id=551846152310
”
在该界面有详细的硬件说明。
希望能有所帮助。
新手答题,如有谬误,勿怪。
作者:
小白411
时间:
2018-12-17 21:02
本帖最后由 小白411 于 2018-12-17 21:10 编辑
我曾用过两块STC12C5A60S2作主控,该芯片有2路PCA模块可以输出PWM信号,配合德科技术电机驱动板,就可以做到控制小车前进后退。程序如下:
#include "reg51.h"
#include "intrins.h"
#define FOSC 11059200L
typedef unsigned char BYTE;
typedef unsigned int WORD;
/*Declare SFR associated with the PCA */
sfr CCON = 0xD8; //PCA control register
sbit CCF0 = CCON^0; //PCA module-0 interrupt flag
sbit CCF1 = CCON^1; //PCA module-1 interrupt flag
sbit CR = CCON^6; //PCA timer run control bit
sbit CF = CCON^7; //PCA timer overflow flag
sfr CMOD = 0xD9; //PCA mode register
sfr CL = 0xE9; //PCA base timer LOW
sfr CH = 0xF9; //PCA base timer HIGH
sfr CCAPM0 = 0xDA; //PCA module-0 mode register
sfr CCAP0L = 0xEA; //PCA module-0 capture register LOW
sfr CCAP0H = 0xFA; //PCA module-0 capture register HIGH
sfr CCAPM1 = 0xDB; //PCA module-1 mode register
sfr CCAP1L = 0xEB; //PCA module-1 capture register LOW
sfr CCAP1H = 0xFB; //PCA module-1 capture register HIGH
sfr PCAPWM0 = 0xf2;
sfr PCAPWM1 = 0xf3;
void Delay100ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
EA=1; //使能总中断
TMOD=0x01; //设置T0为模式1
TH0=(65536-1000)/256; //为T0赋值,定时1ms
TL0=(65536-1000)%256;
TR0=1; //启动T0
ET0=1; //使能T0中断
CCON=0; //初始PCA
CL=0; //重置PCA
CH=0;
CMOD=0x0a; //将PCA定时器时钟源设置为Fosc/4
CCAP0H=CCAP0L=0x80; //PCA0占空比为50%
CCAP1H=CCAP1L=0xff; //PCA1占空比为0%
CCAPM0=0x42; //PCA模块0工作在8位PWM模式,没有PCA中断
CCAPM1=0x42; //PCA模块1工作在8位PWM模式,没有PCA中断
CR=1; //PCA定时器开始运行
while(1);
}
void Timer0()interrupt 1
{
unsigned long cnt; //计数变量cnt
bit dir; //方向变量dir
TH0=(65536-1000)/256; //定时器重新赋值
TL0=(65536-1000)%256;
cnt++;
if(cnt>=10000) //10s计时
{
cnt=0; //cnt归零
if(dir==0) //dir=0时
{
CCAP0H=CCAP0L=0xff; //PCA0占空比为0%
Delay100ms();
CCAP1H=CCAP1L=0x80; //PCA1占空比为50%
}
else //dir=1时
{
CCAP1H=CCAP1L=0xff; //PCA1占空比为0%
Delay100ms();
CCAP0H=CCAP0L=0x80; //PCA0占空比为50%
}
dir=~dir; //改变方向
}
}
复制代码
该程序可以做到轮子正反转,PWM输出,以10s为间隔改变运动方向。
此方案的缺点为:需要两个芯片才可以控制一辆车,改进方案为使用有4路PCA的单片机,如STC8A8K16S4A12。使用一个单片机就可以控制一辆车。
作者:
小白411
时间:
2018-12-17 21:03
本帖最后由 小白411 于 2018-12-17 21:09 编辑
附德科技术的电机驱动板的链接:
https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-15159252443.12.3e096513bAL0Lj&id=545832795401
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2