![]() |
|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Nov 2008
Bài gửi: 19
: |
bác namqn giúp em thêm cái này nữa, em viết đoặn chtr điều khiển tốc độ động cơ dùng triết áp, điểm đầu và chuối mắc vào 0 và 5V, điểm giữa đưa vào AN0 của 30F4011, dùng L298,
với động cơ chưa có tải, và em để PWM là kich chuyển đổi ADC thì em chỉnh chiết áp thì tốc độ thay đổi rất trươn ko có vấn đề j cả, nhung em cho thêm cái tải là em dùng dây cô doa nối sang 1 động cơ khác thôi, là tụ nhiên 2 chạy rất giật, điều chỉnh tốc độ cũng bị giật mà để em 1 vị trí tốc độ thì nó chạy dc vài vông lại giật 1 cái, ở dải tốc độ thấp cả 2 con đều ko chay, em có chuyển sang dùng timer3 kích chuyển đổi thì có vẻ chạy ko bị giật hơn và ở giải tốc đọ thấp vẫn điều khiển dc, nhung chỉ cần hơi vặn nhanh triết áp 1 tí là vdk bị đơ và dc đứng yên. anh xem hộ em vơi đây là code của em Code:
------------------------------------------------------------------------------*/ #include <p30f4011.h> #include <pwm.h> #include <adc10.h> _FOSC(CSW_FSCM_OFF & FRC_PLL4); _FWDT(WDT_OFF); _FBORPOR(PBOR_OFF & MCLR_EN); _FGS(CODE_PROT_OFF); //------------------------------------------------------------------------------ //Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh) #define PWM_PORT PORTE //Cac tin hieu PWM nam o cong E #define PWM_TRIS TRISE //Thanh ghi 3 trang thai cho cac tin hieu PWM #define PWM_LAT LATE //Thanh ghi chot cac tin hieu PWM //Cac prototype cho cac chuong trinh con void Init_PORTS(void); void INT_MCPWM(void); void INT_ADC10BIT(void); //Chuong trinh Khoi tao Module MCPWM //------------------------------------------------------------------------------ void INT_MCPWM(void) { unsigned int config1, config2, config3; unsigned int period, sptime; period = 368; // Oche do Free run PTPER = fcy/fpwm/PTMRprescaler - 1 // fcy = 7.37 Mhz, Fpwm = 20 KHz, PTMRprescaler = 1 ==> PTPER = sptime = 0; //Thiet lap thanh ghi SEVTCMP cho viec tao ngat su kien dac biet(neu can) config1 = PWM_EN & //PWM Module Enable PWM_IDLE_STOP& //Idle Mode Operation PWM_OP_SCALE1& //Output post scaler 1:1 PWM_IPCLK_SCALE1& //input prescaler 1:1 PWM_MOD_FREE; //mode of free run config2 = PWM_MOD1_IND& //Dung cac chan PWM L&H 1 cach doc lap PWM_MOD2_IND& PWM_MOD3_IND& PWM_PDIS1H& //Chi dung chuc nang PWM voi chan PWM1L PWM_PDIS2H& PWM_PDIS3H& PWM_PEN1L& PWM_PDIS2L& PWM_PDIS3L ; config3 = PWM_SEVOPS16& //Special event post scaler PWM_OSYNC_TCY& //output Override synchronization PWM_UEN; //PWM update enable/disable OpenMCPWM(period, sptime, config1, config2, config3); PDC1=0; } //Chuong trinh Khoi tao Module ADC 10bit //------------------------------------------------------------------------------ void INT_ADC10BIT(void) { unsigned int config1, config2, config3, configport, configscan; unsigned int channel; channel = ADC_CH0_POS_SAMPLEA_AN0 ; // A/D Chan 0 pos i/p sel for SAMPLE A is AN0 SetChanADC10(channel); config1 = ADC_MODULE_ON& ADC_IDLE_STOP& ADC_FORMAT_INTG& //dinh dang ket qua là canh phai (right justify) ADC_CLK_MPWM& //Module PWM cham dut lay mau va kich hoat ADC_SAMPLE_INDIVIDUAL & ADC_AUTO_SAMPLING_OFF& //bat dau lay mau khi SAMP =1 ADC_SAMP_ON; //Khoi dong che do tu dong lay mau config2 = ADC_VREF_AVDD_AVSS& //lay Vdd va Vss lam dien ap tham chieu ADC_SCAN_OFF& ADC_CONVERT_CH0& ADC_SAMPLES_PER_INT_1& //co bao AIDF va bit DONE duoc set sau 1 lan lay mau (so lan lay mau tu 1 den 16 do bit SMPI <3:0> ADC_ALT_BUF_OFF& ADC_ALT_INPUT_OFF; config3 = ADC_SAMPLE_TIME_1& //Thoi gian lay mau bang 1 Tad ADC_CONV_CLK_SYSTEM& ADC_CONV_CLK_2Tcy; configport = ENABLE_AN0_ANA; //Enable chân AN0 la chan analog configscan = SCAN_NONE; OpenADC10(config1, config2, config3, configport, configscan); _ADIF = 0; //Xoa co ngat ADC _ADIE = 1; //Cho phep ngat ADC _ADON = 1; //Bat module ADC } //Trinh phuc vu ngat cho ADC //------------------------------------------------------------------------------ void _ISR _ADCInterrupt(void) { PDC1 = ADCBUF0; //Cap nhat cac thanh ghi dem chu ky nhiem vu _ADIF = 0; } //------------------------------------------------------------------------------ //Chuong trinh chinh int main(void) { Init_PORTS(); //Khoi tao cac cong I/O INT_MCPWM(); //Khoi tao module PWM INT_ADC10BIT(); //Khoi tao module ADC while (1) Nop(); } //Chuong trinh con khoi tao cac cong I/O, de xuat cac tin hieu PWM, va doc tin //hieu dieu chinh cua bien tro tai AN0 void Init_PORTS(void) { PWM_LAT = 0; //Xoa thanh ghi chot cac tin hieu PWM PWM_TRIS = 0xFFC0; //Cac tin hieu PWM nam tai RE0..RE5 TRISB = 0x0071; //Chan RB6 la ngo vao analog AN6, cac chan khac //la ngo ra _LATE2 = 0; } |
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
Tags |
dspic30f adc, dspic30f pwm |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
dsPIC Tutorial 3-Đọc ngõ vào và giao tiếp LCD | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 92 | 19-02-2017 11:15 PM |
dsPIC Tutorial 2-Các kỹ thuật cơ bản | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 33 | 17-10-2013 11:09 PM |
dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 16 | 22-08-2012 12:35 AM |
dsPIC Tutorial 4-Module UART và I2C | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 76 | 09-05-2012 10:55 AM |
RF module | khanh_pic | Tìm mua sản phẩm | 22 | 20-08-2007 11:25 AM |