โครงงานชุดควบคุมองศา Stepping Motor โดย Keypad (งานที่ 13 )
โครงงานชุดควบคุมองศา Stepping Motor โดย Keypad
รูปที่ 1 วงจรการต่อใช้งานจริง
Contents [show]
ที่มาและความสำคัญของโครงงาน
ปัจจุบันเทคโนโลยีทางด้านการเขียนโปรแกรมได้พัฒนาก้าวหน้าไปมากแล้วไม่ว่าจะเป็นการเขียนในลักษณะของ ภาษา C ภาษา G code หรือ ภาษาโลโก ล้วนแล้วแต่เป็นภาษาที่ใช้งานกันอย่างมากอยู่ในปัจจุบัน
โครงงานนี้ได้นำหลักของการเขียนโปรแกรม Simulink มาประยุกต์ใช้กับอุปกรณ์โดยเราได้ทำการควบคุมองศา ของ Stepping Motor โดยใช้ Keypad เป็นตัวป้อนองศาให้ Stepping Motorและจะแสดงผลผ่านทาง จอ LCD
โครงงานนี้ได้นำหลักของการเขียนโปรแกรม Simulink มาประยุกต์ใช้กับอุปกรณ์โดยเราได้ทำการควบคุมองศา ของ Stepping Motor โดยใช้ Keypad เป็นตัวป้อนองศาให้ Stepping Motorและจะแสดงผลผ่านทาง จอ LCD
คุณสมบัติการทำงานของโครงงาน
- การทำงาน ของสเตปปิ้ง ทำงานครั้งละ 30 องศา จำกัดที่ 180 องศา
- ใช้ไฟเลี้ยงชุดไดรสเตปปิ้งมอเตอร์ 5V
- ใช้ไฟเลี้ยง Keypad 5V
- ใช้ไฟเลี้ยง STM32F4 Discovery 5V
- ใช้ปุ่มทั้งหมด 14 ปุ่ม
ส่วนประกอบต่างๆของโครงงาน
- บอร์ด STM32F4 Discovery จะเป็น MCU เพื่อส่งค่าไปยังบอร์ดต่างๆที่จะใช้งาน
- ชุดขับStepping Motor และ Stepping Motor เป็นตัวแสดงผลคำสั่งที่มาจาก MCU
- LCD 20*4 เป็นตัวแสดงผลคำสั่งที่มาจาก MCU
- Keypad 4×4 เป็นควบคุมการส่งค่าของ MCU เพื่อไปควบคุมองศาของ Stepping Motor
- Regulator 5V แปลงไฟสลับเป็นไฟตรง 5 v
- หม้อแปลง 220VAC จะแปลงไฟ เป็น 12VAC
- VR100k จะทำหน้าที่ปรับความสว่างของหน้าจอ LCD
ทฤษฎีที่เกี่ยวข้องและหลักการที่นำมาใช้ในโครงงาน
- หลักการเกี่ยวกับ KEYPAD เราต้องรู้ก่อนว่า keypad ที่เราใช้นั้นเป็นแบบใด 4*4 หรือ 3*4 และ เป็นแบบดิจิตอล หรือ แบบอนาล็อก ต่อแบบ Pull up หรือ Pull down เพื่อที่จะได้ง่ายต่อ การขียนโปรแกรมควบคุม ซึ่ง key pad ที่ได้นำมาใช้นี้เป็นแบบ 4*4 ดิจิตอล ขาด้านหนึ่งจะต่อในแนวหลัก (column) และ ขาอีกด้านหนึ่งจะต่ออยู่ในแนว แถว (row) การต่อตัวต้านทานแบบ Pull up มีไฟเลี้ยง เมื่อกดสวิตซ์ จะต่อ กราวด์
โดยการทำงานจะต้องอาศัยหลักของการสเกน คือ เราทำการป้อน Output จาก MCU มาให้ตัว keypad ก่อนโดย key pad ที่ใช้เป็นแบบ Pull up ดั้งนั้นถ้าเรากดปุ่มมันจะต่อลงกราวด์ ก็จะส่งค่า ลอจิก “ 0 ” ออกมา output ที่ออกมานี้เราจะทำการป้อนกลับเข้าไปให้ไมโคร เพื่อทำการตรวจสอบว่าปุ่มที่เรากดมันอยู่ตำแหน่งใดและเราจะให้มันแสดงค่าอะไรออกไปเราเรียกวิธีนี้ว่าการสแกน - หลักการเกี่ยวกับ stepping motor เราต้องทราบถึงการทำงานเบื้องต้นของ stepping motor ก่อนคือ stepping motor นั้นสามารถที่จะเคลื่อนที่ได้ จากหลักการของการจ่ายไฟเข้าที่ขดลวดบน stator ในลักษณะการจ่ายแบบเรียงเฟสกันไป เช่น 1-2-3-4 เฟส 1 1100 เฟส 2 0110 เฟส 3 0011 เฟส 4 1001 จ่ายสลับเรียงเฟสกันไปเรื่อยๆ
- หลักการที่เกี่ยวข้องกับการกดตัวเลขป้อนค่าใน KEYPAD โดยเราจะต้องทำการป้อนค่าของข้อมูลลงไปในตัว KEYPAD สมมุติว่าเราจะป้อนค่า 180 ให้กับ KEYPAD หลักการในการกดตัวเลขนั้นเราจะต้องกด หลักหน่วยก่อน คือตัวเลข0 ซึ่งอยู่ในตำแหน่งบนสุดด้านขวามือตามเข็มนาฬิกาหรือตัวอักษร “ห” และ หลักสิบคือตัวเลข 8 ในตำแหน่งตัวอักษร “ส” และ หลักร้อยคือตัวเลข 1 ในตำแหน่งตัวอักษร “ร”
การทำงานของอุปกรณ์
Stepping Motor
ชุดขับ Stepping Motor ซึ่ง Stepping ที่ใช้จะมีความละเอียดอยู่ที่ Step ละ 7.5 องศา ใช้ทรานซิสเตอร์ BC337 เป็นตัวขับ และ ใช้ LED แสดงผลการทำงาน เมื่อมีการส่งลอจิก ‘‘ 1 ’’ จาก MCU มาคอนโทรนในแต่ละเฟส LED ก็จะติดให้รู้ว่าเฟสไหนทำงานอยู่ โดยในการส่งลอจิกนั้นจะต้องส่งเรียงเฟสกันไปเรื่อยๆ ซึ่งจะเริ่มเฟสไหนก่อนก็ได้ ใน Module นี้ จะมี P_in INA , INB , INC และ IND ไว้ให้สำหรับต่อเข้ากับขา Output ของ MCU เพื่อให้ MCU ส่งลอจิก ‘‘ 1 ’’ มาทำการควบคุม Step การหมุนโดยเรียงเฟสไปตามลำดับ การจัดเรียงขาสัญญาณต่างๆ
Keypad 4*4
ชุด Matrix Keyboard 4×4โดยจะมี PIN ใช้ต่อกับไมโครคอนโทรลเลอร์ทั้งหมด 8 PIN โดย PIN1-PIN4 (Column) จะใช้ต่อเป็น Input เพื่อให้ MCU อ่านค่ารหัสของคีย์ที่ถูกกด ส่วน PIN5-PIN8 (ROW) ใช้ต่อเป็น Output เพื่อให้ MCU ส่งลอจิก “0” มาทำการสแกนคีย์ในแต่ละแถว การทำงานนั้น MCU จะอ่านสถานะทางลอจิกของคีย์แต่ละหลักเข้ามาทาง PIN1-PIN4 ซึ่งถ้าไม่มีการกดคีย์จะอ่านลอจิกได้ “1” ถ้ามีการกดคีย์ลอจิกที่อ่านได้ในหลักนั้นจะเป็น “0” แต่ก่อนที่จะอ่านค่าลอจิกแต่ละหลัก MCU จะต้องให้ลอจิก “0” แก่แถวของคีย์แต่ละแถว (PIN5-PIN8) ในการอ่านลอจิกเข้ามาแต่ละครั้งเสมอ
LCD 20*4
หน้าจอ LCD โดยจะมี PIN ทั้งหมด16 PIN โดยมี PIN ที่ใช้ต่อกับไมโครคอนโทรลเลอร์ทั้งหมด 7 PIN โดย PIN4-PIN14 จะใช้ต่อเป็น Input เพื่อให้ MCU ส่งค่ามา LCD ส่วน PIN1-PIN3 จะใช้ ปรับความสว่าง PIN15 และ PIN16ไฟเลี้ยง และ กราวด์
การทำงานของชุดควบคุมองศา stepping motor ด้วย Keypad
- โครงงานนี้เราได้ทำการต่อชุดทดลองไว้หมดแล้ว ดังนั้นเราสามารถที่จะเขียนโปรแกรมและทำการทดลองได้เลยแต่ถ้าไม่ได้ใช้โครงงานชิ้นนี้ก็ต้องต่อ port ของ stepping port ของ keypad port ของ LCD เข้า กับ MCU ซึ่งการต่อใช้งานจะอยู่ในหน้าการต่อใช้งาน
- เริ่มต้นการทำงานขั้นแรกเราต้องทำการจ่าย supply ไฟเลี้ยงวงจรก่อน โดยไฟเลี้ยงที่เราใช้จะใช้อยู่ที่5Vซึ่งเราได้ทำการต่อ regulator 5v ไว้เรียบร้อยแล้วดั้งนั้นจึงเพียงแค่เสียบปลั๊กไฟ 220 VACก็สามารถได้ไฟเลี้ยง 5v แล้ว สาเหตุที่ต้องใช้ 5v เพราะ อุปกรณ์ต่างๆที่เราใช้ล้วน แล้วแต่ต้องการแหล่งจ่ายไฟ 5 v ทั้งนั้น ไม่ว่าจะเป็น MCU keypad stepping motor จอ LCD
- หลังจากนั้นเราก็ทำการตรวจสอบจอ LCD ใช้ได้รึเปล่าโดย LCD เราก็ได้ทำการต่อชุดทดลองไว้ให้หมดแล้วเราสามารถใช้ได้เลยโดยตรวจสอบดุว่า LCD ที่หน้าจอมีไฟรึเปล่า และ ปรับหมุน VR ว่าสามารถปรับระดับของหน้าจอ LCD ได้รึเปล่า เพราะถ้าหาก VR หรือหน้าจอไม่สามารถใช้งานได้เราจะไม่รู้การแสดงผลของข้อมูลบนหน้าจอLCD ซึ่งถ้าVRใช้งานไม่ได้ตัวอักษรที่ปรากฏก็อาจเลือนรางจนมองไม่เห็นจึงเหมือนกับว่าไม่มีข้อมูลมาแสดงแต่แท้ที่จริงแล้วมีข้อมูลมาแต่ตัวอักษรเลือนรางจนเกินไปไม่สามารถมองเห็นได้
- หลังจากนั้นก็ตรวจสอบ port ที่ต่อของ Keypad และ stepping motor ว่าตรงกับที่ได้เขียนไว้บนเส้นสายสัญญาณหรือเปล่า เพราะ ถ้าหากเราต่อสายสัญญาณไม่ตรงกับที่เราได้ตั้งค่าไว้ในโปรแกรมอาจทำให้การทำงานผิดพลาดได้
- เมื่อตรวจสอบทุกอย่างครบแล้วก็ทำการเขียนโปรแกรมควบคุม
- การทำงานโดยเริ่มแรกเราจะปรับระดับความสว่างของLCDให้เหมาะสมก่อน
- หลังจากนั้นก็ลองกดตัวเลข 0-9 ใน keypad โดยก่อนที่เราจะกดปุ่มนั้นเราจะต้องเลือกหลักที่เราจะต้องป้อนตัวเลขลงไปก่อนเช่น หลักหน่วย หลักสิบ หลักร้อย เพราะว่าค่าที่เราใช้สูงสุดมีอยู่3หลัก โดยถ้าหากเราจะต้องการเปลี่ยนหลัก ก็ให้กดปุ่มที่อยู่ทางด้านขวามือในทิศ ตามเข็มนาฬิกา เพราะเราต้องการตำแหน่งทั้ง 3 หลักจึงจำเป็นต้องมีสวิตซ์ที่จะเป็นตัวเลือกในการแสดงผลลงในหลักใดซึ่งวิธีนี้จะเป็นวิธีที่ง่ายไม่ซับซ้อนมาก
- หลังจากที่เราป้อนตัวเลขครบตามที่เราต้องการแล้วก็กดปุ่ม OK
- ดูผลที่ได้จาก จอ LCD และ Stepping motor
การต่อวงจรใช้งาน
Stepping Motor
- ต่อสัญญาณควบคุมเฟสจาก MCU เข้าที่ขั้วต่อ Input INA , INB , INC และ IND ตามลำดับ
- ต่อไฟเลี้ยงบอร์ด VCC = 5V และ GND เข้าทางขั้วต่อ Input
- Set Jumper VB/VCC (ไฟเลี้ยงมอเตอร์) ไปทางด้าน VB เพื่อ Boot ไฟจาก5V เป็น 7V เนื่องจาก Step Motor ของบอร์ดรุ่นนี้ จะเป็นขนาด 24V จึงต้อง Boot ไฟขึ้นเพื่อให้ Step Motor พอจะทำงานได้แต่อาจจะทำงานไม่เต็มที่
- เขียนโปรแกรมควบคุมการหมุนของ Stepping Motor
Keypad 4*4
- ต่อสัญญาณควบคุมจาก MCU PE2, PE4,PE5 และ PE6 เข้าที่ขั้วต่อ Input ตามลำดับ
- ต่อสัญญาณควบคุมจาก MCU PD0,PD1,PD2 และ PD3 เข้าที่ขั้วต่อ Output ตามลำดับ
- ต่อไฟเลี้ยงบอร์ด VCC = 5V และ GND เข้าทางขั้วต่อ Input
LCD 20 * 4
- ต่อสัญญาณควบคุมจาก MCU PE7, PE8,PE9,PE12,PE13,PE14 และ PE15 เข้าที่ขั้วต่อ Input
- ต่อไฟ LED VCC = 5V และ GND เข้าทางขั้วต่อ Input
- ต่อ ขา 1 , 2 และ 3 ของLED กับ VR
โปรแกรม Simulink
หมายเลข 1 : เป็นการเซตการทำงานของบอร์ด STM32F4
หมายเลข 2 : เป็นบล็อกที่รวมบล็อกที่ได้ประกาศตัวแปรและการเซตค่า port และ โมดูลของLCDไว้ในบล็อกนี้ ซึ่งจะอธิบายย่อยใน รูปที่ 8
หมายเลข 3 : เป็นบล็อก การแสดงผล บน LCD ซึ่งจะอธิบายย่อยใน รูปที่ 9
หมายเลข 4 : เป็นบล็อกการเขียนการสั่งงาน Keypad ซึ่งจะอธิบายย่อยใน รูปที่ 6
หมายเลข 5 : การอ่านค่าของข้อมูลที่ได้เก็บไว้ใน mydata4 ชนิดของข้อมูล int32
หมายเลข 6 : เป็นบล็อกการเลือก case การทำงานของโปรแกรมซึ่งจะอธิบายย่อยใน รูปที่ 10
หมายเลข 7 : เป็นบล็อกเงื่อนไข ที่ใช้การกำหนดการแสดงผลในLCD และการเซตเลือกหลักในการป้อนค่า เช่น หลักหน่วย หลักสิบ หรือหลักร้อย ซึ่งจะอธิบายย่อยใน รูปที่ 11
หมายเลข 8 : การอ่านค่าของข้อมูลที่ได้เก็บไว้ใน mydata2 ชนิดของข้อมูล int32
หมายเลข 9 : การกำหนดเงื่อนไขในการทำงานในลักษณะ if , else
หมายเลข 10 : การกำหนดให้แสดงการกระทำหลังจากที่ตรงกำเงื่อนไขที่กำหนดใน หมายเลข 9
หมายเลข 11 :เป็นบล็อกการเขียนควบคุม Stepping motor ซึ่งจะอธิบายย่อยใน รูปที่ 7
หมายเลข 2 : เป็นบล็อกที่รวมบล็อกที่ได้ประกาศตัวแปรและการเซตค่า port และ โมดูลของLCDไว้ในบล็อกนี้ ซึ่งจะอธิบายย่อยใน รูปที่ 8
หมายเลข 3 : เป็นบล็อก การแสดงผล บน LCD ซึ่งจะอธิบายย่อยใน รูปที่ 9
หมายเลข 4 : เป็นบล็อกการเขียนการสั่งงาน Keypad ซึ่งจะอธิบายย่อยใน รูปที่ 6
หมายเลข 5 : การอ่านค่าของข้อมูลที่ได้เก็บไว้ใน mydata4 ชนิดของข้อมูล int32
หมายเลข 6 : เป็นบล็อกการเลือก case การทำงานของโปรแกรมซึ่งจะอธิบายย่อยใน รูปที่ 10
หมายเลข 7 : เป็นบล็อกเงื่อนไข ที่ใช้การกำหนดการแสดงผลในLCD และการเซตเลือกหลักในการป้อนค่า เช่น หลักหน่วย หลักสิบ หรือหลักร้อย ซึ่งจะอธิบายย่อยใน รูปที่ 11
หมายเลข 8 : การอ่านค่าของข้อมูลที่ได้เก็บไว้ใน mydata2 ชนิดของข้อมูล int32
หมายเลข 9 : การกำหนดเงื่อนไขในการทำงานในลักษณะ if , else
หมายเลข 10 : การกำหนดให้แสดงการกระทำหลังจากที่ตรงกำเงื่อนไขที่กำหนดใน หมายเลข 9
หมายเลข 11 :เป็นบล็อกการเขียนควบคุม Stepping motor ซึ่งจะอธิบายย่อยใน รูปที่ 7
หมายเลข 1 : เป็นการเซต Port Input ที่จะใช้
หมายเลข 2 : เป็นการสร้างสัญญาณ Pulse ซึ่งสัญญาณนี้จะเป็นตัวไปเรียกให้บล็อกหมายเลข 3 ทำงานที่ความถี่เท่าไหร่ หรือ จะทำงานทุกๆกี่วินาที
หมายเลข 3 : เป็นบล็อกของการเขียนแบบ State-Flow ซึ่งในการเขียนนั้นเราจะทำการประกาศ INPUT OUTPUT และสร้างตัวที่จะเรียกให้ State-Flow ทำงานก่อน ในที่นี้เราใช้ หมายเลข2 ในการเรียกให้ตัว State-Flow ทำงาน การเขียนนั้นเราก็จะประกาศค่าเริ่มต้นของตัวแปรก่อนและกำหนด case ต่างๆที่เราต้องการในที่นี้เรากำหนด case ทั้งหมด 4 case โดยให้ OUTPUT = 1110 1101 1011 0111 เพื่อที่จะส่งค่าไปยัง keypad เพื่อที่จะทำการสเกนโดยถ้าเรากดปุ่ม ก็จะมีสัญญาณ INPUT ป้อนเข้ามาให้กับไมโคร โดยลักษณะของ INPUT ก็มี 4 case เช่นกันคือ 1110 1101 1011 0111 โดยการทำงานจะทำงานเป็นลำดับๆไปเรื่อยๆเมื่อเรากดปุ่มมันก็จะตรวจสอบว่าตรงกับเงื่อนไขอันไหนและก็จะส่งข้อมูลออกมา ดังรูป6.1
หมายเลข 4 : เป็นการเซต Port Output ที่จะใช้
หมายเลข 5 : เป็นการเก็บค่าของข้อมูลลงไว้ใน mydata1 ชนิดของข้อมูล int 32
หมายเลข 6 : เป็นการเซต Port OUTPUT ที่จะใช้ โดย OUTPUT 4ตัวนี้จะเป็น LED แสดงผล
หมายเลข 7 : เป็นการเก็บค่าของข้อมูลลงไว้ใน mydata4 ชนิดของข้อมูล int 32
หมายเลข 2 : เป็นการสร้างสัญญาณ Pulse ซึ่งสัญญาณนี้จะเป็นตัวไปเรียกให้บล็อกหมายเลข 3 ทำงานที่ความถี่เท่าไหร่ หรือ จะทำงานทุกๆกี่วินาที
หมายเลข 3 : เป็นบล็อกของการเขียนแบบ State-Flow ซึ่งในการเขียนนั้นเราจะทำการประกาศ INPUT OUTPUT และสร้างตัวที่จะเรียกให้ State-Flow ทำงานก่อน ในที่นี้เราใช้ หมายเลข2 ในการเรียกให้ตัว State-Flow ทำงาน การเขียนนั้นเราก็จะประกาศค่าเริ่มต้นของตัวแปรก่อนและกำหนด case ต่างๆที่เราต้องการในที่นี้เรากำหนด case ทั้งหมด 4 case โดยให้ OUTPUT = 1110 1101 1011 0111 เพื่อที่จะส่งค่าไปยัง keypad เพื่อที่จะทำการสเกนโดยถ้าเรากดปุ่ม ก็จะมีสัญญาณ INPUT ป้อนเข้ามาให้กับไมโคร โดยลักษณะของ INPUT ก็มี 4 case เช่นกันคือ 1110 1101 1011 0111 โดยการทำงานจะทำงานเป็นลำดับๆไปเรื่อยๆเมื่อเรากดปุ่มมันก็จะตรวจสอบว่าตรงกับเงื่อนไขอันไหนและก็จะส่งข้อมูลออกมา ดังรูป6.1
หมายเลข 4 : เป็นการเซต Port Output ที่จะใช้
หมายเลข 5 : เป็นการเก็บค่าของข้อมูลลงไว้ใน mydata1 ชนิดของข้อมูล int 32
หมายเลข 6 : เป็นการเซต Port OUTPUT ที่จะใช้ โดย OUTPUT 4ตัวนี้จะเป็น LED แสดงผล
หมายเลข 7 : เป็นการเก็บค่าของข้อมูลลงไว้ใน mydata4 ชนิดของข้อมูล int 32
Stateflow
การเริ่มต้นของโปรแกรมหลังจากที่เราเซตค่าInputและoutputเรียบร้อยแล้ว หมายเลข1 จะเป็นส่วนของการประกาศค่าเริ่มต้นให้กับโปรแกรมโดยเราได้ประกาศให้เริ่มต้น output keypad มีค่าเป็น“1”เพราะ keypad ที่เราใช้เป็นการต่อแบบ Pull up เมื่อเรากดสวิตซ์มันจะส่งค่า “ 0 ” มายังไมโคร และ ประกาศ output ตัวแปรอื่นๆให้มีค่าเป็น “ 0 ” หลังจากนั้นก็เซตการทำงานลักษณะการทำงานจะวนไปเรื่อยๆเป็น cycle จากหมายเลข 1 ไป 2 ไป 3 ไป 4 ไป 5 ไป 6 และวนกลับมาที่จุดเชื่อมต่อระหว่างหมายเลข1 และ 2 เพื่อให้outputที่ได้มาเซตเป็นค่าเริ่มต้นแทนหมายเลข 2,3,4,5 จะเป็นตัวส่ง output ออกไปโดยเราจะส่ง 1110 1101 1011 0111 ตามลำดับออกไปเพื่อที่จะเป็นเป็นตัวตรวจสอบkeypadซึ่งหลักการตรวจสอบจะใช้หลักการสแกนโดยเมื่อสมมุติเรากดปุ่มหมายเลข1 คือ กดปุ่มบนสุดตัวแรกของแถวที่1 เราก็จะรับ input เข้ามา 0111 เพราะ keypad ที่เราใช้เป็นการต่อแบบ Pull up เมื่อเราได้inputมาแล้วเราก็จะมาตรวจสอบกับ outputที่เราได้ป้อนไปว่ามันตรงกับเคสไหนเช่น input 1110 output 1110 แสดงว่าเราได้ทำการกดปุ่มบนสุดตัวแรกของแถวที่1 และเราจะให้มันแสดงค่า1ออกมา ส่วน หมายเลข6จะเป็นการเซตค่า LED ให้เท่ากับ0เมื่อเราไม่กด หมายเลข7 เป็นการสเกนเพื่อตรวจสอบว่าoutputที่เราได้จ่ายออกไปนั้นเมื่อกดแล้วมันส่งค่าลิจิกมายังไมโครและเราจะให้มันแสดงค่าอะไรออกไปหมายเลข8 เป็นการเคลียค่าของข้อมูลหลังจากผ่านไป 0.5 sec เพื่อที่จะไม่ให้ข้อมูลบางอย่างค้างค่าสภานะตลอด
Stepping Motor
หมายเลข 1 : เป็นInput ที่เข้ามา
หมายเลข 2 : เป็นบล็อกของการเขียนแบบ State-Flow โดยในบล็อกนี้เราจะเขียนควบคุม stepping motor โดยหลักการของ stepping motor ก็คือ เราจะจ่ายลอจิกให้กับขดของ stepping motor เป็นลำดับไปเรื่อยๆ เช่น 1100 0110 0011 1001 ลักษณะนี้จะเป็นการจ่ายแบบ Half step ดังนั้น State-Flow ของเราก็จะมี In put 1 ค่า จาก keypad และ output ที่ออกจะมี4ตัว เพื่อป้อนให้ขดของ stepping motor ดั้งนั้นเราก็เขียนเป็น case เรียงตามลำดับไปคือสมมุติถ้ารับค่า 1 มาก็ให้ stepping motor เลื่อนไป 30 องศา การเคลื่อนที่ของ stepping motor ที่ใช้ครั้งละ 7.5 องศาดังนั้นถ้าจะให้ stepping motor เคลื่อนที่ไปได้ 30 องศาก็ต้องป้อน 1100 0110 0011 1001 ถ้าจะให้เลื่อนไป15องศาก็เซต1100 0110 หรือ 0011 1001 เราก็สร้างเงื่อนไขลักษณะนี้ให้ครบ9ลักษณะ เป็นต้น
หมายเลข 2 : เป็นบล็อกของการเขียนแบบ State-Flow โดยในบล็อกนี้เราจะเขียนควบคุม stepping motor โดยหลักการของ stepping motor ก็คือ เราจะจ่ายลอจิกให้กับขดของ stepping motor เป็นลำดับไปเรื่อยๆ เช่น 1100 0110 0011 1001 ลักษณะนี้จะเป็นการจ่ายแบบ Half step ดังนั้น State-Flow ของเราก็จะมี In put 1 ค่า จาก keypad และ output ที่ออกจะมี4ตัว เพื่อป้อนให้ขดของ stepping motor ดั้งนั้นเราก็เขียนเป็น case เรียงตามลำดับไปคือสมมุติถ้ารับค่า 1 มาก็ให้ stepping motor เลื่อนไป 30 องศา การเคลื่อนที่ของ stepping motor ที่ใช้ครั้งละ 7.5 องศาดังนั้นถ้าจะให้ stepping motor เคลื่อนที่ไปได้ 30 องศาก็ต้องป้อน 1100 0110 0011 1001 ถ้าจะให้เลื่อนไป15องศาก็เซต1100 0110 หรือ 0011 1001 เราก็สร้างเงื่อนไขลักษณะนี้ให้ครบ9ลักษณะ เป็นต้น
Stateflow
หลังจากที่เราได้ประกาศ INPUT และ OUTPUT แล้ว เราก็ต้องประกาศค่าเริ่มต้นของโปรแกรมดัง หมายเลข1 จะประกาศให้ค่าเริ่มต้นทางด้าน output มีค่าเท่ากับ “ 0 ” การเขียนส่วนควบคุมเราก็ใช้วิธีการแบบง่ายๆคือ เมื่อเราได้ INPUT เข้ามา 30 องศา แสดงว่าเราก็ต้องสั่งให้ stepping ทำงาน 4 ครั้ง คือ 1100 0110 0011 1001 เพราะ stepping motor ที่ใช้การทำงาน1ครั้งจะเคลื่อนที่ไปได้ครั้งละ 7.5 องศา ดั้งนั้นเมื่อเราต้องการที่30องศา ก็จำเป็น ต้องให้ลอจิกเรียงลำดับกันไปจำนวน4ครั้ง และถ้าหากเราต้องการ 180 องศา ก็ให้ลอจิกเรียงลำดับกันไปจำนวน 24 ครั้ง หมายเลข2 เป็นจุดรวมของเคสต่างๆที่มี คือ 30 60 90 120 150 180 ซึ่งหากต้องการให้ค่ามากๆ ก็ป้อนลายละเอียดคำสั่งเพิ่มเติมได้เลยเพราะการทำงานจะแยกส่วนกันไม่วนกลับมาเกี่ยวข้องกันเมื่อทำงานจบหนึ่งครั้งก็ต้องรีเซตค่าใหม่
หมายเลข 1 : เป็นการประกาศค่าเริ่มต้นของ LCD การเลือกโมดูล และการเซต Port ของ LCD
หมายเลข 2 : เป็นการประกาศตัวแปรต่างๆ และชนิดข้อมูลของตัวแปร
หมายเลข 2 : เป็นการประกาศตัวแปรต่างๆ และชนิดข้อมูลของตัวแปร
Set LCD
หมายเลข 1 : เป็นการเคลียค่า โดยจะกำหนดเป็น 0/1 ก่อนที่จะเขียนข้อความลงไป
หมายเลข 2 : เป็นเซต Column ที่ใช้ ตำแหน่งเริ่มต้นของข้อความจากทั้งหมด 16 ตัวอักษร
หมายเลข 3 : เป็นเซตตำแหน่ง Row หรือ บรรทัดที่จะให้แสดงจากทั้งหมด 4 บรรทัด
หมายเลข 4 : เป็นการอ่านค่าของข้อมูลที่ถูกเก็บไว้ในline1
หมายเลข 5: เป็นการเลือก โมดูลแสดงผล
***หมายเหตุ บล็อกที่เหลืออีก 3 บล็อกก็มีลักษณะการทำงานเหมือนกับที่ได้กล่าวมาแล้ว
หมายเลข 2 : เป็นเซต Column ที่ใช้ ตำแหน่งเริ่มต้นของข้อความจากทั้งหมด 16 ตัวอักษร
หมายเลข 3 : เป็นเซตตำแหน่ง Row หรือ บรรทัดที่จะให้แสดงจากทั้งหมด 4 บรรทัด
หมายเลข 4 : เป็นการอ่านค่าของข้อมูลที่ถูกเก็บไว้ในline1
หมายเลข 5: เป็นการเลือก โมดูลแสดงผล
***หมายเหตุ บล็อกที่เหลืออีก 3 บล็อกก็มีลักษณะการทำงานเหมือนกับที่ได้กล่าวมาแล้ว
Subsystem
หมายเลข 1 : เป็นการกำหนดเงื่อนไขของ switch case
หมายเลข 2 : เป็นการกำหนดการทำงานของ switch case action
หมายเลข 3 : เป็นการเขียนฟังก์ชั่น m-file โดยในบล็อกนี้เราจะเขียนให้แสดงค่าของ key ที่กดต่อไปไม่ว่างจะปล่อยสวิตซ์แล้วหรือการค้างค่านั่นเอง โดยเริ่มต้นเราจะทำการ ประกาศฟังก์ชั่น y = fcn(s1) ประกาศตัวแปร a1 และ flag และกำหนดค่าเริ่มต้นของตัวแปร จากนั้นก็เขียนเงื่อนไขในการทำงานคือ สมมุติเมื่อเรากดสวิตซ์ s1 ค่าที่รับเข้ามาเท่ากับ 1 แต่เมื่อเราปล่อยสวิตซ์ค่าก็จะเท่ากับ 0 ดังนั้นเราก็เขียนเงื่อนไขว่าถ้าเรากดสวิตซ์ s1 ให้ค่าที่รับเข้ามาเท่ากับ1 และ flag = 0 หรือเมื่อเราปล่อยสวิตซ์ ให้มันส่งค่าตัวแปร a1 = 1 ออกไปถ้า ดั้งนั้นมันจึงค้างค่าตัวเลขที่กดต่อไปดังบล็อกที่ รูป 3.1 3.2 3.3 และ 3.4 การเขียนจะเหมือนกันแต่จะแตกต่างกันที่ส่งข้อมูลของตัวแปร a1 ออกไป
หมายเลข 4 : บล็อก Merge บล็อกนี้จะเป็นคล้ายๆสวิตซ์โดยมันจะเลือกการทำงานล่าสุดที่ทำแสดงออก output
หมายเลข 2 : เป็นการกำหนดการทำงานของ switch case action
หมายเลข 3 : เป็นการเขียนฟังก์ชั่น m-file โดยในบล็อกนี้เราจะเขียนให้แสดงค่าของ key ที่กดต่อไปไม่ว่างจะปล่อยสวิตซ์แล้วหรือการค้างค่านั่นเอง โดยเริ่มต้นเราจะทำการ ประกาศฟังก์ชั่น y = fcn(s1) ประกาศตัวแปร a1 และ flag และกำหนดค่าเริ่มต้นของตัวแปร จากนั้นก็เขียนเงื่อนไขในการทำงานคือ สมมุติเมื่อเรากดสวิตซ์ s1 ค่าที่รับเข้ามาเท่ากับ 1 แต่เมื่อเราปล่อยสวิตซ์ค่าก็จะเท่ากับ 0 ดังนั้นเราก็เขียนเงื่อนไขว่าถ้าเรากดสวิตซ์ s1 ให้ค่าที่รับเข้ามาเท่ากับ1 และ flag = 0 หรือเมื่อเราปล่อยสวิตซ์ ให้มันส่งค่าตัวแปร a1 = 1 ออกไปถ้า ดั้งนั้นมันจึงค้างค่าตัวเลขที่กดต่อไปดังบล็อกที่ รูป 3.1 3.2 3.3 และ 3.4 การเขียนจะเหมือนกันแต่จะแตกต่างกันที่ส่งข้อมูลของตัวแปร a1 ออกไป
หมายเลข 4 : บล็อก Merge บล็อกนี้จะเป็นคล้ายๆสวิตซ์โดยมันจะเลือกการทำงานล่าสุดที่ทำแสดงออก output
การเขียนฟังก์ชั่น m-file
Subsystem 2
หมายเลข 1 : เป็นการกำหนดเงื่อนไขแบบ if , else
หมายเลข 2 : เป็นการกำหดเงื่อนไขในฟังก์ชั่น m-file ลักษณะการเขียนจะเหมือนกับ Subsystem ที่ได้กล่าวมาแล้วแต่จะแตกต่างยุที่การ แสดงค่า output หรือ ตัวแปร a1 ออกไปว่าให้มันมีค่าเป็นอะไรหรือมีค่าเท่าไหร่
หมายเลข 3 : เป็นการกำหนดการกระทำเมื่อตรงกับเงื่อนไข switch case
หมายเลข 4 : เป็นการเก็บข้อมูลลงในตัวแปร
หมายเลข 5: เป็นการกระทำทางคณิตศาสตร์เพื่อ ให้มี หลักหน่วย หลัก สิบ และ หลักร้อย
หมายเลข 6 : เป็นการเก็บข้อมูลลงในตัวแปร
หมายเลข 7 : เป็นการอ่านค่าของข้อมูลที่เก็บอยู่ในตัวแปร
หมายเลข 2 : เป็นการกำหดเงื่อนไขในฟังก์ชั่น m-file ลักษณะการเขียนจะเหมือนกับ Subsystem ที่ได้กล่าวมาแล้วแต่จะแตกต่างยุที่การ แสดงค่า output หรือ ตัวแปร a1 ออกไปว่าให้มันมีค่าเป็นอะไรหรือมีค่าเท่าไหร่
หมายเลข 3 : เป็นการกำหนดการกระทำเมื่อตรงกับเงื่อนไข switch case
หมายเลข 4 : เป็นการเก็บข้อมูลลงในตัวแปร
หมายเลข 5: เป็นการกระทำทางคณิตศาสตร์เพื่อ ให้มี หลักหน่วย หลัก สิบ และ หลักร้อย
หมายเลข 6 : เป็นการเก็บข้อมูลลงในตัวแปร
หมายเลข 7 : เป็นการอ่านค่าของข้อมูลที่เก็บอยู่ในตัวแปร
การเขียนฟังก์ชั่น m-file
***หมายเหตุ ลักษณะการเขียนฟังก์ชั้น m-file ทั้ง 3 บล็อกจะเหมือนกัน
ความคิดเห็น
แสดงความคิดเห็น