1. Trang chủ
  2. » Giáo Dục - Đào Tạo

thiết kế và chế tạo thử nghiệm hệ thống âm thanh kỹ thuật số phục vụ giảng đường đại học nha trang

95 848 6

Đ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 95
Dung lượng 7,29 MB
File đính kèm mo phong.rar (18 MB)

Nội dung

1 TRƯỜNG ĐẠI HỌC NHA TRANG KHOA ĐIỆN – ĐIỆN TỬ Sinh viên thực : ĐINH THẾ VƯƠNG THIẾT KẾ CHẾ TẠO THỬ NGHIỆM HỆ THỐNG ÂM THANH KỸ THUẬT SỐ PHỤC VỤ GIẢNG ĐƯỜNG ĐẠI HỌC NHA TRANG ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Ngành Công nghệ kỹ thuật Điện, Điện Tử CÁN BỘ HƯỚNG DẪN: NGUYỄN VĂN HÂN Khánh Hòa – năm 2015 LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu khoa học độc lập riêng Các số liệu sử dụng phân tích luận án có nguồn gốc rõ ràng, công bố theo quy định Các kết nghiên cứu luận án tự tìm hiểu, phân tích cách trung thực, khách quan phù hợp với thực tiễn Việt Nam Các kết chưa công bố nghiên cứu khác LỜI CẢM ƠN Đầu tiên cho em gửi lời cảm ơn đến gia đình tạo điều kiện để em học tập Suốt thời gian học tập rèn luyện trường, đạo giảng dạy thầy cô trường Khoa Điện-Điện tử em hoàn thành xong chương trình học tập trường đại học Nha Trang em xin cảm ơn tất Choemđượcgửilờicảmơnchânthànhđến thầy giáo Trần Tiến Phức thầy giáo Nguyễn Văn Hân người giúp đỡ em nhiều trình học tập nghiên cứu đồ án đề Sinh viên thực MỤC LỤC DANH MỤC HÌNH ẢNH Hình 1.1Soundcraft Unveils New Vi3000 Digital Console .4 Hình 1.2 DSP ứng dụng điều khiển động chiều Hình 1.3 DSP ứng dụng điều khiển chuyển động Hình 2.1: Xử lý tín hiệu số Hình 2.2: đồ tổng quát mạch khuếch đại .9 Hình 2.3: Ic khuếch đại thuật toán STK4050II 10 Hình 2.4 Mạch khuếch đại tín hiệu đầu từ .10 Hình 2.5 Mạch khuếch đại công suất tín hiệu âm dùng transistor 11 Hình 2.6 đồ nguyên lý hệ thống âm 15 Hình 2.7 Nguyên lý hệ thống âm mini xác tay 18 Hình 2.8 Mạch nguyên lý tiền khuếch đại transistor 18 Hình 2.9 Mạch nguyên lý khuếch đại dùng LA44440 .19 Hình 2.10 đồ khối DSP 20 Hình 2.11 So sánh đáp ứng tần số lọc thực tế 21 Hình 2.12 Hình dạng cửa sổ lọc số thông dụng 22 Hình 2.13 Hình dạng cửa sổ lọc số thông dụng 23 Hình 2.14 Hình dạng cửa sổ lọc số thông dụng 24 Hình 2.15 So sánh lọc FIR IIR 24 Hình 2.16 Biểu đồ phát triển lĩnh vực ứng dụng ARM 25 Hình 2.17 Biểu đồ phát triển thị phần ARM 30 Hình 2.18 Trình tự thực cài đặt lọc số 30 Hình 3.1 Hàm đơn vị 41 Hình 3.2 Số phức MATLAB 42 Hình 3.3 Sóng Sin vẽ MATLAB 42 Hình 3.4 Trộn sóng với MATLAB 43 Hình 3.5 Bộ lọc số MATLAB .43 Hình 3.6 Bộ lọc thông thấp MATLAB .44 Hình 3.7 Bộ lọc FIR loại MATLAB 44 Hình 3.8 Lọc mẫu thu âm sẵn với MATLAB 45 Hinh 3.9 Trình tự cài đặt lọc số lên vi điều khiển 45 Hình 3.10 Cấu trúc chung ARM KEIL 46 Hình 3.11 KIT STM32F4 47 Hình 3.12 Phần mềm STM32 ST-LINK Unility .48 Hình 3.13 Phần mềm FIVIEW 49 Hình 3.14 Phần mềm FIVEW 49 Hình 3.15 Lưu đồ thuật toán .51 Hình 3.16 Cấu trúc xắp xếp mã code KEIL ARM 51 Hình 3.17 Thư viện ngoại vi ST 52 Hình 3.18 Cài đặt thư viện dùng cho ARM vào KEIL ARM .52 Hình 3.19 Cây cấu trúc project KEIL ARM .53 Hình 3.20 Biên dịch KEIL ARM .54 Hình 3.21 Thư mục chứa project chương trình 55 Hình 3.22 Sắp xếp thư mục chứa project chương trình .55 Hình 3.23 Cấu hình cho project ARM 56 Hình 3.24 Cấu hình cho project ARM 56 Hình 3.25 Tương quan thời gian lấy mẫu tốc độ xử lý 58 Hình 3.26 đồ thuật toán chương trình 59 Hình 4.1 Bộ lọc LowPass 60 Hình 4.2 Bộ lọc high pass 61 Hình 4.3 Bộ lọc band pass 62 Hình 4.4 Bộ lọc Stop band 63 Hình 4.5Tương quan lấy mẫu tín hiệu 64 Hình 4.6 đồ mạch HM2007 64 Hình 4.7 KIT HM2007 65 Hình 4.8 đồ truy cấp nhớ DMA nhận diện giọng nói .65 Hình 4.9 So sánh Cortex-M7 với SoC khác 68 Hình 4.10 Phân khúc chip Cortex ARM thị trường nhúng 69 DANH SÁCH BẢNG BIỂU Bảng 2.1: Thông số thiết bị hệ thống âm hội trường 16 Bảng 2.2 Các loại sổ thông dụng 24 Bảng 2.3 Một số dạng lõi ARM 27 Bảng 2.4 So sánh ARM7TDMI-S cácdòng Cortex-M 33 Bảng 4.1 Nhóm lệnh xử lí giọng nói thư viện xử lí giọng nói C# 66 LỜI NÓI ĐẦU Với phát triển công nghệ đại, kĩ thuật xử lý tín hiệu số ngày khẳng định vị đáp ứng nhu cầu người sinh hoạt, giải trí làm việc, việc áp dụng kĩ thuật số vào lĩnh vực âm phục vụ cho nhu cầu học tập giải trí hình thành Hiện giảng đường đại học Nha Trang sử dụng hệ thống âm tương tự.Những hệ thống máy tăng âm có công suất vừa nhỏ lắp đặt cố định di động.Hạn ché hệ thống không thiết kế tối ưu cho tín hiệu tiếng nói không tự động chống hú, rít nhiễu Nhận thấy quan trọng cần thiết em nghiên cứu đề tài “Thiết kế chế tạo thử nghiệm hệ thống âmthuật số phục vụ giảng đường trường Đại Học Nha Trang” với mục đích kĩ thuật xử lý tín hiệu số xử lý tín hiệu âm xử lý hạn chếhệ thống tương tự tồn hú rít, nhiễu… Qua trình nghiên cứu thử nghiệm đạt kết bật thành công việc số hóa âm thời gian thực xử lý tín hiệu với độ trễ tính micro giây CHƯƠNG 1TỔNG QUAN 1.1 GIỚI THIỆU CHUNG ĐỀ TÀI NGHIÊN CỨU Tên đề tài: “ Thiết kế chế tạo thử nghiệm hệ thống âm kỹ thuật số phục vụ giảng đường trường đại học Nha Trang.” 1.1.1Tính cấp thiết đề tài Hiện với việc thuyết giảng nói chung việc thuyết giảng môi trường sư phạm ngày nâng cao chất lượng học viên giảng viên, chất lượng kiến thức lẫn sở hạ tầng Trong không gian giảng đường với số lượng học viên lớn không gian phòng lớn, người thuyết giảng làm việc với cường độ liên tục ngày, để thuận tiện việc thuyết giảng, nhà trường xây dựng hệ thống âm tương tự phục vụ cho việc thuyết giảng thuận lợi hơn, nhiên trình sử dụng hệ thống tương tự bộc lộ nhiều khuyết điểm : Mức nhiễu cao, khó khăn việc kiểm soát độ ồn không mong muốn : rè, hú, … Vi điều khiển ARM vi điều khiển đại sử dụng lĩnh vực xử lý tín hiệu, điều khiển, hệ thống nhúng,… việc cài đặt thuật toán xử lý tín hiệu số vi điều khiển ARM để đưa vi điều khiển vào sử dụng xử lý âm nói chung hệ thống âm giảng đường nói riêng việc làm cấp thiết Chính lý Tôi chọn đề tài“ Thiết kế chế tạo thử nghiệm hệ thống âm kỹ thuật số phục vụ giảng đường trường đại học Nha Trang.” 1.1.2 Mục tiêu phạm vi nghiên cứu  Mục tiêu -Mô thiết kế lọc số MATLAB cài đặt lọc số KIT Vi điều khiển ARM nhằm đại tiêu chất lượng đề - Chế tạo thử nghiệm mô hình hệ thống âm có sử dụng vi điều khiển ARM  Phạm vi nghiên cứu - Khảo sát đánh giá thực trạng hệ thống âm sử dụng giảng đường trường Đại học Nha Trang -Nghiên cứu lọc số ứng dụng để lọc nhiễu tín hiệu âm kỹ thuật số -Tính DSP vi điều khiển ARM 1.1.3Đồi tượng phương pháp nghiên cứu  Đối tượng nghiên cứu - Vi điều khiển ARM - Lý thuyết xử lý tín hiệu số,các lọc số - MATLABxử lý tín hiệu số  Phương pháp nghiên cứu - Phương pháp nghiên cứu lý thuyết: Nghiên cứu điều khiển lập trình dùng vi điều khiển - Phương pháp nghiên cứu mô phỏng: Mô hoạt động chương trình phần mềm MATLAB - Phương pháp nghiên cứu thực nghiệm: Xây dựng mô hình xử lý tín hiệu số thời gian thực dùng vi điều khiển ARM 1.1.4Nội dung nghiên cứu đề tài - Tìm hiểu lý thuyết lập trình mô thí nghiệm xử lí tín hiệu số phần mềm MATLAB -Tìm hiểu sử dụng phần mềm KEIL ARM, cách thiết đặt lập trình cho vi điều khiển ARM Cortex M4 phần cứng KIT STM32F4 - Tìm hiểu sử dụng phần mềm STM32 ST-LINK Utility để thực thao tác xóa, ghi, khóa liệu từ máy tính lên vi điều khiển ARM Cortex M4 thiết đặt phần cứng KIT STM32F4 - Tìm hiểu phần mềm FIVIEW để tiến hành thực nghiệm lọc số Low pass filter, High pass filter,Band pass filter, Stop band filter - Tính toán, thiết kế hoàn thiện mô hình thí nghiệm: Tiến hành thực xây dựng hệ thống mô hình, kết nối khối chức thông qua jack cắm, thực 10 xây dựng hệ thống nút nhấn, công tắc đèn báo, jack tính hiệu đề kết nối hoàn thiện mô hình 1.2TỔNG QUAN LỊCH SỬ NGHIÊN CỨU ĐỀ TÀI 1.2.1 Tình hình nghiên cứu giới Ngày nay, với hội nhập quốc tế, cạnh tranh kinh tế toàn cầu ngày cao, chất lượng hệ thống xử lí âm cải tiến, nâng cao hàng ngày Hiện nay, có nhiều mô hình âm cốt lõi việc xử lý âm phân tích thành hai phương pháp, xử lý tương tự xử lý số Với phát triển mạnh mẽ kỹ thuật vi tính, đặc biệt kỹ thuật xử lý tín hiệu số (Digital Signal Processor) cho phép giải thuật toán phức tạp xử lý nhiều liệu hệ thống cách đồng thời, nhanh chóng nhằm đạt yêu cầu hệ thống xử lý âm Hiện nay, hệ thống âm lớn đề có sử dụng DSP vào xử lý hệ thống, hãng sản xuất thiết bị âm tiếng áp dụng nhiều công nghệ vào hệ thống mình, ví dụ: Hãng CROWN sản xuất main công suất khuếch đại âm ứng dụng DSP Crown XTi1002 Power Amplifier with DSP (1400 Watts), Crown XTi-2, Crown XTi2002 Power Amplifier with DSP, Crown XTi4002 Power Amplifier with DSP (3200 Watts) Hãng PEAVEY với sản phẩm Peavey IPR DSP 1600 sản phẩm khác hãng như YAMAHA DSP99,YAMAHA DSP-A3090Natural Sound Amplifier Với cấu trúc công nghệ khác nhau, mục tiêu cải tiến, nâng cao chất lượng xử lý âm 81 KẾT LUẬN ĐỀ XUẤT Ý KIẾN Qua thời gian tìm hiểu nghiên cứu em thực tiêu chí sau : -Tìm hiểu lý thuyết xử lý tín hiệu số lọc số -Lập trình, mô lọc số MATLAB -Cài đặt thành công loại lọc số thông dụng lên vi điều khiển ARM Tuy nhiên chưa đạt mục tiêu đưa xử lý kĩ thuật số vào hệ thống âm tương tự để sử dụng chất lượng âm trình xử lý kĩ thuật số âm thời gian thực thấp Qua thời gian nghiên cứu trên, em mong muốn tài liệu, số liệu, ý tưởng để thiết kế lọc số vi điều khiển nhúng thầy cô giáo đặc biệt bạn học sinh, sinh viên trường tiếp tục nghiên cứu hoàn thiện.Mong muốn nhà trường tạo nhiều điều kiện thuận lợi hỗ trợ kinh phí, sở vật chất, tài liệu, tạo điều kiện để nghiên cứu thực nghiệm thiết kế hệ thống âm xử lý kĩ thuật số với chất lượng cao giá thành rẻ Mong muốn nghành Điện-Điện Tử, khoa Điện-Điện Tử ngành mũi nhọn trường Đại học Nha Trang tương lai gần 82 TÀI LIỆU THAM KHẢO http://voer.edu.vn/m/mach-khuech-dai-ban-dan/1386dd95 Truy cập lần cuối 31/5/2015 http://vi.wikipedia.org/wiki/M%E1%BA%A1ch_khu%E1%BA%BFch_ %C4%91%E1%BA%A1i Truy cập lần cuối 31/5/2015 www.khvt.com/mcu/ARM/Intro_ARM.pdf Truy cập lần cuối 31/5/2015 http://hshop.vn/stm32f4-discovery-kit-arm-cortex%20m4%20dsp 5 Sanjit K Mitra(2001),Digital Signal Processing, McGraw-Hill School Education Group Truy cập lần cuối 31/5/2015 http://codientu.org/forums/354/ Truy cập lần cuối 31/5/2015 7.http://www.wolinlabs.com/blog/stm32f4.adc.dsp.dac.html Truy cập lần cuối 31/5/2015 83 PHỤ LỤC 3.1.2.1 Tạo hàm đơn vị clf; % Tạo vectơ vector -10 đến 20 n = -10:20; % Tạo hàm đơn vị u = [zeros(1,10) zeros(1,20)]; % Vẽ dạng sóng stem(n,u); xlabel('Time index n'); ylabel('Amplitude'); title('Unit Sample Sequence'); axis([-10 20 1.6]); 3.1.2.2.Biểu diễn số phức MATLAB clf; c = -(1/12)+(pi/6)*i; K=2; n = 0:40; x = K*exp(c*n); subplot(2,1,1); stem(n,real(x)); xlabel('Time index n');ylabel('Amplitude'); title('Real part'); subplot(2,1,2); stem(n,imag(x)); xlabel('Time index n');ylabel('Amplitude'); title('Imaginary part'); 3.1.2.3 Vẽ sóng sin với MATLAB n = 0:40; 84 f = 0.1; phase = 0; A = 1.5; arg = 2*pi*f*n - phase; x = A*cos(arg); clf; % Xóa đồ thị cũ stem(n,x); % Vẽ dạng sóng tạo axis([0 40 -2 2]); grid; title('Sinusoidal Sequence'); xlabel('Time index n'); ylabel('Amplitude'); axis; 3.1.2.4.Trộn sóng với MATLAB clf; n = 0:200; m = 0.4;fH = 0.01; fL = 0.01; xH = sin(2*pi*fH*n); xL = sin(2*pi*fL*n); y = (1+m*xL).*xH; stem(n,y);grid; xlabel('Time index n');ylabel('Amplitude'); 3.1.2.5 Bộ lọc MATLAB với tần số ví dụ cho sẵn hệ số lọc M=4 n = 0:100; s1 = cos(2*pi*0.05*n); % A low frequency sinusoid s2 = cos(2*pi*0.47*n); % A high frequency sinusoid x = s1+s2; % Bộ lọc xây dựng phương pháp trung bình biến M = input(’Desired length of the filter = ’); num = ones(1,M); 85 y = filter(num,1,x)/M; % Hiển thị kết clf; subplot(2,2,1); plot(n,s1); axis([0, 100, -2, 2]); xlabel(’Time index n’); ylabel(’Amplitude’); title(’Signal # 1’); subplot(2,2,2); plot(n,s2); axis([0, 100, -2, 2]); xlabel(’Time index n’); ylabel(’Amplitude’); title(’Signal # 2’); subplot(2,2,3); plot(n,x); axis([0, 100, -2, 2]); xlabel(’Time index n’); ylabel(’Amplitude’); title(’Input Signal’); subplot(2,2,4); plot(n,y); axis([0, 100, -2, 2]); xlabel(’Time index n’); ylabel(’Amplitude’); title(’Output Signal’); axis; 3.1.2.6.Bộ lọc thông thấp với MATLAB Fp = 3500;Fs = 4500; Wp = 2*pi*Fp; Ws = 2*pi*Fs; [N, Wn] = buttord(Wp, Ws, 0.5, 30,'s'); [b,a] = butter(N, Wn, 's'); 86 wa = 0:(3*Ws)/511:3*Ws; h = freqs(b,a,wa); plot(wa/(2*pi), 20*log10(abs(h)));grid xlabel('Frequency, Hz');ylabel('Gain, dB'); title('Gain response'); axis([0 3*Fs -60 5]); 3.1.2.7.Bộ lọc Fir loại MatlabXác định đáp ứng tần số từ chuỗi đáp ứng xung function [a,w,L,Hr] = FIR_t1(h) M = length(h); L = (M-1)/2; a = [h(L+1) 2*h(L:-1:1)]; n = [0:1:L]; w = linspace(0,2*pi,100)'; Hr = cos(w*n)*a'; subplot(3,1,1); stem(w); xlabel(' Bo Loc '); subplot(3,1,2); stem(h); xlabel('Tin hieu Vao'); subplot(3,1,3); stem(Hr); xlabel('Tin hieu Ra'); Với chuỗi đáp ứng xung : h = [1.5 -2.5 -2.5 1.5] : 87 3.1.2.8.Bộ lọc với tín hiệu thực tế thu âm sẵn [filename,pathname]=uigetfile('*.wav'); [signal Srate nBits]=wavread([pathname,filename]); Fs=1e3; Ts=1/Fs; Ns=1000; t=[0:Ts:Ts*(Ns-1)]; x=signal; N=16; wn=[0.4 0.6]; b=fir1(N,wn); subplot(4,1,1); Npts=1000; plot(t(1:Npts),x(1:Npts)); title('bieu thoi gian vao ra'); xlabel('time(s)'); ylabel('Dau Vao'); subplot(4,1,2); xfftmag=(abs(fft(x,Ns))); xfftmagh=xfftmag(1:length(xfftmag)/2); f=[1:1:length(xfftmagh)]*Fs/Ns; plot(f,xfftmagh); xlabel('Dap ung tan so dau Vao'); subplot(4,1,3); y=filter(b,1,x); plot(t(1:Npts),y(1:Npts)); ylabel('Dau Ra'); subplot(4,1,4); 88 xfftmag=(abs(fft(y,Ns))); xfftmagh=xfftmag(1:length(xfftmag)/2); f=[1:1:length(xfftmagh)]*Fs/Ns; plot(f,xfftmagh); xlabel('Dap ung tan so dau Ra'); 3.2.5 Mã code [7] 1/Main.c #include #include #include "stm32f4xx.h" #include "hw.h" #include "dac.h" #include "adc.h" #include "gpio_square_wave.h" #include "tmr_sample.h" #include "button.h" #define LED_PERIOD_MS 250 //Local functions float filter(register float val); int count=0; int main(void) { if (SysTick_Config(SystemCoreClock/1000)) { while (true) // Capture error; } gsw_init(); ADC_init(); 89 DAC2_init(); tmr_sample_init(); button_init(); while (true); } void TIM6_DAC_IRQHandler(void) { if (TIM_GetITStatus(TIM6, TIM_IT_Update)) { int n = ADC_get(); ADC_start(); //Start a new conversion if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9)) { while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9)) { } count+=1; } if(count==1) { DAC2_set((uint16_t)(DAC_MID + (int)filter(n))); GPIO_SetBits(GPIOD, GPIO_Pin_2); GPIO_ResetBits(GPIOD, GPIO_Pin_6); } if(count==2) { DAC2_set((uint16_t)((DAC_MID + (int)(n)))); GPIO_SetBits(GPIOD, GPIO_Pin_6); GPIO_ResetBits(GPIOD, GPIO_Pin_2); } 90 if(count>=3) { DAC2_set((uint16_t)(DAC_MID + (int)filter(n))); count=1; GPIO_SetBits(GPIOD, GPIO_Pin_2); GPIO_ResetBits(GPIOD, GPIO_Pin_6); } TIM_ClearITPendingBit(TIM6, TIM_IT_Update); } } /////////////////////////////////////////////////////////////////////// // Generated by Fiview 0.9.10 // All generated example code below is in the public domain float filter(register float val) { ///////////////////////////////// static double buf[6]; register double tmp, fir, iir; tmp= buf[0]; memmove(buf, buf+1, 5*sizeof(double)); // use 0.0003773621735275249 below for unity gain at 100% level iir= val * 0.0003773621733894961; iir -= 0.8820484333612523*tmp; fir= tmp; iir -= -1.866692462571995*buf[0]; fir += -buf[0]-buf[0]; fir += iir; tmp= buf[1]; buf[1]= iir; val= fir; iir= val; iir -= 0.9985893635106204*tmp; fir= -tmp; iir -= -1.998587303676926*buf[2]; fir += iir; 91 tmp= buf[3]; buf[3]= iir; val= fir; iir= val; iir -= 0.7772844694074456*tmp; fir= tmp; iir -= -1.763274759539699*buf[4]; fir += buf[4]+buf[4]; fir += iir; buf[5]= iir; val= fir; return val; } 2/adc.c #include #include "stm32f4xx.h" #include "hw.h" #include "adc.h" #define IO_PIN GPIO_Pin_5 #define IO_PORT GPIOC #define IO_PORT_CLK RCC_AHB1Periph_GPIOC #define ADC_CLK RCC_APB2Periph_ADC1 #define ADC_NUM ADC1 #define ADC_CHANNEL ADC_Channel_15 void ADC_init(void) { /* Enable peripheral clocks */ RCC_AHB1PeriphClockCmd(IO_PORT_CLK, ENABLE); RCC_APB2PeriphClockCmd(ADC_CLK, ENABLE); /* Configure ADC Channel 10 pin as analog input */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = IO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; 92 GPIO_Init(GPIOC, &GPIO_InitStructure); /* ADC Common configuration *************************************************/ ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; // APB2 clock is half the 168Mhz system clock (i.e 84Mhz), // so with a div by 8, ADC PCLK would be 10.5Mhz // F4 datasheet says ADC clock freq should be 0.6Mhz - 30Mhz for Vdda=3.3V ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div8; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //TwoSamplingDelay is only used in dual and triple modes) ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonInitStructure); /* ADC1 regular channel 10 to 15 configuration ************************************/ ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = DISABLE; // Channel ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // Conversions Triggered ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; // Manual ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO; //Unused for manual? ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 1; ADC_Init(ADC1, &ADC_InitStructure); 93 ADC_RegularChannelConfig(ADC_NUM, ADC_CHANNEL, 1, ADC_SampleTime_144Cycles); /* Enable ADC1 */ ADC_Cmd(ADC_NUM, ENABLE); ADC_start(); } void ADC_start(void) { ADC_SoftwareStartConv(ADC_NUM); } int ADC_get(void) { //HACK - TESTING while (ADC_GetSoftwareStartConvStatus(ADC_NUM) != RESET); //HACK - TESTING return (ADC_GetSoftwareStartConvStatus(ADC_NUM) == RESET) ? ADC_GetConversionValue(ADC_NUM): -1;} 3)button.c #include void button_init(void) { GPIO_InitTypeDef gpioInit; //ban dau phai cho phep xung clock cap cho cong D RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //sau khoi tao cau truc vao cua cong D gpioInit.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_13|GPIO_Pin_6|GPIO_Pin_15; gpioInit.GPIO_Mode=GPIO_Mode_OUT; gpioInit.GPIO_Speed=GPIO_Speed_100MHz ; gpioInit.GPIO_OType=GPIO_OType_PP; 94 gpioInit.GPIO_PuPd=GPIO_PuPd_NOPULL; //khoi tao GPIOD GPIO_Init(GPIOD, &gpioInit); //tiep tuc khoi tao cho cong tac noi voi chan PA9 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); gpioInit.GPIO_Pin=GPIO_Pin_9; gpioInit.GPIO_Mode=GPIO_Mode_IN; gpioInit.GPIO_Speed=GPIO_Speed_100MHz ; gpioInit.GPIO_OType=GPIO_OType_PP; gpioInit.GPIO_PuPd=GPIO_PuPd_NOPULL; // gpioInit.GPIO_PuPd=GPIO_PuPd_DOWN; //khoi tao GPIOD GPIO_Init(GPIOA, &gpioInit); } 4)dac.c #include "stm32f4xx.h" #include "hw.h" #include "dac.h" void DAC2_init(void) { // Enable clocks for port A and DAC RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); // Set up PA.5 as DAC channel output GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; 95 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); /* DAC channel Configuration */ DAC_InitTypeDef DAC_InitStructure; DAC_InitStructure.DAC_Trigger = DAC_Trigger_None; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_2, &DAC_InitStructure); /* Enable DAC Channel */ DAC_Cmd(DAC_Channel_2, ENABLE); } void DAC2_set(uint16_t n) { if (DAC_MIN

Ngày đăng: 27/08/2017, 20:26

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w