នៅពេលដែលនិយាយពីរលកសញ្ញាគ្រប់គ្នាតែងតែស្រម៉ៃពីរូបរាងរបស់ស៊ីនុយសូអ៊ីត Sine Wave ដោយសារតែវាត្រូវបានគេលើកឡើងមកសិក្សាក្នុងករណីទាំងរូបវិទ្យា និងគណិតវិទ្យា។ ខាងក្រោមនេះខ្ញុំនឹងបង្ហាញពីគម្រូត្រួសៗក្នុងការបង្កើតសញ្ញា Sine Wave ដោយសរសេរកូដ Arduino។
ទំនាក់ទំនងនៃរលកស៊ីនុយសូអ៊ីត |
សមីការលកស៊ីនុយសូអីត |
- A (Amplitude) អំភ្លីទុត (កំពស់ដែលរលកឡើងខ្ពស់បំផុតវាស់ពី 0)
- f (Frequency) ហ្វ្រេកង់របស់រលក
- ω = 2πf (Angular frequency) ល្បឿនមុំដែលគិតជារ៉ាដ្យង់
- (Phase) ដែលមានតម្លៃស្មើ 0 បើរលកចាប់ផ្តើមពី 0 នៅខណៈពេល t = 0
ដើម្បីបង្កើតរលកឡើងវិញបានត្រូវសិក្សាពីការធ្វើ Sampling ដែលយើងត្រូវតែយល់ដឹងពី (Nyquist–Shannon Theorem) ដោយដឹងថាហេតុអ្វីក៏ Sampling Frequency យ៉ាងហោចណាស់ត្រូវតែធំជាង ២ ដងនៃ Signal Frequency។
ការធ្វើ Sampling |
ការធ្វើ Sampling គឺជាការបំបែករលក១ទាំងមូលឲ្យទៅជាកំនាត់ខ្លីៗតូចដើម្បីខាងស្រួលសិក្សារ ហើយការបង្កើតឡើងវិញក៏មិនបង្កើតរលកទាំងស្រុងម្តងទាំងអស់បានដែរ គឺបង្កើតក្នុងរយៈពេល Sampling Interval នោះរួចតម្រៀបជិតៗគ្នា ដែលនាំឲ្យមើលទៅដូចជារលកទាំងមូលរត់ចេញទៅ។
ការតម្រៀបសញ្ញាបន្ទាប់ពីធ្វើ Sampling |
មួយវិញទៀតនៅក្នុង Arduino ក៏គ្មាន Ouput ណាមួយដែលអាចបញ្ចេញឲ្យចេញជាតង់ស្យុងជាក់លាក់ ហើយអាចក្រោមសូន្យបានដែរ។ ដោយប្រើប្រាស់ PWM រួមនិង Low-pass Filter យើងជាធ្វើឲ្យចេញជាតង់ស្យុងមធ្យមចេញពីជើង Digital PWM របស់ Arduino បាន ក៏ប៉ុន្តែតង់ស្យុងមិនអាចក្រោមសូន្យដោយគ្មានសៀគ្វៀ H-bridge បានទេ។ វិធីនោះគឺរុញរលកទាំងមូលទៅលើ 2.5V ដោយសន្មតថា 2.5V ជាចំនុចសូន្យរបស់រលកនោះ 0V និង 5V នឹងក្លាយជាចំនុចទាបបំផុត និងខ្ពស់បំផុត (Peak)។
សៀគ្វីតេស្ត |
រេស៊ីស្តរ 10K និងកុងដង់ 100nF ដើរតួជា Low-pass filter ដើម្បីឲ្យរលកសញ្ញាដែលចេញទៅល្អ មិនមែនជា PWM សុទ្ធសាត។ ចំនែករេស៊ីស្តរ 100k គ្រាន់តែជាគ្រឿងទទួលបញ្ឆោត ១ ដើម្បីឲ្យរលកអណ្តែតមិនចុះវិញ។ ខាងក្រោមនេះកូដ៖
សៀគ្វី និងកូដខាងលើបង្កើតបានរលកសញ្ញាបានល្អដូចខាងក្រោម៖
លទ្ធផលរលកសញ្ញា |