|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。/ s/ q4 Z% j, p
本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下:
4 f0 L! n) P" d' g; f' j! D//交叉开关配置,将6路PWM输出配置到P0端口: E# J! l8 L7 d+ b n
void config(void)
1 ~5 N9 E* A8 z% `{
( k0 Z) g2 d' [5 @XBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口6 b2 t2 o! C$ `0 k3 V4 S( [
XBR1=0x00;
) p5 R, J) j. lXBR2=0xc0;//开启交叉开关,全局上拉开启. K# V% }+ t: [1 u; X& H: s
XBR3=0x00;4 w( l" C- X/ v( x& X; s$ x; `& h1 b
}! T6 Q" Z( Q- b# j
//配置T0定时器,定时时间1毫秒,系统时钟24MHz8 Y2 ^/ b) ~1 f
Void Timer_cfg(void)7 b7 ^ c3 j, `# [8 y8 E2 k
{7 w* ~- u0 c! S0 L6 ]5 c8 \7 n; |
TMOD=0x01;//采用定时器0的方式1# |# q) Z' g* q9 A+ f$ e$ x
TH0=0xf8;
4 ^$ q8 s3 d" G* M n( z: nTL0=0x2f;) ?" `) u5 H' k }
TR0=1;
6 @- v0 N6 g" o" g7 A2 o" v}1 k, R5 N6 k9 _* z$ c
//配置PCA定时器
- k0 Q& _) F8 O5 ]4 BVoid pcainit(void)9 L8 M8 ^& m7 i0 N: T% `- B
{. D! [1 e0 w& ?* Z9 x
SFRPAGE=0x00;
; {# p% ~" D& Q$ X* u7 R9 APCA0CMP0=0x42;
* ^0 p) K* ^6 [' A6 z5 z3 O7 fPCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止
/ z1 j4 k' g3 |- L$ X# lPCA0CN=0x40;//启动PCA计数器
2 G& y8 v! c# N4 [9 [ E& R4 R}+ h. ^8 n' b7 k% i
//占空比设置,设置为255时,可使电机停止转动" P c6 |3 O/ L! q: v+ u
Void PWM_SET(uchar channel,uchar low)
7 s m1 Z6 X1 B8 H2 |6 \/ F; {0 D. s{
. I( U" c% z5 ^SFRPAGE=0x00;: ]7 G# E5 i c' l- c, U. m+ V
Switch(channel)3 V, X* a! l2 Z0 {
{
1 ~3 X' K$ L/ A: e4 z& ?Case 0:PCA0CPH0=low;break;" N4 A! M3 c/ n& E
Case 1:PCA0CPH1=low;break
9 N5 q" n, X: t5 bCase 2:PCA0CPH2=low;break# ~6 |( p8 u1 V0 x
Case 3:PCA0CPH3=low;break
; ~* ]: ^* G) ]" i* W bCase 4:PCA0CPH4=low;break
: I% s$ j" j& C |Case 5:PCA0CPH5=low;break
: }& t C: i* F% E6 l, c; L! eDefault:break;
/ [, P5 J# J" b& M; @9 a}6 A) D, I8 K: x& b2 U4 U
}& ^) @ U) K3 _& v6 K* f- u$ i
//运动方向设置5 N6 Q# I& ?1 Z& z6 M/ }
Void Direct_set(uchar channel,bit dir)$ T2 v: W8 }( q( C/ }* s; Q
{8 H9 E+ |2 O4 o! |3 F6 q
Switch(channel)0 N) f" l, N9 @* y
{
1 ^2 r3 Y" S* q) _& P: qCase 0:P4.0=dir;break;( r6 i1 V" B# G
Case 1:P4.1=dir;break
) B8 y# X, V/ F9 C8 x% CCase 2:P4.2=dir;break$ S" @& i) }" r9 n8 g
Case 3:P4.3=dir;break
- u6 t" a6 S" F! W+ L1 L" RCase 4:P4.4=dir;break2 R+ I( D1 z7 ~8 a6 i7 _
Case 5:P4.5=dir;break2 [$ X- `$ M# Z/ J3 x' g8 V
Default:break;
7 D4 q5 Y; B+ X, |0 \}
) ]4 ^& F( v+ X8 z0 I}
" m2 L2 A, e5 x' q6 o& _ B' N在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|