1. Trang chủ
  2. » Giáo án - Bài giảng

VDK04 ADCs PWM (ThangTV)

13 94 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 648,37 KB

Nội dung

Bài 04 ADC & PWM (ADC: Analog to Digital Converter PWM: Pulse Width Modulation) I ADC: ❖ Phân biệt độ phân giải tần số lấy mẫu N= 𝑉𝑖 ∗(2𝑛 −1) 𝑉𝑟𝑒𝑓 N: giá trị số ngõ ADC Vi: điện áp analog thời điểm lấy mẫu n: số bit (độ phân giải) Vref : điện áp chuẩn (≥ Vi) - Tần số lấy mẫu cao tín hiệu analog sau hồi giải mã trung thực - Một thông số khác ADC là: tốc độ biến đổi analog sang digital - Cấu trúc ADC PIC16F877A - Các lệnh CCS liên quan ADC: #DEVICE ADC = 8/10/16 Setup_adc(ADC_CLOCK_INTERNAL) Setup_adc_ports(value) Set_adc_channel(0-7) Digital_Value = read_adc() Những giá trị value: ALL_ANALOG // A0 A1 A2 A3 A5 E0 E1 E2 AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF AN0_AN1_AN2_AN3_AN4 AN0_AN1_AN2_AN4_VSS_VREF AN0_AN1_AN3 AN0_AN1_VSS_VREF // VREF = AN3 AN0_VREF_VREF AN0 // A0 VRefh=A3 VRefl=A2 Ví dụ 01: Cho sơ đồ mạch: LM35 cảm biến nhiệt độ có ngõ 10 mV/ độ C VDD 4.7uF - 10uF VDD R1 10K C2 C6 33P OSC1/CLKIN Y1 15 16 17 18 23 24 25 26 R10 4K7 A1013 R11 4K7 Q2 A1013 LED4 R12 4K7 Q3 A1013 Q4 A1013 RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCL RC4/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 30 29 28 27 22 21 20 19 RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 RD3/PSP3 RD2/PSP2 RD1/PSP1 RD0/PSP0 U3 LM35/SO D9 VDD VCC D10 VS+ VOUT TEMP R33 270 R34 270 D9 VDD LED D9 VDD D10 R35 SET D10 10K C12 103 LED C2 LED7S C1 a b c d e f g p 10 C1 a b c d e f g p a b c d e f g p C2 LED7S C2 C1 10 a b c d e f g p LED3 a b c d e f g p LED7S C2 10 VCC GND C11 33P a b c d e f g p LED2 a b c d e f g p LED7S Q1 OSC2/CLKO VCC 14 8M R9 4K7 10 RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 12 13 a b c d e f g 10 p C1 RB7/PGD RB6/PGC RB5 RB4 RB3/PGM RB2 RB1 RB0/INT LED1 R1 R2 R3 R4 R5 R R6 R R7 R R8 R R R R 100X8 31 32 RA0/AN0 RA1/AN1 RA2/AN2/Vref RA3/AN3/Vref + RA4/TOCKI RA5/AN4/SS 40 39 38 37 36 35 34 33 VREF MCLR/Vpp PIC16F877A GND 1uF TEMP SET GND VCC U2 C3 11 RESET RST YÊU CẦU (sử dụng ADC bit): Đọc giá trị nhiệt độ từ ADC hiển thị led đoạn dạng xxoC, sử dụng điện áp chuẩn VDD (5V) Giống câu sử dụng điện áp chuẩn Vref = 2.5V Giống câu nếu: - Nhiệt độ > 20 độ C: D9 sáng, D10 tắt - Nhiệt độ > 30 độ C: D9 tắt, D10 sáng - Nhiệt độ > 35 độ C: D9 D10 chớp tắt với delay 100ms Sử dụng biến trở R35 để đặt nhiệt độ đặt (set_temp, mặc định 20oC) hiển thị giá trị led theo dạng “St.XX”, sử dụng điện áp chuẩn VDD Nếu: - Nhiệt độ đo từ LM 35 > nhiệt độ đặt: D9 sáng, D10 tắt - Nhiệt độ đo từ LM 35 > nhiệt độ đặt: D10 sáng, D9 tắt II PWM: ❖ Tần số khơng thay đổi, chu kì duty thay đổi theo mục đích điều khiển Duty cycle T Tần số: f = 𝑇 (𝑠) 𝐻𝑧 ❖ Sử dụng timer để phát xung: ❖ Setup_timer_2(mode, period, postscale) Ví dụ: Setup_timer_2(T2_DIV_BY_1,100,1) - T2 sử dụng xung clock FOSC/4 - Tần số xung clock chia (có thể 16) trước đưa vào đếm - Bộ đếm đến (100 + 1) tràn (có thể đến 255 + 1) - Timer tràn đếm (có thể từ - 16) lần bit báo tràn báo lần f= 𝐹𝑂𝑆𝐶 4∗𝑚𝑜𝑑𝑒∗ 𝑝𝑒𝑟𝑖𝑜𝑑+1 Nếu Fosc = 4MHz, f = 𝑀𝐻𝑧 4∗1∗ 100+1 = 10 𝐾𝐻𝑧 ❖ PIC16F877A có PWM, ngõ PWM chân RC2 (CCP1) RC1 (CCP2) 10 ❖ Các lệnh liên quan PWM: setup_ccp1(CCP_PWM); // Đặt CCP1 PWM setup_ccp2(CCP_PWM); // Đặt CCP2 PWM setup_timer_2(T2_DIV_BY_4, 99,1); //f = 10 KHz, XTAL = 4MHZ set_pwm1_duty(value); // Đặt chu kì duty cho PWM1 set_pwm2_duty(value); // Đặt chu kì duty cho PWM2 Duty_cycle = 𝑣𝑎𝑙𝑢𝑒 ∗ 𝑝𝑒𝑟𝑖𝑜𝑑+1 100% Ví dụ: setup_ccp1(CCP_PWM); setup_timer_2(T2_DIV_BY_4, 99,1);// period = 100 set_pwm1_duty(50); // duty_cycle = 50% 11 VDD Ví dụ 02: 4.7uF - 10uF VDD R1 10K Cho sơ đồ mạch: C2 31 RA0/AN0 RA1/AN1 RA2/AN2/Vref RA3/AN3/Vref + RA4/TOCKI RA5/AN4/SS a b c d e f g p VDD LED7S C2 a b c d e f g 10 p C1 1uF RB7/PGD RB6/PGC RB5 RB4 RB3/PGM RB2 RB1 RB0/INT LED1 R1 R2 R3 R4 R5 R R6 R R7 R R8 R R R R 100X8 40 39 38 37 36 35 34 33 MCLR/Vpp PIC16F877A GND 32 U2 C3 VCC RESET RST C6 33P OSC1/CLKIN RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 Y1 15 16 17 18 23 24 25 26 RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCL RC4/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 11 PWM2 PWM1 VDD RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 RD3/PSP3 RD2/PSP2 RD1/PSP1 RD0/PSP0 30 29 28 27 22 21 20 19 VDD R21 R22 10K 10K SW2 SW1 12 C11 10 OSC2/CLKO VCC 14 4M GND 13 24VDC VDD 24VDC D1 D5 FR504 U1 FR504 10 12 15 11 VDD 24VDC 1Y 1Y 2A1 2A2 2Y 2Y 1E 2E 1EN 2EN VCC1 VCC2 L298 13 14 D2 MT21 MT22 FR504 24VDC MG1 D6 + A FR504 C1 24VDC PWM2 1A1 1A2 MG2 + A 100uF/50V C10 100uF/50V - - D3 D7 PWM1 MT21 FR504 FR504 MT22 D4 FR504 D8 FR504 12 YÊU CẦU: Cấu hình PWM1, PWM2 timer 2: setup_timer_2(T2_DIV_BY_1, 99,1); - Tính tần số tín hiệu PWM - Điều khiển MG1 với duty_cycle = 30%, MG2 với duty_cycle = 90% Cấu hình timer giống câu Viết chương trình cho phép đặt 10 tốc độ quay cho MG1 (dùng SW1: tăng đơn vị, SW2: giảm đơn vị), hiển thị tốc độ led đoạn (0,1,2,3,4,5,6,7,8,9), tốc độ dừng động cấu hình timer giống câu Viết chương trình thực hiện: - Nhấn SW1: MG1 quay với duty_cycle = 80% - Nhấn SW2: MG2 quay với duty_cycle = 50% - Nhấn đồng thời SW1 SW2: dừng MG1 MG2 13 ... 100+1 = 10

Ngày đăng: 24/10/2020, 08:03

TỪ KHÓA LIÊN QUAN