380 likes | 550 Views
Digital Signal Processing TMS320F2812 เบื้องต้น By Mr.Rungwicha Chaiyot. TMS320F2812 เป็นผลิตภัณฑ์ของบริษัทเทคซัสอินสตรูเมนท์ ( Texas Instrument ) มีอุปกรณ์รอบข้างที่เหมาะสำหรับประยุกต์ใช้ในงานควบคุมมอเตอร์ โดยเฉพาะดังนี้ -Two event-manager modules (EVA,EVB)
E N D
Digital Signal Processing TMS320F2812 เบื้องต้น By Mr.Rungwicha Chaiyot
TMS320F2812 เป็นผลิตภัณฑ์ของบริษัทเทคซัสอินสตรูเมนท์(Texas Instrument) มีอุปกรณ์รอบข้างที่เหมาะสำหรับประยุกต์ใช้ในงานควบคุมมอเตอร์ โดยเฉพาะดังนี้ -Two event-manager modules (EVA,EVB) -Enhanced analog-to-digital converter (ADC) module -Digital I/O and shared pin function
EVENT MANAGER (EV) Module มีคุณสมบัติในการประยุกต์ใช้ในงานควบคุมการเคลื่อนที่และควบคุม มอเตอร์โดยเฉพาะ ประกอยด้วย EVA,EVBนำไปประยุกต์ใช้ในงานแบบ multi-axis/motion controlเช่น -ควบคุมมอเตอร์สองตัว -ควบคุมอินเวอร์เตอร์แบบสามระดับ แต่ละ EV Moduleมี full compare unit 3หน่วย ให้กำเนิด PWMได้โมดูลละ 6สัญญาณพร้อมทั้ง dead bandโดยที่ค่าdeadbandที่ต้องการสามารถโปรแกรมเข้าไปยัง Compare Registerได้
EVแต่ละตัวจะใช้General-Purpose (GP) Timersเพื่อเป็น Time baseให้กับCompare unitซึ่งเกี่ยวข้องกับการให้กำเนิด สัญญาณ PWMดังรูปที่1 รูปที่1โมดูลกำเนิดสัญญาณPWM
GP Timer Counting Operation Compare outputของGP Timerสามารถกำหนด active high,active low force high,force low ได้ GP Timerแต่ละตัวมีโหมดการทำงานที่เป็นไปได้ 4แบบ -Stop/Hold mode -Continuous Up-Counting mode -Directional Up-/Down-Counting mode -Continuous Up-/Down-Counting mode โดยแต่ละแบบสามารถกำหนดได้โดยใช้timer control register (TxCON) บิตที่11-12
Stop/Hold Mode ในโหมดนี้GP Timerจะหยุดทำงานและคงอยู่ที่สถานะปัจจุบัน ตัวtimer counter,compare outputจะไม่มีการเปลี่ยนแปลง Continuous Up-Counting mode GP Timerในโหมดนี้จะทำการนับขึ้นจนกระทั่งtimer counter มีค่าเท่ากับPeriod registerซึ่งตรงกับขอบขาขึ้นของinput clock พอดี ค่าGP Timerจะรีเซตเป็น0และเริ่มนับใหม่อีกครั้งหนึ่ง ดังรูปที่2
รูปที่2GP TimerContinuous Up-Counting mode GP Timerที่นับแบบContinuous Up-Counting mode ประโยชน์คือนำไปสร้างPWM แบบAsynchronous
Directional Up-/Down-Counting mode ในโหมดนี้GP Timer จะนับขึ้นและนับลง ตามอินพุตที่ขา TDIRA/BของGPIO PORT -TDIRA/B เป็นhigh GP Timer จะนับขึ้นจนมีค่าเท่ากับPeriod register Timer จะรีเซตเป็น0 และนับขึ้นใหม่อีกครั้ง -TDIRA/B เป็นlow GP Timer จะนับลงจนมีค่าเท่ากับ0 ค่าTimer จะreloadsใหม่ให้เท่ากับPeriod registerและนับลงใหม่อีกครั้ง ดังรูปที่ 3
รูปที่3 Directional Up-/Down-Counting mode GP Timerที่นับแบบ Up-/Down-Counting mode ใช้ในกรณีมีเหตการณ์ จากภายนอกเปลี่ยนไปในงานควบคุมและ power electronics application
Continuous Up-/Down-Counting mode • ในโหมดนี้การทำงานจะเหมือนกับ DirectionUp-/Down-Counting • modeแต่PIN TDIRA/Bไม่มีผลต่อทิศทางการนับ • -ทิศทางการนับจะเปลี่ยนจากup to down เมื่อtimer counter • มีค่าเท่ากับ Period register • ทิศทางการนับจะเปลี่ยนจากdown to upเมื่อ timer counter • มีค่าเท่ากับ0 • ดูรูปที่4
รูปที่4 Continuous Up-/Down-Counting mode Continuous Up-/Down-Counting mode ใช้สร้างPWM แบบ Symmetric และperiod ของtimer ในโหมดนี้มีค่าเป็นสองเท่าของ Period register (TxPR)
Asymmetric/Symmetric Waveform Generation asymmetric /symmetric PWM wave form สามารถกำหนด ได้โดย counting mode ที่อยู่ภายในGP Timer Asymmetric Waveform Generation เมื่อ GP Timer อยู่ในcontinuous up-counting mode. output waveform (PWM) จะมีการเปลี่ยนแปลงดังนี้ -มีค่า 0ก่อน timer counter จะทำงาน -มีค่าคงที่จนกระทั่งเกิดการ compare math (timer counter= compare register) -Toggle เมื่อเกิดการcompare math -มีค่าคงที่จนกระทั่งสิ้นสุด period -รีเซตเป็น0 เมื่อจบperiod
รูปที่5GP Timer Compare/PWM Output in Up-Counting Mode
Symmetric Waveform Generation เมื่อGP Timerอยู่ในcontinuous up-/down counting mode. output waveform (PWM)จะมีการเปลี่ยนแปลงดังนี้ -มีค่า0ก่อนtimer counterจะทำงาน -มีค่าคงที่จนกระทั่งเกิดการcompare math (timer counter= compare register) -Toggleเมื่อเกิดการcompare math -มีค่าคงที่จนกระทั่งเกิดการcompare math ครั้งที่สอง -Toggle เมื่อเกิดการcompare math ครั้งที่สอง -มีค่าคงที่จนกระทั่งสิ้นสุดperiod -รีเซตเป็น0เมื่อจบperiod
รูปที่6GP Timer Compare/PWM Output in Up-/Down Counting Mode PWM Outputสามารถที่จะกำหนดactive high,active low, force low,force highได้โดยกำหนดคุณสมบัติในACTRA/B register
PWM5=AL PWM6=AH 0 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 PWM2=AH PWM1=AL PWM4=AH PWM3=AL รูปที่7ACTRA Compare Unit1= Bit0-3 =PWM1,PWM2 Compare Unit2= Bit 4-7=PWM3,PWM4 Compare Unit3= Bit 8-11=PWM5,PWM6 ACTRA=0999 PWM2 AH PWM1 AL รูปที่8 Symmetrical PWM1,PWM2
มีregisterอีกหลายตัวที่เกี่ยวข้องกับการใช้งาน PWMศึกษา เพิ่มเติมได้จากlitrrature number SPRU065
General-Purpose Input/Output (GPIO) GPIO MUX registerใช้เลือกคุณสมบัติการทำงานให้กับPIN ในตัวประมวลผลซึ่งสามารถกำหนดให้เป็นการทำงานแบบต่างๆได้ดังนี้ -Digital I/O หรือPeripheralโดยGPxMUX registers -ถ้าเป็นDigital I/O กำหนดให้เป็นInput/Output โดย GPxDIR registers แต่ละPort ของGPIO จะถูกควบคุมโดยMUX, Direction, Data, Set, Clear, Toggle Registers
GPxMUX Registers แต่ละ Portของ GPIO คือMUX registers ใช้ในการเลือกระหว่าง การทำงานเป็นอุปกรณ์รอบข้างหรือเป็นDigital I/O IF GPxMUX.bit=0 Pin ถูกกำหนดเป็นDigital I/O IF GPxMUX.bit=1 Pinถูกกำหนดเป็นอุปกรณ์รอบข้าง GPxDIR Register แต่ละPortของGPIOคือGPxDIR registersใช้ในการเลือกระหว่าง การทำงานเป็นInputหรือเป็นOutput IF GPxDIR.bit=0 Pinถูกกำหนดเป็นInput IF GPxDIR.bit=1 Pinถูกกำหนดเป็นOutput X=PORT A,B,D,E,F,G
GPxDAT Registers แต่ละPortของGPIOคือGPxDAT registersใช้ในการสะท้อนสถานะ ปัจจุบันของI/O IF GPxDAT.bit=0, PIN กำหนดเป็นOutput เมื่อนั้นPIN ถูกเปลี่ยนเป็นLow IF GPxDAT.bit=1, PINกำหนดเป็นOutputเมื่อนั้นPIN ถูกเปลี่ยนเป็นHigh
GPxSET Register แต่ละPortของ GPIOคือGPxSET registersโดยPIN นั้นต้องถูกกำหนดเป็นOutput IF GPxSET.bit=0, ignored (no effect) IF GPxSET.bit=1, PINกำหนดเป็นOutputเมื่อนั้นPIN ถูกเปลี่ยนเป็นHigh GPxCLEAR Registers แต่ละPortของGPIOคือGPxCLEAR registersโดยPIN นั้นต้องถูกกำหนดเป็นOutput IF GPxCLEAR.bit=0, ignored (no effect) IF GPxCLEAR.bit=1, PINกำหนดเป็นOutputเมื่อนั้นPIN ถูกเปลี่ยนเป็นLow
GPxTOGGLE Registers แต่ละPort ของGPIOคือGPxToggle registersโดยPIN นั้นต้องถูกกำหนดเป็นOutput IF GPxToggle.bit=0, ignored (no effect) IF GPxToggle.bit=1, PINกำหนดเป็นOutputเมื่อนั้นPIN ถูกเปลี่ยนเป็นค่าตรงกันข้าม
C28x GPIO Pin Assignment GPIO A GPIOA0 / PWM1 GPIOA1 / PWM2 GPIOA2 / PWM3 GPIOA3 / PWM4 GPIOA4 / PWM5 GPIOA5 / PWM6 GPIOA6 / T1PWM_T1CMP GPIOA7 / T2PWM_T2CMP GPIOA8 / CAP1_QEP1 GPIOA9 / CAP2_QEP2 GPIOA10 / CAP3_QEPI1 GPIOA11 / TDIRA GPIOA12 / TCLKINA GPIOA13 / C1TRIP GPIOA14 / C2TRIP GPIOA15 / C3TRIP GPIO B GPIOB0 / PWM7 GPIOB1 / PWM8 GPIOB2 / PWM9 GPIOB3 / PWM10 GPIOB4 / PWM11 GPIOB5 / PWM12 GPIOB6 / T3PWM_T3CMP GPIOB7 / T4PWM_T4CMP GPIOB8 / CAP4_QEP3 GPIOB9 / CAP5_QEP4 GPIOB10 / CAP6_QEPI2 GPIOB11 / TDIRB GPIOB12 / TCLKINB GPIOB13 / C4TRIP GPIOB14 / C5TRIP GPIOB15 / C6TRIP GPIO D GPIOD0 / T1CTRIP_PDPINTA GPIOD1 / T2CTRIP / EVASOC GPIOD5 / T3CTRIP_PDPINTB GPIOD6 / T4CTRIP / EVBSOC GPIO E GPIOE0 / XINT1_XBIO GPIOE1 / XINT2_ADCSOC GPIOE2 / XNMI_XINT13 GPIO F GPIOF0 / SPISIMOA GPIOF1 / SPISOMIA GPIOF2 / SPICLKA GPIOF3 / SPISTEA GPIOF4 / SCITXDA GPIOF5 / SCIRXDA GPIOF6 / CANTXA GPIOF7 / CANRXA GPIOF8 / MCLKXA GPIOF9 / MCLKRA GPIOF10 / MFSXA GPIOF11 / MFSRA GPIOF12 / MDXA GPIOF13 / MDRA GPIOF14 / XF GPIO G GPIOG4 / SCITXDB GPIOG5 / SCIRXDB BITที่เหลือGPIO D,E,G,FคือReserved ตำแหน่งของPIN บนeZDSP_TMS320F2812 boardดูได้จาก 2812_ezdsp_TechRef_F.pdf
ตารางที่1PIN Assigment บนP4 และP8ของDSP board
Ex. Example_281xEvPwm.c //Description #include “header_file” //ประกาศ functionที่ใช้ในโปรแกรม voidinit_eva(void) void init_evb(void) // void main(void) { init_eva( ); init_evb( ); for(; ;); } void init_eva( ) { } void init_evb( ) { } (generate PWM1-12) (ประกาศค่าต้นแบบให้กับโปรแกรม) (functionชื่อinit_eva/b แบบไม่มีการส่ง ตัวแปรเข้า/ออกจากโปรแกรม=void) (โปรแกรมหลักเริ่มด้วยคำสั่งmain) (เรียกใช้function init_eva ) (เรียกใช้function init_eva ) (Idle Loop) (สร้าง function ชื่อinit_eva() ) (สร้าง function ชื่อinit_eva() )
การสร้างproject 1. Menu Project->New
Project Name: ProjectPwm Location: c:\Project Project Type: Executable(.out) Target: TMS320C28XX Click: Finish NOTE:ในFolder Project สร้างheader file และC Source code สำหรับกำหนดค่าDefault ของ DSPไว้เรียบร้อยแล้ว
2.เขียนC-Source Code Menu File->New->Source File
Save in: project Filename:ProjectPwm Save as type: C Source Files Click: Save
3. Add code file to the project Menu Project->Add files to project ไปที่ Folder Project : projectPwm.c :DSP281x_Codestartbranch.asm :DSP281x_Defaultsisr.c :DSP281x_Globalvariabledef.c :DSP281x_PieCtrl.c :DSP281x_PieVect.c :DSP281x_SysCtrl.c :DSP281x_header_nonBIOS.cmd :EzDSP_RAM_INK.cmd กำเนิดPWM กำหนดค่าDefaultของ register ให้DSP Link Command File Link Command File :จองพื้นที่ในหน่วยความจำให้กับตัวประมวลผล
4. Add the C-runtime-library to Project Project->Build Option Linker->Library Search Patch Type:C:\Ti\c2000\cgtools\lib Linker->Include Libraries Type:rts2800_ml.lib Add the stack-size of 0x400 Linker->Stack Size(-Stack) Type: 0x400 Close Build Option Click OK
6. Load File projectPwm.out and run Program Menu File->Load Program ->projectPwm.out ->Click Open
Run Program Halt Program
REFERENCE 1.Texas Instrument “TMS320x281x DSP Event Manager (EV) Referencre Guide.” (SPRU065d)November2004 2.Texas Instrument “TMS320x281x DSP SystemControland Interrupts Refer Ence Guide.” (SPRU078C) March2005 3.Texas Instrument “ACI3_1For TMS320F281X Setup Company.” (SPRC130)