|
|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。& C7 O" ]# E, L6 t$ I
本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下:0 \. d$ r6 b, u" F
//交叉开关配置,将6路PWM输出配置到P0端口
0 m( {2 i, p$ q7 C* P G9 uvoid config(void)) W2 E) F$ w' @9 i; B0 n
{
; I: G$ i! @* vXBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口
- B. q' t) X( Y% I( C$ i* w6 _" BXBR1=0x00;4 F6 h: d1 @4 q* T8 V* ~
XBR2=0xc0;//开启交叉开关,全局上拉开启
8 `+ V7 Y) v0 {XBR3=0x00;
" ^7 r9 z" ], R3 Z* U9 N" {2 O A}
6 Q8 k" j( u0 c9 @//配置T0定时器,定时时间1毫秒,系统时钟24MHz% [6 c' _6 Z( C2 ]& g6 x
Void Timer_cfg(void)$ k0 F7 M) J! A& |" u$ i% W
{$ S5 Q6 J+ u1 N- g @
TMOD=0x01;//采用定时器0的方式1
7 O$ {7 O$ Z- j) xTH0=0xf8;( B% B" t0 u# m6 q' g
TL0=0x2f;* }9 K! B. B1 V8 l c; o8 R
TR0=1;; l! D) X5 g; [6 c
}
. g# Y5 W8 z8 g//配置PCA定时器
4 b( D- z( h1 B6 J7 r& o I( ?Void pcainit(void)" ^/ s& I8 @ Y/ J% _
{: S- t8 ]6 W& G/ G: q- B
SFRPAGE=0x00;
: ~: U) h8 y. \9 J8 g6 xPCA0CMP0=0x42;
2 W. c/ E% W4 F; \( a3 W( a. VPCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止1 D2 c. K3 j/ z& w, l* g+ ?% o
PCA0CN=0x40;//启动PCA计数器# k0 R: K% c0 s' m. p. d) V
}8 v T$ {. O) Y3 X2 _7 F I8 P
//占空比设置,设置为255时,可使电机停止转动
& F! p, w* u" p' M7 b" @# g c2 PVoid PWM_SET(uchar channel,uchar low)/ O; D' T* j% E# n- M' C) E
{
% n2 s" i% m. r! n" @' M5 r, Y4 @SFRPAGE=0x00;
- @; X3 M' Q% ]Switch(channel)3 Q3 U. I- B! v
{% V4 U: i; T' T8 t, z, }; e
Case 0:PCA0CPH0=low;break;
( K' H" X0 R/ R4 _Case 1:PCA0CPH1=low;break
, a3 Z1 V5 ]5 [1 mCase 2:PCA0CPH2=low;break
7 V* [+ A/ e8 N" V( ~2 ACase 3:PCA0CPH3=low;break4 Q4 {) S* U7 O5 Q
Case 4:PCA0CPH4=low;break
0 U) P8 U( N e9 F; lCase 5:PCA0CPH5=low;break% g @8 s9 i; \* S/ A
Default:break;
9 A- ^) |9 Q0 V" P9 @}/ H& r2 N1 l# H2 w* B0 K
}' ^: m, d% J3 A& }9 l9 `+ _3 i- P
//运动方向设置
* F) S; @& M- [3 `Void Direct_set(uchar channel,bit dir); ?$ B; i' V7 V9 g+ P9 ?" c
{
7 O, y- x$ W7 m s; ]Switch(channel)7 x2 { G% T! @* @: n$ `5 G
{
; m3 w; W5 D% `5 X- j- i6 |Case 0:P4.0=dir;break;
# I4 g! K7 O( z% G: _2 iCase 1:P4.1=dir;break; {- S7 S/ Y* ?) j5 h' K
Case 2:P4.2=dir;break1 e; m) A& r! K4 G/ S- T5 l$ G
Case 3:P4.3=dir;break$ w) E5 T) i$ M' T
Case 4:P4.4=dir;break
1 g0 T% G1 b1 QCase 5:P4.5=dir;break5 h; u' ^2 N& I1 k( y$ Z% i9 D
Default:break; W( O& D7 q* c* R
}
1 d3 Z; I' o% b1 ~* `}
+ k% F6 {2 T& A9 W: Y. e在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|