|
|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。
% p+ L! ?& {0 m! A% ?* V本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下:
; a. o# X7 j: O' \( K: L+ Q( T: {//交叉开关配置,将6路PWM输出配置到P0端口
& R M: j8 T% Evoid config(void)
; L: L7 ~0 S( W3 n& e{% x4 D, c, C) Z; L
XBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口
; h5 S" J) U& d- `. X; K8 NXBR1=0x00;
2 c7 v% ^4 a" R: c" U1 o. s5 D' }( BXBR2=0xc0;//开启交叉开关,全局上拉开启# {; F! f4 q# W6 _7 p
XBR3=0x00;9 g' r; ` u! H( I
}; ?9 R* C1 s# V" R; @6 c& ?
//配置T0定时器,定时时间1毫秒,系统时钟24MHz
8 t( n: o5 s) W5 S+ q; RVoid Timer_cfg(void)
P0 p' e' ^8 E# k0 j4 e{4 f# F8 _2 ]9 [- a' U; y
TMOD=0x01;//采用定时器0的方式1
8 E7 o* l3 U- D. RTH0=0xf8;, H8 i7 d. O3 h& `# `
TL0=0x2f;6 s6 ~' w" d% T' I: s9 O
TR0=1;
! z1 ^7 U4 t# n& S% b( ~# O- P}
* K+ k8 `! [3 f2 ^//配置PCA定时器 ^8 [. h( z7 R* f
Void pcainit(void)
; J+ a3 b: l9 {{9 F1 ?; L2 }. Z2 D9 D% X
SFRPAGE=0x00;0 A. f/ x X0 h: o/ c
PCA0CMP0=0x42;- r0 W' `2 r( Z: C- l, b) e4 Q* a0 w
PCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止/ K$ x* F2 A. T. Y3 m: `
PCA0CN=0x40;//启动PCA计数器- y. f4 G$ U! C
}+ c M+ Q) z! I" l6 Z }
//占空比设置,设置为255时,可使电机停止转动
, @. f) W4 J) p$ ?2 AVoid PWM_SET(uchar channel,uchar low)3 e6 D6 Y, }4 p8 m. B0 R0 B
{
( l+ w6 w" C/ K/ hSFRPAGE=0x00;: B" c9 x6 R+ Q. X8 F! M
Switch(channel)
( O) R* J9 j: a r3 \. E4 G" }{
7 U k# D7 G0 {Case 0:PCA0CPH0=low;break;, U, [8 X0 J0 N
Case 1:PCA0CPH1=low;break2 l0 c/ g( S* l' `9 h
Case 2:PCA0CPH2=low;break: U& D: |# I2 X1 @. Q; d
Case 3:PCA0CPH3=low;break
1 V- L: W- n% y& V- b+ j7 nCase 4:PCA0CPH4=low;break: d- c$ a- q) W W
Case 5:PCA0CPH5=low;break
; U& p# D7 m. q ~- QDefault:break;
5 U, j w8 d9 X$ [}0 \! j% p6 S8 |
}, y, e8 `* V. ^* L! [$ v/ a
//运动方向设置( H: w6 ?" {; x
Void Direct_set(uchar channel,bit dir)& o+ h5 Q9 n' F$ L0 c8 \
{
5 y8 T9 ~) L& ]" i: K6 {Switch(channel)
1 I, C" S9 O3 x& J{
$ h5 m2 H/ {2 i( b# q* u) cCase 0:P4.0=dir;break;
+ p- T2 I# d5 M; eCase 1:P4.1=dir;break5 |) L3 e' I! r% o
Case 2:P4.2=dir;break' ~. h X) M* M$ n a
Case 3:P4.3=dir;break
. I/ N5 P/ }: H$ xCase 4:P4.4=dir;break1 d$ l( }; M5 h1 }: K$ @; D
Case 5:P4.5=dir;break
! y; R! ]6 ]# [. `* c/ _Default:break;7 M# G8 F H% L3 R) f( C* ^
}
( ~6 m' G# m; v+ M}6 L3 S1 F0 | n; u7 u
在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|