Người báo cáo: Nguyn Quang Nam Tài liu: TUT06.01
Ngày: 10/3/2006 Trang: 1/6
Tutorial no 06.01
Gi đến: Đoàn Hip, www.picvietnam.com
Ni dung: S dng các module ADC và MCPWM ca dsPIC
MICROSOFT WORD
Tóm tt:
Đây là tutorial 5 v lp trình vi dsPIC. Tutorial này hướng dn cách s dng module ADC và
MCPWM ca dsPIC, là nhng module ngoi vi có sn trong các chip dsPIC. Các ví d được viết
bng hp ng và ngôn ng C (dùng trình dch C30 Compiler ca Microchip), và trong đa s trường
hp hai phiên bn hp ng và C30 là hn tn tương đương.
1. Gii thiu
Tutorial này gii thiu các module ADC và MCPWM ca dsPIC. Trước tiên, các
thông tin chung v các module ADC và MCPWM s được gii thiu, cùng vi mt trình
t thiết lp chế độ làm vic cho mi module. Kế đến, các ví d s minh ha cách s
dng các module này trong thc tế. Ví d 5-1 s gii thiu cách điu chnh độ rng
xung theo mt giá tr tương t được đọc v thông qua mt ngõ vào analog. Ví d 5-2
minh ha mt chế độ làm vic khác ca module ADC. Mt s chú ý s được nêu ra khi
cn thiết.
2. Các quy ước trong tài liu
Mô t Biu th Ví d
Font Palatino Linotype:
In nghiêng Tài liu tham kho dsPIC30F/33F
Programmers Reference
Manual
Viết hoa ch đầu Mt menu, hp thoi Chn Project Wizard
Đặt trong du nháy kép Tên riêng (ca tp tin,
project, ) Vidu3”
Font Courier:
Mã ngun mov #0x8010, W0
Courier thường Tên tp tin Vidu3-1.s
Người báo cáo: Nguyn Quang Nam Tài liu: TUT06.01
Ngày: 10/3/2006 Trang: 2/6
3. Các ví d v module ADC và MCPWM
Bn hãy chép các tp tin ngun được đính kèm vào mt thư mc nào đó mà bn s
dùng để to ra project Vidu5”.
3.1. Gii thiu v các module ADC và MCPWM
Các chip dsPIC có module ADC thuc mt trong hai dng: 10-bit vi tc độ lên đến
1 MSPS (triu mu/giây) hay 12-bit vi tc độ lên đến 200 kSPS (nghìn mu/giây). Các
module ADC được thiết kế nhm phc v cho các mc đích khác nhau. Trong các
dsPIC thuc dòng điu khin động cơ (mà chip 4012 đang được xét là mt trong s đó),
module ADC là loi 10-bit vi tc độ cao, nhm đáp ng yêu cu v tc độ ly mu ca
các b điu khin truyn động đin. Các b ADC trong các dsPIC s dng thut toán
chuyn đổi SAR, do đó có thi gian chuyn đổi đã được xác định trước.
Vic chuyn đổi tín hiu t dng tương t sang dng s bao gm hai giai đon: giai
đon ly mu tín hiu (sampling) và giai đon chuyn đổi (conversion). Bn có th bt
đầu giai đon ly mu bng tay hay t động. Thi đim chm dt ly mu (và bt đầu
chuyn đổi) có th do người dùng xác định (bng cách tt bit SAMP) hay được mt
ngoi vi nào đó xác định (mt timer dành riêng, module MCPWM, Timer 3, hay chân
INT0). Như vy thi gian ly mu là khác nhau vi các thiết lp khác nhau. Giai đon
chuyn đổi d liu cn có 12 xung clock cho module ADC, vi mt chu k xung clock
TAD có th được chn là t TCY/2 đến 32TCY. TCY chính là thi gian ca mt chu k máy.
Module ADC ca dsPIC có 4 b khuếch đại S/H (Sample and Hold), được đánh địa
ch là kênh 0 đến kênh 3. Bn có th ch dùng kênh 0, hay dùng kênh 0 và 1, và cũng có
th dùng c 4 kênh cho vic thu thp d liu. Kênh 0 là kênh linh hot nht trong vic
chn la các ngõ vào tương t. B đệm ca module ADC có th cha được ti đa 16 kết
qu.
Module ADC cn được thiết lp cu hình theo nhng bước sau:
Chn các chân dùng làm ngõ vào analog bng các bit ADPCFG<15:0>
Chn ngun đin áp chun bng các bit ADCON2<15:13>
Chn tc độ xung clock cho module ADC phù hp vi tc độ d liu và tc độ ca
b x lý bng các bit ADCON3<5:0>
Xác định bao nhiêu kênh S/H s được dùng bng các bit ADCON2<9:8> và
ADPCFG<15:0>
Xác định cách thc ly mu bng các bit ADCON1<3> và ADCSSL<15:0>
Chn th t ly mu/chuyn đổi thích hp bng các bit ADCON1<7:0> và
ADCON3<12:8>
Chn cách biu din kết qu chuyn đổi trong b đệm bng các bit ADCON1<9:8>
Người báo cáo: Nguyn Quang Nam Tài liu: TUT06.01
Ngày: 10/3/2006 Trang: 3/6
Chn tc độ to ngt bng các bit ADCON2<5:9>
Bt module ADC bng bit ADCON1<15>
Nếu có s dng ngt, cn thiết lp thêm cu hình cho ngt A/D:
Xóa bit ADIF
Chn độ ưu tiên cho ngt A/D
Chú ý: Ngun áp chun ngoài cn được dùng cho các tc độ chuyn đổi t 500 kSPS
tr lên.
Các bit ADCS<5:0> (ADCON3<5:0>) được dùng để thiết lp tc độ xung clock cho
module ADC. Giá tr ca ADCS<5:0> được xác định t công thc:
1
2=
CY
AD
T
T
ADCS
Giá tr được chn ca TAD không được phép nh hơn 83.33 ns.
Nếu vic chuyn đổi A/D được thc hin trong chế độ Sleep, cn phi dùng b dao
động RC dành riêng cho module ADC bng cách đặt bit ADRC(ADCON3<7>). Khi đó
giá tr ca các bit ADCS<5:0> không có ý nghĩa đối vi hot động ca module ADC.
Module MCPWM có nhiu ngõ ra được điu chế độ rng, thích hp cho các ng
dng điu khin động cơ, hay các ngun xung. Mt s dsPIC có nhiu module
MCPWM, và mt module có th có 6 hay 8 ngõ ra. Đối vi dsPIC30F4012 đang được xét
đây, chip có mt module vi 6 ngõ ra, gm 3 cp b ph (complementary).
Các dsPIC vi module MCPWM có 6 ngõ ra s có 3 b điu chế độ rng độc lp, vi
độ phân gii là TCY/2, tương ng vi 3 cp ngõ ra b ph. Các cp ngõ ra này cũng có
th được s dng độc lp, vi trng thái tích cc được thiết lp bng các bit cu hình.
Module MCPWM h tr nhiu kiu ngõ ra: gióng hàng theo cnh hay theo đim gia,
chế độ to xung duy nht, hay gióng hàng theo đim gia có cp nht kép.
Module MCPWM có th to ngt đặc bit để đồng b các phép chuyn đổi A/D. Nó
cũng h tr to thi gian chết (dead time) cho chế độ dùng ngõ ra b ph, và có mt s
chân phát hin s c bng phn cng.
Có th khi to hot động ca module MCPWM theo trình t sau:
Xác định thi gian cho mt chu k xung bng cách đặt mt giá tr 15-bit vào thanh
ghi ngưỡng đếm chu k xung PTPER, theo công thc
1
Prescaler
×
=PTMRf
f
PTPER
PWM
CY , cho gióng hàng theo cnh
1
2Prescaler
××
=PTMRf
f
PTPER
PWM
CY , cho gióng hàng theo đim gia
Người báo cáo: Nguyn Quang Nam Tài liu: TUT06.01
Ngày: 10/3/2006 Trang: 4/6
Thiết lp thanh ghi SEVTCMP cho vic to ngt s kin đặc bit (nếu cn)
Thiết lp chế độ dùng các chân PWM bng thanh ghi PWMCON1
Thiết lp vic dùng overdrive trong thanh ghi OVDCON
Đặt giá tr chu k nhim v vào các thanh ghi PDCx tương ng. Chú ý là độ phân
gii ca chu k nhim v là TCY/2, còn độ phân gii ca chu k xung là TCY. Do đó,
chng hn PTPER = 0x7F thì PDCx = 0xFF mi là chu k nhim v = 100%.
Thiết lp postscaler cho vic to ngt s kin đặc bit, cách thc cp nht thanh ghi
chu k nhim v và vic đồng b overdrive bng thanh ghi PWMCON2
Thiết lp prescaler và postscaler cho thanh ghi đếm chu k xung, chế độ đếm chu
k xung và kích hot vic đếm chu k xung bng thanh ghi PTCON
Khi các ngõ ra PWM được s dng chế độ b ph, b to thi gian chết được t
động cho phép để tránh cho các linh kin công sut b trùng dn. Mi cp ngõ ra b ph
được dành riêng mt thanh ghi đếm thi gian chết 6-bit, vi mt prescaler giúp cho vic
to thi gian chết được linh hot hơn.
Mt (hay nhiu) chân phát hin s c cũng có th được dùng để đưa các ngõ ra
PWM v mt trng thái xác định khi xy ra s c, bng tác động ca phn cng.
Tín hiu s kin đặc bit luôn luôn được module MCPWM to ra, và module ADC
có th dùng nó để đồng b vic chuyn đổi vi vic to xung PWM. Tín hiu s kin
đặc bit này có th dùng vi mt postscaler t 1:1 đến 1:16, và điu này s có ích nếu
vic chuyn đổi A/D không cn phi được thc hin mi chu k PWM.
Thông tin chi tiết v module ADC và MCPWM có th được tìm thy các chương
15 (module MCPWM) và 17 hay 18 (module ADC) ca tài liu dsPIC30F Family Reference
Manual (DS70046-phiên bn hin ti là DS70046E).
3.2. Ví d 5-1
Làm theo các bước như trong tutorial 1 để to ra mt project có tên là Vidu5”, sau
đó bn thêm vào project tp tin ngunVidu5-1.s và kch bn liên kết
p30f4012.gld cho trường hp dùng hp ng. Đối vi trường hp dùng C30, chúng
ta cũng to mt project theo cách tương t, ch khác là chúng ta s chn Microchip C30
Toolsuite” bước 2, và tp tin ngun được s dng làVidu5-1.c.
Trong ví d này, mt giá tr đin áp t 0V đến VDD được đặt vào ngõ vào AN0/RB0
(s dng mt biến tr vi đim gia ni vào AN0/RB0), chương trình s đọc giá tr đin
áp thông qua module ADC và điu chnh độ rng ca xung ti các ngõ ra PWM1L/RE0,
PWM2L/RE2, và PWM3L/RE4 mt cách tương ng. Nếu bn có dao động thì bn có
th theo dõi s thay đổi độ rng ca xung (tn s xung được gi c định 40 kHz), nếu
không có dao động thì bn có th dùng mt VOM để đo giá tr trung bình ca dng
Người báo cáo: Nguyn Quang Nam Tài liu: TUT06.01
Ngày: 10/3/2006 Trang: 5/6
sóng đin áp ra ti PWM1L/RE0, PWM2L/RE2, và PWM3L/RE4. Chương trình khá trc
quan và đã được chú thích đầy đủ, do đó không cn gii thích thêm đây.
Mch nguyên lý chung cho ví d này và ví d 5-2 được th hin trong hình 3.1.
CLKIN/OSC1
9
RC15/CLKO/OSC2
10
MCLR
1
RB0/CN2/VREF+/AN0/EMUD3
2
RB1/CN3/VREF-/AN1/EMUC3
3
RB2/CN4/SS1/AN2
4
RB3/CN5/INDX/AN3
5
RB4/CN6/IC7/QEA/AN4
6
RB5/CN7/IC8/QEB/AN5
7
RC13/CN1/U1ATX/T2CK/SOSCI/EMUD
11
RC14/CN0/U1ARX/T1CK/SOSCO/EMUC
12
EMUC2/OC1/IC1/INT1/RD0
15
EMUD2/OC2/IC2/INT2/RD1
14
RE0/PWM1L 26
RE1/PWM1H 25
RE2/PWM2L 24
RE3/PWM2H 23
RE4/PWM3L 22
RE5/PWM3H 21
FLTA/INT0/RE8 16
RF2/SDA/SDI1/U1RX/EMUC/PGC 18
RF3/SCL/SDO1/U1TX/EMUD/PGD 17
AVDD 28
AVSS 27
U1
DSPIC30F4012DIP
Vdd
X1
8MHz
C1
33pF
C2
33pF
Vdd
R1 33k
T1IN 11
R1OUT 12
T2IN 10
R2OUT 9
T1OUT
14
R1IN
13
T2OUT
7
R2IN
8
C2+
4
C2-
5
C1+
1
C1-
3
VS+
2
VS-
6
U3
MAX232
C3 1u
C4
1u
C5
1u
C6
1u
Vdd
Chan 2
Chan 3
PWM1L
PWM2L
PWM3L
RV1
5k
Hình 3.1: Mch nguyên lý ca phn cng dùng cho các ví d 5-1 5-2
Nhng đim cn chú ý trong ví d này là module MCPWM được dùng để kích hot
vic chuyn đổi A/D, vi module ADC làm vic chế độ ly mu t động. Hơn na,
module MCPWM ch s dng các chân PWM1L, PWM2L, và PWM3L mt cách độc lp.
3.3. Ví d 5-2
Thc hin các thao tác tương t như trong tutorial 2, bn hãy loi b tp tin
Vidu5-1.s khi project, và thêm tp tinVidu5-2.s vào project (vi project viết
bng C30 thì bn s thayVidu5-1.c bngVidu5-2.c).
Ví d này cũng thc hin mt vic khá đơn gin là đọc giá tr đin áp ti ngõ vào
AN0/RB0 sau mi giây, sau đó gi kết qu đã đọc ra cng RS-232 ( dng s hex). Mã
ngun chương trình đã chú thích khá chi tiết, do đó không cn gii thích thêm đây.
Đim cn chú ý ví d này là module ADC s dùng b định thi dành riêng để t
chm dt ly mu và kích hot chuyn đổi A/D. Ngoài ra, module ADC làm vic chế
độ t động ly mu (ly mu ngay sau khi module được kích hot).
4. Tóm tt
Qua tutorial này, các module ADC và MCPWM ca dsPIC đã được gii thiu.
Nhng thông tin khái quát v các module ADC và MCPWM ca dsPIC đã được đề cp.
Mt trình t khi to cho các module ADC và MCPWM cũng đã được đề ngh. Thông