Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 105 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
105
Dung lượng
5,49 MB
Nội dung
B TR NGă GIỄOăD Că&ă ÀOăT O I H CăS ăPH M K THU T TP H CHệăMINH KHOAă I N ậ I N T B MỌNă I N T CỌNGăNGHI P ậ Y SINH ỄNăT T NGHI P NGÀNHăCỌNGăNGH K THU Tă I N T TRUY NăTHỌNG TÀI: THI T K VÀăTHIăCỌNGăDỂYăCHUY N PHỂNăLO Iă AIă C NG D NG X GVHD: THS.ăVÕă SVTH: Lụă NH CăD NG NGUY NăV NăTÀIăăăăăă 15141273 NGUY NăMINHă C 15141135 Tp H ChíăMinhă- 6/2019 TR NGă HăSPKTăTP.ăH ăCHệăMINH KHOAă I N- I NăT B ăMỌNă I NăT ăCỌNGăNGHI Păậ Y SINH C NGăHọAăXÃăH IăCH ăNGH AăVI TăNAM CăL Pă- T ăDOă- H NHăPHÚC o0o Tp HCM, ngƠy 20 tháng n m 2019 NHI MăV ă H tên sinh viên: Chuyên ngƠnh: H đƠo t o: Khóa: I TểN ăỄNăT TăNGHI P Nguy n V n TƠi Nguy n Minh c K thu t n t - truy n thông i h c quy 2015 MSSV: 15141273 MSSV: 15141135 Mư ngƠnh: 141 Mư h : L p: 15141DT2C TÀI: THI TăK ăVÀăTHIăCỌNGăDỂYăCHUY NăPHỂNăLO Iă AIă Că NGăD NGăX ăLụă NH II NHI M V Các s li u ban đ u: Mơ hình dơy chuy n phơn lo i đai c ng d ng x lỦ nh s d ng đ ng c DC 12V, khung xơy d ng b ng nhơm đ nh hình, camera s d ng lƠ lo i webcam C270, vi u n s d ng STM32F103C8T6, ph n x lỦ nh dùng máy vi tính Giao ti p gi a máy tính vƠ vi u n qua IC PL2303 d a giao ti p UART Ch ng trình x lỦ nh máy tính vi t b ng ngôn ng C++ d a b th vi n mư ngu n m OpenCV vƠ đ c t o giao di n b ng ph n m m QT Creator N i dung th c hi n: - Tìm hi u cách th c ho t đ ng c a h th ng phơn lo i dùng x lỦ nh - Tìm hi u chu n giao ti p UART, đ ng c DC, c m bi n h ng ngo i, encoder - Tìm hi u v vi u n STM32F103C8T6 - Thi t k vƠ thi cơng mơ hình dơy chuy n phơn lo i - Thi t k vƠ thi công m ch n cho h th ng - Vi t ch ng trình x lỦ nh máy tính dùng ph n m m QT Creator - Vi t ch ng trình u n cho vi u n STM32F103C8T6 - Ch y th nghi m mô hình, ch nh s a vƠ hoƠn thi n h th ng - Th c hi n vi t lu n v n báo cáo - Ti n hƠnh báo cáo đ tƠi t t nghi p III NGÀY GIAO NHI M V : 18/2/2019 IV NGÀY HOÀN THÀNH NHI M V : 20/6/2019 V H VÀ TểN CÁN B H NG D N: ThS Võ c D ng CỄNăB ăH SINH NGăD NăăăăăăăăăăăăăăăăăăăăăăăăăBM.ă I NăT ăCỌNGăNGHI Păậ Y i TR B NG H SPKT TP H CHệ MINH KHOAă I N- I N T MỌNă I N T CỌNGăNGHI P ậ Y SINH C NGăHọAăXÃăH I CH NGH AăVI T NAM C L P - T DO - H NHăPHÚC o0o Tp HCM, ngƠy 18 tháng 02 n m 2019 L CHăTRỊNHăTH C HI Nă H tên sinh viên 1: Nguy n Minh H tên sinh viên 2: Nguy n V n TƠi c ỄNăT T NGHI P L p: 15141DT2C MSSV: 15141135 L p: 15141DT2C MSSV: 15141273 Tên đ tƠi: THI T K VÀăTHIăCỌNGăDỂYăCHUY NăPHỂNăLO I AIă C Tu n/ngƠy NG D NG X Lụă NH N iădung Xácănh nă GVHD - G p GVHD đ nghe ph bi n yêu c u lƠm đ án, ti n hƠnh ch n đ tƠi, GVHD ti n hƠnh xét (18/02 - 24/02) t đ tƠi Tu n Tu n (25/02 - 03/03) Tu n (04/03 - 10/03) Tu n (11/03 - 17/03) - Vi t đ c ng tóm t t n i dung đ án - Tìm hi u t ng quan vƠ ph ng th c ho t đ ng c a Module STM32f103c8t6, Camera - Tìm hi u v cơng ngh x lỦ nh - Tìm hi u vƠ nghiên c u u n đ ng c vƠ khí nén dùng STM32f103c8t6 - Tìm hi u k t n i Camera đ thu th p hình nh Tu n - Tìm hi u vƠ nghiêm c u giao ti p Uart gi a máy (18/03 - 24/03) tính vƠ STM32f103c8t6 Tu n - - Tìm hi u cách l p trình vƠ ngôn ng vi t cho x (25/03 - 07/04) lỦ nh ii Tu n - Mô ph ng m ch, ki m tra vƠ ch nh m ch (08/04 - 14/04) - V PCB Tu n - 10 - Ti n hƠnh thi công m ch (15/04 - 28/04) - Ki m tra m ch thi công Tu n 11 (29/04 - 05/05) Tu n 12 ậ 13 (06/05 - 19/05) Tu n 14 - Ki m tra vƠ c i ti n h th ng - Vi t báo cáo nh ng n i dung đư lƠm (20/05- 26/05) - HoƠn thi n báo cáo vƠ g i cho GVHD đ xem xét góp Ủ l n cu i tr c in vƠ báo cáo Tu n 15 - N p quy n báo cáo vƠ báo cáo đ tƠi (27/05 - 02/06) - Thi t k Slide báo cáo GV H NG D N (KỦ vƠ ghi rõ h vƠ tên) iii L IăCAMă OAN tƠi nƠy lƠ nhóm t th c hi n, d a vƠo m t s đ tƠi tr c c ng nh tƠi li u tham kh o vƠ không chép t tƠi li u hay cơng trình đư có tr c TP H Chí Minh, ngƠy 20/6/2019 Ng i th c hi n đ tƠi Nguy n V n TƠi Nguy n Minh c iv L I C Mă N L i đ u tiên, nhóm th c hi n đ tƠi xin g i l i c m n chơn thƠnh đ n th y Võ c D ng - gi ng viên khoa i n- i n t , đư theo sát h tr vƠ h ng d n nhóm m t cách chi ti t trình th c hi n đ tƠi Th y h tr h t mình, gi i đáp th c m c, ch sai sót c ng nh g i Ủ nh ng ph ng án th c hi n cho kh thi vƠ d ti p c n nh t Trong trình th c hi n án t t ngi p chúng em đư nh n đ vƠ ng h c a th y, cô khoa c s giúp đ i n- i n t S h tr c a th y, cô đư góp ph n khơng nh giúp chúng em hoƠn thƠnh đ tƠi nƠy Nhóm đ tƠi c ng xin c m n b n sinh viên khoa i n- i n t đư nhi t tình giúp đ , h tr nhóm, chia s kinh nghi m Nh ng đóng góp c a b n ln đ c nhóm ti p nh n vƠ xem xét k l ng Cu i cùng, nhóm xin c m n chơn thƠnh vƠ sơu s c đ n nh ng ng bi t lƠ quỦ ph huynh - nh ng ng i thơn đ c i bên c nh h tr h t v tƠi c ng nh tinh th n su t trình h c t p c ng nh th c hi n đ tƠi nƠy Dù đư c g ng vƠ n l c nhiên v i nh ng h n ch v ki n th c vƠ kinh nghi m, đ tƠi khơng th tránh đ c nhi u thi u sót Nhóm mong nh n đ cs đóng góp, nh n xét đ c a th y, vƠ b n bè đ có th hoƠn thi n đ tƠi h n Xin chơn thƠnh c m n! Ng i th c hi n đ tƠi Nguy n V n TƠi Nguy n Minh c v M CL C L CH TRỊNH TH C HI N ÁN T T NGHI P ii L I CAM OAN iv L I C M N v LI T Kể HỊNH viii LI T Kể B NG x TịM T T xi Ch ng T NG QUAN TV N 1.1 1.2 M C TIểU VÀ GI I H N 1.3 N I DUNG NGHIểN C U 1.4 GI I H N 1.5 B C C Ch ng C S Lụ THUY T 2.1 T NG QUAN V X Lụ NH 2.1.1 Gi i thi u v nh s 2.1.2 Ph 2.1.3 Gi i thi u v th vi n OpenCV vƠ camera Logitech C270 ng pháp thu nh n nh i u ch nh đ sáng vƠ đ t 2.1.4 2.1.5 ng ph n L c nhi u nh 2.2 TỊM NG BIểN C A NH 13 2.3 GIAO TI P UART 15 2.4 VI I U KHI N STM32F103C8T6 17 2.4.1 T ng quan 17 2.4.2 C u trúc h th ng 18 2.4.3 Tìm hi u GPIO 21 2.4.4 Timer vƠ PWM 23 2.5 NG C DC 25 2.6 ENCODER 26 2.7 C M BI N H NG NGO I 29 Ch ng TệNH TOÁN VÀ THI T K H TH NG 31 3.1 THI T K S 3.2 TệNH TOÁN THI T K M CH 32 3.2.1 KH I 31 Kh i vi u n vƠ giao ti p máy tính 32 vi 3.2.2 Kh i c m bi n vƠ encoder 35 3.2.3 Kh i công su t u n t i 35 3.2.4 Kh i ngu n 39 3.2.5 M ch PCB 41 3.2.6 S đ nguyên lỦ toƠn m ch 43 3.3 Ch TệNH TOÁN THI T K MỌ HỊNH 44 3.3.1 C c u c p phôi 44 3.3.2 B ng t i 46 3.3.3 C c u phơn lo i 46 3.3.4 H p n 49 ng THI CỌNG H TH NG 50 4.1 GI I THI U 50 4.2 THI CỌNG M CH I N 50 4.2.1 Linh ki n s d ng m ch n 50 4.2.2 L p ráp vƠ ki m tra m ch n 51 4.3 THI CỌNG MỌ HỊNH 52 4.3.1 V t li u, linh ki n s d ng 52 4.3.2 Các b 4.4 c thi công 53 L P TRỊNH H TH NG 57 4.4.1 L u đ gi i thu t cho vi u n 57 4.4.2 L u đ gi i thu t cho ch 4.4.3 Ph n m m QT Creator 65 4.4.4 Trình biên d ch Keil µVision 70 ng trình x lỦ nh 63 Ch ng K T QU - NH N XÉT ậ ÁNH GIÁ 75 Ch ng K T LU N VÀ H NG PHÁT TRI N 81 6.1 K T LU N 81 6.2 H NG PHÁT TRI N 81 TÀI LI U THAM KH O 82 PH L C 83 vii LI TăKể HỊNH Hình Trang Hình Các b c x lỦ nh .5 Hình 2 Hình nh Webcam Logitech C270 Hình M t m t n l c kích th c 3x3 Hình Ví d v ph n t trung v 10 Hình Các h ng xét giá tr 15 Hình S đ c u trúc kh i c a STM32F103C8T6 18 Hình S đ ngu n xung clock c a STM32F103C8T6 20 Hình Thanh ghi c u hình ch c n ng chơn GPIO c a port 22 Hình Thanh ghi đ c giá tr ngõ vƠo 23 Hình 10 Thanh ghi ch n giá tr ngõ c a port 23 Hình 11 ng c GA25 26 Hình 12 a encoder t ng đ i ki u quay 28 Hình 13 Hình nh encoder quang 100 xung 28 Hình 14 Led phát h ng ngo i 29 Hình 15 Kí hi u đi- t quang 29 Hình 16 Kí hi u transistor quang 30 Hình 17 C m bi n h ng ngo i E18-D80NK 30 Hình S đ kh i c a h th ng .31 Hình S đ m ch vi u n 33 Hình 3 M ch chuy n USB UART PL2303 34 Hình C ng domino k t n i c m bi n vƠ encoder .35 Hình S đ k t n i c m bi n vƠ encoder 35 Hình S đ m ch công su t u n đ ng c DC dùng PWM 36 Hình S đ m ch cơng su t u n đ ng c DC b ng relay .37 Hình S đ m ch công su t u n servo 38 Hình S đ m ch công su t u n led r i 38 Hình 10 S đ m ch led báo tr ng thái t i .39 Hình 11 S đ m ch ngu n 41 Hình 12 Hình nh m ch PCB 41 Hình 13 Hình nh 3D c a m ch in m t 42 Hình 14 Hình nh 3D c a m ch in nhìn nghiêng 42 Hình 15 S đ nguyên lỦ toƠn m ch .43 Hình 16 Hình nh l n thi t k 44 Hình 17 Hình nh bánh r ng thi t k 45 Hình 18 M t tr c puly 46 Hình 19 Tr c ph c a đ a quay .47 Hình 20 Puly tr c đ a 48 Hình 21 S đ n i dơy h p n 49 viii Hình Servo g t v t không đ t yêu c u Sau đ kích th c camera ch p vƠ máy tính x lỦ, đai c khơng đ t u c u, có c nh , s b Servo g t sang m t bên, đai c đ t yêu c u s không b g t Hình Thanh g t đai c đ t yêu c u Các đai c đ t yêu c u s qua Servo vƠ t i m t g t l p đai c s b g t kh i đ a quay Nh v y hai lo i c đư đ B MỌNă I N T CỌNGăNGHI P- Y SINH sau Servo, t i đơy c phơn lo i riêng bi t 78 Hình Các hình ch p đ Sau camera ch p hình đ c l u l i th m c c l u l i m t th m c vƠ đ th i gian ch p v i đ nh d ng tên lƠ ắAnh_gi _phút_giơy.jpg” c đ t tên theo i u nƠy giúp ki m tra vƠ qu n lỦ vi c x lỦ nh n u c n thi t Sau trình lƠm vi c vƠ nghiên c u nhóm đư đ t đ c m t s k t qu sau: Có th l p trình cho vi u n STM32F103C8T6 V i xu h ng x d ng dòng vi u n lõi ARM v i chi phí r vƠ hi u su t cao vƠ STM32F103C8T6 lƠ m t s nhóm đư có ki n th c c b n v dòng vi u n nƠy vƠ có th m r ng lo i vi u n t ng t Có th tính tốn, thi t k vƠ v m ch n Tính tốn, thi t k vƠ v m ch lƠ nh ng yêu c u không th thi u c a m t ng i h c n t , sau th c hi n đ tƠi, nhóm đư bi t v n d ng nh ng ki n th c đư h c đ tính tốn vƠ thi t k m ch cơng su t theo yêu c u Có th v m ch n PCB phù h p v i tiêu chu n vƠ đ m b o th m m Bi t cách l p trình ph n m m ng d ng có giao di n b ng QT Creator Qua q trình lƠm vi c nhóm đư có ki n th c c b n đ đ t o m t ng d ng có th ch y máy tính vƠ có giao di n thơn thi n v i ng i dùng giúp ng i s d ng đ c d dƠng B MỌNă I N T CỌNGăNGHI P- Y SINH 79 Có th giao ti p gi a máy tính vƠ vi u n Giao ti p gi a vi u n vƠ máy tính lƠ m t yêu c u th ng g p th c t vƠ sau th c hi n đ tƠi, nhóm đư n m rõ ki n th c c n thi t đ giao ti p gi a thi t b Hi u vƠ có th s d ng th vi n OpenCV cho vi c x lỦ nh Th vi n OpenCV lƠ m t th vi n n n t ng vƠ ph bi n cho vi c l p trình x lỦ nh, giúp vi c x lỦ nhanh chóng vƠ d dƠng Nhóm đư tìm hi u đ c cách s d ng vƠ ki n th c c b n s d ng th vi n OpenCV giúp vi c hi u rõ nguyên lỦ vƠ ng d ng m r ng th vi n khác ho c n n t ng x lỦ nh khác H th ng sau hoƠn thƠnh ho t đ ng v n thi u sót vƠ ch a th c s n đ nh, có tình tr ng phơn lo i b sai, nguyên nhơn camera s d ng v n ch a đáp ng t t yêu c u c a h th ng nên vi c x lỦ phơn lo i ch a đ c t t nh t NgoƠi v m t th m m nhi u chi ti t ch a t t B MỌNă I N T CỌNGăNGHI P- Y SINH 80 Ch 6.1 ngă6 K T LU NăVÀăH NGăPHỄTăTRI N K T LU N Sau m t th i gian nghiên c u vƠ lƠm vi c ch m ch nhóm đư c b n đ t đ c nh ng m c tiêu đ ra: Vi t đ c ch Nh n d ng đ ng trình x lỦ nh máy tính có giao di n c đai c có kích th c khác Giao ti p t máy tính t i vi u n n đ nh vƠ xác Các b ph n c khí ho t đ ng t H 6.2 ng đ i t t NGăPHỄTăTRI N tƠi v n nhi u thi u sót v y nhóm đ xu t m t s h - ng đ phát tri n thêm: Thay th webcam b ng m t lo i camera có t c đ ch p nhanh h n giúp x lỦ hình nh t c đ cao h n - Nghiên c u thêm thu t toán hi u qu h n vi c phát hi n l i - Thi t k m ch phù h p v i môi tr ng công nghi p, tiêu chu n công nghi p - HoƠn thi n ph n m m máy tính đ có th đóng gói vƠ s d ng m t cách hoƠn ch nh - C i ti n c c u c khí đ ho t đ ng đ c hi u qu vƠ phù h p v i yêu c u c a th c t B MỌNă I N T CỌNGăNGHI P- Y SINH 81 TÀIăLI U THAM KH O [1] Nguy n ình Phú, “Giáo trình vi x lý”, Tr [2] Nguy n ng HSPKT, Tp.HCM, 2013 ình Phú, “Giáo trình: Th c hành vi u n - ARM STM32”, Tr ng HSPKT, Tp.HCM, 2014 [3] Phan V n Ph ng, Tr n Trí Tơm, “ ng d ng x lý nh c nh báo tài x ng g t”, án t t nghi p, Tr ng HSPKT Tp HCM, 2014 [4] Phan Tr ng Thu t, Nguy n V n úng, “Phân lo i s n ph m dùng camera”, t t nghi p, Tr án ng HSPKT Tp HCM, 2014 [5] Lê Qu c Nh t, Chơu Thái B o, “Nh n d ng th t màu cho cáp k t n i công nghi p dùng x lý nh”, án t t nghi p, Tr ng HSPKT Tp HCM, 2016 [6] Tr n Thanh Sang, Tr n M nh Hùng, ắThi t k h th ng nh n d ng bi n s xe”, án t t nghi p, Tr ng HSPKT Tp HCM, 2014 [7] Lê Doưn Th ng, “Thi t k thi công b u n máy ch y b n”, nghi p, Tr án t t ng HSPKT Tp HCM, 2015 [8] T.Lê, ” Dùng webcam phân lo i s n ph m”, nld.com.vn, 8/2008 [9] Nguy n ình Phú, Nguy n Tr ng Duy, “Giáo Trình: K Thu t S ”, NhƠ xu t b n H Qu c Gia Tp.HCM, 2013 [10] Tr n Thu HƠ, Tr ng Th Bích NgƠ, Nguy n Th L ng, Bùi Th Tuy t an, Phù Th Ng c Hi u, D ng Th C m Tú, ắGiáo Trình: i n t c b n”, NhƠ xu t b n H Qu c Gia Tp.HCM, 2013 B MỌNă I N T CỌNGăNGHI P- Y SINH 82 PH L C CH NGăTRỊNHăVIă I U KHI N HƠmămain.c #include "stm32f10x.h" GPIO_InitTypeDef TIM_TimeBaseInitTypeDef NVIC_InitTypeDef USART_InitTypeDef TIM_OCInitTypeDef TIM_BDTRInitTypeDef uint32_t uint32_t uint32_t float uint16_t uint8_t uint8_t uint8_t GPIO_InitStructure; TIM_TimeBaseInitStructure; NVIC_InitStructure; UART_InitStructure; TIM_OCInitStructure; TIM_BDTRInitStructure; encoder_pulse1=0; // khai bao bien doc encoder count_temp1=0, count_test=0; count_recent1 =0, count_update1=0; motor_speed1=0; data; fail; a[5]; number; void GPIO_Configuration(void); void Delay_ms(uint16_t time); void TIM4_TIME(void); // timer4 dem thoi gian toc void TIM1_PWM(void);// pwm dung timer1 dieu khien dong co void TIM2_ENCODER_Configuration(void);//doc gia tri encoder timer2,3 void UART_Configuration (void); //cau hinh cho UART void TIM3_SERVO(void); dung int main(void) { GPIO_Configuration(); UART_Configuration(); TIM4_TIME(); TIM1_PWM(); TIM2_ENCODER_Configuration(); TIM3_SERVO(); TIM_SetCompare2(TIM3,520); while (1) { if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==0)//tin hieu cam bien { if(USART_GetITStatus(USART2, USART_IT_TXE)== RESET) { Delay_ms(25); USART_SendData(USART2,0x64); } if(fail==1) { Delay_ms(1600); TIM_SetCompare2(TIM3,1400); Delay_ms(300); B MỌNă I N T CỌNGăNGHI P- Y SINH 83 TIM_SetCompare2(TIM3,520); if(USART_GetITStatus(USART2,USART_IT_TXE)== RESET) USART_SendData(USART2,0x65); fail=0; } } } } void GPIO_Configuration(void) { /*Cap clock cho port*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); } = = = = = = = = = void Delay_ms(uint16_t time) { uint32_t time_n=time*12000; while(time_n!=0){time_n ;} } /*C u hình giao ti p UART*/ void UART_Configuration (void) B MỌNă I N T CỌNGăNGHI P- Y SINH 84 { /*C p clock cho USART port A*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); /* C u hình chân TX RX*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; // chân TX c a UART2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //chân RX c a UART2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /*Cau hinh USART*/ UART_InitStructure.USART_BaudRate = 9600; UART_InitStructure.USART_WordLength = USART_WordLength_8b; UART_InitStructure.USART_StopBits = USART_StopBits_1; UART_InitStructure.USART_Parity = USART_Parity_No; UART_InitStructure.USART_HardwareFlowControl= USART_HardwareFlowControl_None; UART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &UART_InitStructure); /* C u hình ng t UART */ NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ClearFlag(USART2, USART_IT_RXNE); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); /* Cho phep UART hoat dong */ USART_Cmd(USART2, ENABLE); } /*C u hình TIMER4 đ m th i gian*/ void TIM4_TIME(void) { RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4 , ENABLE); /*c u hình TIM4*/ TIM_TimeBaseInitStructure.TIM_Period = 99; // delay 10ms TIM_TimeBaseInitStructure.TIM_Prescaler = (7200 - 1);//1khz TIM_TimeBaseInitStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure); /* C u hình ng t UART */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_ClearFlag(TIM4, TIM_FLAG_Update); B MỌNă I N T CỌNGăNGHI P- Y SINH 85 TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); TIM_Cmd(TIM4, ENABLE); } /*C u hình PWM v i TIMER1 u n đ ng c */ void TIM1_PWM(void) { /*C p clock cho TIMER1 port A*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8| GPIO_Pin_9;// motor GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /*c u hình TIM1*/ TIM_TimeBaseInitStructure.TIM_Prescaler =7; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 899; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStructure); /*C u hình PWM1*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; /*PWM Channel 1*/ TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1); TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable); /*PWM Channel 2*/ TIM_OC2Init(TIM1, &TIM_OCInitStructure); TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1); TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable); /*cho phép PWM_TIM1 ho t đ ng*/ TIM_Cmd(TIM1, ENABLE); TIM_CtrlPWMOutputs(TIM1, ENABLE); } /*C u hình TIMER2 đ m xung encoder*/ void TIM2_ENCODER_Configuration(void) { TIM_ICInitTypeDef TIM_ICInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); B MỌNă I N T CỌNGăNGHI P- Y SINH 86 /* c u hình TIM2*/ TIM_TimeBaseInitStructure.TIM_Prescaler=0; TIM_TimeBaseInitStructure.TIM_Period=0xFFFF; TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); TIM_ICInitStructure.TIM_Channel=TIM_Channel_1 | TIM_Channel_2; TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Falling; TIM_ICInitStructure.TIM_ICFilter=15; TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI; TIM_ICInit(TIM2, &TIM_ICInitStructure); TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Falling, TIM_ICPolarity_Falling); TIM_SetCounter(TIM2, 0); TIM_Cmd(TIM2, ENABLE); TIM_ClearFlag(TIM2, TIM_FLAG_Update); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /*C u hình TIMER3 u n Servo*/ void TIM3_SERVO(void) { /*C p xung clock cho TIMER3 port A*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; // servo GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /*Tao xung tan so 50hz dieu khien servo*/ TIM_TimeBaseInitStructure.TIM_Prescaler =99; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 14399; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure); /*C u hình PWM*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); /*PWM Channel 2*/ TIM_OC2Init(TIM3, &TIM_OCInitStructure); B MỌNă I N T CỌNGăNGHI P- Y SINH 87 TIM_SelectOCxM(TIM3, TIM_Channel_2, TIM_OCMode_PWM1); TIM_CCxCmd(TIM3, TIM_Channel_2, TIM_CCx_Enable); TIM_Cmd(TIM3, ENABLE); TIM_CtrlPWMOutputs(TIM3, ENABLE); } Ch ng trình ng t /* Hàm ng t UART*/ void USART2_IRQHandler(void) { uint16_t data; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { data = USART_ReceiveData(USART2); if(data==0x61) // Start he thong chay- ki tu 'a' { GPIO_SetBits(GPIOA,GPIO_Pin_12); GPIO_SetBits(GPIOA,GPIO_Pin_11); TIM_SetCompare1(TIM1,170); TIM_SetCompare2(TIM1,150); } else if(data==0x62) // Stop he thong- ki tu 'b' { GPIO_ResetBits(GPIOA,GPIO_Pin_12); GPIO_ResetBits(GPIOA,GPIO_Pin_11); TIM_SetCompare1(TIM1,0); TIM_SetCompare2(TIM1,0); } else if(data==0x63)// co vat loi- ki tu 'c' { fail=1; } } } B MỌNă I N T CỌNGăNGHI P- Y SINH 88 /* Hàm ng t TIMER4*/ void TIM4_IRQHandler(void) { if (TIM_GetFlagStatus(TIM4, TIM_FLAG_Update)==SET) { TIM_ClearFlag(TIM4, TIM_FLAG_Update); encoder_pulse1 = 500000000 + TIM_GetCounter(TIM2) + 65536*count_temp1; count_recent1 = encoder_pulse1; if (count_recent1 > count_update1) {motor_speed1 = (float)(count_recent1 – count_update1)*6000/100;} else if (count_recent1 < count_update1) {motor_speed1 = 0- (float)(count_update1 – count_recent1)*6000/100;} else {motor_speed1 = 0;} count_update1 = count_recent1; } } /* Hàm ng t TIMER2*/ void TIM2_IRQHandler(void) { uint16_t timer_temp1; if (TIM_GetFlagStatus(TIM2, TIM_FLAG_Update)==SET) { TIM_ClearFlag(TIM2, TIM_FLAG_Update); timer_temp1 = TIM2->CNT; if (timer_temp1 == 65535) count_temp1 ; if (timer_temp1 == 0) count_temp1++; } } B MỌNă I N T CỌNGăNGHI P- Y SINH 89 CH NGăTRỊNHăX Lụă NH HƠmănh n d li u void MainWindow::readData() { const QByteArray data = m_serial->readAll(); if (data.size() == 0) { qDebug() dataGet->insertPlainText(QString(data.at(i))); } } const char* t = strstr(data, "d"); if(t != nullptr) { m_ui-> dataSend-> insertPlainText("ok"); flag=true; } const char* r = strstr(data, "e"); if(r != nullptr) fail++; } } Ch ngătrìnhăchính void MainWindow::on_StartBtn_clicked() { using namespace cv; using namespace std; if(video.isOpened()) { m_ui->StartBtn->setText("Start"); video.release(); writeData("b"); return; } if(!video.open(1)) { QMessageBox::critical(this,"Camera L i"); return; } B MỌNă I N T CỌNGăNGHI P- Y SINH 90 m_ui->StartBtn->setText("Stop"); writeData("a"); Mat frame,img; Mat canny_output; while(video.isOpened()) { video >> frame; if(!frame.empty()) { cvtColor(frame,frame,CV_RGB2GRAY); QImage qimg(frame.data,frame.cols,frame.rows, QImage::Format_Indexed8); pixmap.setPixmap( QPixmap::fromImage(qimg)); m_ui->IMG_1->fitInView(&pixmap, Qt::KeepAspectRatio); Mat threshold_output; vector contours; vector hierarchy; if(flag==1) { QTime ct = QTime::currentTime(); QString fileName=("G:/DATotNgiep/capture/Anh_"+ ct.toString("hh-mm-ss")+".jpg"); GaussianBlur(frame,img,Size(3, 3), 2); //loc anh threshold(img,threshold_output, m_SettingSystem.Thresh,255,THRESH_BINARY); findContours( threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0,0)); // Draw contours vector contours_poly(contours.size()); vectorcenter(contours.size()); vectorradius(contours.size()); for(unsigned int i=0;i 1000) && (contourArea(contours[i]) < 8000)) { drawContours(drawing, contours_poly, int(i), Scalar(255,0,255), 3, 8, vector(), 0, Point()); circle(drawing, center[i], int(radius[i]), Scalar(255,255,255), 2, 8, 0); if (max < radius[i]) max = radius[i]; B MỌNă I N T CỌNGăNGHI P- Y SINH 91 } } if(max45) { writeData("c"); m_ui->lbl_Capture-> setText("FAIL"); } else if(max>63) { writeData("d"); m_ui->lbl_Capture-> setText("PASS"); } QImage imdisplay(drawing.data, drawing.cols, drawing.rows, QImage::Format_RGB888); m_ui->lEd_NumberFalse->setText(QString("%1").arg(fail)); pixmap2.setPixmap( QPixmap::fromImage(imdisplay)); m_ui->IMG_2->fitInView(&pixmap2, Qt::KeepAspectRatio); flag=false; } void MainWindow::on_Thresh_slider_valueChanged(int value) { m_ui-> lbl_Thresh_Value-> setText(QString("%1").arg(value)); m_SettingSystem.Thresh=value; } B MỌNă I N T CỌNGăNGHI P- Y SINH 92 ... LụăTHUY T Gi i thi u c s lỦ thuy t g m lỦ thuy t v x lỦ nh, linh ki n vƠ thi t b s d ng đ thi t k h th ng vƠ trình bƠy chu n truy n, giao th c Ch ngă3:ăTệNHăTOỄNăVÀ THI T K H TH NG Thi t k s đ kh... [8] 1.2 M CăTIểUăVÀăGI I H N Thi t k vƠ thi cơng m t dơy chuy n có th phơn lo i đai c ng d ng x lỦ nh dùng th vi n mư ngu n m OpenCV vi t ngơn ng C++ Dơy chuy n có th phơn lo i đai c b sai kích... m bi n h ng ngo i, encoder - Tìm hi u v vi u n STM32F103C8T6 - Thi t k vƠ thi cơng mơ hình dơy chuy n phơn lo i - Thi t k vƠ thi công m ch n cho h th ng - Vi t ch ng trình x lỦ nh máy tính dùng