Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:7e84644181bb, 2016-12-12 (annotated)
- Committer:
- woodbed
- Date:
- Mon Dec 12 07:50:36 2016 +0000
- Revision:
- 0:7e84644181bb
- Child:
- 1:505435f49bf9
?????PWM1??
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| woodbed | 0:7e84644181bb | 1 | #include "mbed.h" |
| woodbed | 0:7e84644181bb | 2 | |
| woodbed | 0:7e84644181bb | 3 | //PWM |
| woodbed | 0:7e84644181bb | 4 | PwmOut pwm(p23); |
| woodbed | 0:7e84644181bb | 5 | |
| woodbed | 0:7e84644181bb | 6 | //Ticker |
| woodbed | 0:7e84644181bb | 7 | Ticker timer; |
| woodbed | 0:7e84644181bb | 8 | |
| woodbed | 0:7e84644181bb | 9 | //Timer |
| woodbed | 0:7e84644181bb | 10 | //Timer ta; |
| woodbed | 0:7e84644181bb | 11 | |
| woodbed | 0:7e84644181bb | 12 | //Digital Out |
| woodbed | 0:7e84644181bb | 13 | DigitalOut test(p20); |
| woodbed | 0:7e84644181bb | 14 | |
| woodbed | 0:7e84644181bb | 15 | //Cos Wave |
| woodbed | 0:7e84644181bb | 16 | float coswave[256]; |
| woodbed | 0:7e84644181bb | 17 | |
| woodbed | 0:7e84644181bb | 18 | //User set Wave Paramater |
| woodbed | 0:7e84644181bb | 19 | int sample_dt = 100; //microsec 10kHz |
| woodbed | 0:7e84644181bb | 20 | float freq = 200; //Hz |
| woodbed | 0:7e84644181bb | 21 | float level = 1; //min=0 max=1 |
| woodbed | 0:7e84644181bb | 22 | |
| woodbed | 0:7e84644181bb | 23 | |
| woodbed | 0:7e84644181bb | 24 | float period = 1000000*1/freq; //microSec |
| woodbed | 0:7e84644181bb | 25 | float n = 0; |
| woodbed | 0:7e84644181bb | 26 | float n_sample = 0; //The maximum number of sampling points in the signal |
| woodbed | 0:7e84644181bb | 27 | float tend = 0; //The remainder of sampling points in the signal |
| woodbed | 0:7e84644181bb | 28 | float tstart = 0; //start offset of sampling time |
| woodbed | 0:7e84644181bb | 29 | float t_samplepoint = 0; |
| woodbed | 0:7e84644181bb | 30 | float table_dt = period/256; |
| woodbed | 0:7e84644181bb | 31 | float n_samplepoint = 0; |
| woodbed | 0:7e84644181bb | 32 | float rem_samplepoint = 0; |
| woodbed | 0:7e84644181bb | 33 | float v_samplepoint = 0; |
| woodbed | 0:7e84644181bb | 34 | float signal = 0; |
| woodbed | 0:7e84644181bb | 35 | |
| woodbed | 0:7e84644181bb | 36 | int pwidth = 0; |
| woodbed | 0:7e84644181bb | 37 | |
| woodbed | 0:7e84644181bb | 38 | //Signal Culcurate |
| woodbed | 0:7e84644181bb | 39 | |
| woodbed | 0:7e84644181bb | 40 | |
| woodbed | 0:7e84644181bb | 41 | //Signal type parameter |
| woodbed | 0:7e84644181bb | 42 | void signal_culc(){ |
| woodbed | 0:7e84644181bb | 43 | |
| woodbed | 0:7e84644181bb | 44 | //RESP section |
| woodbed | 0:7e84644181bb | 45 | n_sample = (period - tstart) / sample_dt; |
| woodbed | 0:7e84644181bb | 46 | tend = fmod((period - tstart) , sample_dt); |
| woodbed | 0:7e84644181bb | 47 | |
| woodbed | 0:7e84644181bb | 48 | t_samplepoint = tstart + sample_dt * n; //time of sampling point |
| woodbed | 0:7e84644181bb | 49 | n_samplepoint = t_samplepoint / table_dt; |
| woodbed | 0:7e84644181bb | 50 | rem_samplepoint = fmod(t_samplepoint , table_dt); |
| woodbed | 0:7e84644181bb | 51 | v_samplepoint = level*(coswave[(int)n_samplepoint]-(rem_samplepoint/table_dt)*(coswave[(int)n_samplepoint]-coswave[(int)n_samplepoint+1])); |
| woodbed | 0:7e84644181bb | 52 | signal = v_samplepoint+0.5; //0-1 -> 0V-3.3V |
| woodbed | 0:7e84644181bb | 53 | if(n == (int)n_sample) { |
| woodbed | 0:7e84644181bb | 54 | n =0; |
| woodbed | 0:7e84644181bb | 55 | tstart = sample_dt - tend; |
| woodbed | 0:7e84644181bb | 56 | } |
| woodbed | 0:7e84644181bb | 57 | else { |
| woodbed | 0:7e84644181bb | 58 | n++; |
| woodbed | 0:7e84644181bb | 59 | } |
| woodbed | 0:7e84644181bb | 60 | |
| woodbed | 0:7e84644181bb | 61 | //PWM Output Pulse width |
| woodbed | 0:7e84644181bb | 62 | pwidth = signal * sample_dt; |
| woodbed | 0:7e84644181bb | 63 | |
| woodbed | 0:7e84644181bb | 64 | pwm.pulsewidth_us(pwidth); |
| woodbed | 0:7e84644181bb | 65 | } |
| woodbed | 0:7e84644181bb | 66 | |
| woodbed | 0:7e84644181bb | 67 | void attime(){ |
| woodbed | 0:7e84644181bb | 68 | signal_culc(); |
| woodbed | 0:7e84644181bb | 69 | } |
| woodbed | 0:7e84644181bb | 70 | |
| woodbed | 0:7e84644181bb | 71 | |
| woodbed | 0:7e84644181bb | 72 | int main() { |
| woodbed | 0:7e84644181bb | 73 | |
| woodbed | 0:7e84644181bb | 74 | //Make Cos wave |
| woodbed | 0:7e84644181bb | 75 | int i; |
| woodbed | 0:7e84644181bb | 76 | for(i=0;i<=255;i++){ //256->255 |
| woodbed | 0:7e84644181bb | 77 | coswave[i]=0.5*(cos(2.0*3.1415*i/256)); //256->256 |
| woodbed | 0:7e84644181bb | 78 | } |
| woodbed | 0:7e84644181bb | 79 | i = 0; |
| woodbed | 0:7e84644181bb | 80 | |
| woodbed | 0:7e84644181bb | 81 | pwm.period_us(sample_dt); //Pulse_cycle = 100usec = 10kHz |
| woodbed | 0:7e84644181bb | 82 | |
| woodbed | 0:7e84644181bb | 83 | int j; |
| woodbed | 0:7e84644181bb | 84 | j = sample_dt; |
| woodbed | 0:7e84644181bb | 85 | timer.attach_us(&attime,j); |
| woodbed | 0:7e84644181bb | 86 | |
| woodbed | 0:7e84644181bb | 87 | while(1) { |
| woodbed | 0:7e84644181bb | 88 | |
| woodbed | 0:7e84644181bb | 89 | } |
| woodbed | 0:7e84644181bb | 90 | } |