|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。/ e' h7 @2 }- d [( z1 m, h
本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下: |; w8 P) o: \
//交叉开关配置,将6路PWM输出配置到P0端口
" A+ D2 B1 s/ W5 R0 pvoid config(void)
0 f( I2 b9 t, U9 M Z# l7 s6 Y{
$ n" M4 Z5 T8 L1 o. V! `6 c) x% AXBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口( ^0 V: H g. Q( x, j
XBR1=0x00;
$ X9 g% U$ }8 gXBR2=0xc0;//开启交叉开关,全局上拉开启
2 |3 C/ C) M) m# L" L, C2 GXBR3=0x00;( m/ F* B, e4 F) H6 l
}
1 e3 i$ O6 w0 C. @) w7 S//配置T0定时器,定时时间1毫秒,系统时钟24MHz
2 z" K$ Y$ S- OVoid Timer_cfg(void)
# m$ y m$ R1 u{
: ^$ \1 p$ O! q+ J8 WTMOD=0x01;//采用定时器0的方式1
8 G* @6 s$ y# ]) c x4 DTH0=0xf8;
) x3 i: |! \; U' a& XTL0=0x2f;. ~2 d; T2 T' d
TR0=1;3 k2 u2 z" z( I0 h9 m9 I1 \( ]+ z
}1 z* J$ K6 H$ s7 s$ U1 i, ?7 _9 S1 v
//配置PCA定时器
% m+ x! N6 i# nVoid pcainit(void)- g! i' W( E8 _
{
3 f' ?. u2 H) C; _8 @0 `- S m" W% tSFRPAGE=0x00;0 g4 _5 R. I5 a/ H8 x# h. Z5 W' w6 V
PCA0CMP0=0x42;
1 K2 o% V3 J# D, aPCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止
& R7 t9 P+ Q& _2 ?6 E5 zPCA0CN=0x40;//启动PCA计数器0 y- u$ M" l$ l
}: B7 Z. y$ J( _7 X, q+ E
//占空比设置,设置为255时,可使电机停止转动
1 I; r% `! T; X8 R% t) QVoid PWM_SET(uchar channel,uchar low)
- J9 A- i$ a. p% S{
" S0 t L5 c9 p) b0 L7 W. c4 c8 qSFRPAGE=0x00;% I+ t0 [* `2 ~, U* @
Switch(channel); K$ n6 ]( c2 }2 U4 d$ r1 v
{
- Q6 t: l9 z8 G$ [8 q" a9 m: qCase 0:PCA0CPH0=low;break;
+ C) R# o5 G2 T: A! XCase 1:PCA0CPH1=low;break/ L# L( ]5 _3 D
Case 2:PCA0CPH2=low;break% x% d! D7 q! B5 G& n2 M: G: W. P/ S
Case 3:PCA0CPH3=low;break
+ E1 r) }' P, z7 F4 V! OCase 4:PCA0CPH4=low;break6 c6 s. X0 C; ?9 X& o
Case 5:PCA0CPH5=low;break
) e! i( \8 l1 |, Z6 j; lDefault:break;
/ ^8 @, R1 c+ d* A, f* \1 X& s}
$ s8 q; J! C2 A* q) g}$ g0 Y# z! k/ Z5 J1 ]/ X$ ]- p5 d
//运动方向设置
1 l1 a+ b- [3 v, PVoid Direct_set(uchar channel,bit dir)
# M8 @0 K& M. w" N$ }' i! P; M{" {& H5 F$ I3 _
Switch(channel); Z+ y2 n4 q9 M6 v9 U4 R; w
{
$ u' s& W% t4 O- VCase 0:P4.0=dir;break;
8 H2 w, s# |! J8 G) u' @Case 1:P4.1=dir;break
! U! I1 u, o8 J* l+ w! _1 L4 q( W( }Case 2:P4.2=dir;break
. H4 {2 L8 ~4 @: M; Q- e1 R+ {Case 3:P4.3=dir;break, i' G# N- T) A$ L1 z6 a) s" h
Case 4:P4.4=dir;break
1 B% h9 S5 |! @4 QCase 5:P4.5=dir;break
! Q: Z% @; k7 uDefault:break;. e$ l3 n& P# E: z' M# n7 M
}
& \/ `8 V4 J7 \% A}- w$ V8 j o5 O' z* y- w0 z. X& l: m2 O
在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|