|
发表于 2008-9-2 22:20:47
|
显示全部楼层
来自: 中国河北石家庄
使用C8051F040高速SOC单片机、L298N直流电机驱动芯片,软件编程可在Siliocn Labortories集成开发环境(DIE)下通过JATG接口进行编程,不需要专用编程器或适配器;还可以通过用户软件对FALSH进行编程,允许现场更新固件为产品的软件升级提供了极大的方便。' h" z4 ~! X1 f. s# M
本设计中的应用程序是在Keil C51的开发环境下编译后用EC-3仿真器下载到芯片中运行的。主要程序代码如下:4 b0 |* c3 C0 P' v; w7 W( n/ r
//交叉开关配置,将6路PWM输出配置到P0端口9 T% W- V3 S! N9 a+ L2 Y# W1 N
void config(void)* q. }, ?+ S8 V4 f8 E: |; T: r
{ V O, f! _8 d2 v. ~. k3 D8 L. o
XBR0=0x30;//将6路PWM输出配置到P0.0-P0.5端口
! \0 [* K1 X& ^0 q; ^XBR1=0x00;
! n$ x" u6 `; i/ rXBR2=0xc0;//开启交叉开关,全局上拉开启
5 ]0 { D* _. q2 l+ UXBR3=0x00;
0 y: G4 w f6 `! A4 n" p$ {}$ c3 C7 J" n2 ^* M+ Z
//配置T0定时器,定时时间1毫秒,系统时钟24MHz
. {' s9 ~7 L1 f) E; y6 I$ I4 jVoid Timer_cfg(void)' z& O0 v+ f7 ^. X3 F: k% |
{
: T, D2 N, `* \1 W, xTMOD=0x01;//采用定时器0的方式1( Z5 t& X5 L" H" H# o0 c9 o& t
TH0=0xf8;8 @! H+ ^% h/ S# \$ a' S
TL0=0x2f;
( [- |8 J. {2 _/ h+ n1 D6 w3 pTR0=1;/ N" S& V3 M5 F4 H$ i
}
9 b" q5 T2 z' ] }% B1 ]//配置PCA定时器' {5 L7 Y ?' | s; l3 y% |: E
Void pcainit(void)2 R6 s& X& z6 X+ g/ R% G% \
{8 @6 i4 q+ i/ l! W
SFRPAGE=0x00;- S$ r! b7 W; J I/ `6 }$ C( m
PCA0CMP0=0x42;/ |1 t5 I; h7 i2 k2 Y0 @7 l
PCA0MD=0x04;//PCA采用T0溢出时钟,且PCA溢出中断禁止; `, F7 H s2 V4 I
PCA0CN=0x40;//启动PCA计数器
- M6 B& ^% X4 b* {$ ]6 k) B8 ]- g% R3 i}; x9 e. v( E9 {
//占空比设置,设置为255时,可使电机停止转动
; r4 B, l- j+ i, l- ?! x" q9 _Void PWM_SET(uchar channel,uchar low)3 m' O/ q6 P4 s2 V, \ {
{
9 b9 R( i! a- A4 ~( JSFRPAGE=0x00;; W; U" F* h P8 a) \4 X+ s
Switch(channel)( r% J& Q: \% Q: O% e9 ?
{
1 O; P3 m6 N& H0 _0 W7 I3 A& }5 sCase 0:PCA0CPH0=low;break;
# }8 C6 o! w' B8 D8 XCase 1:PCA0CPH1=low;break' C6 a" D- ]" ^0 V3 {* D" M
Case 2:PCA0CPH2=low;break
2 z' I- _ T% x) M3 r7 ^Case 3:PCA0CPH3=low;break
& s [# P# f) d6 pCase 4:PCA0CPH4=low;break3 F! f# F5 y. l, F6 F
Case 5:PCA0CPH5=low;break
8 O9 v" d- a1 z5 R! e$ t- U* XDefault:break;2 C9 G' R% \+ H# \1 m9 u% V
}
) X7 C$ M4 b2 a}8 |( G1 |: S3 u/ m- K: G6 ~; h
//运动方向设置
4 z& |3 m0 z+ |% W& CVoid Direct_set(uchar channel,bit dir)4 d) y% E3 c9 L( ?
{
; q: f0 u: U0 h" n0 P( H1 O1 aSwitch(channel)) a- Z& E+ z; J! s+ I- n/ l7 }
{
5 S! f. b7 i0 I! FCase 0:P4.0=dir;break;
/ g- u. t* D5 v6 ]* W! }Case 1:P4.1=dir;break
2 s) f% r8 _2 v" kCase 2:P4.2=dir;break
2 W' y, M( o/ b3 KCase 3:P4.3=dir;break5 ~& F& Z. I; C2 G+ g% R1 A7 d4 r6 G$ K
Case 4:P4.4=dir;break/ y) w8 a: B$ m9 J+ C4 d! y, k7 ?5 e
Case 5:P4.5=dir;break& L; x* t2 ?1 z8 w- Y. e, v; f
Default:break;- v9 @: Y0 U4 _
}* Z& V% p' i, R9 B0 S9 R
}% }8 N0 U3 U4 ~, p' r
在电机起动时,先输出高占空比的PWM信号,让电机获得较大的起动力矩,然后再过渡到设定的PWM脉宽。另外结合片内的A/D转换器检测Rsa上的电压,可得到电机的工作电流,以此为依据对电机的运行状态进行检测,保证电机的运行安全。 |
|